commit 683f77fcf4bea6b88da19a5538152533aa8c3301 Author: Ross Date: Wed Feb 24 10:05:10 2021 +0000 initiate diff --git a/dicomViewer.css b/dicomViewer.css new file mode 100644 index 0000000..6bddd59 --- /dev/null +++ b/dicomViewer.css @@ -0,0 +1,101 @@ +.canvas-panel { + height: 100%; + position: relative; + color: white; +} + + +#dicom-overlay { + position: absolute; + bottom: 0; +} + +#image-thumbs { + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); + overflow-y: auto; + max-height: 100%; + max-width: 30%; + user-select: none; +} + +.thumbnail { + pointer-events: none; + display: block; + margin: auto; +} + +.thumb { + position: relative; + border: 1px dotted blue; +} + +.thumb-active { + border: 5px dotted blue; +} + +.thumb span { + position: absolute; + right: 0; + color: lightblue; +} + +.single-dicom-viewer { + position: relative; + height: 100%; +} + +.dicom-button { + font-size: 40px; + z-index: 99; + opacity: 20%; + color: gray; + top: 0; +} + +.dicom-button:hover { + opacity: 100%; +} + +#dicom-toggle-mode-button { + position: absolute; + left: 0; +} + +#dicom-settings-button { + position: absolute; + right: 0; +} + +#dicom-fullscreen-button { + position: absolute; + transform: translate(0, -20%); + right: 50%; +} + +#dicom-settings-panel { + display: none; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding-left: 30px; + padding-right: 30px; + padding-bottom: 20px; + background-color: rgba(0, 0, 0, 0.8); /* Black w/ opacity */ + max-width: 100%; + max-height: 100%; + z-index: 999; +} + +#dicom-window-panel { + position: absolute; + top: 100%; + transform: translate(0, -100%); + opacity: 0.0; +} +#dicom-window-panel:hover { + opacity: 1; +} \ No newline at end of file diff --git a/dicomViewer.js b/dicomViewer.js new file mode 100644 index 0000000..6cc3e19 --- /dev/null +++ b/dicomViewer.js @@ -0,0 +1,644 @@ +// Dicom saved settings +var dicom_settings_db = new Dexie("dicom_settings"); +dicom_settings_db.version(1).stores({ + mouse_bindings: "button,mode,tool", +}); + + +cornerstoneBase64ImageLoader.external.cornerstone = cornerstone; +cornerstoneWebImageLoader.external.cornerstone = cornerstone; +cornerstoneWADOImageLoader.external.cornerstone = cornerstone; + +cornerstoneTools.init(); + + + +export function loadCornerstone(main_element, db, images, annotations_to_load, load_as_stack = false) { + // canvas-panel holds the enabled elements and all tools / menus + main_element.append("
"); + $(".canvas-panel").append($("
")); + + let single_dicom_viewer = main_element.find(".single-dicom-viewer").get(0); + console.log(single_dicom_viewer); + // Add generic settings menus to canvas-panel + $(".canvas-panel").append( + $(`
+ close +

Image viewer settings:

+ + Primary +
+ + + + + + +
+
+ Secondary (Ctrl) +
+ + + + + + +
+ +
`) + ) + .append($("")) + .append($("")) + .append($("")); + + $(single_dicom_viewer).append( + $( + "
Image of
wc: ww:
" + ) + ) + // Add buttons + .append( + $(`
+ + + + + + + +
`) + ); + + let window_presets = { + "window-btn-abdomen": [400, 50], + "window-btn-liver": [150, 30], + "window-btn-mediastinum": [350, 50], + "window-btn-lung": [1500, -600], + "window-btn-brain": [80, 40], + "window-btn-stroke": [40, 40], + "window-btn-bone": [1800, 400] + } + + $("#dicom-window-panel button").each((n, el) => { + $(el).click((e) => { + console.log(e); + console.log(e.target); + let button_id = e.target.id; + let [ww, wc] = window_presets[button_id]; + + let viewport = cornerstone.getViewport(single_dicom_viewer); + viewport.voi.windowWidth = parseFloat(ww); + viewport.voi.windowCenter = parseFloat(wc); + cornerstone.setViewport(single_dicom_viewer, viewport); + + e.preventDefault(); + }) + }) + + $("#dicom-settings-close").click(e => { + $("#dicom-settings-panel").hide(); + e.preventDefault(); + }); + $("#dicom-settings-button").click(e => { + $("#dicom-settings-panel").toggle(); + }); + $("#dicom-fullscreen-button").click(e => { + if (!document.fullscreenElement) { + $(".canvas-panel").get(0).requestFullscreen().catch(err => { + alert(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`); + }); + } else { + document.exitFullscreen(); + } + }); + $("#dicom-toggle-mode-button").click(e => { + //$("#dicom-settings-panel").toggle(); + let stack = !load_as_stack; + $(main_element).empty(); + loadCornerstone(main_element, db, images, annotations_to_load, stack) + }); + + //let images = data["images"]; + + // Make sure we have an array + if (!Array.isArray(images)) { + images = [images]; + } + + //let annotations = []; + //if (annotations_to_load) { + //annotations = annotations_to_load[figure_to_load.split("-")[1]]; + //if (!Array.isArray(annotations)) { + //annotations = [annotations]; + //} + //} + let annotations = annotations_to_load; + if (!Array.isArray(annotations)) { + annotations = [annotations]; + } + console.log("annon", annotations); + + + function loadAnnotation(imageId, annotation) { + console.log("loadAnnotations", imageId, annotations); + const toolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager; + + if (annotation == undefined || annotation.length < 1) { return } + + console.log(annotation); + let tool_state_no_id = JSON.parse(annotation); + + let tool_state = {}; + tool_state[imageId] = tool_state_no_id; + + toolStateManager.restoreToolState(tool_state); + } + + async function load(images, annotations) { + console.log("LOAD"); + let imageIds = []; + for (let i = 0; i < images.length; i++) { + let data_url = images[i]; + const annotation = annotations[i]; + // check stack type + if (data_url.startsWith("data:image")) { + let imageId = "base64://" + data_url.split(",")[1]; + + loadAnnotation(imageId, annotation); + + imageIds.push(imageId); + + // Treat application/octet-stream as if they are dicoms + } else if (data_url.startsWith("data:application/dicom") || data_url.startsWith("data:application/octet-stream")) { + //stack = stack.split(";")[1]; + + let dfile = await urltoFile(data_url, "dicom", "application/dicom"); + + const imageId = cornerstoneWADOImageLoader.wadouri.fileManager.add( + dfile + ); + + loadAnnotation(imageId, annotation); + + imageIds.push(imageId); + //cornerstone.loadImage(imageId).then(function(image) { + // tempFunction(image); + //}); + } else { + let url; + if (data_url.startsWith("http")) { + url = data_url; + } else { + url = window.location.href.replace(/\/\#\/?$/, '') + "/" + data_url + } + + if (url.endsWith("dcm")) { + url = "wadouri:" + url; + } + + // if there is no extension treat it as a dicom + if (/(?:\/|^)[^.\/]+$/.test(url)) { + url = "wadouri:" + url; + } + + loadAnnotation(url, annotation); + + imageIds.push(url); + + + } + } + const stack = { + currentImageIdIndex: 0, + imageIds + }; + //cornerstone.loadAndCacheImage(imageIds[0]).then(function(image) { + console.log("load and cache", imageIds[0]) + cornerstone.loadAndCacheImage(imageIds[0]).then(function (image) { + + console.log("LOAD and cache, then"); + loadCornerstoneMainImage(single_dicom_viewer, image, stack, db, load_as_stack); + }) + .catch((err, err2) => { + console.log(err); + + }); + } + + if (images.length > 1 && load_as_stack == false) { + $(".canvas-panel").append("
"); + for (let id = 0; id < images.length; id++) { + let n = id + 1; + let thumb = $( + "
" + + n + + "
" + ); + $("#image-thumbs").append(thumb); + $("#thumb-" + id).click(selectThumbClick).mousedown(stopEvent); + + let image_url = images[id]; + + let img; + + if (image_url.startsWith("data")) { + // based (image) data url, just load the image directly + if (image_url.startsWith("data:image/")) { + img = $("", { + src: image_url, + id: "thumb-image-" + id, + class: "thumbnail", + title: "Click on the thumbnail to view and manipulate the image.", + draggable: "false", + style: "height: 100px;" + }); + + $("#thumb-" + id).append(img); + + // otherwise try to load it as a dicom + } else { + // convert the data url to a file + urltoFile(image_url, "dicom", "application/dicom").then(function ( + dfile + ) { + // load the file using cornerstoneWADO file loader + const imageId = cornerstoneWADOImageLoader.wadouri.fileManager.add( + dfile + ); + cornerstone.loadAndCacheImage(imageId).then(function (image) { + img = $("
").get(0); + img.id = "thumb-image-" + id; + img.class = "thumbnail"; + img.title = + "Click on the thumbnail to view and manipulate the image."; + img.draggable = "false"; + img.style = "height: 100px; width: 100px"; + $("#thumb-" + id).append(img); + + const element = document.getElementById("thumb-image-" + id); + cornerstone.enable(element); + cornerstone.displayImage(element, image); + cornerstone.resize(element); + }); //.catch( function(error) { + }); + } + } else { + if (!image_url.endsWith("dicom") && !image_url.endsWith("dcm")) { + img = $("", { + src: image_url, + id: "thumb-image-" + id, + class: "thumbnail", + title: "Click on the thumbnail to view and manipulate the image.", + draggable: "false", + style: "height: 100px;" + }); + + $("#thumb-" + id).append(img); + + // otherwise try to load it as a dicom + } else { + + let url = "wadouri:" + image_url; + cornerstone.loadAndCacheImage(url).then(function (image) { + img = $("
").get(0); + img.id = "thumb-image-" + id; + img.class = "thumbnail"; + img.title = + "Click on the thumbnail to view and manipulate the image."; + img.draggable = "false"; + img.style = "height: 100px; width: 100px"; + $("#thumb-" + id).append(img); + + const element = document.getElementById("thumb-image-" + id); + cornerstone.enable(element); + cornerstone.displayImage(element, image); + cornerstone.resize(element); + }); + } + } + } + } + + load(images, annotations); +} + +function loadCornerstoneMainImage(element, image, stack, db, load_as_stack) { + console.log("loadCornerstoneMainImage") + console.log("load as stack:", load_as_stack) + // It is probably silly to do this each time we load a question + const PanTool = cornerstoneTools.PanTool; + const ZoomTool = cornerstoneTools.ZoomTool; + const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool; + const StackScrollMouseWheelTool = cornerstoneTools.StackScrollMouseWheelTool; + const WwwcTool = cornerstoneTools.WwwcTool; + const WwwcRegionTool = cornerstoneTools.WwwcRegionTool; + const RotateTool = cornerstoneTools.RotateTool; + const StackScrollTool = cornerstoneTools.StackScrollTool; + const MagnifyTool = cornerstoneTools.MagnifyTool; + const ArrowAnnotateTool = cornerstoneTools.ArrowAnnotateTool; + const LengthTool = cornerstoneTools.LengthTool; + + console.log("enable element", element); + cornerstone.enable(element); + + cornerstone.displayImage(element, image); + + cornerstoneTools.addStackStateManager(element, ["stack"]); + cornerstoneTools.addToolState(element, "stack", stack); + + cornerstoneTools.addTool(PanTool); + cornerstoneTools.addTool(ZoomTool); + cornerstoneTools.addTool(ZoomMouseWheelTool); + cornerstoneTools.addTool(StackScrollMouseWheelTool); + cornerstoneTools.addTool(WwwcTool); + cornerstoneTools.addTool(WwwcRegionTool); + cornerstoneTools.addTool(RotateTool); + cornerstoneTools.addTool(StackScrollTool); + cornerstoneTools.addTool(MagnifyTool); + cornerstoneTools.addTool(LengthTool); + + cornerstoneTools.addTool(ArrowAnnotateTool, { + configuration: { + getTextCallback: () => { }, + changeTextCallback: () => { }, + allowEmptyLabel: true, + renderDashed: false, + drawHandles: false, + drawHandlesOnHover: true, + }, + }); + + cornerstoneTools.setToolEnabled("ArrowAnnotate"); + + + let available_tools = [ + "Pan", + "Zoom", + "Wwwc", + "WwwcRegion", + "Rotate", + "StackScroll", + "Magnify", + "Length", + ]; + $(".mouse-binding-select option").remove(); + + available_tools.forEach(function (tool) { + let option = ""; + $(".mouse-binding-select").append(option); + //$("#left-mouse-dicom").append(option); + //$("#middle-mouse-dicom").append(option); + //$("#right-mouse-dicom").append(option); + }); + $(".mouse-binding-select").on("change", function (e) { + changeMouseBinding(e, db); + }); + + // Set default tools + $("#primary-mouse-binding .mouse-binding-select[data-button=1]").val("Pan"); + $("#primary-mouse-binding .mouse-binding-select[data-button=2]").val("Wwwc"); + $("#primary-mouse-binding .mouse-binding-select[data-button=4]").val("Zoom"); + //cornerstoneTools.setToolActive("Pan", { mouseButtonMask: 1 }); + + console.log(load_as_stack); + if (load_as_stack) { + cornerstoneTools.setToolActive("StackScrollMouseWheel", { mouseButtonMask: 3 }); + } else { + cornerstoneTools.setToolActive("ZoomMouseWheel", { mouseButtonMask: 3 }); + } + //cornerstoneTools.setToolActive("Zoom", { mouseButtonMask: 4 }); + //cornerstoneTools.setToolActive("Wwwc", { mouseButtonMask: 2 }); + $("#secondary-mouse-binding .mouse-binding-select[data-button=1]").val( + "Magnify" + ); + $("#secondary-mouse-binding .mouse-binding-select[data-button=2]").val( + "Rotate" + ); + $("#secondary-mouse-binding .mouse-binding-select[data-button=4]").val( + "WwwcRegion" + ); + + loadPrimaryDicomInterface(db); + loadAltDicomInterface(db); + + element.addEventListener("cornerstoneimagerendered", onImageRendered); + + //setDicomCanvasNonFullscreen(element); + cornerstone.reset(element); + //element.scrollIntoView(false); + //element.scrollTo(0); + + $(element).dblclick(function () { + cornerstone.reset(this); + }); + + element.removeEventListener("wheel", element.wheelEventHandler); + + // Add tool selector + //$(".canvas-panel").append( + // '' + //); + + //$(".control-overlay") + // .get(0) + // .addEventListener("change", changeControlSelection); + + resizeHandler(); + + window.addEventListener("resize", resizeHandler); + element.addEventListener( + "contextmenu", + function (e) { + // do something here... + e.preventDefault(); + }, + false + ); + + + $(element).on("mouseup", function (event) { + $(".magnifyTool").hide(); + }); +} + +function resizeHandler() { + let element = document.getElementsByClassName("single-dicom-viewer")[0]; + let h = window.innerHeight - $("#header").height() - 16; + $(element).height(h); + cornerstone.resize(element, true); +} + +async function loadPrimaryDicomInterface(db) { + const bindings = await dicom_settings_db.mouse_bindings.where({ mode: "0" }).toArray().catch((err) => { console.log(err); }); + bindings.forEach(function (b) { + let sel = $("#primary-mouse-binding select[data-button=" + b.button + "]").get( + 0 + ); + sel.value = b.tool; + //sel.dispatchEvent(new Event("change")); + }); + registerPrimaryDicomInterface(); +} + +async function loadAltDicomInterface(db) { + const bindings = await dicom_settings_db.mouse_bindings.where({ mode: "1" }).toArray().catch((err) => { console.log(err); }); + bindings.forEach(function (b) { + let sel = $( + "#secondary-mouse-binding select[data-button=" + b.button + "]" + ).get(0); + sel.value = b.tool; + }); +} + +// Called when the dicom image is loaded / rendered +function onImageRendered(e) { + const eventData = e.detail; + //console.log(e); + + // Update ww/wl + $("#wc").text(Math.round(eventData.viewport.voi.windowCenter)); + $("#ww").text(Math.round(eventData.viewport.voi.windowWidth)); + + // update stack data + let stack = eventData.enabledElement.toolStateManager.toolState.stack.data[0]; + + $("#total_image_number").text(stack.imageIds.length); + $("#current_image_number").text(parseInt(stack.currentImageIdIndex) + 1); + + if (stack.imageIds.length > 1) { + $(".thumb").removeClass("thumb-active"); + $("#thumb-" + stack.currentImageIdIndex).addClass("thumb-active"); + } + //if (stack.imageIds.length > 1) { + // $("option[value=scroll").prop("disabled", false); + // $("option[value=scroll").prop("hidden", false); + // $("option[value=scroll").text( + // "scroll (" + + // (stack.currentImageIdIndex + 1) + + // "/" + + // stack.imageIds.length + + // ")" + // ); +} + +function stopEvent(evt) { + console.log("stop", evt) + evt.preventDefault(); + evt.stopPropagation(); +} + +function selectThumbClick(evt) { + let new_index = evt.currentTarget.dataset.id; + selectThumb(new_index); + evt.preventDefault(); +} + + +export function registerPrimaryDicomInterface() { + // Set mousetools based upon the selected options + let selections = $("#primary-mouse-binding select"); + selections.each((i, option) => { + cornerstoneTools.setToolActive(option.value, { + mouseButtonMask: parseInt(option.dataset.button) + }); + }); +} + +export function registerAltDicomInterface(e) { + // Called when control is pressed + + // Set mousetools based upon the selected options + let selections = $("#secondary-mouse-binding select"); + selections.each((i, option) => { + cornerstoneTools.setToolActive(option.value, { + mouseButtonMask: parseInt(option.dataset.button) + }); + }); +} + +function changeMouseBinding(e, db) { + let select = e.currentTarget; + let button = select.dataset.button; + let mode = select.dataset.mode; + let tool = select.value; + + // Directly activate primary tools (secondary will be activated when modifier + // key is pressed + if (mode == "0") { + cornerstoneTools.setToolActive(tool, { mouseButtonMask: parseInt(button) }); + } + + dicom_settings_db.mouse_bindings.put({ button: button, mode: mode, tool: tool }); + //db.mouse_bindings.put({button: button, mode: mode, tool: tool}).then(loadPrimaryDicomInterface()); +} + +export function selectThumb(new_index) { + console.log("select thumb new index", new_index); + // There must be a better way to do this... + let dicom_element = document.getElementsByClassName("single-dicom-viewer")[0]; + if (dicom_element == null) { + return; + } + let c = cornerstone.getEnabledElement(dicom_element); + // let current_index = + // c.toolStateManager.toolState.stack.data[0].currentImageIdIndex; + c.toolStateManager.toolState.stack.data[0].currentImageIdIndex = new_index; + let id = c.toolStateManager.toolState.stack.data[0].imageIds[new_index]; + console.log("select thumb id", id); + console.log("select thumb el", dicom_element); + cornerstone.loadImage(id).then(b => { + console.log("b", b); + cornerstone.displayImage(dicom_element, b); + }); + //c = cornerstone.getEnabledElement(dicom_element) +} +function urltoFile(url, filename, mimeType) { + return fetch(url) + .then(function (res) { + return res.arrayBuffer(); + }) + .then(function (buf) { + return new File([buf], filename, { type: mimeType }); + }); +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..4bebd1c --- /dev/null +++ b/index.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+

A dicom viewer

+ +
+ +
+ + + diff --git a/lib/cornerstone/cornerstone-base64-image-loader.es5.js b/lib/cornerstone/cornerstone-base64-image-loader.es5.js new file mode 100644 index 0000000..9ae4b2b --- /dev/null +++ b/lib/cornerstone/cornerstone-base64-image-loader.es5.js @@ -0,0 +1,242 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; + +var _defaultOptions = { + channel: 4, + width: null, + height: null, + schema: 'base64://' +}; + +var CornerstoneBase64ImageLoader = /** @class */ (function () { + function CornerstoneBase64ImageLoader(cornerstone, options) { + if (options === void 0) { options = _defaultOptions; } + this._cornerstone = cornerstone; + this._options = options; + this._lastImageIdDrawn = null; + this._UPNG = null; + this._canvas = document.createElement('canvas'); + this.arrayBufferToImage = this.arrayBufferToImage.bind(this); + this.getArrayBuffer = this.getArrayBuffer.bind(this); + this.decodeBase64 = this.decodeBase64.bind(this); + this.createImage = this.createImage.bind(this); + this.imageLoader = this.imageLoader.bind(this); + this.replaceImage = this.replaceImage.bind(this); + } + CornerstoneBase64ImageLoader.prototype.arrayBufferToImage = function (arrayBuffer) { + return new Promise(function (resolve, reject) { + var image = new Image(); + var arrayBufferView = new Uint8Array(arrayBuffer); + var blob = new Blob([arrayBufferView]); + var urlCreator = window.URL || window.webkitURL; + var imageUrl = urlCreator.createObjectURL(blob); + image.src = imageUrl; + image.onload = function () { + urlCreator.revokeObjectURL(imageUrl); + resolve(image); + }; + image.onerror = function (error) { + urlCreator.revokeObjectURL(imageUrl); + reject(error); + }; + }); + }; + CornerstoneBase64ImageLoader.prototype.getArrayBuffer = function (str) { + var buf = new ArrayBuffer(str.length); + var bufView = new Uint8Array(buf); + Array.from(str).map(function (ch, idx) { + bufView[idx] = ch.charCodeAt(0); + return ch; + }); + return bufView; + }; + CornerstoneBase64ImageLoader.prototype.decodeBase64 = function (base64PixelData) { + var pixelDataAsString = window.atob(base64PixelData); + var arrayBuffer = this.getArrayBuffer(pixelDataAsString); + return arrayBuffer; + }; + CornerstoneBase64ImageLoader.prototype.createImage = function (image, imageId) { + var _this = this; + var rows = image.naturalHeight; + var columns = image.naturalWidth; + var getImageData = function () { + var context; + if (_this._lastImageIdDrawn === imageId) { + context = _this._canvas.getContext('2d'); + } + else { + _this._canvas.height = image.naturalHeight; + _this._canvas.width = image.naturalWidth; + context = _this._canvas.getContext('2d'); + context.drawImage(image, 0, 0); + _this._lastImageIdDrawn = imageId; + } + return context.getImageData(0, 0, image.naturalWidth, image.naturalHeight); + }; + var getPixelData = function () { + var imageData = getImageData(); + return imageData.data; + }; + var getCanvas = function () { + if (_this._lastImageIdDrawn === imageId) { + return _this._canvas; + } + _this._canvas.height = image.naturalHeight; + _this._canvas.width = image.naturalWidth; + var context = _this._canvas.getContext('2d'); + context.drawImage(image, 0, 0); + _this._lastImageIdDrawn = imageId; + return _this._canvas; + }; + var setLastImageIdDrawn = function (nextLastImageIdDrawn) { + if (nextLastImageIdDrawn === void 0) { nextLastImageIdDrawn = null; } + _this._lastImageIdDrawn = nextLastImageIdDrawn; + }; + return { + imageId: imageId, + minPixelValue: 0, + maxPixelValue: 255, + slope: 1, + intercept: 0, + windowCenter: 128, + windowWidth: 255, + render: this.cornerstone.renderWebImage, + getPixelData: getPixelData, + getCanvas: getCanvas, + getImage: function () { return image; }, + setLastImageIdDrawn: setLastImageIdDrawn, + rows: rows, + columns: columns, + height: rows, + width: columns, + color: true, + rgba: false, + columnPixelSpacing: null, + rowPixelSpacing: null, + invert: false, + sizeInBytes: rows * columns * this._options.channel + }; + }; + CornerstoneBase64ImageLoader.prototype.imageLoader = function (imageId) { + var _this = this; + // const schema = imageId.split('://')[0] + var base64PixelData = imageId.replace(this._options.schema, ''); + var arrayBuffer; + if (this._options.width && this._options.height && this._UPNG) { + var columns = this._options.width; + var rows = this._options.height; + arrayBuffer = new Uint8Array(columns * rows * this._options.channel); + arrayBuffer = this._UPNG.encode([arrayBuffer.buffer], columns, rows, 0); + } + else { + arrayBuffer = this.decodeBase64(base64PixelData); + } + var imagePromise = this.arrayBufferToImage(arrayBuffer); + var promise = new Promise(function (resolve, reject) { + imagePromise.then(function (image) { + var imageObject = _this.createImage(image, imageId); + resolve(imageObject); + }, reject); + }); + return { + promise: promise + }; + }; + CornerstoneBase64ImageLoader.prototype.replaceImage = function (layer, arrayBuffer) { + var _this = this; + if (!this._UPNG) { + return null; + } + var png = this._UPNG.encode([arrayBuffer.buffer], layer.image.columns, layer.image.rows, 0); + var imagePromise = this.arrayBufferToImage(png); + return imagePromise.then(function (image) { + layer.image = _this.createImage(image, layer.image.imageId); + }); + }; + Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "options", { + get: function () { + return __assign({}, this._options); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "cornerstone", { + get: function () { + return this._cornerstone; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "UPNG", { + get: function () { + return this._UPNG; + }, + enumerable: true, + configurable: true + }); + CornerstoneBase64ImageLoader.prototype.setUPNG = function (UPNG) { + this._UPNG = UPNG; + }; + CornerstoneBase64ImageLoader.prototype.registerLoaders = function () { + this.cornerstone.registerImageLoader('base64', this.imageLoader); + }; + return CornerstoneBase64ImageLoader; +}()); + +var _imageLoader; +var _options = __assign({}, _defaultOptions); +var cornerstoneBase64ImageLoader = { + external: { + set cornerstone(cs) { + _imageLoader = new CornerstoneBase64ImageLoader(cs, _options); + _imageLoader.registerLoaders(); + }, + get cornerstone() { + return _imageLoader.cornerstone; + }, + get UPNG() { + return _imageLoader.UPNG; + }, + set UPNG(_UPNG) { + _imageLoader.setUPNG(_UPNG); + } + }, + initOptions: function () { + _options = __assign({}, _defaultOptions); + }, + set options(newOptions) { + _options = __assign({}, _options, newOptions); + }, + get options() { + return __assign({}, _options); + }, + get imageLoader() { + return _imageLoader; + } +}; + +export default cornerstoneBase64ImageLoader; +//# sourceMappingURL=cornerstone-base64-image-loader.es5.js.map diff --git a/lib/cornerstone/cornerstone-base64-image-loader.umd.js b/lib/cornerstone/cornerstone-base64-image-loader.umd.js new file mode 100644 index 0000000..d5147aa --- /dev/null +++ b/lib/cornerstone/cornerstone-base64-image-loader.umd.js @@ -0,0 +1,250 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.cornerstoneBase64ImageLoader = factory()); +}(this, (function () { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + var _defaultOptions = { + channel: 4, + width: null, + height: null, + schema: 'base64://' + }; + + var CornerstoneBase64ImageLoader = /** @class */ (function () { + function CornerstoneBase64ImageLoader(cornerstone, options) { + if (options === void 0) { options = _defaultOptions; } + this._cornerstone = cornerstone; + this._options = options; + this._lastImageIdDrawn = null; + this._UPNG = null; + this._canvas = document.createElement('canvas'); + this.arrayBufferToImage = this.arrayBufferToImage.bind(this); + this.getArrayBuffer = this.getArrayBuffer.bind(this); + this.decodeBase64 = this.decodeBase64.bind(this); + this.createImage = this.createImage.bind(this); + this.imageLoader = this.imageLoader.bind(this); + this.replaceImage = this.replaceImage.bind(this); + } + CornerstoneBase64ImageLoader.prototype.arrayBufferToImage = function (arrayBuffer) { + return new Promise(function (resolve, reject) { + var image = new Image(); + var arrayBufferView = new Uint8Array(arrayBuffer); + var blob = new Blob([arrayBufferView]); + var urlCreator = window.URL || window.webkitURL; + var imageUrl = urlCreator.createObjectURL(blob); + image.src = imageUrl; + image.onload = function () { + urlCreator.revokeObjectURL(imageUrl); + resolve(image); + }; + image.onerror = function (error) { + urlCreator.revokeObjectURL(imageUrl); + reject(error); + }; + }); + }; + CornerstoneBase64ImageLoader.prototype.getArrayBuffer = function (str) { + var buf = new ArrayBuffer(str.length); + var bufView = new Uint8Array(buf); + Array.from(str).map(function (ch, idx) { + bufView[idx] = ch.charCodeAt(0); + return ch; + }); + return bufView; + }; + CornerstoneBase64ImageLoader.prototype.decodeBase64 = function (base64PixelData) { + var pixelDataAsString = window.atob(base64PixelData); + var arrayBuffer = this.getArrayBuffer(pixelDataAsString); + return arrayBuffer; + }; + CornerstoneBase64ImageLoader.prototype.createImage = function (image, imageId) { + var _this = this; + var rows = image.naturalHeight; + var columns = image.naturalWidth; + var getImageData = function () { + var context; + if (_this._lastImageIdDrawn === imageId) { + context = _this._canvas.getContext('2d'); + } + else { + _this._canvas.height = image.naturalHeight; + _this._canvas.width = image.naturalWidth; + context = _this._canvas.getContext('2d'); + context.drawImage(image, 0, 0); + _this._lastImageIdDrawn = imageId; + } + return context.getImageData(0, 0, image.naturalWidth, image.naturalHeight); + }; + var getPixelData = function () { + var imageData = getImageData(); + return imageData.data; + }; + var getCanvas = function () { + if (_this._lastImageIdDrawn === imageId) { + return _this._canvas; + } + _this._canvas.height = image.naturalHeight; + _this._canvas.width = image.naturalWidth; + var context = _this._canvas.getContext('2d'); + context.drawImage(image, 0, 0); + _this._lastImageIdDrawn = imageId; + return _this._canvas; + }; + var setLastImageIdDrawn = function (nextLastImageIdDrawn) { + if (nextLastImageIdDrawn === void 0) { nextLastImageIdDrawn = null; } + _this._lastImageIdDrawn = nextLastImageIdDrawn; + }; + return { + imageId: imageId, + minPixelValue: 0, + maxPixelValue: 255, + slope: 1, + intercept: 0, + windowCenter: 128, + windowWidth: 255, + render: this.cornerstone.renderWebImage, + getPixelData: getPixelData, + getCanvas: getCanvas, + getImage: function () { return image; }, + setLastImageIdDrawn: setLastImageIdDrawn, + rows: rows, + columns: columns, + height: rows, + width: columns, + color: true, + rgba: false, + columnPixelSpacing: null, + rowPixelSpacing: null, + invert: false, + sizeInBytes: rows * columns * this._options.channel + }; + }; + CornerstoneBase64ImageLoader.prototype.imageLoader = function (imageId) { + var _this = this; + // const schema = imageId.split('://')[0] + var base64PixelData = imageId.replace(this._options.schema, ''); + var arrayBuffer; + if (this._options.width && this._options.height && this._UPNG) { + var columns = this._options.width; + var rows = this._options.height; + arrayBuffer = new Uint8Array(columns * rows * this._options.channel); + arrayBuffer = this._UPNG.encode([arrayBuffer.buffer], columns, rows, 0); + } + else { + arrayBuffer = this.decodeBase64(base64PixelData); + } + var imagePromise = this.arrayBufferToImage(arrayBuffer); + var promise = new Promise(function (resolve, reject) { + imagePromise.then(function (image) { + var imageObject = _this.createImage(image, imageId); + resolve(imageObject); + }, reject); + }); + return { + promise: promise + }; + }; + CornerstoneBase64ImageLoader.prototype.replaceImage = function (layer, arrayBuffer) { + var _this = this; + if (!this._UPNG) { + return null; + } + var png = this._UPNG.encode([arrayBuffer.buffer], layer.image.columns, layer.image.rows, 0); + var imagePromise = this.arrayBufferToImage(png); + return imagePromise.then(function (image) { + layer.image = _this.createImage(image, layer.image.imageId); + }); + }; + Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "options", { + get: function () { + return __assign({}, this._options); + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "cornerstone", { + get: function () { + return this._cornerstone; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(CornerstoneBase64ImageLoader.prototype, "UPNG", { + get: function () { + return this._UPNG; + }, + enumerable: true, + configurable: true + }); + CornerstoneBase64ImageLoader.prototype.setUPNG = function (UPNG) { + this._UPNG = UPNG; + }; + CornerstoneBase64ImageLoader.prototype.registerLoaders = function () { + this.cornerstone.registerImageLoader('base64', this.imageLoader); + }; + return CornerstoneBase64ImageLoader; + }()); + + var _imageLoader; + var _options = __assign({}, _defaultOptions); + var cornerstoneBase64ImageLoader = { + external: { + set cornerstone(cs) { + _imageLoader = new CornerstoneBase64ImageLoader(cs, _options); + _imageLoader.registerLoaders(); + }, + get cornerstone() { + return _imageLoader.cornerstone; + }, + get UPNG() { + return _imageLoader.UPNG; + }, + set UPNG(_UPNG) { + _imageLoader.setUPNG(_UPNG); + } + }, + initOptions: function () { + _options = __assign({}, _defaultOptions); + }, + set options(newOptions) { + _options = __assign({}, _options, newOptions); + }, + get options() { + return __assign({}, _options); + }, + get imageLoader() { + return _imageLoader; + } + }; + + return cornerstoneBase64ImageLoader; + +}))); +//# sourceMappingURL=cornerstone-base64-image-loader.umd.js.map diff --git a/lib/cornerstone/cornerstone.js b/lib/cornerstone/cornerstone.js new file mode 100644 index 0000000..cd18814 --- /dev/null +++ b/lib/cornerstone/cornerstone.js @@ -0,0 +1,8599 @@ +/*! cornerstone-core - 2.3.0 - 2019-07-03 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstone */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define("cornerstone-core", [], factory); + else if(typeof exports === 'object') + exports["cornerstone-core"] = factory(); + else + root["cornerstone"] = factory(); +})(window, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ function hotDisposeChunk(chunkId) { +/******/ delete installedChunks[chunkId]; +/******/ } +/******/ var parentHotUpdateCallback = window["webpackHotUpdate"]; +/******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars +/******/ function webpackHotUpdateCallback(chunkId, moreModules) { +/******/ hotAddUpdateChunk(chunkId, moreModules); +/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules); +/******/ } ; +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotDownloadUpdateChunk(chunkId) { +/******/ var head = document.getElementsByTagName("head")[0]; +/******/ var script = document.createElement("script"); +/******/ script.charset = "utf-8"; +/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js"; +/******/ ; +/******/ head.appendChild(script); +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotDownloadManifest(requestTimeout) { +/******/ requestTimeout = requestTimeout || 10000; +/******/ return new Promise(function(resolve, reject) { +/******/ if (typeof XMLHttpRequest === "undefined") { +/******/ return reject(new Error("No browser support")); +/******/ } +/******/ try { +/******/ var request = new XMLHttpRequest(); +/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json"; +/******/ request.open("GET", requestPath, true); +/******/ request.timeout = requestTimeout; +/******/ request.send(null); +/******/ } catch (err) { +/******/ return reject(err); +/******/ } +/******/ request.onreadystatechange = function() { +/******/ if (request.readyState !== 4) return; +/******/ if (request.status === 0) { +/******/ // timeout +/******/ reject( +/******/ new Error("Manifest request to " + requestPath + " timed out.") +/******/ ); +/******/ } else if (request.status === 404) { +/******/ // no update available +/******/ resolve(); +/******/ } else if (request.status !== 200 && request.status !== 304) { +/******/ // other failure +/******/ reject(new Error("Manifest request to " + requestPath + " failed.")); +/******/ } else { +/******/ // success +/******/ try { +/******/ var update = JSON.parse(request.responseText); +/******/ } catch (e) { +/******/ reject(e); +/******/ return; +/******/ } +/******/ resolve(update); +/******/ } +/******/ }; +/******/ }); +/******/ } +/******/ +/******/ var hotApplyOnUpdate = true; +/******/ // eslint-disable-next-line no-unused-vars +/******/ var hotCurrentHash = "f1fc9ee2018efa87b506"; +/******/ var hotRequestTimeout = 10000; +/******/ var hotCurrentModuleData = {}; +/******/ var hotCurrentChildModule; +/******/ // eslint-disable-next-line no-unused-vars +/******/ var hotCurrentParents = []; +/******/ // eslint-disable-next-line no-unused-vars +/******/ var hotCurrentParentsTemp = []; +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotCreateRequire(moduleId) { +/******/ var me = installedModules[moduleId]; +/******/ if (!me) return __webpack_require__; +/******/ var fn = function(request) { +/******/ if (me.hot.active) { +/******/ if (installedModules[request]) { +/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) { +/******/ installedModules[request].parents.push(moduleId); +/******/ } +/******/ } else { +/******/ hotCurrentParents = [moduleId]; +/******/ hotCurrentChildModule = request; +/******/ } +/******/ if (me.children.indexOf(request) === -1) { +/******/ me.children.push(request); +/******/ } +/******/ } else { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + +/******/ request + +/******/ ") from disposed module " + +/******/ moduleId +/******/ ); +/******/ hotCurrentParents = []; +/******/ } +/******/ return __webpack_require__(request); +/******/ }; +/******/ var ObjectFactory = function ObjectFactory(name) { +/******/ return { +/******/ configurable: true, +/******/ enumerable: true, +/******/ get: function() { +/******/ return __webpack_require__[name]; +/******/ }, +/******/ set: function(value) { +/******/ __webpack_require__[name] = value; +/******/ } +/******/ }; +/******/ }; +/******/ for (var name in __webpack_require__) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) && +/******/ name !== "e" && +/******/ name !== "t" +/******/ ) { +/******/ Object.defineProperty(fn, name, ObjectFactory(name)); +/******/ } +/******/ } +/******/ fn.e = function(chunkId) { +/******/ if (hotStatus === "ready") hotSetStatus("prepare"); +/******/ hotChunksLoading++; +/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) { +/******/ finishChunkLoading(); +/******/ throw err; +/******/ }); +/******/ +/******/ function finishChunkLoading() { +/******/ hotChunksLoading--; +/******/ if (hotStatus === "prepare") { +/******/ if (!hotWaitingFilesMap[chunkId]) { +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ fn.t = function(value, mode) { +/******/ if (mode & 1) value = fn(value); +/******/ return __webpack_require__.t(value, mode & ~1); +/******/ }; +/******/ return fn; +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotCreateModule(moduleId) { +/******/ var hot = { +/******/ // private stuff +/******/ _acceptedDependencies: {}, +/******/ _declinedDependencies: {}, +/******/ _selfAccepted: false, +/******/ _selfDeclined: false, +/******/ _disposeHandlers: [], +/******/ _main: hotCurrentChildModule !== moduleId, +/******/ +/******/ // Module API +/******/ active: true, +/******/ accept: function(dep, callback) { +/******/ if (dep === undefined) hot._selfAccepted = true; +/******/ else if (typeof dep === "function") hot._selfAccepted = dep; +/******/ else if (typeof dep === "object") +/******/ for (var i = 0; i < dep.length; i++) +/******/ hot._acceptedDependencies[dep[i]] = callback || function() {}; +/******/ else hot._acceptedDependencies[dep] = callback || function() {}; +/******/ }, +/******/ decline: function(dep) { +/******/ if (dep === undefined) hot._selfDeclined = true; +/******/ else if (typeof dep === "object") +/******/ for (var i = 0; i < dep.length; i++) +/******/ hot._declinedDependencies[dep[i]] = true; +/******/ else hot._declinedDependencies[dep] = true; +/******/ }, +/******/ dispose: function(callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ addDisposeHandler: function(callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ removeDisposeHandler: function(callback) { +/******/ var idx = hot._disposeHandlers.indexOf(callback); +/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ // Management API +/******/ check: hotCheck, +/******/ apply: hotApply, +/******/ status: function(l) { +/******/ if (!l) return hotStatus; +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ addStatusHandler: function(l) { +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ removeStatusHandler: function(l) { +/******/ var idx = hotStatusHandlers.indexOf(l); +/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ //inherit from previous dispose call +/******/ data: hotCurrentModuleData[moduleId] +/******/ }; +/******/ hotCurrentChildModule = undefined; +/******/ return hot; +/******/ } +/******/ +/******/ var hotStatusHandlers = []; +/******/ var hotStatus = "idle"; +/******/ +/******/ function hotSetStatus(newStatus) { +/******/ hotStatus = newStatus; +/******/ for (var i = 0; i < hotStatusHandlers.length; i++) +/******/ hotStatusHandlers[i].call(null, newStatus); +/******/ } +/******/ +/******/ // while downloading +/******/ var hotWaitingFiles = 0; +/******/ var hotChunksLoading = 0; +/******/ var hotWaitingFilesMap = {}; +/******/ var hotRequestedFilesMap = {}; +/******/ var hotAvailableFilesMap = {}; +/******/ var hotDeferred; +/******/ +/******/ // The update info +/******/ var hotUpdate, hotUpdateNewHash; +/******/ +/******/ function toModuleId(id) { +/******/ var isNumber = +id + "" === id; +/******/ return isNumber ? +id : id; +/******/ } +/******/ +/******/ function hotCheck(apply) { +/******/ if (hotStatus !== "idle") { +/******/ throw new Error("check() is only allowed in idle status"); +/******/ } +/******/ hotApplyOnUpdate = apply; +/******/ hotSetStatus("check"); +/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) { +/******/ if (!update) { +/******/ hotSetStatus("idle"); +/******/ return null; +/******/ } +/******/ hotRequestedFilesMap = {}; +/******/ hotWaitingFilesMap = {}; +/******/ hotAvailableFilesMap = update.c; +/******/ hotUpdateNewHash = update.h; +/******/ +/******/ hotSetStatus("prepare"); +/******/ var promise = new Promise(function(resolve, reject) { +/******/ hotDeferred = { +/******/ resolve: resolve, +/******/ reject: reject +/******/ }; +/******/ }); +/******/ hotUpdate = {}; +/******/ var chunkId = "cornerstone"; +/******/ // eslint-disable-next-line no-lone-blocks +/******/ { +/******/ /*globals chunkId */ +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if ( +/******/ hotStatus === "prepare" && +/******/ hotChunksLoading === 0 && +/******/ hotWaitingFiles === 0 +/******/ ) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ return promise; +/******/ }); +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotAddUpdateChunk(chunkId, moreModules) { +/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId]) +/******/ return; +/******/ hotRequestedFilesMap[chunkId] = false; +/******/ for (var moduleId in moreModules) { +/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ hotUpdate[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ +/******/ function hotEnsureUpdateChunk(chunkId) { +/******/ if (!hotAvailableFilesMap[chunkId]) { +/******/ hotWaitingFilesMap[chunkId] = true; +/******/ } else { +/******/ hotRequestedFilesMap[chunkId] = true; +/******/ hotWaitingFiles++; +/******/ hotDownloadUpdateChunk(chunkId); +/******/ } +/******/ } +/******/ +/******/ function hotUpdateDownloaded() { +/******/ hotSetStatus("ready"); +/******/ var deferred = hotDeferred; +/******/ hotDeferred = null; +/******/ if (!deferred) return; +/******/ if (hotApplyOnUpdate) { +/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to +/******/ // avoid triggering uncaught exception warning in Chrome. +/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666 +/******/ Promise.resolve() +/******/ .then(function() { +/******/ return hotApply(hotApplyOnUpdate); +/******/ }) +/******/ .then( +/******/ function(result) { +/******/ deferred.resolve(result); +/******/ }, +/******/ function(err) { +/******/ deferred.reject(err); +/******/ } +/******/ ); +/******/ } else { +/******/ var outdatedModules = []; +/******/ for (var id in hotUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ outdatedModules.push(toModuleId(id)); +/******/ } +/******/ } +/******/ deferred.resolve(outdatedModules); +/******/ } +/******/ } +/******/ +/******/ function hotApply(options) { +/******/ if (hotStatus !== "ready") +/******/ throw new Error("apply() is only allowed in ready status"); +/******/ options = options || {}; +/******/ +/******/ var cb; +/******/ var i; +/******/ var j; +/******/ var module; +/******/ var moduleId; +/******/ +/******/ function getAffectedStuff(updateModuleId) { +/******/ var outdatedModules = [updateModuleId]; +/******/ var outdatedDependencies = {}; +/******/ +/******/ var queue = outdatedModules.slice().map(function(id) { +/******/ return { +/******/ chain: [id], +/******/ id: id +/******/ }; +/******/ }); +/******/ while (queue.length > 0) { +/******/ var queueItem = queue.pop(); +/******/ var moduleId = queueItem.id; +/******/ var chain = queueItem.chain; +/******/ module = installedModules[moduleId]; +/******/ if (!module || module.hot._selfAccepted) continue; +/******/ if (module.hot._selfDeclined) { +/******/ return { +/******/ type: "self-declined", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ if (module.hot._main) { +/******/ return { +/******/ type: "unaccepted", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ for (var i = 0; i < module.parents.length; i++) { +/******/ var parentId = module.parents[i]; +/******/ var parent = installedModules[parentId]; +/******/ if (!parent) continue; +/******/ if (parent.hot._declinedDependencies[moduleId]) { +/******/ return { +/******/ type: "declined", +/******/ chain: chain.concat([parentId]), +/******/ moduleId: moduleId, +/******/ parentId: parentId +/******/ }; +/******/ } +/******/ if (outdatedModules.indexOf(parentId) !== -1) continue; +/******/ if (parent.hot._acceptedDependencies[moduleId]) { +/******/ if (!outdatedDependencies[parentId]) +/******/ outdatedDependencies[parentId] = []; +/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); +/******/ continue; +/******/ } +/******/ delete outdatedDependencies[parentId]; +/******/ outdatedModules.push(parentId); +/******/ queue.push({ +/******/ chain: chain.concat([parentId]), +/******/ id: parentId +/******/ }); +/******/ } +/******/ } +/******/ +/******/ return { +/******/ type: "accepted", +/******/ moduleId: updateModuleId, +/******/ outdatedModules: outdatedModules, +/******/ outdatedDependencies: outdatedDependencies +/******/ }; +/******/ } +/******/ +/******/ function addAllToSet(a, b) { +/******/ for (var i = 0; i < b.length; i++) { +/******/ var item = b[i]; +/******/ if (a.indexOf(item) === -1) a.push(item); +/******/ } +/******/ } +/******/ +/******/ // at begin all updates modules are outdated +/******/ // the "outdated" status can propagate to parents if they don't accept the children +/******/ var outdatedDependencies = {}; +/******/ var outdatedModules = []; +/******/ var appliedUpdate = {}; +/******/ +/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module" +/******/ ); +/******/ }; +/******/ +/******/ for (var id in hotUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ moduleId = toModuleId(id); +/******/ /** @type {TODO} */ +/******/ var result; +/******/ if (hotUpdate[id]) { +/******/ result = getAffectedStuff(moduleId); +/******/ } else { +/******/ result = { +/******/ type: "disposed", +/******/ moduleId: id +/******/ }; +/******/ } +/******/ /** @type {Error|false} */ +/******/ var abortError = false; +/******/ var doApply = false; +/******/ var doDispose = false; +/******/ var chainInfo = ""; +/******/ if (result.chain) { +/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); +/******/ } +/******/ switch (result.type) { +/******/ case "self-declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of self decline: " + +/******/ result.moduleId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of declined dependency: " + +/******/ result.moduleId + +/******/ " in " + +/******/ result.parentId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "unaccepted": +/******/ if (options.onUnaccepted) options.onUnaccepted(result); +/******/ if (!options.ignoreUnaccepted) +/******/ abortError = new Error( +/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo +/******/ ); +/******/ break; +/******/ case "accepted": +/******/ if (options.onAccepted) options.onAccepted(result); +/******/ doApply = true; +/******/ break; +/******/ case "disposed": +/******/ if (options.onDisposed) options.onDisposed(result); +/******/ doDispose = true; +/******/ break; +/******/ default: +/******/ throw new Error("Unexception type " + result.type); +/******/ } +/******/ if (abortError) { +/******/ hotSetStatus("abort"); +/******/ return Promise.reject(abortError); +/******/ } +/******/ if (doApply) { +/******/ appliedUpdate[moduleId] = hotUpdate[moduleId]; +/******/ addAllToSet(outdatedModules, result.outdatedModules); +/******/ for (moduleId in result.outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call( +/******/ result.outdatedDependencies, +/******/ moduleId +/******/ ) +/******/ ) { +/******/ if (!outdatedDependencies[moduleId]) +/******/ outdatedDependencies[moduleId] = []; +/******/ addAllToSet( +/******/ outdatedDependencies[moduleId], +/******/ result.outdatedDependencies[moduleId] +/******/ ); +/******/ } +/******/ } +/******/ } +/******/ if (doDispose) { +/******/ addAllToSet(outdatedModules, [result.moduleId]); +/******/ appliedUpdate[moduleId] = warnUnexpectedRequire; +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Store self accepted outdated modules to require them later by the module system +/******/ var outdatedSelfAcceptedModules = []; +/******/ for (i = 0; i < outdatedModules.length; i++) { +/******/ moduleId = outdatedModules[i]; +/******/ if ( +/******/ installedModules[moduleId] && +/******/ installedModules[moduleId].hot._selfAccepted +/******/ ) +/******/ outdatedSelfAcceptedModules.push({ +/******/ module: moduleId, +/******/ errorHandler: installedModules[moduleId].hot._selfAccepted +/******/ }); +/******/ } +/******/ +/******/ // Now in "dispose" phase +/******/ hotSetStatus("dispose"); +/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) { +/******/ if (hotAvailableFilesMap[chunkId] === false) { +/******/ hotDisposeChunk(chunkId); +/******/ } +/******/ }); +/******/ +/******/ var idx; +/******/ var queue = outdatedModules.slice(); +/******/ while (queue.length > 0) { +/******/ moduleId = queue.pop(); +/******/ module = installedModules[moduleId]; +/******/ if (!module) continue; +/******/ +/******/ var data = {}; +/******/ +/******/ // Call dispose handlers +/******/ var disposeHandlers = module.hot._disposeHandlers; +/******/ for (j = 0; j < disposeHandlers.length; j++) { +/******/ cb = disposeHandlers[j]; +/******/ cb(data); +/******/ } +/******/ hotCurrentModuleData[moduleId] = data; +/******/ +/******/ // disable module (this disables requires from this module) +/******/ module.hot.active = false; +/******/ +/******/ // remove module from cache +/******/ delete installedModules[moduleId]; +/******/ +/******/ // when disposing there is no need to call dispose handler +/******/ delete outdatedDependencies[moduleId]; +/******/ +/******/ // remove "parents" references from all children +/******/ for (j = 0; j < module.children.length; j++) { +/******/ var child = installedModules[module.children[j]]; +/******/ if (!child) continue; +/******/ idx = child.parents.indexOf(moduleId); +/******/ if (idx >= 0) { +/******/ child.parents.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ +/******/ // remove outdated dependency from module children +/******/ var dependency; +/******/ var moduleOutdatedDependencies; +/******/ for (moduleId in outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId) +/******/ ) { +/******/ module = installedModules[moduleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) { +/******/ dependency = moduleOutdatedDependencies[j]; +/******/ idx = module.children.indexOf(dependency); +/******/ if (idx >= 0) module.children.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Not in "apply" phase +/******/ hotSetStatus("apply"); +/******/ +/******/ hotCurrentHash = hotUpdateNewHash; +/******/ +/******/ // insert new code +/******/ for (moduleId in appliedUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) { +/******/ modules[moduleId] = appliedUpdate[moduleId]; +/******/ } +/******/ } +/******/ +/******/ // call accept handlers +/******/ var error = null; +/******/ for (moduleId in outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId) +/******/ ) { +/******/ module = installedModules[moduleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ var callbacks = []; +/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) { +/******/ dependency = moduleOutdatedDependencies[i]; +/******/ cb = module.hot._acceptedDependencies[dependency]; +/******/ if (cb) { +/******/ if (callbacks.indexOf(cb) !== -1) continue; +/******/ callbacks.push(cb); +/******/ } +/******/ } +/******/ for (i = 0; i < callbacks.length; i++) { +/******/ cb = callbacks[i]; +/******/ try { +/******/ cb(moduleOutdatedDependencies); +/******/ } catch (err) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "accept-errored", +/******/ moduleId: moduleId, +/******/ dependencyId: moduleOutdatedDependencies[i], +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Load self accepted modules +/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) { +/******/ var item = outdatedSelfAcceptedModules[i]; +/******/ moduleId = item.module; +/******/ hotCurrentParents = [moduleId]; +/******/ try { +/******/ __webpack_require__(moduleId); +/******/ } catch (err) { +/******/ if (typeof item.errorHandler === "function") { +/******/ try { +/******/ item.errorHandler(err); +/******/ } catch (err2) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-error-handler-errored", +/******/ moduleId: moduleId, +/******/ error: err2, +/******/ originalError: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err2; +/******/ } +/******/ if (!error) error = err; +/******/ } +/******/ } else { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-errored", +/******/ moduleId: moduleId, +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // handle errors in accept handlers and self accepted module load +/******/ if (error) { +/******/ hotSetStatus("fail"); +/******/ return Promise.reject(error); +/******/ } +/******/ +/******/ hotSetStatus("idle"); +/******/ return new Promise(function(resolve) { +/******/ resolve(outdatedModules); +/******/ }); +/******/ } +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {}, +/******/ hot: hotCreateModule(moduleId), +/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp), +/******/ children: [] +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId)); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // __webpack_hash__ +/******/ __webpack_require__.h = function() { return hotCurrentHash; }; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return hotCreateRequire("./index.js")(__webpack_require__.s = "./index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./canvasToPixel.js": +/*!**************************!*\ + !*** ./canvasToPixel.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getTransform.js */ "./internal/getTransform.js"); + + +/** + * Converts a point in the canvas coordinate system to the pixel coordinate system + * system. This can be used to reset tools' image coordinates after modifications + * have been made in canvas space (e.g. moving a tool by a few cm, independent of + * image resolution). + * + * @param {HTMLElement} element The Cornerstone element within which the input point lies + * @param {{x: Number, y: Number}} pt The input point in the canvas coordinate system + * + * @returns {{x: Number, y: Number}} The transformed point in the pixel coordinate system + * @memberof PixelCoordinateSystem + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, pt) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement); + transform.invert(); + return transform.transformPoint(pt.x, pt.y); +}); + +/***/ }), + +/***/ "./colors/colormap.js": +/*!****************************!*\ + !*** ./colors/colormap.js ***! + \****************************/ +/*! exports provided: getColormapsList, getColormap */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColormapsList", function() { return getColormapsList; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColormap", function() { return getColormap; }); +/* harmony import */ var _lookupTable_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lookupTable.js */ "./colors/lookupTable.js"); + +var COLOR_TRANSPARENT = [0, 0, 0, 0]; // Colormaps +// +// Hot Iron, PET, Hot Metal Blue and PET 20 Step are color palettes +// Defined by the DICOM standard +// http://dicom.nema.org/dicom/2013/output/chtml/part06/chapter_B.html +// +// All Linear Segmented Colormaps were copied from matplotlib +// https://github.com/stefanv/matplotlib/blob/master/lib/matplotlib/_cm.py + +var colormapsData = { + hotIron: { + name: 'Hot Iron', + numOfColors: 256, + colors: [[0, 0, 0, 255], [2, 0, 0, 255], [4, 0, 0, 255], [6, 0, 0, 255], [8, 0, 0, 255], [10, 0, 0, 255], [12, 0, 0, 255], [14, 0, 0, 255], [16, 0, 0, 255], [18, 0, 0, 255], [20, 0, 0, 255], [22, 0, 0, 255], [24, 0, 0, 255], [26, 0, 0, 255], [28, 0, 0, 255], [30, 0, 0, 255], [32, 0, 0, 255], [34, 0, 0, 255], [36, 0, 0, 255], [38, 0, 0, 255], [40, 0, 0, 255], [42, 0, 0, 255], [44, 0, 0, 255], [46, 0, 0, 255], [48, 0, 0, 255], [50, 0, 0, 255], [52, 0, 0, 255], [54, 0, 0, 255], [56, 0, 0, 255], [58, 0, 0, 255], [60, 0, 0, 255], [62, 0, 0, 255], [64, 0, 0, 255], [66, 0, 0, 255], [68, 0, 0, 255], [70, 0, 0, 255], [72, 0, 0, 255], [74, 0, 0, 255], [76, 0, 0, 255], [78, 0, 0, 255], [80, 0, 0, 255], [82, 0, 0, 255], [84, 0, 0, 255], [86, 0, 0, 255], [88, 0, 0, 255], [90, 0, 0, 255], [92, 0, 0, 255], [94, 0, 0, 255], [96, 0, 0, 255], [98, 0, 0, 255], [100, 0, 0, 255], [102, 0, 0, 255], [104, 0, 0, 255], [106, 0, 0, 255], [108, 0, 0, 255], [110, 0, 0, 255], [112, 0, 0, 255], [114, 0, 0, 255], [116, 0, 0, 255], [118, 0, 0, 255], [120, 0, 0, 255], [122, 0, 0, 255], [124, 0, 0, 255], [126, 0, 0, 255], [128, 0, 0, 255], [130, 0, 0, 255], [132, 0, 0, 255], [134, 0, 0, 255], [136, 0, 0, 255], [138, 0, 0, 255], [140, 0, 0, 255], [142, 0, 0, 255], [144, 0, 0, 255], [146, 0, 0, 255], [148, 0, 0, 255], [150, 0, 0, 255], [152, 0, 0, 255], [154, 0, 0, 255], [156, 0, 0, 255], [158, 0, 0, 255], [160, 0, 0, 255], [162, 0, 0, 255], [164, 0, 0, 255], [166, 0, 0, 255], [168, 0, 0, 255], [170, 0, 0, 255], [172, 0, 0, 255], [174, 0, 0, 255], [176, 0, 0, 255], [178, 0, 0, 255], [180, 0, 0, 255], [182, 0, 0, 255], [184, 0, 0, 255], [186, 0, 0, 255], [188, 0, 0, 255], [190, 0, 0, 255], [192, 0, 0, 255], [194, 0, 0, 255], [196, 0, 0, 255], [198, 0, 0, 255], [200, 0, 0, 255], [202, 0, 0, 255], [204, 0, 0, 255], [206, 0, 0, 255], [208, 0, 0, 255], [210, 0, 0, 255], [212, 0, 0, 255], [214, 0, 0, 255], [216, 0, 0, 255], [218, 0, 0, 255], [220, 0, 0, 255], [222, 0, 0, 255], [224, 0, 0, 255], [226, 0, 0, 255], [228, 0, 0, 255], [230, 0, 0, 255], [232, 0, 0, 255], [234, 0, 0, 255], [236, 0, 0, 255], [238, 0, 0, 255], [240, 0, 0, 255], [242, 0, 0, 255], [244, 0, 0, 255], [246, 0, 0, 255], [248, 0, 0, 255], [250, 0, 0, 255], [252, 0, 0, 255], [254, 0, 0, 255], [255, 0, 0, 255], [255, 2, 0, 255], [255, 4, 0, 255], [255, 6, 0, 255], [255, 8, 0, 255], [255, 10, 0, 255], [255, 12, 0, 255], [255, 14, 0, 255], [255, 16, 0, 255], [255, 18, 0, 255], [255, 20, 0, 255], [255, 22, 0, 255], [255, 24, 0, 255], [255, 26, 0, 255], [255, 28, 0, 255], [255, 30, 0, 255], [255, 32, 0, 255], [255, 34, 0, 255], [255, 36, 0, 255], [255, 38, 0, 255], [255, 40, 0, 255], [255, 42, 0, 255], [255, 44, 0, 255], [255, 46, 0, 255], [255, 48, 0, 255], [255, 50, 0, 255], [255, 52, 0, 255], [255, 54, 0, 255], [255, 56, 0, 255], [255, 58, 0, 255], [255, 60, 0, 255], [255, 62, 0, 255], [255, 64, 0, 255], [255, 66, 0, 255], [255, 68, 0, 255], [255, 70, 0, 255], [255, 72, 0, 255], [255, 74, 0, 255], [255, 76, 0, 255], [255, 78, 0, 255], [255, 80, 0, 255], [255, 82, 0, 255], [255, 84, 0, 255], [255, 86, 0, 255], [255, 88, 0, 255], [255, 90, 0, 255], [255, 92, 0, 255], [255, 94, 0, 255], [255, 96, 0, 255], [255, 98, 0, 255], [255, 100, 0, 255], [255, 102, 0, 255], [255, 104, 0, 255], [255, 106, 0, 255], [255, 108, 0, 255], [255, 110, 0, 255], [255, 112, 0, 255], [255, 114, 0, 255], [255, 116, 0, 255], [255, 118, 0, 255], [255, 120, 0, 255], [255, 122, 0, 255], [255, 124, 0, 255], [255, 126, 0, 255], [255, 128, 4, 255], [255, 130, 8, 255], [255, 132, 12, 255], [255, 134, 16, 255], [255, 136, 20, 255], [255, 138, 24, 255], [255, 140, 28, 255], [255, 142, 32, 255], [255, 144, 36, 255], [255, 146, 40, 255], [255, 148, 44, 255], [255, 150, 48, 255], [255, 152, 52, 255], [255, 154, 56, 255], [255, 156, 60, 255], [255, 158, 64, 255], [255, 160, 68, 255], [255, 162, 72, 255], [255, 164, 76, 255], [255, 166, 80, 255], [255, 168, 84, 255], [255, 170, 88, 255], [255, 172, 92, 255], [255, 174, 96, 255], [255, 176, 100, 255], [255, 178, 104, 255], [255, 180, 108, 255], [255, 182, 112, 255], [255, 184, 116, 255], [255, 186, 120, 255], [255, 188, 124, 255], [255, 190, 128, 255], [255, 192, 132, 255], [255, 194, 136, 255], [255, 196, 140, 255], [255, 198, 144, 255], [255, 200, 148, 255], [255, 202, 152, 255], [255, 204, 156, 255], [255, 206, 160, 255], [255, 208, 164, 255], [255, 210, 168, 255], [255, 212, 172, 255], [255, 214, 176, 255], [255, 216, 180, 255], [255, 218, 184, 255], [255, 220, 188, 255], [255, 222, 192, 255], [255, 224, 196, 255], [255, 226, 200, 255], [255, 228, 204, 255], [255, 230, 208, 255], [255, 232, 212, 255], [255, 234, 216, 255], [255, 236, 220, 255], [255, 238, 224, 255], [255, 240, 228, 255], [255, 242, 232, 255], [255, 244, 236, 255], [255, 246, 240, 255], [255, 248, 244, 255], [255, 250, 248, 255], [255, 252, 252, 255], [255, 255, 255, 255]] + }, + pet: { + name: 'PET', + numColors: 256, + colors: [[0, 0, 0, 255], [0, 2, 1, 255], [0, 4, 3, 255], [0, 6, 5, 255], [0, 8, 7, 255], [0, 10, 9, 255], [0, 12, 11, 255], [0, 14, 13, 255], [0, 16, 15, 255], [0, 18, 17, 255], [0, 20, 19, 255], [0, 22, 21, 255], [0, 24, 23, 255], [0, 26, 25, 255], [0, 28, 27, 255], [0, 30, 29, 255], [0, 32, 31, 255], [0, 34, 33, 255], [0, 36, 35, 255], [0, 38, 37, 255], [0, 40, 39, 255], [0, 42, 41, 255], [0, 44, 43, 255], [0, 46, 45, 255], [0, 48, 47, 255], [0, 50, 49, 255], [0, 52, 51, 255], [0, 54, 53, 255], [0, 56, 55, 255], [0, 58, 57, 255], [0, 60, 59, 255], [0, 62, 61, 255], [0, 65, 63, 255], [0, 67, 65, 255], [0, 69, 67, 255], [0, 71, 69, 255], [0, 73, 71, 255], [0, 75, 73, 255], [0, 77, 75, 255], [0, 79, 77, 255], [0, 81, 79, 255], [0, 83, 81, 255], [0, 85, 83, 255], [0, 87, 85, 255], [0, 89, 87, 255], [0, 91, 89, 255], [0, 93, 91, 255], [0, 95, 93, 255], [0, 97, 95, 255], [0, 99, 97, 255], [0, 101, 99, 255], [0, 103, 101, 255], [0, 105, 103, 255], [0, 107, 105, 255], [0, 109, 107, 255], [0, 111, 109, 255], [0, 113, 111, 255], [0, 115, 113, 255], [0, 117, 115, 255], [0, 119, 117, 255], [0, 121, 119, 255], [0, 123, 121, 255], [0, 125, 123, 255], [0, 128, 125, 255], [1, 126, 127, 255], [3, 124, 129, 255], [5, 122, 131, 255], [7, 120, 133, 255], [9, 118, 135, 255], [11, 116, 137, 255], [13, 114, 139, 255], [15, 112, 141, 255], [17, 110, 143, 255], [19, 108, 145, 255], [21, 106, 147, 255], [23, 104, 149, 255], [25, 102, 151, 255], [27, 100, 153, 255], [29, 98, 155, 255], [31, 96, 157, 255], [33, 94, 159, 255], [35, 92, 161, 255], [37, 90, 163, 255], [39, 88, 165, 255], [41, 86, 167, 255], [43, 84, 169, 255], [45, 82, 171, 255], [47, 80, 173, 255], [49, 78, 175, 255], [51, 76, 177, 255], [53, 74, 179, 255], [55, 72, 181, 255], [57, 70, 183, 255], [59, 68, 185, 255], [61, 66, 187, 255], [63, 64, 189, 255], [65, 63, 191, 255], [67, 61, 193, 255], [69, 59, 195, 255], [71, 57, 197, 255], [73, 55, 199, 255], [75, 53, 201, 255], [77, 51, 203, 255], [79, 49, 205, 255], [81, 47, 207, 255], [83, 45, 209, 255], [85, 43, 211, 255], [86, 41, 213, 255], [88, 39, 215, 255], [90, 37, 217, 255], [92, 35, 219, 255], [94, 33, 221, 255], [96, 31, 223, 255], [98, 29, 225, 255], [100, 27, 227, 255], [102, 25, 229, 255], [104, 23, 231, 255], [106, 21, 233, 255], [108, 19, 235, 255], [110, 17, 237, 255], [112, 15, 239, 255], [114, 13, 241, 255], [116, 11, 243, 255], [118, 9, 245, 255], [120, 7, 247, 255], [122, 5, 249, 255], [124, 3, 251, 255], [126, 1, 253, 255], [128, 0, 255, 255], [130, 2, 252, 255], [132, 4, 248, 255], [134, 6, 244, 255], [136, 8, 240, 255], [138, 10, 236, 255], [140, 12, 232, 255], [142, 14, 228, 255], [144, 16, 224, 255], [146, 18, 220, 255], [148, 20, 216, 255], [150, 22, 212, 255], [152, 24, 208, 255], [154, 26, 204, 255], [156, 28, 200, 255], [158, 30, 196, 255], [160, 32, 192, 255], [162, 34, 188, 255], [164, 36, 184, 255], [166, 38, 180, 255], [168, 40, 176, 255], [170, 42, 172, 255], [171, 44, 168, 255], [173, 46, 164, 255], [175, 48, 160, 255], [177, 50, 156, 255], [179, 52, 152, 255], [181, 54, 148, 255], [183, 56, 144, 255], [185, 58, 140, 255], [187, 60, 136, 255], [189, 62, 132, 255], [191, 64, 128, 255], [193, 66, 124, 255], [195, 68, 120, 255], [197, 70, 116, 255], [199, 72, 112, 255], [201, 74, 108, 255], [203, 76, 104, 255], [205, 78, 100, 255], [207, 80, 96, 255], [209, 82, 92, 255], [211, 84, 88, 255], [213, 86, 84, 255], [215, 88, 80, 255], [217, 90, 76, 255], [219, 92, 72, 255], [221, 94, 68, 255], [223, 96, 64, 255], [225, 98, 60, 255], [227, 100, 56, 255], [229, 102, 52, 255], [231, 104, 48, 255], [233, 106, 44, 255], [235, 108, 40, 255], [237, 110, 36, 255], [239, 112, 32, 255], [241, 114, 28, 255], [243, 116, 24, 255], [245, 118, 20, 255], [247, 120, 16, 255], [249, 122, 12, 255], [251, 124, 8, 255], [253, 126, 4, 255], [255, 128, 0, 255], [255, 130, 4, 255], [255, 132, 8, 255], [255, 134, 12, 255], [255, 136, 16, 255], [255, 138, 20, 255], [255, 140, 24, 255], [255, 142, 28, 255], [255, 144, 32, 255], [255, 146, 36, 255], [255, 148, 40, 255], [255, 150, 44, 255], [255, 152, 48, 255], [255, 154, 52, 255], [255, 156, 56, 255], [255, 158, 60, 255], [255, 160, 64, 255], [255, 162, 68, 255], [255, 164, 72, 255], [255, 166, 76, 255], [255, 168, 80, 255], [255, 170, 85, 255], [255, 172, 89, 255], [255, 174, 93, 255], [255, 176, 97, 255], [255, 178, 101, 255], [255, 180, 105, 255], [255, 182, 109, 255], [255, 184, 113, 255], [255, 186, 117, 255], [255, 188, 121, 255], [255, 190, 125, 255], [255, 192, 129, 255], [255, 194, 133, 255], [255, 196, 137, 255], [255, 198, 141, 255], [255, 200, 145, 255], [255, 202, 149, 255], [255, 204, 153, 255], [255, 206, 157, 255], [255, 208, 161, 255], [255, 210, 165, 255], [255, 212, 170, 255], [255, 214, 174, 255], [255, 216, 178, 255], [255, 218, 182, 255], [255, 220, 186, 255], [255, 222, 190, 255], [255, 224, 194, 255], [255, 226, 198, 255], [255, 228, 202, 255], [255, 230, 206, 255], [255, 232, 210, 255], [255, 234, 214, 255], [255, 236, 218, 255], [255, 238, 222, 255], [255, 240, 226, 255], [255, 242, 230, 255], [255, 244, 234, 255], [255, 246, 238, 255], [255, 248, 242, 255], [255, 250, 246, 255], [255, 252, 250, 255], [255, 255, 255, 255]] + }, + hotMetalBlue: { + name: 'Hot Metal Blue', + numColors: 256, + colors: [[0, 0, 0, 255], [0, 0, 2, 255], [0, 0, 4, 255], [0, 0, 6, 255], [0, 0, 8, 255], [0, 0, 10, 255], [0, 0, 12, 255], [0, 0, 14, 255], [0, 0, 16, 255], [0, 0, 17, 255], [0, 0, 19, 255], [0, 0, 21, 255], [0, 0, 23, 255], [0, 0, 25, 255], [0, 0, 27, 255], [0, 0, 29, 255], [0, 0, 31, 255], [0, 0, 33, 255], [0, 0, 35, 255], [0, 0, 37, 255], [0, 0, 39, 255], [0, 0, 41, 255], [0, 0, 43, 255], [0, 0, 45, 255], [0, 0, 47, 255], [0, 0, 49, 255], [0, 0, 51, 255], [0, 0, 53, 255], [0, 0, 55, 255], [0, 0, 57, 255], [0, 0, 59, 255], [0, 0, 61, 255], [0, 0, 63, 255], [0, 0, 65, 255], [0, 0, 67, 255], [0, 0, 69, 255], [0, 0, 71, 255], [0, 0, 73, 255], [0, 0, 75, 255], [0, 0, 77, 255], [0, 0, 79, 255], [0, 0, 81, 255], [0, 0, 83, 255], [0, 0, 84, 255], [0, 0, 86, 255], [0, 0, 88, 255], [0, 0, 90, 255], [0, 0, 92, 255], [0, 0, 94, 255], [0, 0, 96, 255], [0, 0, 98, 255], [0, 0, 100, 255], [0, 0, 102, 255], [0, 0, 104, 255], [0, 0, 106, 255], [0, 0, 108, 255], [0, 0, 110, 255], [0, 0, 112, 255], [0, 0, 114, 255], [0, 0, 116, 255], [0, 0, 117, 255], [0, 0, 119, 255], [0, 0, 121, 255], [0, 0, 123, 255], [0, 0, 125, 255], [0, 0, 127, 255], [0, 0, 129, 255], [0, 0, 131, 255], [0, 0, 133, 255], [0, 0, 135, 255], [0, 0, 137, 255], [0, 0, 139, 255], [0, 0, 141, 255], [0, 0, 143, 255], [0, 0, 145, 255], [0, 0, 147, 255], [0, 0, 149, 255], [0, 0, 151, 255], [0, 0, 153, 255], [0, 0, 155, 255], [0, 0, 157, 255], [0, 0, 159, 255], [0, 0, 161, 255], [0, 0, 163, 255], [0, 0, 165, 255], [0, 0, 167, 255], [3, 0, 169, 255], [6, 0, 171, 255], [9, 0, 173, 255], [12, 0, 175, 255], [15, 0, 177, 255], [18, 0, 179, 255], [21, 0, 181, 255], [24, 0, 183, 255], [26, 0, 184, 255], [29, 0, 186, 255], [32, 0, 188, 255], [35, 0, 190, 255], [38, 0, 192, 255], [41, 0, 194, 255], [44, 0, 196, 255], [47, 0, 198, 255], [50, 0, 200, 255], [52, 0, 197, 255], [55, 0, 194, 255], [57, 0, 191, 255], [59, 0, 188, 255], [62, 0, 185, 255], [64, 0, 182, 255], [66, 0, 179, 255], [69, 0, 176, 255], [71, 0, 174, 255], [74, 0, 171, 255], [76, 0, 168, 255], [78, 0, 165, 255], [81, 0, 162, 255], [83, 0, 159, 255], [85, 0, 156, 255], [88, 0, 153, 255], [90, 0, 150, 255], [93, 2, 144, 255], [96, 4, 138, 255], [99, 6, 132, 255], [102, 8, 126, 255], [105, 9, 121, 255], [108, 11, 115, 255], [111, 13, 109, 255], [114, 15, 103, 255], [116, 17, 97, 255], [119, 19, 91, 255], [122, 21, 85, 255], [125, 23, 79, 255], [128, 24, 74, 255], [131, 26, 68, 255], [134, 28, 62, 255], [137, 30, 56, 255], [140, 32, 50, 255], [143, 34, 47, 255], [146, 36, 44, 255], [149, 38, 41, 255], [152, 40, 38, 255], [155, 41, 35, 255], [158, 43, 32, 255], [161, 45, 29, 255], [164, 47, 26, 255], [166, 49, 24, 255], [169, 51, 21, 255], [172, 53, 18, 255], [175, 55, 15, 255], [178, 56, 12, 255], [181, 58, 9, 255], [184, 60, 6, 255], [187, 62, 3, 255], [190, 64, 0, 255], [194, 66, 0, 255], [198, 68, 0, 255], [201, 70, 0, 255], [205, 72, 0, 255], [209, 73, 0, 255], [213, 75, 0, 255], [217, 77, 0, 255], [221, 79, 0, 255], [224, 81, 0, 255], [228, 83, 0, 255], [232, 85, 0, 255], [236, 87, 0, 255], [240, 88, 0, 255], [244, 90, 0, 255], [247, 92, 0, 255], [251, 94, 0, 255], [255, 96, 0, 255], [255, 98, 3, 255], [255, 100, 6, 255], [255, 102, 9, 255], [255, 104, 12, 255], [255, 105, 15, 255], [255, 107, 18, 255], [255, 109, 21, 255], [255, 111, 24, 255], [255, 113, 26, 255], [255, 115, 29, 255], [255, 117, 32, 255], [255, 119, 35, 255], [255, 120, 38, 255], [255, 122, 41, 255], [255, 124, 44, 255], [255, 126, 47, 255], [255, 128, 50, 255], [255, 130, 53, 255], [255, 132, 56, 255], [255, 134, 59, 255], [255, 136, 62, 255], [255, 137, 65, 255], [255, 139, 68, 255], [255, 141, 71, 255], [255, 143, 74, 255], [255, 145, 76, 255], [255, 147, 79, 255], [255, 149, 82, 255], [255, 151, 85, 255], [255, 152, 88, 255], [255, 154, 91, 255], [255, 156, 94, 255], [255, 158, 97, 255], [255, 160, 100, 255], [255, 162, 103, 255], [255, 164, 106, 255], [255, 166, 109, 255], [255, 168, 112, 255], [255, 169, 115, 255], [255, 171, 118, 255], [255, 173, 121, 255], [255, 175, 124, 255], [255, 177, 126, 255], [255, 179, 129, 255], [255, 181, 132, 255], [255, 183, 135, 255], [255, 184, 138, 255], [255, 186, 141, 255], [255, 188, 144, 255], [255, 190, 147, 255], [255, 192, 150, 255], [255, 194, 153, 255], [255, 196, 156, 255], [255, 198, 159, 255], [255, 200, 162, 255], [255, 201, 165, 255], [255, 203, 168, 255], [255, 205, 171, 255], [255, 207, 174, 255], [255, 209, 176, 255], [255, 211, 179, 255], [255, 213, 182, 255], [255, 215, 185, 255], [255, 216, 188, 255], [255, 218, 191, 255], [255, 220, 194, 255], [255, 222, 197, 255], [255, 224, 200, 255], [255, 226, 203, 255], [255, 228, 206, 255], [255, 229, 210, 255], [255, 231, 213, 255], [255, 233, 216, 255], [255, 235, 219, 255], [255, 237, 223, 255], [255, 239, 226, 255], [255, 240, 229, 255], [255, 242, 232, 255], [255, 244, 236, 255], [255, 246, 239, 255], [255, 248, 242, 255], [255, 250, 245, 255], [255, 251, 249, 255], [255, 253, 252, 255], [255, 255, 255, 255]] + }, + pet20Step: { + name: 'PET 20 Step', + numColors: 256, + colors: [[0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [0, 0, 0, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [96, 0, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 80, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [48, 48, 112, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [80, 80, 128, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [96, 96, 176, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [112, 112, 192, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [128, 128, 224, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 96, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [48, 144, 48, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [80, 192, 80, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [64, 224, 64, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [224, 224, 80, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 208, 96, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 176, 64, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [208, 144, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [192, 96, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [176, 48, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 0, 0, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255], [255, 255, 255, 255]] + }, + gray: { + name: 'Gray', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [1, 1, 1]], + green: [[0, 0, 0], [1, 1, 1]], + blue: [[0, 0, 0], [1, 1, 1]] + } + }, + jet: { + name: 'Jet', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [0.35, 0, 0], [0.66, 1, 1], [0.89, 1, 1], [1, 0.5, 0.5]], + green: [[0, 0, 0], [0.125, 0, 0], [0.375, 1, 1], [0.64, 1, 1], [0.91, 0, 0], [1, 0, 0]], + blue: [[0, 0.5, 0.5], [0.11, 1, 1], [0.34, 1, 1], [0.65, 0, 0], [1, 0, 0]] + } + }, + hsv: { + name: 'HSV', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 1, 1], [0.158730, 1, 1], [0.174603, 0.968750, 0.968750], [0.333333, 0.031250, 0.031250], [0.349206, 0, 0], [0.666667, 0, 0], [0.682540, 0.031250, 0.031250], [0.841270, 0.968750, 0.968750], [0.857143, 1, 1], [1, 1, 1]], + green: [[0, 0, 0], [0.158730, 0.937500, 0.937500], [0.174603, 1, 1], [0.507937, 1, 1], [0.666667, 0.062500, 0.062500], [0.682540, 0, 0], [1, 0, 0]], + blue: [[0, 0, 0], [0.333333, 0, 0], [0.349206, 0.062500, 0.062500], [0.507937, 1, 1], [0.841270, 1, 1], [0.857143, 0.937500, 0.937500], [1, 0.09375, 0.09375]] + } + }, + hot: { + name: 'Hot', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0.0416, 0.0416], [0.365079, 1, 1], [1, 1, 1]], + green: [[0, 0, 0], [0.365079, 0, 0], [0.746032, 1, 1], [1, 1, 1]], + blue: [[0, 0, 0], [0.746032, 0, 0], [1, 1, 1]] + } + }, + cool: { + name: 'Cool', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [1, 1, 1]], + green: [[0, 1, 1], [1, 0, 0]], + blue: [[0, 1, 1], [1, 1, 1]] + } + }, + spring: { + name: 'Spring', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 1, 1], [1, 1, 1]], + green: [[0, 0, 0], [1, 1, 1]], + blue: [[0, 1, 1], [1, 0, 0]] + } + }, + summer: { + name: 'Summer', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [1, 1, 1]], + green: [[0, 0.5, 0.5], [1, 1, 1]], + blue: [[0, 0.4, 0.4], [1, 0.4, 0.4]] + } + }, + autumn: { + name: 'Autumn', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 1, 1], [1, 1, 1]], + green: [[0, 0, 0], [1, 1, 1]], + blue: [[0, 0, 0], [1, 0, 0]] + } + }, + winter: { + name: 'Winter', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [1, 0, 0]], + green: [[0, 0, 0], [1, 1, 1]], + blue: [[0, 1, 1], [1, 0.5, 0.5]] + } + }, + bone: { + name: 'Bone', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [0.746032, 0.652778, 0.652778], [1, 1, 1]], + green: [[0, 0, 0], [0.365079, 0.319444, 0.319444], [0.746032, 0.777778, 0.777778], [1, 1, 1]], + blue: [[0, 0, 0], [0.365079, 0.444444, 0.444444], [1, 1, 1]] + } + }, + copper: { + name: 'Copper', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [0.809524, 1, 1], [1, 1, 1]], + green: [[0, 0, 0], [1, 0.7812, 0.7812]], + blue: [[0, 0, 0], [1, 0.4975, 0.4975]] + } + }, + spectral: { + name: 'Spectral', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0, 0], [0.05, 0.4667, 0.4667], [0.10, 0.5333, 0.5333], [0.15, 0, 0], [0.20, 0, 0], [0.25, 0, 0], [0.30, 0, 0], [0.35, 0, 0], [0.40, 0, 0], [0.45, 0, 0], [0.50, 0, 0], [0.55, 0, 0], [0.60, 0, 0], [0.65, 0.7333, 0.7333], [0.70, 0.9333, 0.9333], [0.75, 1, 1], [0.80, 1, 1], [0.85, 1, 1], [0.90, 0.8667, 0.8667], [0.95, 0.80, 0.80], [1, 0.80, 0.80]], + green: [[0, 0, 0], [0.05, 0, 0], [0.10, 0, 0], [0.15, 0, 0], [0.20, 0, 0], [0.25, 0.4667, 0.4667], [0.30, 0.6000, 0.6000], [0.35, 0.6667, 0.6667], [0.40, 0.6667, 0.6667], [0.45, 0.6000, 0.6000], [0.50, 0.7333, 0.7333], [0.55, 0.8667, 0.8667], [0.60, 1, 1], [0.65, 1, 1], [0.70, 0.9333, 0.9333], [0.75, 0.8000, 0.8000], [0.80, 0.6000, 0.6000], [0.85, 0, 0], [0.90, 0, 0], [0.95, 0, 0], [1, 0.80, 0.80]], + blue: [[0, 0, 0], [0.05, 0.5333, 0.5333], [0.10, 0.6000, 0.6000], [0.15, 0.6667, 0.6667], [0.20, 0.8667, 0.8667], [0.25, 0.8667, 0.8667], [0.30, 0.8667, 0.8667], [0.35, 0.6667, 0.6667], [0.40, 0.5333, 0.5333], [0.45, 0, 0], [0.5, 0, 0], [0.55, 0, 0], [0.60, 0, 0], [0.65, 0, 0], [0.70, 0, 0], [0.75, 0, 0], [0.80, 0, 0], [0.85, 0, 0], [0.90, 0, 0], [0.95, 0, 0], [1, 0.80, 0.80]] + } + }, + coolwarm: { + name: 'CoolWarm', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0.2298057, 0.2298057], [0.03125, 0.26623388, 0.26623388], [0.0625, 0.30386891, 0.30386891], [0.09375, 0.342804478, 0.342804478], [0.125, 0.38301334, 0.38301334], [0.15625, 0.424369608, 0.424369608], [0.1875, 0.46666708, 0.46666708], [0.21875, 0.509635204, 0.509635204], [0.25, 0.552953156, 0.552953156], [0.28125, 0.596262162, 0.596262162], [0.3125, 0.639176211, 0.639176211], [0.34375, 0.681291281, 0.681291281], [0.375, 0.722193294, 0.722193294], [0.40625, 0.761464949, 0.761464949], [0.4375, 0.798691636, 0.798691636], [0.46875, 0.833466556, 0.833466556], [0.5, 0.865395197, 0.865395197], [0.53125, 0.897787179, 0.897787179], [0.5625, 0.924127593, 0.924127593], [0.59375, 0.944468518, 0.944468518], [0.625, 0.958852946, 0.958852946], [0.65625, 0.96732803, 0.96732803], [0.6875, 0.969954137, 0.969954137], [0.71875, 0.966811177, 0.966811177], [0.75, 0.958003065, 0.958003065], [0.78125, 0.943660866, 0.943660866], [0.8125, 0.923944917, 0.923944917], [0.84375, 0.89904617, 0.89904617], [0.875, 0.869186849, 0.869186849], [0.90625, 0.834620542, 0.834620542], [0.9375, 0.795631745, 0.795631745], [0.96875, 0.752534934, 0.752534934], [1, 0.705673158, 0.705673158]], + green: [[0, 0.298717966, 0.298717966], [0.03125, 0.353094838, 0.353094838], [0.0625, 0.406535296, 0.406535296], [0.09375, 0.458757618, 0.458757618], [0.125, 0.50941904, 0.50941904], [0.15625, 0.558148092, 0.558148092], [0.1875, 0.604562568, 0.604562568], [0.21875, 0.648280772, 0.648280772], [0.25, 0.688929332, 0.688929332], [0.28125, 0.726149107, 0.726149107], [0.3125, 0.759599947, 0.759599947], [0.34375, 0.788964712, 0.788964712], [0.375, 0.813952739, 0.813952739], [0.40625, 0.834302879, 0.834302879], [0.4375, 0.849786142, 0.849786142], [0.46875, 0.860207984, 0.860207984], [0.5, 0.86541021, 0.86541021], [0.53125, 0.848937047, 0.848937047], [0.5625, 0.827384882, 0.827384882], [0.59375, 0.800927443, 0.800927443], [0.625, 0.769767752, 0.769767752], [0.65625, 0.734132809, 0.734132809], [0.6875, 0.694266682, 0.694266682], [0.71875, 0.650421156, 0.650421156], [0.75, 0.602842431, 0.602842431], [0.78125, 0.551750968, 0.551750968], [0.8125, 0.49730856, 0.49730856], [0.84375, 0.439559467, 0.439559467], [0.875, 0.378313092, 0.378313092], [0.90625, 0.312874446, 0.312874446], [0.9375, 0.24128379, 0.24128379], [0.96875, 0.157246067, 0.157246067], [1, 0.01555616, 0.01555616]], + blue: [[0, 0.753683153, 0.753683153], [0.03125, 0.801466763, 0.801466763], [0.0625, 0.84495867, 0.84495867], [0.09375, 0.883725899, 0.883725899], [0.125, 0.917387822, 0.917387822], [0.15625, 0.945619588, 0.945619588], [0.1875, 0.968154911, 0.968154911], [0.21875, 0.98478814, 0.98478814], [0.25, 0.995375608, 0.995375608], [0.28125, 0.999836203, 0.999836203], [0.3125, 0.998151185, 0.998151185], [0.34375, 0.990363227, 0.990363227], [0.375, 0.976574709, 0.976574709], [0.40625, 0.956945269, 0.956945269], [0.4375, 0.931688648, 0.931688648], [0.46875, 0.901068838, 0.901068838], [0.5, 0.865395561, 0.865395561], [0.53125, 0.820880546, 0.820880546], [0.5625, 0.774508472, 0.774508472], [0.59375, 0.726736146, 0.726736146], [0.625, 0.678007945, 0.678007945], [0.65625, 0.628751763, 0.628751763], [0.6875, 0.579375448, 0.579375448], [0.71875, 0.530263762, 0.530263762], [0.75, 0.481775914, 0.481775914], [0.78125, 0.434243684, 0.434243684], [0.8125, 0.387970225, 0.387970225], [0.84375, 0.343229596, 0.343229596], [0.875, 0.300267182, 0.300267182], [0.90625, 0.259301199, 0.259301199], [0.9375, 0.220525627, 0.220525627], [0.96875, 0.184115123, 0.184115123], [1, 0.150232812, 0.150232812]] + } + }, + blues: { + name: 'Blues', + numColors: 256, + gamma: 1, + segmentedData: { + red: [[0, 0.9686274528503418, 0.9686274528503418], [0.125, 0.87058824300765991, 0.87058824300765991], [0.25, 0.7764706015586853, 0.7764706015586853], [0.375, 0.61960786581039429, 0.61960786581039429], [0.5, 0.41960784792900085, 0.41960784792900085], [0.625, 0.25882354378700256, 0.25882354378700256], [0.75, 0.12941177189350128, 0.12941177189350128], [0.875, 0.031372550874948502, 0.031372550874948502], [1, 0.031372550874948502, 0.031372550874948502]], + green: [[0, 0.9843137264251709, 0.9843137264251709], [0.125, 0.92156863212585449, 0.92156863212585449], [0.25, 0.85882353782653809, 0.85882353782653809], [0.375, 0.7921568751335144, 0.7921568751335144], [0.5, 0.68235296010971069, 0.68235296010971069], [0.625, 0.57254904508590698, 0.57254904508590698], [0.75, 0.44313725829124451, 0.44313725829124451], [0.875, 0.31764706969261169, 0.31764706969261169], [1, 0.18823529779911041, 0.18823529779911041]], + blue: [[0, 1, 1], [0.125, 0.9686274528503418, 0.9686274528503418], [0.25, 0.93725490570068359, 0.93725490570068359], [0.375, 0.88235294818878174, 0.88235294818878174], [0.5, 0.83921569585800171, 0.83921569585800171], [0.625, 0.7764706015586853, 0.7764706015586853], [0.75, 0.70980393886566162, 0.70980393886566162], [0.875, 0.61176472902297974, 0.61176472902297974], [1, 0.41960784792900085, 0.41960784792900085]] + } + } +}; +/** + * Generate linearly spaced vectors +* http://cens.ioc.ee/local/man/matlab/techdoc/ref/linspace.html + * @param {Number} a A number representing the first vector + * @param {Number} b A number representing the second vector + * @param {Number} n The number of linear spaced vectors to generate + * @returns {Array} An array of points representing linear spaced vectors. + * @memberof Colors + */ + +function linspace(a, b, n) { + n = n === null ? 100 : n; + var increment = (b - a) / (n - 1); + var vector = []; + + while (n-- > 0) { + vector.push(a); + a += increment; + } // Make sure the last item will always be "b" because most of the + // Time we'll get numbers like 1.0000000000000002 instead of 1. + + + vector[vector.length - 1] = b; + return vector; +} +/** + * Returns the "rank/index" of the element in a sorted array if found or the highest index if not. Uses (binary search) + * @param {Array} array A sorted array to search in + * @param {any} elem the element in the array to search for + * @returns {number} The rank/index of the element in the given array + * @memberof Colors + */ + + +function getRank(array, elem) { + var left = 0; + var right = array.length - 1; + + while (left <= right) { + var mid = left + Math.floor((right - left) / 2); + var midElem = array[mid]; + + if (midElem === elem) { + return mid; + } else if (elem < midElem) { + right = mid - 1; + } else { + left = mid + 1; + } + } + + return left; +} +/** + * Find the indices into a sorted array a such that, if the corresponding elements + * In v were inserted before the indices, the order of a would be preserved. + * http://lagrange.univ-lyon1.fr/docs/numpy/1.11.0/reference/generated/numpy.searchsorted.html + * @param {Array} inputArray The array where the values will be inserted + * @param {Array} values An array of the values to be inserted into the inputArray + * @returns {Array} The indices where elements should be inserted to maintain order. + * @memberof Colors + */ + + +function searchSorted(inputArray, values) { + var i; + var indexes = []; + var len = values.length; + inputArray.sort(function (a, b) { + return a - b; + }); + + for (i = 0; i < len; i++) { + indexes[i] = getRank(inputArray, values[i]); + } + + return indexes; +} +/** + * Creates an *N* -element 1-d lookup table + * @param {Number} N The number of elements in the result lookup table + * @param {Array} data represented by a list of x,y0,y1 mapping correspondences. Each element in this + * List represents how a value between 0 and 1 (inclusive) represented by x is mapped to + * A corresponding value between 0 and 1 (inclusive). The two values of y are to allow for + * Discontinuous mapping functions (say as might be found in a sawtooth) where y0 represents + * The value of y for values of x <= to that given, and y1 is the value to be used for x > + * Than that given). The list must start with x=0, end with x=1, and all values of x must be + * In increasing order. Values between the given mapping points are determined by simple linear + * Interpolation. + * @param {any} gamma value denotes a "gamma curve" value which adjusts the brightness + * at the bottom and top of the map. + * @returns {any[]} an array "result" where result[x*(N-1)] gives the closest value for + * Values of x between 0 and 1. + * @memberof Colors + */ + + +function makeMappingArray(N, data, gamma) { + var i; + var x = []; + var y0 = []; + var y1 = []; + var lut = []; + gamma = gamma === null ? 1 : gamma; + + for (i = 0; i < data.length; i++) { + var element = data[i]; + x.push((N - 1) * element[0]); + y0.push(element[1]); + y1.push(element[1]); + } + + var xLinSpace = linspace(0, 1, N); + + for (i = 0; i < N; i++) { + xLinSpace[i] = (N - 1) * Math.pow(xLinSpace[i], gamma); + } + + var xLinSpaceIndexes = searchSorted(x, xLinSpace); + + for (i = 1; i < N - 1; i++) { + var index = xLinSpaceIndexes[i]; + var colorPercent = (xLinSpace[i] - x[index - 1]) / (x[index] - x[index - 1]); + var colorDelta = y0[index] - y1[index - 1]; + lut[i] = colorPercent * colorDelta + y1[index - 1]; + } + + lut[0] = y1[0]; + lut[N - 1] = y0[data.length - 1]; + return lut; +} +/** + * Creates a Colormap based on lookup tables using linear segments. + * @param {{red:Array, green:Array, blue:Array}} segmentedData An object with a red, green and blue entries. + * Each entry should be a list of x, y0, y1 tuples, forming rows in a table. + * @param {Number} N The number of elements in the result Colormap + * @param {any} gamma value denotes a "gamma curve" value which adjusts the brightness + * at the bottom and top of the Colormap. + * @returns {Array} The created Colormap object + * @description The lookup table is generated using linear interpolation for each + * Primary color, with the 0-1 domain divided into any number of + * Segments. + * https://github.com/stefanv/matplotlib/blob/3f1a23755e86fef97d51e30e106195f34425c9e3/lib/matplotlib/colors.py#L663 + * @memberof Colors + */ + + +function createLinearSegmentedColormap(segmentedData, N, gamma) { + var i; + var lut = []; + N = N === null ? 256 : N; + gamma = gamma === null ? 1 : gamma; + var redLut = makeMappingArray(N, segmentedData.red, gamma); + var greenLut = makeMappingArray(N, segmentedData.green, gamma); + var blueLut = makeMappingArray(N, segmentedData.blue, gamma); + + for (i = 0; i < N; i++) { + var red = Math.round(redLut[i] * 255); + var green = Math.round(greenLut[i] * 255); + var blue = Math.round(blueLut[i] * 255); + var rgba = [red, green, blue, 255]; + lut.push(rgba); + } + + return lut; +} +/** + * Return all available colormaps (id and name) + * @returns {Array<{id,key}>} An array of colormaps with an object containing the "id" and display "name" + * @memberof Colors + */ + + +function getColormapsList() { + var colormaps = []; + var keys = Object.keys(colormapsData); + keys.forEach(function (key) { + if (colormapsData.hasOwnProperty(key)) { + var colormap = colormapsData[key]; + colormaps.push({ + id: key, + name: colormap.name + }); + } + }); + colormaps.sort(function (a, b) { + var aName = a.name.toLowerCase(); + var bName = b.name.toLowerCase(); + + if (aName === bName) { + return 0; + } + + return aName < bName ? -1 : 1; + }); + return colormaps; +} +/** + * Return a colorMap object with the provided id and colormapData + * if the Id matches existent colorMap objects (check colormapsData) the colormapData is ignored. + * if the colormapData is not empty, the colorMap will be added to the colormapsData list. Otherwise, an empty colorMap object is returned. + * @param {string} id The ID of the colormap + * @param {Object} colormapData - An object that can contain a name, numColors, gama, segmentedData and/or colors + * @returns {*} The Colormap Object + * @memberof Colors +*/ + +function getColormap(id, colormapData) { + var colormap = colormapsData[id]; + + if (!colormap) { + colormap = colormapsData[id] = colormapData || { + name: '', + colors: [] + }; + } + + if (!colormap.colors && colormap.segmentedData) { + colormap.colors = createLinearSegmentedColormap(colormap.segmentedData, colormap.numColors, colormap.gamma); + } + + return { + getId: function getId() { + return id; + }, + getColorSchemeName: function getColorSchemeName() { + return colormap.name; + }, + setColorSchemeName: function setColorSchemeName(name) { + colormap.name = name; + }, + getNumberOfColors: function getNumberOfColors() { + return colormap.colors.length; + }, + setNumberOfColors: function setNumberOfColors(numColors) { + while (colormap.colors.length < numColors) { + colormap.colors.push(COLOR_TRANSPARENT); + } + + colormap.colors.length = numColors; + }, + getColor: function getColor(index) { + if (this.isValidIndex(index)) { + return colormap.colors[index]; + } + + return COLOR_TRANSPARENT; + }, + getColorRepeating: function getColorRepeating(index) { + var numColors = colormap.colors.length; + index = numColors ? index % numColors : 0; + return this.getColor(index); + }, + setColor: function setColor(index, rgba) { + if (this.isValidIndex(index)) { + colormap.colors[index] = rgba; + } + }, + addColor: function addColor(rgba) { + colormap.colors.push(rgba); + }, + insertColor: function insertColor(index, rgba) { + if (this.isValidIndex(index)) { + colormap.colors.splice(index, 1, rgba); + } + }, + removeColor: function removeColor(index) { + if (this.isValidIndex(index)) { + colormap.colors.splice(index, 1); + } + }, + clearColors: function clearColors() { + colormap.colors = []; + }, + buildLookupTable: function buildLookupTable(lut) { + if (!lut) { + return; + } + + var numColors = colormap.colors.length; + lut.setNumberOfTableValues(numColors); + + for (var i = 0; i < numColors; i++) { + lut.setTableValue(i, colormap.colors[i]); + } + }, + createLookupTable: function createLookupTable() { + var lut = new _lookupTable_js__WEBPACK_IMPORTED_MODULE_0__["default"](); + this.buildLookupTable(lut); + return lut; + }, + isValidIndex: function isValidIndex(index) { + return index >= 0 && index < colormap.colors.length; + } + }; +} + +/***/ }), + +/***/ "./colors/index.js": +/*!*************************!*\ + !*** ./colors/index.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colormap_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colormap.js */ "./colors/colormap.js"); +/* harmony import */ var _lookupTable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lookupTable.js */ "./colors/lookupTable.js"); + + +/* harmony default export */ __webpack_exports__["default"] = ({ + getColormap: _colormap_js__WEBPACK_IMPORTED_MODULE_0__["getColormap"], + getColormapsList: _colormap_js__WEBPACK_IMPORTED_MODULE_0__["getColormapsList"], + LookupTable: _lookupTable_js__WEBPACK_IMPORTED_MODULE_1__["default"] +}); + +/***/ }), + +/***/ "./colors/lookupTable.js": +/*!*******************************!*\ + !*** ./colors/lookupTable.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +// This code was created based on vtkLookupTable +// http://www.vtk.org/doc/release/5.0/html/a01697.html +// https://github.com/Kitware/VTK/blob/master/Common/Core/vtkLookupTable.cxx +var BELOW_RANGE_COLOR_INDEX = 0; +var ABOVE_RANGE_COLOR_INDEX = 1; +var NAN_COLOR_INDEX = 2; +/** + * Converts an HSV (Hue, Saturation, Value) color to RGB (Red, Green, Blue) color value + * @param {Number} hue A number representing the hue color value + * @param {any} sat A number representing the saturation color value + * @param {any} val A number representing the value color value + * @returns {Numberp[]} An RGB color array + */ + +function HSVToRGB(hue, sat, val) { + if (hue > 1) { + throw new Error('HSVToRGB expects hue < 1'); + } + + var rgb = []; + + if (sat === 0) { + rgb[0] = val; + rgb[1] = val; + rgb[2] = val; + return rgb; + } + + var hueCase = Math.floor(hue * 6); + var frac = 6 * hue - hueCase; + var lx = val * (1 - sat); + var ly = val * (1 - sat * frac); + var lz = val * (1 - sat * (1 - frac)); + + switch (hueCase) { + /* 0 p.Range[1]) { + dIndex = p.MaxIndex + ABOVE_RANGE_COLOR_INDEX + 1.5; + } else { + dIndex = (v + p.Shift) * p.Scale; + } + + return Math.floor(dIndex); +} +/** + * Maps scalar values into colors via a lookup table + * LookupTable is an object that is used by mapper objects to map scalar values into rgba (red-green-blue-alpha transparency) color specification, + * or rgba into scalar values. The color table can be created by direct insertion of color values, or by specifying hue, saturation, value, and alpha range and generating a table + */ + + +var LookupTable = +/*#__PURE__*/ +function () { + /** + * Creates a default linear LookupTable object with 256 colors. + */ + function LookupTable() { + _classCallCheck(this, LookupTable); + + this.NumberOfColors = 256; + this.Ramp = 'linear'; + this.TableRange = [0, 255]; + this.HueRange = [0, 0.66667]; + this.SaturationRange = [1, 1]; + this.ValueRange = [1, 1]; + this.AlphaRange = [1, 1]; + this.NaNColor = [128, 0, 0, 255]; + this.BelowRangeColor = [0, 0, 0, 255]; + this.UseBelowRangeColor = true; + this.AboveRangeColor = [255, 255, 255, 255]; + this.UseAboveRangeColor = true; + this.InputRange = [0, 255]; + this.Table = []; + } + /** + * Specify the number of values (i.e., colors) in the lookup table. + * @param {Number} number The number of colors in he LookupTable + * @returns {void} + * @memberof Colors + */ + + + _createClass(LookupTable, [{ + key: "setNumberOfTableValues", + value: function setNumberOfTableValues(number) { + this.NumberOfColors = number; + } + /** + * Set the shape of the table ramp to either 'linear', 'scurve' or 'sqrt' + * @param {String} ramp A string value representing the shape of the table. Allowed values are 'linear', 'scurve' or 'sqrt' + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setRamp", + value: function setRamp(ramp) { + this.Ramp = ramp; + } + /** + * Sets the minimum/maximum scalar values for scalar mapping. + * Scalar values less than minimum range value are clamped to minimum range value. + * Scalar values greater than maximum range value are clamped to maximum range value. + * @param {Number} start A double representing the minimum scaler value of the LookupTable + * @param {any} end A double representing the maximum scaler value of the LookupTable + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setTableRange", + value: function setTableRange(start, end) { + this.TableRange[0] = start; + this.TableRange[1] = end; + } + /** + * Set the range in hue (using automatic generation). Hue ranges between [0,1]. + * @param {Number} start A double representing the minimum hue value in a range. Min. is 0 + * @param {Number} end A double representing the maximum hue value in a range. Max. is 1 + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setHueRange", + value: function setHueRange(start, end) { + this.HueRange[0] = start; + this.HueRange[1] = end; + } + /** + * Set the range in saturation (using automatic generation). Saturation ranges between [0,1]. + * @param {Number} start A double representing the minimum Saturation value in a range. Min. is 0 + * @param {Number} end A double representing the maximum Saturation value in a range. Max. is 1 + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setSaturationRange", + value: function setSaturationRange(start, end) { + this.SaturationRange[0] = start; + this.SaturationRange[1] = end; + } + /** + * Set the range in value (using automatic generation). Value ranges between [0,1]. + * @param {Numeber } start A double representing the minimum value in a range. Min. is 0 + * @param {Numeber} end A double representing the maximum value in a range. Max. is 1 + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setValueRange", + value: function setValueRange(start, end) { + // Set the range in value (using automatic generation). Value ranges between [0,1]. + this.ValueRange[0] = start; + this.ValueRange[1] = end; + } + /** + * (Not Used) Sets the range of scalars which will be mapped. + * @param {Number} start the minimum scalar value in the range + * @param {Number} end the maximum scalar value in the range + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setRange", + value: function setRange(start, end) { + this.InputRange[0] = start; + this.InputRange[1] = end; + } + /** + * Set the range in alpha (using automatic generation). Alpha ranges from [0,1]. + * @param {Number} start A double representing the minimum alpha value + * @param {Number} end A double representing the maximum alpha value + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setAlphaRange", + value: function setAlphaRange(start, end) { + // Set the range in alpha (using automatic generation). Alpha ranges from [0,1]. + this.AlphaRange[0] = start; + this.AlphaRange[1] = end; + } + /** + * Map one value through the lookup table and return the color as an + * RGBA array of doubles between 0 and 1. + * @param {Number} scalar A double scalar value which will be mapped to a color in the LookupTable + * @returns {Number[]} An RGBA array of doubles between 0 and 1 + * @memberof Colors + */ + + }, { + key: "getColor", + value: function getColor(scalar) { + return this.mapValue(scalar); + } + /** + * Generate lookup table from hue, saturation, value, alpha min/max values. Table is built from linear ramp of each value. + * @param {Boolean} force true to force the build of the LookupTable. Otherwie, false. This is useful if a lookup table has been defined manually + * (using SetTableValue) and then an application decides to rebuild the lookup table using the implicit process. + * @returns {void} + * @memberof Colors + */ + + }, { + key: "build", + value: function build(force) { + if (this.Table.length > 1 && !force) { + return; + } // Clear the table + + + this.Table = []; + var maxIndex = this.NumberOfColors - 1; + var hinc, sinc, vinc, ainc; + + if (maxIndex) { + hinc = (this.HueRange[1] - this.HueRange[0]) / maxIndex; + sinc = (this.SaturationRange[1] - this.SaturationRange[0]) / maxIndex; + vinc = (this.ValueRange[1] - this.ValueRange[0]) / maxIndex; + ainc = (this.AlphaRange[1] - this.AlphaRange[0]) / maxIndex; + } else { + hinc = sinc = vinc = ainc = 0.0; + } + + for (var i = 0; i <= maxIndex; i++) { + var hue = this.HueRange[0] + i * hinc; + var sat = this.SaturationRange[0] + i * sinc; + var val = this.ValueRange[0] + i * vinc; + var alpha = this.AlphaRange[0] + i * ainc; + var rgb = HSVToRGB(hue, sat, val); + var c_rgba = []; + + switch (this.Ramp) { + case 'scurve': + c_rgba[0] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[0]) * Math.PI))); + c_rgba[1] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[1]) * Math.PI))); + c_rgba[2] = Math.floor(127.5 * (1.0 + Math.cos((1.0 - rgb[2]) * Math.PI))); + c_rgba[3] = Math.floor(alpha * 255); + break; + + case 'linear': + c_rgba[0] = Math.floor(rgb[0] * 255 + 0.5); + c_rgba[1] = Math.floor(rgb[1] * 255 + 0.5); + c_rgba[2] = Math.floor(rgb[2] * 255 + 0.5); + c_rgba[3] = Math.floor(alpha * 255 + 0.5); + break; + + case 'sqrt': + c_rgba[0] = Math.floor(Math.sqrt(rgb[0]) * 255 + 0.5); + c_rgba[1] = Math.floor(Math.sqrt(rgb[1]) * 255 + 0.5); + c_rgba[2] = Math.floor(Math.sqrt(rgb[2]) * 255 + 0.5); + c_rgba[3] = Math.floor(Math.sqrt(alpha) * 255 + 0.5); + break; + + default: + throw new Error("Invalid Ramp value (".concat(this.Ramp, ")")); + } + + this.Table.push(c_rgba); + } + + this.buildSpecialColors(); + } + /** + * Ensures the out-of-range colors (Below range and Above range) are set correctly. + * @returns {void} + * @memberof Colors + */ + + }, { + key: "buildSpecialColors", + value: function buildSpecialColors() { + var numberOfColors = this.NumberOfColors; + var belowRangeColorIndex = numberOfColors + BELOW_RANGE_COLOR_INDEX; + var aboveRangeColorIndex = numberOfColors + ABOVE_RANGE_COLOR_INDEX; + var nanColorIndex = numberOfColors + NAN_COLOR_INDEX; // Below range color + + if (this.UseBelowRangeColor || numberOfColors === 0) { + this.Table[belowRangeColorIndex] = this.BelowRangeColor; + } else { + // Duplicate the first color in the table. + this.Table[belowRangeColorIndex] = this.Table[0]; + } // Above range color + + + if (this.UseAboveRangeColor || numberOfColors === 0) { + this.Table[aboveRangeColorIndex] = this.AboveRangeColor; + } else { + // Duplicate the last color in the table. + this.Table[aboveRangeColorIndex] = this.Table[numberOfColors - 1]; + } // Always use NanColor + + + this.Table[nanColorIndex] = this.NaNColor; + } + /** + * Similar to GetColor - Map one value through the lookup table and return the color as an + * RGBA array of doubles between 0 and 1. + * @param {Numeber} v A double scalar value which will be mapped to a color in the LookupTable + * @returns {Number[]} An RGBA array of doubles between 0 and 1 + * @memberof Colors + */ + + }, { + key: "mapValue", + value: function mapValue(v) { + var index = this.getIndex(v); + + if (index < 0) { + return this.NaNColor; + } else if (index === 0) { + if (this.UseBelowRangeColor && v < this.TableRange[0]) { + return this.BelowRangeColor; + } + } else if (index === this.NumberOfColors - 1) { + if (this.UseAboveRangeColor && v > this.TableRange[1]) { + return this.AboveRangeColor; + } + } + + return this.Table[index]; + } + /** + * Return the table index associated with a particular value. + * @param {Number} v A double value which table index will be returned. + * @returns {Number} The index in the LookupTable + * @memberof Colors + */ + + }, { + key: "getIndex", + value: function getIndex(v) { + var p = {}; + p.Range = []; + p.MaxIndex = this.NumberOfColors - 1; // This was LookupShiftAndScale + + p.Shift = -this.TableRange[0]; + + if (this.TableRange[1] <= this.TableRange[0]) { + p.Scale = Number.MAX_VALUE; + } else { + p.Scale = p.MaxIndex / (this.TableRange[1] - this.TableRange[0]); + } + + p.Range[0] = this.TableRange[0]; + p.Range[1] = this.TableRange[1]; // First, check whether we have a number... + + if (isNaN(v)) { + // For backwards compatibility + return -1; + } // Map to an index: + + + var index = linearIndexLookupMain(v, p); // For backwards compatibility, if the index indicates an + // Out-of-range value, truncate to index range for in-range colors. + + if (index === this.NumberOfColors + BELOW_RANGE_COLOR_INDEX) { + index = 0; + } else if (index === this.NumberOfColors + ABOVE_RANGE_COLOR_INDEX) { + index = this.NumberOfColors - 1; + } + + return index; + } + /** + * Directly load color into lookup table. Use [0,1] double values for color component specification. + * Make sure that you've either used the Build() method or used SetNumberOfTableValues() prior to using this method. + * @param {Number} index The index in the LookupTable of where to insert the color value + * @param {Number[]} rgba An array of [0,1] double values for an RGBA color component + * @returns {void} + * @memberof Colors + */ + + }, { + key: "setTableValue", + value: function setTableValue(index, rgba) { + // Check if it index, red, green, blue and alpha were passed as parameter + if (arguments.length === 5) { + rgba = Array.prototype.slice.call(arguments, 1); + } // Check the index to make sure it is valid + + + if (index < 0) { + throw new Error("Can't set the table value for negative index (".concat(index, ")")); + } + + if (index >= this.NumberOfColors) { + new Error("Index ".concat(index, " is greater than the number of colors ").concat(this.NumberOfColors)); + } + + this.Table[index] = rgba; + + if (index === 0 || index === this.NumberOfColors - 1) { + // This is needed due to the way the special colors are stored in + // The internal table. If Above/BelowRangeColors are not used and + // The min/max colors are changed in the table with this member + // Function, then the colors used for values outside the range may + // Be incorrect. Calling this here ensures the out-of-range colors + // Are set correctly. + this.buildSpecialColors(); + } + } + }]); + + return LookupTable; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (LookupTable); + +/***/ }), + +/***/ "./disable.js": +/*!********************!*\ + !*** ./disable.js ***! + \********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.js */ "./events.js"); + + + +/** + * Disable an HTML element for further use in Cornerstone + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @returns {void} + * @memberof Enable + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + if (element === undefined) { + throw new Error('disable: element must not be undefined'); + } // Search for this element in this list of enabled elements + + + var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElements"])(); + + for (var i = 0; i < enabledElements.length; i++) { + if (enabledElements[i].element === element) { + // We found it! + // Fire an event so dependencies can cleanup + var eventData = { + element: element + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].ELEMENT_DISABLED, eventData); + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_2__["events"], _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].ELEMENT_DISABLED, eventData); // Remove the child DOM elements that we created (e.g.canvas) + + enabledElements[i].element.removeChild(enabledElements[i].canvas); + enabledElements[i].canvas = undefined; // Remove this element from the list of enabled elements + + enabledElements.splice(i, 1); + break; + } + } +}); + +/***/ }), + +/***/ "./displayImage.js": +/*!*************************!*\ + !*** ./displayImage.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); +/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internal/now.js */ "./internal/now.js"); +/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./layers.js */ "./layers.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./events.js */ "./events.js"); + + + + + + + +/** + * Sets a new image object for a given element. + * + * Will also apply an optional viewport setting. + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @param {Object} image An Image loaded by a Cornerstone Image Loader + * @param {Object} [viewport] A set of Cornerstone viewport parameters + * @returns {void} + * @memberof Drawing + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, image, viewport) { + if (element === undefined) { + throw new Error('displayImage: parameter element must not be undefined'); + } + + if (image === undefined) { + throw new Error('displayImage: parameter image must not be undefined'); + } + + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var oldImage = enabledElement.image; + enabledElement.image = image; + + if (enabledElement.layers && enabledElement.layers.length) { + Object(_layers_js__WEBPACK_IMPORTED_MODULE_4__["setLayerImage"])(element, image); + } + + if (enabledElement.viewport === undefined) { + enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, image); + } // Merge viewport + + + if (viewport) { + for (var attrname in viewport) { + if (viewport[attrname] !== null) { + enabledElement.viewport[attrname] = viewport[attrname]; + } + } + } + + var frameRate; + + if (enabledElement.lastImageTimeStamp !== undefined) { + var timeSinceLastImage = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - enabledElement.lastImageTimeStamp; + frameRate = (1000 / timeSinceLastImage).toFixed(); + } + + enabledElement.lastImageTimeStamp = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); + var newImageEventData = { + viewport: enabledElement.viewport, + element: enabledElement.element, + image: enabledElement.image, + oldImage: oldImage, + enabledElement: enabledElement, + frameRate: frameRate + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement.element, _events_js__WEBPACK_IMPORTED_MODULE_6__["default"].NEW_IMAGE, newImageEventData); + Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element); +}); + +/***/ }), + +/***/ "./draw.js": +/*!*****************!*\ + !*** ./draw.js ***! + \*****************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js"); + + +/** + * Immediately draws the enabled element + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @returns {void} + * @memberof Drawing + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + + if (enabledElement.image === undefined) { + throw new Error('draw: image has not been loaded yet'); + } + + Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement); +}); + +/***/ }), + +/***/ "./drawInvalidated.js": +/*!****************************!*\ + !*** ./drawInvalidated.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js"); +/** + * This module is responsible for drawing invalidated enabled elements + */ + + +/** + * Draws all invalidated enabled elements and clears the invalid flag after drawing it + * + * @returns {void} + * @memberof Drawing + */ + +/* harmony default export */ __webpack_exports__["default"] = (function () { + var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElements"])(); + + for (var i = 0; i < enabledElements.length; i++) { + var ee = enabledElements[i]; + + if (ee.invalid === true) { + Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(ee, true); + } + } +}); + +/***/ }), + +/***/ "./enable.js": +/*!*******************!*\ + !*** ./enable.js ***! + \*******************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _resize_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./resize.js */ "./resize.js"); +/* harmony import */ var _internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/drawImageSync.js */ "./internal/drawImageSync.js"); +/* harmony import */ var _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internal/requestAnimationFrame.js */ "./internal/requestAnimationFrame.js"); +/* harmony import */ var _internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internal/tryEnableWebgl.js */ "./internal/tryEnableWebgl.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _generateUUID_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./generateUUID.js */ "./generateUUID.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./events.js */ "./events.js"); +/* harmony import */ var _internal_getCanvas_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./internal/getCanvas.js */ "./internal/getCanvas.js"); + + + + + + + + + +/** + * @module Enable + * This module is responsible for enabling an element to display images with cornerstone + */ + +/** + * Returns whether or not an Enabled Element has either a currently active image or + * a non-empty Array of Enabled Element Layers. + * + * @param {EnabledElement} enabledElement An Enabled Element + * @return {Boolean} Whether or not the Enabled Element has an active image or valid set of layers + * @memberof Enable + */ + +function hasImageOrLayers(enabledElement) { + return enabledElement.image !== undefined || enabledElement.layers.length > 0; +} +/** + * Enable an HTML Element for use in Cornerstone + * + * - If there is a Canvas already present within the HTMLElement, and it has the class + * 'cornerstone-canvas', this function will use this existing Canvas instead of creating + * a new one. This may be helpful when using libraries (e.g. React, Vue) which don't + * want third parties to change the DOM. + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @param {Object} options Options for the enabledElement + * + * @return {void} + * @memberof Enable + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (element, options) { + if (element === undefined) { + throw new Error('enable: parameter element cannot be undefined'); + } // If this enabled element has the option set for WebGL, we should + // Check if this device actually supports it + + + if (options && options.renderer && options.renderer.toLowerCase() === 'webgl') { + Object(_internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__["default"])(options); + } + + var canvas = Object(_internal_getCanvas_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element); + var enabledElement = { + element: element, + canvas: canvas, + image: undefined, + // Will be set once image is loaded + invalid: false, + // True if image needs to be drawn, false if not + needsRedraw: true, + options: options, + layers: [], + data: {}, + renderingTools: {}, + uuid: Object(_generateUUID_js__WEBPACK_IMPORTED_MODULE_6__["default"])() + }; + Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["addEnabledElement"])(enabledElement); + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_7__["events"], _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].ELEMENT_ENABLED, enabledElement); + Object(_resize_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, true); + /** + * Draw the image immediately + * + * @param {DOMHighResTimeStamp} timestamp The current time for when requestAnimationFrame starts to fire callbacks + * @returns {void} + * @memberof Drawing + */ + + function draw(timestamp) { + if (enabledElement.canvas === undefined) { + return; + } + + var eventDetails = { + enabledElement: enabledElement, + timestamp: timestamp + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement.element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].PRE_RENDER, eventDetails); + + if (enabledElement.needsRedraw && hasImageOrLayers(enabledElement)) { + Object(_internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, enabledElement.invalid); + } + + Object(_internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"])(draw); + } + + draw(); +}); + +/***/ }), + +/***/ "./enabledElementData.js": +/*!*******************************!*\ + !*** ./enabledElementData.js ***! + \*******************************/ +/*! exports provided: getElementData, removeElementData */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementData", function() { return getElementData; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeElementData", function() { return removeElementData; }); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); + +/** + * Retrieves any data for a Cornerstone enabledElement for a specific string + * dataType + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @param {string} dataType A string name for an arbitrary set of data + * @returns {*} Whatever data is stored for this enabled element + */ + +function getElementData(element, dataType) { + var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + + if (ee.data.hasOwnProperty(dataType) === false) { + ee.data[dataType] = {}; + } + + return ee.data[dataType]; +} +/** + * Clears any data for a Cornerstone enabledElement for a specific string + * dataType + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @param {string} dataType A string name for an arbitrary set of data + * + * @returns {void} + */ + +function removeElementData(element, dataType) { + var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + delete ee.data[dataType]; +} + +/***/ }), + +/***/ "./enabledElements.js": +/*!****************************!*\ + !*** ./enabledElements.js ***! + \****************************/ +/*! exports provided: getEnabledElement, addEnabledElement, getEnabledElementsByImageId, getEnabledElements */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEnabledElement", function() { return getEnabledElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addEnabledElement", function() { return addEnabledElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEnabledElementsByImageId", function() { return getEnabledElementsByImageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEnabledElements", function() { return getEnabledElements; }); +var enabledElements = []; +/** + * @module EnabledElements + */ + +/** + * @module Objects + */ + +/** + * A two-dimensional vector + * + * @typedef {Object} vec2 + * @memberof Objects + * @param {Number} x - The x distance + * @param {Number} y - The y distance + */ + +/** + * VOI + * + * @typedef {Object} VOI + * @memberof Objects + * @param {Number} windowWidth - Window Width for display + * @param {Number} windowCenter - Window Center for display + */ + +/** + * Lookup Table Array + * + * @typedef {Object} LUT + * @memberof Objects + * @property {Number} firstValueMapped + * @property {Number} numBitsPerEntry + * @property {Array} lut + */ + +/** + * Image Statistics Object + * + * @typedef {Object} ImageStats + * @memberof Objects + * @property {Number} [lastGetPixelDataTime] The time in ms taken to retrieve stored pixels required to draw the image + * @property {Number} [lastStoredPixelDataToCanvasImageDataTime] The time in ms taken to map from stored pixel array to canvas pixel array + * @property {Number} [lastPutImageDataTime] The time in ms taken for putImageData to put the canvas pixel data into the canvas context + * @property {Number} [lastRenderTime] The total time in ms taken for the entire rendering function to run + * @property {Number} [lastLutGenerateTime] The time in ms taken to generate the lookup table for the image + */ + +/** + * An Image Object in Cornerstone + * + * @typedef {Object} Image + * @memberof Objects + * @property {string} imageId - The imageId associated with this image object + * @property {Number} minPixelValue - the minimum stored pixel value in the image + * @property {Number} maxPixelValue - the maximum stored pixel value in the image + * @property {Number} slope - the rescale slope to convert stored pixel values to modality pixel values or 1 if not specified + * @property {Number} intercept - the rescale intercept used to convert stored pixel values to modality values or 0 if not specified + * @property {Number} windowCenter - the default windowCenter to apply to the image + * @property {Number} windowWidth - the default windowWidth to apply to the image + * @property {function} getPixelData - a function that returns the underlying pixel data. An array of integers for grayscale and an array of RGBA for color + * @property {function} getImageData - a function that returns a canvas imageData object for the image. This is only needed for color images + * @property {function} getCanvas - a function that returns a canvas element with the image loaded into it. This is only needed for color images. + * @property {function} getImage - a function that returns a JavaScript Image object with the image data. This is optional and typically used for images encoded in standard web JPEG and PNG formats + * @property {Number} rows - number of rows in the image. This is the same as height but duplicated for convenience + * @property {Number} columns - number of columns in the image. This is the same as width but duplicated for convenience + * @property {Number} height - the height of the image. This is the same as rows but duplicated for convenience + * @property {Number} width - the width of the image. This is the same as columns but duplicated for convenience + * @property {Boolean} color - true if pixel data is RGB, false if grayscale + * @property {Object} lut - The Lookup Table + * @property {Boolean} rgba - Is the color pixel data stored in RGBA? + * @property {Number} columnPixelSpacing - horizontal distance between the middle of each pixel (or width of each pixel) in mm or undefined if not known + * @property {Number} rowPixelSpacing - vertical distance between the middle of each pixel (or height of each pixel) in mm or undefined if not known + * @property {Boolean} invert - true if the the image should initially be displayed be inverted, false if not. This is here mainly to support DICOM images with a photometric interpretation of MONOCHROME1 + * @property {Number} sizeInBytes - the number of bytes used to store the pixels for this image. + * @property {Boolean} [falseColor=false] - Whether or not the image has undergone false color mapping + * @property {Array} [origPixelData] - Original pixel data for an image after it has undergone false color mapping + * @property {ImageStats} [stats] - Statistics for the last redraw of the image + * @property {Object} cachedLut - Cached Lookup Table for this image. + * @property {String|Colormap} [colormap] - Depreacted. Use viewport.colormap instead. an optional colormap ID or colormap object (from colors/colormap.js). This will be applied during rendering to convert the image to pseudocolor + * @property {Boolean} [labelmap=false] - whether or not to render this image as a label map (i.e. skip modality and VOI LUT pipelines and use only a color lookup table) + */ + +/** + * A Viewport Settings Object Cornerstone + * + * @typedef {Object} Viewport + * @memberof Objects + * @property {Number} [scale=1.0] - The scale applied to the image. A scale of 1.0 will display no zoom (one image pixel takes up one screen pixel). A scale of 2.0 will be double zoom and a scale of .5 will be zoomed out by 2x + * @property {vec2} [translation] - An object with properties x and y which describe the translation to apply in the pixel coordinate system. Note that the image is initially displayed centered in the enabled element with a x and y translation of 0 and 0 respectively. + * @property {VOI} [voi] - an object with properties windowWidth and windowCenter. + * @property {boolean} [invert=false] - Whether or not the image is inverted. + * @property {boolean} [pixelReplication=false] - true if the image smooth / interpolation should be used when zoomed in on the image or false if pixel replication should be used. + * @property {boolean} [hflip=false] - true if the image is flipped horizontally. Default is false + * @property {boolean} [vflip=false] - true if the image is flipped vertically. Default is false + * @property {Number} [rotation=0] - the rotation of the image (90 degree increments). Default is 0 + * @property {LUT} [modalityLUT] - the modality LUT to apply or undefined if none + * @property {LUT} [voiLUT] - the modality LUT to apply or undefined if none + * @property {String|Colormap} [colormap] - an optional colormap ID or colormap object (from colors/colormap.js). This will be applied during rendering to convert the image to pseudocolor + * @property {Boolean} [labelmap=false] - whether or not to render this image as a label map (i.e. skip modality and VOI LUT pipelines and use only a color lookup table) + */ + +/** + * An Enabled Element in Cornerstone + * + * @typedef {Object} EnabledElement + * @memberof Objects + * @property {HTMLElement} element - The DOM element which has been enabled for use by Cornerstone + * @property {Image} [image] - The image currently displayed in the enabledElement + * @property {Viewport} [viewport] - The current viewport settings of the enabledElement + * @property {HTMLCanvasElement} [canvas] - The current canvas for this enabledElement + * @property {Boolean} invalid - Whether or not the image pixel data underlying the enabledElement has been changed, necessitating a redraw + * @property {Boolean} needsRedraw - A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid + * @property {EnabledElementLayer[]} [layers] - The layers that have been added to the enabledElement + * @property {Boolean} [syncViewports] - Whether or not to synchronize the viewport parameters + * for each of the enabled element's layers + * @property {Boolean} [lastSyncViewportsState] - The previous state for the sync viewport boolean + */ + +/** + * An Enabled Element Layer in Cornerstone + * + * @typedef {Object} EnabledElementLayer + * @memberof Objects + * @property {HTMLElement} element - The DOM element which has been enabled for use by Cornerstone + * @property {Image} [image] - The image currently displayed in the enabledElement + * @property {Viewport} [viewport] - The current viewport settings of the enabledElement + * @property {HTMLCanvasElement} [canvas] - The current canvas for this enabledElement + * @property {Object} [options] - Layer drawing options + * @property {Boolean} invalid - Whether or not the image pixel data underlying the enabledElement has been changed, necessitating a redraw + * @property {Boolean} needsRedraw - A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid + */ + +/** + * An Image Load Object + * + * @typedef {Object} ImageLoadObject + * @memberof Objects + * @property {Promise} promise - The Promise tracking the loading of this image + * @property {Function|undefined} cancelFn - A function to cancel the image load request + */ + +/** + * Retrieves a Cornerstone Enabled Element object + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * + * @returns {EnabledElement} A Cornerstone Enabled Element + * @memberof EnabledElements + */ + +function getEnabledElement(element) { + if (element === undefined) { + throw new Error('getEnabledElement: parameter element must not be undefined'); + } + + for (var i = 0; i < enabledElements.length; i++) { + if (enabledElements[i].element === element) { + return enabledElements[i]; + } + } + + throw new Error('element not enabled'); +} +/** + * Adds a Cornerstone Enabled Element object to the central store of enabledElements + * + * @param {EnabledElement} enabledElement A Cornerstone enabledElement Object + * @returns {void} + * @memberof EnabledElements + */ + +function addEnabledElement(enabledElement) { + if (enabledElement === undefined) { + throw new Error('getEnabledElement: enabledElement element must not be undefined'); + } + + enabledElements.push(enabledElement); +} +/** + * Adds a Cornerstone Enabled Element object to the central store of enabledElements + * + * @param {string} imageId A Cornerstone Image ID + * @returns {EnabledElement[]} An Array of Cornerstone enabledElement Objects + * @memberof EnabledElements + */ + +function getEnabledElementsByImageId(imageId) { + var ees = []; + enabledElements.forEach(function (enabledElement) { + if (enabledElement.image && enabledElement.image.imageId === imageId) { + ees.push(enabledElement); + } + }); + return ees; +} +/** + * Retrieve all of the currently enabled Cornerstone elements + * + * @return {EnabledElement[]} An Array of Cornerstone enabledElement Objects + * @memberof EnabledElements + */ + +function getEnabledElements() { + return enabledElements; +} + +/***/ }), + +/***/ "./events.js": +/*!*******************!*\ + !*** ./events.js ***! + \*******************/ +/*! exports provided: default, events */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "events", function() { return events; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var EVENTS = { + NEW_IMAGE: 'cornerstonenewimage', + INVALIDATED: 'cornerstoneinvalidated', + PRE_RENDER: 'cornerstoneprerender', + IMAGE_CACHE_MAXIMUM_SIZE_CHANGED: 'cornerstoneimagecachemaximumsizechanged', + IMAGE_CACHE_PROMISE_REMOVED: 'cornerstoneimagecachepromiseremoved', + IMAGE_CACHE_FULL: 'cornerstoneimagecachefull', + IMAGE_CACHE_CHANGED: 'cornerstoneimagecachechanged', + WEBGL_TEXTURE_REMOVED: 'cornerstonewebgltextureremoved', + WEBGL_TEXTURE_CACHE_FULL: 'cornerstonewebgltexturecachefull', + IMAGE_LOADED: 'cornerstoneimageloaded', + IMAGE_LOAD_FAILED: 'cornerstoneimageloadfailed', + ELEMENT_RESIZED: 'cornerstoneelementresized', + IMAGE_RENDERED: 'cornerstoneimagerendered', + LAYER_ADDED: 'cornerstonelayeradded', + LAYER_REMOVED: 'cornerstonelayerremoved', + ACTIVE_LAYER_CHANGED: 'cornerstoneactivelayerchanged', + ELEMENT_DISABLED: 'cornerstoneelementdisabled', + ELEMENT_ENABLED: 'cornerstoneelementenabled' +}; +/* harmony default export */ __webpack_exports__["default"] = (EVENTS); +/** + * EventTarget - Provides the [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) interface + * + * @class + * @memberof Polyfills + */ + +var EventTarget = +/*#__PURE__*/ +function () { + function EventTarget() { + _classCallCheck(this, EventTarget); + + this.listeners = {}; + this.namespaces = {}; + } + + _createClass(EventTarget, [{ + key: "addEventNamespaceListener", + value: function addEventNamespaceListener(type, callback) { + if (type.indexOf('.') <= 0) { + return; + } + + this.namespaces[type] = callback; + this.addEventListener(type.split('.')[0], callback); + } + }, { + key: "removeEventNamespaceListener", + value: function removeEventNamespaceListener(type) { + if (type.indexOf('.') <= 0 || !this.namespaces[type]) { + return; + } + + this.removeEventListener(type.split('.')[0], this.namespaces[type]); + delete this.namespaces[type]; + } + }, { + key: "addEventListener", + value: function addEventListener(type, callback) { + // Check if it is an event namespace + if (type.indexOf('.') > 0) { + this.addEventNamespaceListener(type, callback); + return; + } + + if (!(type in this.listeners)) { + this.listeners[type] = []; + } + + this.listeners[type].push(callback); + } + }, { + key: "removeEventListener", + value: function removeEventListener(type, callback) { + // Check if it is an event namespace + if (type.indexOf('.') > 0) { + this.removeEventNamespaceListener(type); + return; + } + + if (!(type in this.listeners)) { + return; + } + + var stack = this.listeners[type]; + + for (var i = 0, l = stack.length; i < l; i++) { + if (stack[i] === callback) { + stack.splice(i, 1); + return; + } + } + } + }, { + key: "dispatchEvent", + value: function dispatchEvent(event) { + if (!(event.type in this.listeners)) { + return true; + } + + var stack = this.listeners[event.type]; + + for (var i = 0, l = stack.length; i < l; i++) { + stack[i].call(this, event); + } + + return !event.defaultPrevented; + } + }]); + + return EventTarget; +}(); + +var events = new EventTarget(); + +/***/ }), + +/***/ "./falseColorMapping.js": +/*!******************************!*\ + !*** ./falseColorMapping.js ***! + \******************************/ +/*! exports provided: convertImageToFalseColorImage, convertToFalseColorImage, restoreImage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertImageToFalseColorImage", function() { return convertImageToFalseColorImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToFalseColorImage", function() { return convertToFalseColorImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "restoreImage", function() { return restoreImage; }); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pixelDataToFalseColorData.js */ "./pixelDataToFalseColorData.js"); +/* harmony import */ var _colors_colormap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./colors/colormap.js */ "./colors/colormap.js"); + + + +/** + * Retrieves the minimum and maximum pixel values from an Array of pixel data + * + * @param {Array} pixelData The input pixel data array + * + * @returns {{minPixelValue: Number, maxPixelValue: Number}} The minimum and maximum pixel values in the input Array + */ + +function getPixelValues(pixelData) { + var minPixelValue = Number.MAX_VALUE; + var maxPixelValue = Number.MIN_VALUE; + var len = pixelData.length; + var pixel; + + for (var i = 0; i < len; i++) { + pixel = pixelData[i]; + minPixelValue = minPixelValue < pixel ? minPixelValue : pixel; + maxPixelValue = maxPixelValue > pixel ? maxPixelValue : pixel; + } + + return { + minPixelValue: minPixelValue, + maxPixelValue: maxPixelValue + }; +} +/** + * Retrieve a function that will allow an image object to be reset to its original form + * after a false color mapping transformation + * + * @param {Image} image A Cornerstone Image Object + * + * @return {Function} A function for resetting an Image Object to its original form + */ + + +function getRestoreImageMethod(image) { + if (image.restore) { + return image.restore; + } + + var color = image.color; + var rgba = image.rgba; + var cachedLut = image.cachedLut; + var slope = image.slope; + var windowWidth = image.windowWidth; + var windowCenter = image.windowCenter; + var minPixelValue = image.minPixelValue; + var maxPixelValue = image.maxPixelValue; + return function () { + image.color = color; + image.rgba = rgba; + image.cachedLut = cachedLut; + image.slope = slope; + image.windowWidth = windowWidth; + image.windowCenter = windowCenter; + image.minPixelValue = minPixelValue; + image.maxPixelValue = maxPixelValue; + + if (image.origPixelData) { + var pixelData = image.origPixelData; + + image.getPixelData = function () { + return pixelData; + }; + } // Remove some attributes added by false color mapping + + + image.origPixelData = undefined; + image.colormapId = undefined; + image.falseColor = undefined; + }; +} // +// Then we need to make sure it will be converted into a colormap object if it's as string. + +/** + * User can pass a colormap or its id as string to some of these public functions. + * Then we need to make sure it will be converted into a colormap object if it's a string. + * + * @param {*} colormap A colormap ID or Object + * @return {*} The colormap + */ + + +function ensuresColormap(colormap) { + if (colormap && typeof colormap === 'string') { + colormap = Object(_colors_colormap_js__WEBPACK_IMPORTED_MODULE_2__["getColormap"])(colormap); + } + + return colormap; +} +/** + * Restores a false color image to its original version + * + * @param {Image} image A Cornerstone Image Object + * @returns {Boolean} True if the image object had a valid restore function, which was run. Otherwise, false. + */ + + +function restoreImage(image) { + if (image.restore && typeof image.restore === 'function') { + image.restore(); + return true; + } + + return false; +} +/** + * Convert an image to a false color image + * + * @param {Image} image A Cornerstone Image Object + * @param {String|Object} colormap - it can be a colormap object or a colormap id (string) + * + * @returns {Boolean} - Whether or not the image has been converted to a false color image + */ + + +function convertImageToFalseColorImage(image, colormap) { + if (image.color && !image.falseColor) { + throw new Error('Color transforms are not implemented yet'); + } // User can pass a colormap id or a colormap object + + + colormap = ensuresColormap(colormap); + var colormapId = colormap.getId(); // Doesn't do anything if colormapId hasn't changed + + if (image.colormapId === colormapId) { + // It has already being converted into a false color image + // Using the colormapId passed as parameter + return false; + } // Restore the image attributes updated when converting to a false color image + + + restoreImage(image); // Convert the image to a false color image + + if (colormapId) { + var minPixelValue = image.minPixelValue || 0; + var maxPixelValue = image.maxPixelValue || 255; + image.restore = getRestoreImageMethod(image); + var lookupTable = colormap.createLookupTable(); + lookupTable.setTableRange(minPixelValue, maxPixelValue); // Update the pixel data and render the new image + + Object(_pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, lookupTable); // Update min and max pixel values + + var pixelValues = getPixelValues(image.getPixelData()); + image.minPixelValue = pixelValues.minPixelValue; + image.maxPixelValue = pixelValues.maxPixelValue; + image.windowWidth = 255; + image.windowCenter = 128; // Cache the last colormapId used for performance + // Then it doesn't need to be re-rendered on next + // Time if the user hasn't updated it + + image.colormapId = colormapId; + } // Return `true` to tell the caller that the image has got updated + + + return true; +} +/** + * Convert the image of a element to a false color image + * + * @param {HTMLElement} element The Cornerstone element + * @param {*} colormap - it can be a colormap object or a colormap id (string) + * + * @returns {void} + */ + + +function convertToFalseColorImage(element, colormap) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + return convertImageToFalseColorImage(enabledElement.image, colormap); +} + + + +/***/ }), + +/***/ "./fitToWindow.js": +/*!************************!*\ + !*** ./fitToWindow.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); +/* harmony import */ var _internal_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getImageFitScale.js */ "./internal/getImageFitScale.js"); + + + +/** + * Adjusts an image's scale and translation so the image is centered and all pixels + * in the image are viewable. + * + * @param {HTMLElement} element The Cornerstone element to update + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var image = enabledElement.image; // The new scale is the minimum of the horizontal and vertical scale values + + enabledElement.viewport.scale = Object(_internal_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image, enabledElement.viewport.rotation).scaleFactor; + enabledElement.viewport.translation.x = 0; + enabledElement.viewport.translation.y = 0; + Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); +}); + +/***/ }), + +/***/ "./generateUUID.js": +/*!*************************!*\ + !*** ./generateUUID.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** +* Generates a UUID for the enabledElement. +* +* @return {String} the UUID. +*/ +/* harmony default export */ __webpack_exports__["default"] = (function () { + // https://stackoverflow.com/a/8809472/9208320 Public Domain/MIT + + /* eslint no-bitwise: ["error", { "allow": ["&","|"] }] */ + var d = new Date().getTime(); + + if (typeof performance !== 'undefined' && typeof performance.now === 'function') { + d += performance.now(); // Use high-precision timer if available + } + + return 'x.x.x.x.x.x.xxxx.xxx.x.x.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = (d + Math.random() * 16) % 16 | 0; + d = Math.floor(d / 16); + return (c === 'x' ? r : r & 0x3 | 0x8).toString(16); + }); +}); + +/***/ }), + +/***/ "./getDefaultViewportForImage.js": +/*!***************************************!*\ + !*** ./getDefaultViewportForImage.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); + + +/** + * Returns a default viewport for display the specified image on the specified + * enabled element. The default viewport is fit to window + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {Image} image A Cornerstone Image Object + * + * @returns {Viewport} The default viewport for the image + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, image) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + return Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement.canvas, image); +}); + +/***/ }), + +/***/ "./getImage.js": +/*!*********************!*\ + !*** ./getImage.js ***! + \*********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); + +/** + * Returns the currently displayed image for an element or undefined if no image has + * been displayed yet + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @returns {Image} The Cornerstone Image Object displayed in this element + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + return enabledElement.image; +}); + +/***/ }), + +/***/ "./getPixels.js": +/*!**********************!*\ + !*** ./getPixels.js ***! + \**********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getStoredPixels.js */ "./getStoredPixels.js"); +/* harmony import */ var _internal_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getModalityLUT.js */ "./internal/getModalityLUT.js"); + + + +/** + * Retrieves an array of pixels from a rectangular region with modality LUT transformation applied + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {Number} x The x coordinate of the top left corner of the sampling rectangle in image coordinates + * @param {Number} y The y coordinate of the top left corner of the sampling rectangle in image coordinates + * @param {Number} width The width of the of the sampling rectangle in image coordinates + * @param {Number} height The height of the of the sampling rectangle in image coordinates + * @returns {Array} The modality pixel value of the pixels in the sampling rectangle + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, x, y, width, height) { + var storedPixels = Object(_getStoredPixels_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, x, y, width, height); + var ee = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var mlutfn = Object(_internal_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_2__["default"])(ee.image.slope, ee.image.intercept, ee.viewport.modalityLUT); + return storedPixels.map(mlutfn); +}); + +/***/ }), + +/***/ "./getStoredPixels.js": +/*!****************************!*\ + !*** ./getStoredPixels.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); + +/** + * Retrieves an array of stored pixel values from a rectangular region of an image + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {Number} x The x coordinate of the top left corner of the sampling rectangle in image coordinates + * @param {Number} y The y coordinate of the top left corner of the sampling rectangle in image coordinates + * @param {Number} width The width of the of the sampling rectangle in image coordinates + * @param {Number} height The height of the of the sampling rectangle in image coordinates + * @returns {Array} The stored pixel value of the pixels in the sampling rectangle + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, x, y, width, height) { + if (element === undefined) { + throw new Error('getStoredPixels: parameter element must not be undefined'); + } + + x = Math.round(x); + y = Math.round(y); + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var storedPixels = []; + var index = 0; + var pixelData = enabledElement.image.getPixelData(); + + for (var row = 0; row < height; row++) { + for (var column = 0; column < width; column++) { + var spIndex = (row + y) * enabledElement.image.columns + (column + x); + storedPixels[index++] = pixelData[spIndex]; + } + } + + return storedPixels; +}); + +/***/ }), + +/***/ "./getViewport.js": +/*!************************!*\ + !*** ./getViewport.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); + +/** + * Retrieves the viewport for the specified enabled element + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @returns {Viewport|undefined} The Cornerstone Viewport settings for this element, if they exist. Otherwise, undefined + * @memberof ViewportSettings + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var viewport = enabledElement.viewport; + + if (viewport === undefined) { + return; + } // Return a copy of the viewport + + + return Object.assign({}, viewport); +}); + +/***/ }), + +/***/ "./imageCache.js": +/*!***********************!*\ + !*** ./imageCache.js ***! + \***********************/ +/*! exports provided: cachedImages, setMaximumSizeBytes, putImageLoadObject, getImageLoadObject, removeImageLoadObject, getCacheInfo, purgeCache, changeImageIdCacheSize, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cachedImages", function() { return cachedImages; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMaximumSizeBytes", function() { return setMaximumSizeBytes; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "putImageLoadObject", function() { return putImageLoadObject; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getImageLoadObject", function() { return getImageLoadObject; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeImageLoadObject", function() { return removeImageLoadObject; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCacheInfo", function() { return getCacheInfo; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "purgeCache", function() { return purgeCache; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "changeImageIdCacheSize", function() { return changeImageIdCacheSize; }); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events.js */ "./events.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); + + +/** + * This module deals with caching images + * @module ImageCache + */ + +var maximumSizeInBytes = 1024 * 1024 * 1024; // 1 GB + +var cacheSizeInBytes = 0; // Dictionary of imageId to cachedImage objects + +var imageCacheDict = {}; // Array of cachedImage objects + +var cachedImages = []; +/** Sets the maximum size of cache and purges cache contents if necessary. + * + * @param {number} numBytes The maximun size that the cache should occupy. + * @returns {void} + */ + +function setMaximumSizeBytes(numBytes) { + if (numBytes === undefined) { + throw new Error('setMaximumSizeBytes: parameter numBytes must not be undefined'); + } + + if (numBytes.toFixed === undefined) { + throw new Error('setMaximumSizeBytes: parameter numBytes must be a number'); + } + + maximumSizeInBytes = numBytes; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_MAXIMUM_SIZE_CHANGED); + purgeCacheIfNecessary(); +} +/** + * Purges the cache if size exceeds maximum + * @returns {void} + */ + +function purgeCacheIfNecessary() { + // If max cache size has not been exceeded, do nothing + if (cacheSizeInBytes <= maximumSizeInBytes) { + return; + } // Cache size has been exceeded, create list of images sorted by timeStamp + // So we can purge the least recently used image + + + function compare(a, b) { + if (a.timeStamp > b.timeStamp) { + return -1; + } + + if (a.timeStamp < b.timeStamp) { + return 1; + } + + return 0; + } + + cachedImages.sort(compare); // Remove images as necessary) + + while (cacheSizeInBytes > maximumSizeInBytes) { + var lastCachedImage = cachedImages[cachedImages.length - 1]; + var imageId = lastCachedImage.imageId; + removeImageLoadObject(imageId); + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_PROMISE_REMOVED, { + imageId: imageId + }); + } + + var cacheInfo = getCacheInfo(); + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_FULL, cacheInfo); +} +/** + * Puts a new image loader into the cache + * + * @param {string} imageId ImageId of the image loader + * @param {Object} imageLoadObject The object that is loading or loaded the image + * @returns {void} + */ + + +function putImageLoadObject(imageId, imageLoadObject) { + if (imageId === undefined) { + throw new Error('putImageLoadObject: imageId must not be undefined'); + } + + if (imageLoadObject.promise === undefined) { + throw new Error('putImageLoadObject: imageLoadObject.promise must not be undefined'); + } + + if (imageCacheDict.hasOwnProperty(imageId) === true) { + throw new Error('putImageLoadObject: imageId already in cache'); + } + + if (imageLoadObject.cancelFn && typeof imageLoadObject.cancelFn !== 'function') { + throw new Error('putImageLoadObject: imageLoadObject.cancelFn must be a function'); + } + + var cachedImage = { + loaded: false, + imageId: imageId, + sharedCacheKey: undefined, + // The sharedCacheKey for this imageId. undefined by default + imageLoadObject: imageLoadObject, + timeStamp: Date.now(), + sizeInBytes: 0 + }; + imageCacheDict[imageId] = cachedImage; + cachedImages.push(cachedImage); + imageLoadObject.promise.then(function (image) { + if (cachedImages.indexOf(cachedImage) === -1) { + // If the image has been purged before being loaded, we stop here. + return; + } + + cachedImage.loaded = true; + cachedImage.image = image; + + if (image.sizeInBytes === undefined) { + throw new Error('putImageLoadObject: image.sizeInBytes must not be undefined'); + } + + if (image.sizeInBytes.toFixed === undefined) { + throw new Error('putImageLoadObject: image.sizeInBytes is not a number'); + } + + cachedImage.sizeInBytes = image.sizeInBytes; + cacheSizeInBytes += cachedImage.sizeInBytes; + var eventDetails = { + action: 'addImage', + image: cachedImage + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails); + cachedImage.sharedCacheKey = image.sharedCacheKey; + purgeCacheIfNecessary(); + }, function () { + var cachedImage = imageCacheDict[imageId]; + cachedImages.splice(cachedImages.indexOf(cachedImage), 1); + delete imageCacheDict[imageId]; + }); +} +/** + * Retuns the object that is loading a given imageId + * + * @param {string} imageId Image ID + * @returns {void} + */ + +function getImageLoadObject(imageId) { + if (imageId === undefined) { + throw new Error('getImageLoadObject: imageId must not be undefined'); + } + + var cachedImage = imageCacheDict[imageId]; + + if (cachedImage === undefined) { + return; + } // Bump time stamp for cached image + + + cachedImage.timeStamp = Date.now(); + return cachedImage.imageLoadObject; +} +/** + * Removes the image loader associated with a given Id from the cache + * + * @param {string} imageId Image ID + * @returns {void} + */ + +function removeImageLoadObject(imageId) { + if (imageId === undefined) { + throw new Error('removeImageLoadObject: imageId must not be undefined'); + } + + var cachedImage = imageCacheDict[imageId]; + + if (cachedImage === undefined) { + throw new Error('removeImageLoadObject: imageId was not present in imageCache'); + } + + cachedImages.splice(cachedImages.indexOf(cachedImage), 1); + cacheSizeInBytes -= cachedImage.sizeInBytes; + var eventDetails = { + action: 'deleteImage', + image: cachedImage + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails); + decache(cachedImage.imageLoadObject); + delete imageCacheDict[imageId]; +} +/** + * @typedef {Object} CacheInformation + * @property {number} maximumSizeInBytes The maximum size of the cache in bytes + * @property {number} cacheSizeInBytes Currently occupied space in the cache in bytes + * @property {number} numberOfImagesCached Number of ImageLoaders in the cache + * @returns {void} + */ + +/** + * Gets the current state of the cache + * @returns {void} + */ + +function getCacheInfo() { + return { + maximumSizeInBytes: maximumSizeInBytes, + cacheSizeInBytes: cacheSizeInBytes, + numberOfImagesCached: cachedImages.length + }; +} // This method should only be called by `removeImageLoadObject` because it's +// The one that knows how to deal with shared cache keys and cache size. + +/** + * INTERNAL: Removes and ImageLoader from the cache + * + * @param {Object} imageLoadObject Image Loader Object to remove + * @returns {void} + */ + +function decache(imageLoadObject) { + imageLoadObject.promise.then(function () { + if (imageLoadObject.decache) { + imageLoadObject.decache(); + } + }, function () { + if (imageLoadObject.decache) { + imageLoadObject.decache(); + } + }); +} +/** + * Removes all images from cache + * @returns {void} + */ + + +function purgeCache() { + while (cachedImages.length > 0) { + var removedCachedImage = cachedImages[0]; + removeImageLoadObject(removedCachedImage.imageId); + } +} +/** + * Updates the space than an image is using in the cache + * + * @param {string} imageId Image ID + * @param {number} newCacheSize New image size + * @returns {void} + */ + +function changeImageIdCacheSize(imageId, newCacheSize) { + var cacheEntry = imageCacheDict[imageId]; + + if (cacheEntry) { + cacheEntry.imageLoadObject.promise.then(function (image) { + var cacheSizeDifference = newCacheSize - image.sizeInBytes; + image.sizeInBytes = newCacheSize; + cacheEntry.sizeInBytes = newCacheSize; + cacheSizeInBytes += cacheSizeDifference; + var eventDetails = { + action: 'changeImageSize', + image: image + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].IMAGE_CACHE_CHANGED, eventDetails); + }); + } +} +/* harmony default export */ __webpack_exports__["default"] = ({ + imageCache: imageCacheDict, + cachedImages: cachedImages, + setMaximumSizeBytes: setMaximumSizeBytes, + putImageLoadObject: putImageLoadObject, + getImageLoadObject: getImageLoadObject, + removeImageLoadObject: removeImageLoadObject, + getCacheInfo: getCacheInfo, + purgeCache: purgeCache, + changeImageIdCacheSize: changeImageIdCacheSize +}); + +/***/ }), + +/***/ "./imageLoader.js": +/*!************************!*\ + !*** ./imageLoader.js ***! + \************************/ +/*! exports provided: loadImage, loadAndCacheImage, registerImageLoader, registerUnknownImageLoader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadImage", function() { return loadImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadAndCacheImage", function() { return loadAndCacheImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerImageLoader", function() { return registerImageLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerUnknownImageLoader", function() { return registerUnknownImageLoader; }); +/* harmony import */ var _imageCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageCache.js */ "./imageCache.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events.js */ "./events.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); + + + +/** + * This module deals with ImageLoaders, loading images and caching images + * @module ImageLoader + */ + +var imageLoaders = {}; +var unknownImageLoader; +/** + * Load an image using a registered Cornerstone Image Loader. + * + * The image loader that is used will be + * determined by the image loader scheme matching against the imageId. + * + * @param {String} imageId A Cornerstone Image Object's imageId + * @param {Object} [options] Options to be passed to the Image Loader + * + * @returns {ImageLoadObject} An Object which can be used to act after an image is loaded or loading fails + * @memberof ImageLoader + */ + +function loadImageFromImageLoader(imageId, options) { + var colonIndex = imageId.indexOf(':'); + var scheme = imageId.substring(0, colonIndex); + var loader = imageLoaders[scheme]; + + if (loader === undefined || loader === null) { + if (unknownImageLoader !== undefined) { + return unknownImageLoader(imageId); + } + + throw new Error('loadImageFromImageLoader: no image loader for imageId'); + } + + var imageLoadObject = loader(imageId, options); // Broadcast an image loaded event once the image is loaded + + imageLoadObject.promise.then(function (image) { + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_1__["events"], _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].IMAGE_LOADED, { + image: image + }); + }, function (error) { + var errorObject = { + imageId: imageId, + error: error + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_1__["events"], _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].IMAGE_LOAD_FAILED, errorObject); + }); + return imageLoadObject; +} +/** + * Loads an image given an imageId and optional priority and returns a promise which will resolve to + * the loaded image object or fail if an error occurred. The loaded image is not stored in the cache. + * + * @param {String} imageId A Cornerstone Image Object's imageId + * @param {Object} [options] Options to be passed to the Image Loader + * + * @returns {ImageLoadObject} An Object which can be used to act after an image is loaded or loading fails + * @memberof ImageLoader + */ + + +function loadImage(imageId, options) { + if (imageId === undefined) { + throw new Error('loadImage: parameter imageId must not be undefined'); + } + + var imageLoadObject = Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["getImageLoadObject"])(imageId); + + if (imageLoadObject !== undefined) { + return imageLoadObject.promise; + } + + return loadImageFromImageLoader(imageId, options).promise; +} // + +/** + * Loads an image given an imageId and optional priority and returns a promise which will resolve to + * the loaded image object or fail if an error occurred. The image is stored in the cache. + * + * @param {String} imageId A Cornerstone Image Object's imageId + * @param {Object} [options] Options to be passed to the Image Loader + * + * @returns {ImageLoadObject} Image Loader Object + * @memberof ImageLoader + */ + +function loadAndCacheImage(imageId, options) { + if (imageId === undefined) { + throw new Error('loadAndCacheImage: parameter imageId must not be undefined'); + } + + var imageLoadObject = Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["getImageLoadObject"])(imageId); + + if (imageLoadObject !== undefined) { + return imageLoadObject.promise; + } + + imageLoadObject = loadImageFromImageLoader(imageId, options); + Object(_imageCache_js__WEBPACK_IMPORTED_MODULE_0__["putImageLoadObject"])(imageId, imageLoadObject); + return imageLoadObject.promise; +} +/** + * Registers an imageLoader plugin with cornerstone for the specified scheme + * + * @param {String} scheme The scheme to use for this image loader (e.g. 'dicomweb', 'wadouri', 'http') + * @param {Function} imageLoader A Cornerstone Image Loader function + * @returns {void} + * @memberof ImageLoader + */ + +function registerImageLoader(scheme, imageLoader) { + imageLoaders[scheme] = imageLoader; +} +/** + * Registers a new unknownImageLoader and returns the previous one + * + * @param {Function} imageLoader A Cornerstone Image Loader + * + * @returns {Function|Undefined} The previous Unknown Image Loader + * @memberof ImageLoader + */ + +function registerUnknownImageLoader(imageLoader) { + var oldImageLoader = unknownImageLoader; + unknownImageLoader = imageLoader; + return oldImageLoader; +} + +/***/ }), + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/*! exports provided: drawImage, generateLut, getDefaultViewport, setDefaultViewport, requestAnimationFrame, storedPixelDataToCanvasImageData, storedColorPixelDataToCanvasImageData, storedPixelDataToCanvasImageDataColorLUT, storedPixelDataToCanvasImageDataPseudocolorLUT, internal, renderLabelMapImage, renderPseudoColorImage, renderColorImage, renderGrayscaleImage, renderWebImage, renderToCanvas, canvasToPixel, disable, displayImage, draw, drawInvalidated, enable, getElementData, removeElementData, getEnabledElement, addEnabledElement, getEnabledElementsByImageId, getEnabledElements, addLayer, removeLayer, getLayer, getLayers, getVisibleLayers, setActiveLayer, getActiveLayer, purgeLayers, setLayerImage, fitToWindow, getDefaultViewportForImage, getImage, getPixels, getStoredPixels, getViewport, loadImage, loadAndCacheImage, registerImageLoader, registerUnknownImageLoader, invalidate, invalidateImageId, pageToPixel, pixelToCanvas, reset, resize, setToPixelCoordinateSystem, setViewport, updateImage, pixelDataToFalseColorData, rendering, imageCache, metaData, webGL, colors, convertImageToFalseColorImage, convertToFalseColorImage, restoreImage, EVENTS, events, triggerEvent, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events.js */ "./events.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EVENTS", function() { return _events_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "events", function() { return _events_js__WEBPACK_IMPORTED_MODULE_0__["events"]; }); + +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEnabledElement", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addEnabledElement", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["addEnabledElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEnabledElementsByImageId", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElementsByImageId"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEnabledElements", function() { return _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElements"]; }); + +/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layers.js */ "./layers.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["addLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["removeLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayers"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getVisibleLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getVisibleLayers"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setActiveLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["setActiveLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getActiveLayer", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["getActiveLayer"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "purgeLayers", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["purgeLayers"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setLayerImage", function() { return _layers_js__WEBPACK_IMPORTED_MODULE_2__["setLayerImage"]; }); + +/* harmony import */ var _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./falseColorMapping.js */ "./falseColorMapping.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertImageToFalseColorImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertImageToFalseColorImage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertToFalseColorImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertToFalseColorImage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "restoreImage", function() { return _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["restoreImage"]; }); + +/* harmony import */ var _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./enabledElementData.js */ "./enabledElementData.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementData", function() { return _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["getElementData"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeElementData", function() { return _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["removeElementData"]; }); + +/* harmony import */ var _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./imageLoader.js */ "./imageLoader.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "loadImage", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadImage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "loadAndCacheImage", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadAndCacheImage"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerImageLoader", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerImageLoader"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerUnknownImageLoader", function() { return _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerUnknownImageLoader"]; }); + +/* harmony import */ var _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./canvasToPixel.js */ "./canvasToPixel.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "canvasToPixel", function() { return _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./colors/index.js */ "./colors/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "colors", function() { return _colors_index_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _disable_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./disable.js */ "./disable.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "disable", function() { return _disable_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _displayImage_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./displayImage.js */ "./displayImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "displayImage", function() { return _displayImage_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./draw.js */ "./draw.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return _draw_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawImage", function() { return _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./drawInvalidated.js */ "./drawInvalidated.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawInvalidated", function() { return _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _enable_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./enable.js */ "./enable.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "enable", function() { return _enable_js__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _fitToWindow_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./fitToWindow.js */ "./fitToWindow.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fitToWindow", function() { return _fitToWindow_js__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./internal/generateLut.js */ "./internal/generateLut.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "generateLut", function() { return _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultViewport", function() { return _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./getDefaultViewportForImage.js */ "./getDefaultViewportForImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultViewportForImage", function() { return _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony import */ var _getImage_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./getImage.js */ "./getImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getImage", function() { return _getImage_js__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _getPixels_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./getPixels.js */ "./getPixels.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPixels", function() { return _getPixels_js__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/* harmony import */ var _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./getStoredPixels.js */ "./getStoredPixels.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getStoredPixels", function() { return _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony import */ var _getViewport_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./getViewport.js */ "./getViewport.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getViewport", function() { return _getViewport_js__WEBPACK_IMPORTED_MODULE_21__["default"]; }); + +/* harmony import */ var _imageCache_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./imageCache.js */ "./imageCache.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "imageCache", function() { return _imageCache_js__WEBPACK_IMPORTED_MODULE_22__["default"]; }); + +/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./internal/index.js */ "./internal/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return _internal_index_js__WEBPACK_IMPORTED_MODULE_23__["default"]; }); + +/* harmony import */ var _invalidate_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./invalidate.js */ "./invalidate.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "invalidate", function() { return _invalidate_js__WEBPACK_IMPORTED_MODULE_24__["default"]; }); + +/* harmony import */ var _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./invalidateImageId.js */ "./invalidateImageId.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "invalidateImageId", function() { return _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_25__["default"]; }); + +/* harmony import */ var _metaData_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./metaData.js */ "./metaData.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "metaData", function() { return _metaData_js__WEBPACK_IMPORTED_MODULE_26__["default"]; }); + +/* harmony import */ var _pageToPixel_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./pageToPixel.js */ "./pageToPixel.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pageToPixel", function() { return _pageToPixel_js__WEBPACK_IMPORTED_MODULE_27__["default"]; }); + +/* harmony import */ var _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./pixelDataToFalseColorData.js */ "./pixelDataToFalseColorData.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pixelDataToFalseColorData", function() { return _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_28__["default"]; }); + +/* harmony import */ var _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./pixelToCanvas.js */ "./pixelToCanvas.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pixelToCanvas", function() { return _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_29__["default"]; }); + +/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./rendering/renderColorImage.js */ "./rendering/renderColorImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderColorImage", function() { return _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_30__["renderColorImage"]; }); + +/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderGrayscaleImage", function() { return _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_31__["renderGrayscaleImage"]; }); + +/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderLabelMapImage", function() { return _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_32__["renderLabelMapImage"]; }); + +/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderPseudoColorImage", function() { return _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_33__["renderPseudoColorImage"]; }); + +/* harmony import */ var _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./rendering/renderToCanvas.js */ "./rendering/renderToCanvas.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderToCanvas", function() { return _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_34__["default"]; }); + +/* harmony import */ var _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./rendering/renderWebImage.js */ "./rendering/renderWebImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderWebImage", function() { return _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_35__["renderWebImage"]; }); + +/* harmony import */ var _rendering_index_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./rendering/index.js */ "./rendering/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rendering", function() { return _rendering_index_js__WEBPACK_IMPORTED_MODULE_36__["default"]; }); + +/* harmony import */ var _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./internal/requestAnimationFrame.js */ "./internal/requestAnimationFrame.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "requestAnimationFrame", function() { return _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_37__["default"]; }); + +/* harmony import */ var _reset_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./reset.js */ "./reset.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reset", function() { return _reset_js__WEBPACK_IMPORTED_MODULE_38__["default"]; }); + +/* harmony import */ var _resize_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./resize.js */ "./resize.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resize", function() { return _resize_js__WEBPACK_IMPORTED_MODULE_39__["default"]; }); + +/* harmony import */ var _internal_setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./internal/setDefaultViewport.js */ "./internal/setDefaultViewport.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setDefaultViewport", function() { return _internal_setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_40__["default"]; }); + +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToPixelCoordinateSystem", function() { return _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_41__["default"]; }); + +/* harmony import */ var _setViewport_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./setViewport.js */ "./setViewport.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setViewport", function() { return _setViewport_js__WEBPACK_IMPORTED_MODULE_42__["default"]; }); + +/* harmony import */ var _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./internal/storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedColorPixelDataToCanvasImageData", function() { return _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_43__["default"]; }); + +/* harmony import */ var _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./internal/storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedPixelDataToCanvasImageData", function() { return _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_44__["default"]; }); + +/* harmony import */ var _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./internal/storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedPixelDataToCanvasImageDataColorLUT", function() { return _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_45__["default"]; }); + +/* harmony import */ var _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "storedPixelDataToCanvasImageDataPseudocolorLUT", function() { return _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_46__["default"]; }); + +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "triggerEvent", function() { return _triggerEvent_js__WEBPACK_IMPORTED_MODULE_47__["default"]; }); + +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "updateImage", function() { return _updateImage_js__WEBPACK_IMPORTED_MODULE_48__["default"]; }); + +/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./webgl/index.js */ "./webgl/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "webGL", function() { return _webgl_index_js__WEBPACK_IMPORTED_MODULE_49__["default"]; }); + +// Internal (some of these are from old internal/legacy expose) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Rendering + +/** + * @module PixelCoordinateSystem + */ + +/** + * @module ViewportSettings + */ + +var cornerstone = { + drawImage: _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_11__["default"], + generateLut: _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_15__["default"], + getDefaultViewport: _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_16__["default"], + requestAnimationFrame: _internal_requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_37__["default"], + storedPixelDataToCanvasImageData: _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_44__["default"], + storedColorPixelDataToCanvasImageData: _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_43__["default"], + storedPixelDataToCanvasImageDataColorLUT: _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_45__["default"], + storedPixelDataToCanvasImageDataPseudocolorLUT: _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_46__["default"], + internal: _internal_index_js__WEBPACK_IMPORTED_MODULE_23__["default"], + renderLabelMapImage: _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_32__["renderLabelMapImage"], + renderPseudoColorImage: _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_33__["renderPseudoColorImage"], + renderColorImage: _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_30__["renderColorImage"], + renderGrayscaleImage: _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_31__["renderGrayscaleImage"], + renderWebImage: _rendering_renderWebImage_js__WEBPACK_IMPORTED_MODULE_35__["renderWebImage"], + renderToCanvas: _rendering_renderToCanvas_js__WEBPACK_IMPORTED_MODULE_34__["default"], + canvasToPixel: _canvasToPixel_js__WEBPACK_IMPORTED_MODULE_6__["default"], + disable: _disable_js__WEBPACK_IMPORTED_MODULE_8__["default"], + displayImage: _displayImage_js__WEBPACK_IMPORTED_MODULE_9__["default"], + draw: _draw_js__WEBPACK_IMPORTED_MODULE_10__["default"], + drawInvalidated: _drawInvalidated_js__WEBPACK_IMPORTED_MODULE_12__["default"], + enable: _enable_js__WEBPACK_IMPORTED_MODULE_13__["default"], + getElementData: _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["getElementData"], + removeElementData: _enabledElementData_js__WEBPACK_IMPORTED_MODULE_4__["removeElementData"], + getEnabledElement: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"], + addEnabledElement: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["addEnabledElement"], + getEnabledElementsByImageId: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElementsByImageId"], + getEnabledElements: _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElements"], + addLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["addLayer"], + removeLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["removeLayer"], + getLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayer"], + getLayers: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getLayers"], + getVisibleLayers: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getVisibleLayers"], + setActiveLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["setActiveLayer"], + getActiveLayer: _layers_js__WEBPACK_IMPORTED_MODULE_2__["getActiveLayer"], + purgeLayers: _layers_js__WEBPACK_IMPORTED_MODULE_2__["purgeLayers"], + setLayerImage: _layers_js__WEBPACK_IMPORTED_MODULE_2__["setLayerImage"], + fitToWindow: _fitToWindow_js__WEBPACK_IMPORTED_MODULE_14__["default"], + getDefaultViewportForImage: _getDefaultViewportForImage_js__WEBPACK_IMPORTED_MODULE_17__["default"], + setDefaultViewport: _internal_setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_40__["default"], + getImage: _getImage_js__WEBPACK_IMPORTED_MODULE_18__["default"], + getPixels: _getPixels_js__WEBPACK_IMPORTED_MODULE_19__["default"], + getStoredPixels: _getStoredPixels_js__WEBPACK_IMPORTED_MODULE_20__["default"], + getViewport: _getViewport_js__WEBPACK_IMPORTED_MODULE_21__["default"], + loadImage: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadImage"], + loadAndCacheImage: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["loadAndCacheImage"], + registerImageLoader: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerImageLoader"], + registerUnknownImageLoader: _imageLoader_js__WEBPACK_IMPORTED_MODULE_5__["registerUnknownImageLoader"], + invalidate: _invalidate_js__WEBPACK_IMPORTED_MODULE_24__["default"], + invalidateImageId: _invalidateImageId_js__WEBPACK_IMPORTED_MODULE_25__["default"], + pageToPixel: _pageToPixel_js__WEBPACK_IMPORTED_MODULE_27__["default"], + pixelToCanvas: _pixelToCanvas_js__WEBPACK_IMPORTED_MODULE_29__["default"], + reset: _reset_js__WEBPACK_IMPORTED_MODULE_38__["default"], + resize: _resize_js__WEBPACK_IMPORTED_MODULE_39__["default"], + setToPixelCoordinateSystem: _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_41__["default"], + setViewport: _setViewport_js__WEBPACK_IMPORTED_MODULE_42__["default"], + updateImage: _updateImage_js__WEBPACK_IMPORTED_MODULE_48__["default"], + pixelDataToFalseColorData: _pixelDataToFalseColorData_js__WEBPACK_IMPORTED_MODULE_28__["default"], + rendering: _rendering_index_js__WEBPACK_IMPORTED_MODULE_36__["default"], + imageCache: _imageCache_js__WEBPACK_IMPORTED_MODULE_22__["default"], + metaData: _metaData_js__WEBPACK_IMPORTED_MODULE_26__["default"], + webGL: _webgl_index_js__WEBPACK_IMPORTED_MODULE_49__["default"], + colors: _colors_index_js__WEBPACK_IMPORTED_MODULE_7__["default"], + convertImageToFalseColorImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertImageToFalseColorImage"], + convertToFalseColorImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["convertToFalseColorImage"], + restoreImage: _falseColorMapping_js__WEBPACK_IMPORTED_MODULE_3__["restoreImage"], + EVENTS: _events_js__WEBPACK_IMPORTED_MODULE_0__["default"], + events: _events_js__WEBPACK_IMPORTED_MODULE_0__["events"], + triggerEvent: _triggerEvent_js__WEBPACK_IMPORTED_MODULE_47__["default"] +}; + +/* harmony default export */ __webpack_exports__["default"] = (cornerstone); + +/***/ }), + +/***/ "./internal/calculateTransform.js": +/*!****************************************!*\ + !*** ./internal/calculateTransform.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transform.js */ "./internal/transform.js"); + +/** + * Calculate the transform for a Cornerstone enabled element + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element + * @param {Number} [scale] The viewport scale + * @return {Transform} The current transform + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, scale) { + var transform = new _transform_js__WEBPACK_IMPORTED_MODULE_0__["Transform"](); // Move to center of canvas + + transform.translate(enabledElement.canvas.width / 2, enabledElement.canvas.height / 2); // Apply the rotation before scaling for non square pixels + + var angle = enabledElement.viewport.rotation; + + if (angle !== 0) { + transform.rotate(angle * Math.PI / 180); + } // Apply the scale + + + var widthScale = enabledElement.viewport.scale; + var heightScale = enabledElement.viewport.scale; + var width = enabledElement.viewport.displayedArea.brhc.x - (enabledElement.viewport.displayedArea.tlhc.x - 1); + var height = enabledElement.viewport.displayedArea.brhc.y - (enabledElement.viewport.displayedArea.tlhc.y - 1); + + if (enabledElement.viewport.displayedArea.presentationSizeMode === 'NONE') { + if (enabledElement.image.rowPixelSpacing < enabledElement.image.columnPixelSpacing) { + widthScale *= enabledElement.image.columnPixelSpacing / enabledElement.image.rowPixelSpacing; + } else if (enabledElement.image.columnPixelSpacing < enabledElement.image.rowPixelSpacing) { + heightScale *= enabledElement.image.rowPixelSpacing / enabledElement.image.columnPixelSpacing; + } + } else { + // These should be good for "TRUE SIZE" and "MAGNIFY" + widthScale = enabledElement.viewport.displayedArea.columnPixelSpacing; + heightScale = enabledElement.viewport.displayedArea.rowPixelSpacing; + + if (enabledElement.viewport.displayedArea.presentationSizeMode === 'SCALE TO FIT') { + // Fit TRUE IMAGE image (width/height) to window + var verticalScale = enabledElement.canvas.height / (height * heightScale); + var horizontalScale = enabledElement.canvas.width / (width * widthScale); // Apply new scale + + widthScale = heightScale = Math.min(horizontalScale, verticalScale); + + if (enabledElement.viewport.displayedArea.rowPixelSpacing < enabledElement.viewport.displayedArea.columnPixelSpacing) { + widthScale *= enabledElement.viewport.displayedArea.columnPixelSpacing / enabledElement.viewport.displayedArea.rowPixelSpacing; + } else if (enabledElement.viewport.displayedArea.columnPixelSpacing < enabledElement.viewport.displayedArea.rowPixelSpacing) { + heightScale *= enabledElement.viewport.displayedArea.rowPixelSpacing / enabledElement.viewport.displayedArea.columnPixelSpacing; + } + } + } + + transform.scale(widthScale, heightScale); // Unrotate to so we can translate unrotated + + if (angle !== 0) { + transform.rotate(-angle * Math.PI / 180); + } // Apply the pan offset + + + transform.translate(enabledElement.viewport.translation.x, enabledElement.viewport.translation.y); // Rotate again so we can apply general scale + + if (angle !== 0) { + transform.rotate(angle * Math.PI / 180); + } + + if (scale !== undefined) { + // Apply the font scale + transform.scale(scale, scale); + } // Apply Flip if required + + + if (enabledElement.viewport.hflip) { + transform.scale(-1, 1); + } + + if (enabledElement.viewport.vflip) { + transform.scale(1, -1); + } // Move back from center of image + + + transform.translate(-width / 2, -height / 2); + return transform; +}); + +/***/ }), + +/***/ "./internal/computeAutoVoi.js": +/*!************************************!*\ + !*** ./internal/computeAutoVoi.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return computeAutoVoi; }); +/** + * Computes the VOI to display all the pixels if no VOI LUT data (Window Width/Window Center or voiLUT) exists on the viewport object. + * + * @param {Viewport} viewport - Object containing the viewport properties + * @param {Object} image An Image loaded by a Cornerstone Image Loader + * @returns {void} + * @memberof Internal + */ +function computeAutoVoi(viewport, image) { + if (hasVoi(viewport)) { + return; + } + + var maxVoi = image.maxPixelValue * image.slope + image.intercept; + var minVoi = image.minPixelValue * image.slope + image.intercept; + var ww = maxVoi - minVoi; + var wc = (maxVoi + minVoi) / 2; + + if (viewport.voi === undefined) { + viewport.voi = { + windowWidth: ww, + windowCenter: wc + }; + } else { + viewport.voi.windowWidth = ww; + viewport.voi.windowCenter = wc; + } +} +/** + * Check if viewport has voi LUT data + * @param {any} viewport The viewport to check for voi LUT data + * @returns {Boolean} true viewport has LUT data (Window Width/Window Center or voiLUT). Otherwise, false. + * @memberof Internal + */ + +function hasVoi(viewport) { + var hasLut = viewport.voiLUT && viewport.voiLUT.lut && viewport.voiLUT.lut.length > 0; + return hasLut || viewport.voi.windowWidth !== undefined && viewport.voi.windowCenter !== undefined; +} + +/***/ }), + +/***/ "./internal/createViewport.js": +/*!************************************!*\ + !*** ./internal/createViewport.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setDefaultViewport.js */ "./internal/setDefaultViewport.js"); + // eslint-disable-next-line valid-jsdoc + +/** + * Creates the default displayed area. + * C.10.4 Displayed Area Module: This Module describes Attributes required to define a Specified Displayed Area space. + * + * @returns {tlhc: {x,y}, brhc: {x, y},rowPixelSpacing: Number, columnPixelSpacing: Number, presentationSizeMode: Number} displayedArea object + * @memberof Internal + */ + +function createDefaultDisplayedArea() { + return { + // Top Left Hand Corner + tlhc: { + x: 1, + y: 1 + }, + // Bottom Right Hand Corner + brhc: { + x: 1, + y: 1 + }, + rowPixelSpacing: 1, + columnPixelSpacing: 1, + presentationSizeMode: 'NONE' + }; +} +/** + * Creates a new viewport object containing default values + * + * @returns {Viewport} viewport object + * @memberof Internal + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function () { + var displayedArea = createDefaultDisplayedArea(); + var initialDefaultViewport = { + scale: 1, + translation: { + x: 0, + y: 0 + }, + voi: { + windowWidth: undefined, + windowCenter: undefined + }, + invert: false, + pixelReplication: false, + rotation: 0, + hflip: false, + vflip: false, + modalityLUT: undefined, + voiLUT: undefined, + colormap: undefined, + labelmap: false, + displayedArea: displayedArea + }; + return Object.assign({}, initialDefaultViewport, _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["state"].viewport); +}); + +/***/ }), + +/***/ "./internal/drawCompositeImage.js": +/*!****************************************!*\ + !*** ./internal/drawCompositeImage.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _layers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../layers.js */ "./layers.js"); +/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js"); +/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rendering/renderColorImage.js */ "./rendering/renderColorImage.js"); +/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js"); +/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js"); +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); + + + + + + + +function getViewportRatio(baseLayer, targetLayer) { + if (!baseLayer.syncProps) { + updateLayerSyncProps(baseLayer); + } + + if (!targetLayer.syncProps) { + updateLayerSyncProps(targetLayer); + } + + return targetLayer.syncProps.originalScale / baseLayer.syncProps.originalScale; +} + +function updateLayerSyncProps(layer) { + var syncProps = layer.syncProps || {}; // This is used to keep each of the layers' viewports in sync with the active layer + + syncProps.originalScale = layer.viewport.scale; + layer.syncProps = syncProps; +} // Sync all viewports based on active layer's viewport + + +function syncViewports(layers, activeLayer) { + // If we intend to keep the viewport's scale, translation and rotation in sync, + // loop through the layers + layers.forEach(function (layer) { + // Don't do anything to the active layer + // Don't do anything if this layer has no viewport + if (layer === activeLayer || !layer.viewport || !activeLayer.viewport) { + return; + } + + if (!layer.syncProps) { + updateLayerSyncProps(layer); + } + + var viewportRatio = getViewportRatio(activeLayer, layer); // Update the layer's translation and scale to keep them in sync with the first image + // based on the ratios between the images + + layer.viewport.scale = activeLayer.viewport.scale * viewportRatio; + layer.viewport.rotation = activeLayer.viewport.rotation; + layer.viewport.translation = { + x: activeLayer.viewport.translation.x / viewportRatio, + y: activeLayer.viewport.translation.y / viewportRatio + }; + layer.viewport.hflip = activeLayer.viewport.hflip; + layer.viewport.vflip = activeLayer.viewport.vflip; + }); +} +/** + * Internal function to render all layers for a Cornerstone enabled element + * + * @param {CanvasRenderingContext2D} context Canvas context to draw upon + * @param {EnabledElementLayer[]} layers The array of all layers for this enabled element + * @param {Boolean} invalidated A boolean whether or not this image has been invalidated and must be redrawn + * @returns {void} + * @memberof Internal + */ + + +function renderLayers(context, layers, invalidated) { + // Loop through each layer and draw it to the canvas + layers.forEach(function (layer, index) { + if (!layer.image) { + return; + } + + context.save(); // Set the layer's canvas to the pixel coordinate system + + layer.canvas = context.canvas; + Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_5__["default"])(layer, context); // Render into the layer's canvas + + var colormap = layer.viewport.colormap || layer.options.colormap; + var labelmap = layer.viewport.labelmap; + var isInvalid = layer.invalid || invalidated; + + if (colormap && colormap !== '' && labelmap === true) { + Object(_rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__["addLabelMapLayer"])(layer, isInvalid); + } else if (colormap && colormap !== '') { + Object(_rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__["addPseudoColorLayer"])(layer, isInvalid); + } else if (layer.image.color === true) { + Object(_rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__["addColorLayer"])(layer, isInvalid); + } else { + // If this is the base layer, use the alpha channel for rendering of the grayscale image + var useAlphaChannel = index === 0; + Object(_rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__["addGrayscaleLayer"])(layer, isInvalid, useAlphaChannel); + } // Apply any global opacity settings that have been defined for this layer + + + if (layer.options && layer.options.opacity) { + context.globalAlpha = layer.options.opacity; + } else { + context.globalAlpha = 1; + } + + if (layer.options && layer.options.fillStyle) { + context.fillStyle = layer.options.fillStyle; + } // Set the pixelReplication property before drawing from the layer into the + // composite canvas + + + context.imageSmoothingEnabled = !layer.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Draw from the current layer's canvas onto the enabled element's canvas + + var sx = layer.viewport.displayedArea.tlhc.x - 1; + var sy = layer.viewport.displayedArea.tlhc.y - 1; + var width = layer.viewport.displayedArea.brhc.x - sx; + var height = layer.viewport.displayedArea.brhc.y - sy; + context.drawImage(layer.canvas, sx, sy, width, height, 0, 0, width, height); + context.restore(); + layer.invalid = false; + }); +} +/** + * Internal API function to draw a composite image to a given enabled element + * + * @param {EnabledElement} enabledElement An enabled element to draw into + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, invalidated) { + var element = enabledElement.element; + var allLayers = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getLayers"])(element); + var activeLayer = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getActiveLayer"])(element); + var visibleLayers = Object(_layers_js__WEBPACK_IMPORTED_MODULE_0__["getVisibleLayers"])(element); + var resynced = !enabledElement.lastSyncViewportsState && enabledElement.syncViewports; // This state will help us to determine if the user has re-synced the + // layers allowing us to make a new copy of the viewports + + enabledElement.lastSyncViewportsState = enabledElement.syncViewports; // Stores a copy of all viewports if the user has just synced them then we can use the + // copies to calculate anything later (ratio, translation offset, rotation offset, etc) + + if (resynced) { + allLayers.forEach(function (layer) { + if (layer.viewport) { + updateLayerSyncProps(layer); + } + }); + } // Sync all viewports in case it's activated + + + if (enabledElement.syncViewports === true) { + syncViewports(visibleLayers, activeLayer); + } // Get the enabled element's canvas so we can draw to it + + + var context = enabledElement.canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas + + context.fillStyle = 'black'; + context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Render all visible layers + + renderLayers(context, visibleLayers, invalidated); +}); + +/***/ }), + +/***/ "./internal/drawImage.js": +/*!*******************************!*\ + !*** ./internal/drawImage.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Internal API function to draw an image to a given enabled element + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw + * @param {Boolean} [invalidated = false] - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof Internal + */ +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement) { + var invalidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + enabledElement.needsRedraw = true; + + if (invalidated) { + enabledElement.invalid = true; + } +}); + +/***/ }), + +/***/ "./internal/drawImageSync.js": +/*!***********************************!*\ + !*** ./internal/drawImageSync.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); +/* harmony import */ var _drawCompositeImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drawCompositeImage.js */ "./internal/drawCompositeImage.js"); +/* harmony import */ var _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rendering/renderColorImage.js */ "./rendering/renderColorImage.js"); +/* harmony import */ var _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../rendering/renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js"); +/* harmony import */ var _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../rendering/renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js"); +/* harmony import */ var _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../rendering/renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../events.js */ "./events.js"); + + + + + + + + +/** + * Draw an image to a given enabled element synchronously + * + * @param {EnabledElement} enabledElement An enabled element to draw into + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, invalidated) { + var image = enabledElement.image; + var element = enabledElement.element; + var layers = enabledElement.layers || []; // Check if enabledElement can be redrawn + + if (!enabledElement.canvas || !(enabledElement.image || layers.length)) { + return; + } // Start measuring the time needed to draw the image/layers + + + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + image.stats = { + lastGetPixelDataTime: -1.0, + lastStoredPixelDataToCanvasImageDataTime: -1.0, + lastPutImageDataTime: -1.0, + lastRenderTime: -1.0, + lastLutGenerateTime: -1.0 + }; + + if (layers && layers.length) { + Object(_drawCompositeImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, invalidated); + } else if (image) { + var render = image.render; + + if (!render) { + if (enabledElement.viewport.colormap && enabledElement.viewport.colormap !== '' && enabledElement.image.labelmap === true) { + render = _rendering_renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_5__["renderLabelMapImage"]; + } else if (enabledElement.viewport.colormap && enabledElement.viewport.colormap !== '') { + render = _rendering_renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_4__["renderPseudoColorImage"]; + } else if (image.color) { + render = _rendering_renderColorImage_js__WEBPACK_IMPORTED_MODULE_2__["renderColorImage"]; + } else { + render = _rendering_renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_3__["renderGrayscaleImage"]; + } + } + + render(enabledElement, invalidated); + } // Calculate how long it took to draw the image/layers + + + var renderTimeInMs = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + var eventData = { + viewport: enabledElement.viewport, + element: element, + image: image, + enabledElement: enabledElement, + canvasContext: enabledElement.canvas.getContext('2d'), + renderTimeInMs: renderTimeInMs + }; + image.stats.lastRenderTime = renderTimeInMs; + enabledElement.invalid = false; + enabledElement.needsRedraw = false; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].IMAGE_RENDERED, eventData); +}); + +/***/ }), + +/***/ "./internal/generateColorLut.js": +/*!**************************************!*\ + !*** ./internal/generateColorLut.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getVOILut_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getVOILut.js */ "./internal/getVOILut.js"); + +/** + * Creates a LUT used while rendering to convert stored pixel values to + * display pixels + * + * @param {Image} image A Cornerstone Image Object + * @param {Number} windowWidth The Window Width + * @param {Number} windowCenter The Window Center + * @param {Boolean} invert A boolean describing whether or not the image has been inverted + * @param {Array} [voiLUT] A Volume of Interest Lookup Table + * + * @returns {Uint8ClampedArray} A lookup table to apply to the image + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, windowWidth, windowCenter, invert, voiLUT) { + var maxPixelValue = image.maxPixelValue; + var minPixelValue = image.minPixelValue; + var offset = Math.min(minPixelValue, 0); + + if (image.cachedLut === undefined) { + var length = maxPixelValue - offset + 1; + image.cachedLut = {}; + image.cachedLut.lutArray = new Uint8ClampedArray(length); + } + + var lut = image.cachedLut.lutArray; + var vlutfn = Object(_getVOILut_js__WEBPACK_IMPORTED_MODULE_0__["default"])(windowWidth, windowCenter, voiLUT); + + if (invert === true) { + for (var storedValue = minPixelValue; storedValue <= maxPixelValue; storedValue++) { + lut[storedValue + -offset] = 255 - vlutfn(storedValue); + } + } else { + for (var _storedValue = minPixelValue; _storedValue <= maxPixelValue; _storedValue++) { + lut[_storedValue + -offset] = vlutfn(_storedValue); + } + } + + return lut; +}); + +/***/ }), + +/***/ "./internal/generateLut.js": +/*!*********************************!*\ + !*** ./internal/generateLut.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getModalityLUT_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getModalityLUT.js */ "./internal/getModalityLUT.js"); +/* harmony import */ var _getVOILut_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVOILut.js */ "./internal/getVOILut.js"); + + +/** + * Creates a LUT used while rendering to convert stored pixel values to + * display pixels + * + * @param {Image} image A Cornerstone Image Object + * @param {Number} windowWidth The Window Width + * @param {Number} windowCenter The Window Center + * @param {Boolean} invert A boolean describing whether or not the image has been inverted + * @param {Array} [modalityLUT] A modality Lookup Table + * @param {Array} [voiLUT] A Volume of Interest Lookup Table + * + * @returns {Uint8ClampedArray} A lookup table to apply to the image + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, windowWidth, windowCenter, invert, modalityLUT, voiLUT) { + var maxPixelValue = image.maxPixelValue; + var minPixelValue = image.minPixelValue; + var offset = Math.min(minPixelValue, 0); + + if (image.cachedLut === undefined) { + var length = maxPixelValue - offset + 1; + image.cachedLut = {}; + image.cachedLut.lutArray = new Uint8ClampedArray(length); + } + + var lut = image.cachedLut.lutArray; + var mlutfn = Object(_getModalityLUT_js__WEBPACK_IMPORTED_MODULE_0__["default"])(image.slope, image.intercept, modalityLUT); + var vlutfn = Object(_getVOILut_js__WEBPACK_IMPORTED_MODULE_1__["default"])(windowWidth, windowCenter, voiLUT); + + if (invert === true) { + for (var storedValue = minPixelValue; storedValue <= maxPixelValue; storedValue++) { + lut[storedValue + -offset] = 255 - vlutfn(mlutfn(storedValue)); + } + } else { + for (var _storedValue = minPixelValue; _storedValue <= maxPixelValue; _storedValue++) { + lut[_storedValue + -offset] = vlutfn(mlutfn(_storedValue)); + } + } + + return lut; +}); + +/***/ }), + +/***/ "./internal/getCanvas.js": +/*!*******************************!*\ + !*** ./internal/getCanvas.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getCanvas; }); +var CANVAS_CSS_CLASS = 'cornerstone-canvas'; +/** + * Create a canvas and append it to the element + * + * @param {HTMLElement} element An HTML Element + * @return {HTMLElement} canvas A Canvas DOM element + */ + +function createCanvas(element) { + var canvas = document.createElement('canvas'); + canvas.style.display = 'block'; + canvas.classList.add(CANVAS_CSS_CLASS); + element.appendChild(canvas); + return canvas; +} +/** + * Create a canvas or returns the one that already exists for a given element + * + * @param {HTMLElement} element An HTML Element + * @return {HTMLElement} canvas A Canvas DOM element + */ + + +function getCanvas(element) { + var selector = "canvas.".concat(CANVAS_CSS_CLASS); + return element.querySelector(selector) || createCanvas(element); +} + +/***/ }), + +/***/ "./internal/getDefaultViewport.js": +/*!****************************************!*\ + !*** ./internal/getDefaultViewport.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _createViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createViewport.js */ "./internal/createViewport.js"); +/* harmony import */ var _getImageFitScale_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getImageFitScale.js */ "./internal/getImageFitScale.js"); + + +/** + * Creates a new viewport object containing default values for the image and canvas + * + * @param {HTMLElement} canvas A Canvas DOM element + * @param {Image} image A Cornerstone Image Object + * @returns {Viewport} viewport object + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (canvas, image) { + if (canvas === undefined) { + throw new Error('getDefaultViewport: parameter canvas must not be undefined'); + } + + if (image === undefined) { + return Object(_createViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + } // Fit image to window + + + var scale = Object(_getImageFitScale_js__WEBPACK_IMPORTED_MODULE_1__["default"])(canvas, image, 0).scaleFactor; + return { + scale: scale, + translation: { + x: 0, + y: 0 + }, + voi: { + windowWidth: image.windowWidth, + windowCenter: image.windowCenter + }, + invert: image.invert, + pixelReplication: false, + rotation: 0, + hflip: false, + vflip: false, + modalityLUT: image.modalityLUT, + voiLUT: image.voiLUT, + colormap: image.colormap, + labelmap: Boolean(image.labelmap), + displayedArea: { + tlhc: { + x: 1, + y: 1 + }, + brhc: { + x: image.columns, + y: image.rows + }, + rowPixelSpacing: image.rowPixelSpacing === undefined ? 1 : image.rowPixelSpacing, + columnPixelSpacing: image.columnPixelSpacing === undefined ? 1 : image.columnPixelSpacing, + presentationSizeMode: 'NONE' + } + }; +}); + +/***/ }), + +/***/ "./internal/getImageFitScale.js": +/*!**************************************!*\ + !*** ./internal/getImageFitScale.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ "./internal/validator.js"); +/* harmony import */ var _getImageSize_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getImageSize.js */ "./internal/getImageSize.js"); + + +/** + * Calculates the horizontal, vertical and minimum scale factor for an image + @param {{width, height}} windowSize The window size where the image is displayed. This can be any HTML element or structure with a width, height fields (e.g. canvas). + * @param {any} image The cornerstone image object + * @param {Number} rotation Optional. The rotation angle of the image. + * @return {{horizontalScale, verticalScale, scaleFactor}} The calculated horizontal, vertical and minimum scale factor + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (windowSize, image) { + var rotation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(windowSize, 'getImageScale: parameter windowSize must not be undefined'); + Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image, 'getImageScale: parameter image must not be undefined'); + var imageSize = Object(_getImageSize_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, rotation); + var rowPixelSpacing = image.rowPixelSpacing || 1; + var columnPixelSpacing = image.columnPixelSpacing || 1; + var verticalRatio = 1; + var horizontalRatio = 1; + + if (rowPixelSpacing < columnPixelSpacing) { + horizontalRatio = columnPixelSpacing / rowPixelSpacing; + } else { + // even if they are equal we want to calculate this ratio (the ration might be 0.5) + verticalRatio = rowPixelSpacing / columnPixelSpacing; + } + + var verticalScale = windowSize.height / imageSize.height / verticalRatio; + var horizontalScale = windowSize.width / imageSize.width / horizontalRatio; // Fit image to window + + return { + verticalScale: verticalScale, + horizontalScale: horizontalScale, + scaleFactor: Math.min(horizontalScale, verticalScale) + }; +}); + +/***/ }), + +/***/ "./internal/getImageSize.js": +/*!**********************************!*\ + !*** ./internal/getImageSize.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validator.js */ "./internal/validator.js"); + +/** + * Check if the angle is rotated + * @param {Number} rotation the rotation angle + * @returns {Boolean} true if the angle is rotated; Otherwise, false. + * @memberof Internal + */ + +function isRotated(rotation) { + return !(rotation === null || rotation === undefined || rotation === 0 || rotation === 180); +} +/** + * Retrieves the current image dimensions given an enabled element + * + * @param {any} image The Cornerstone image. + * @param {Number} rotation Optional. The rotation angle of the image. + * @return {{width:Number, height:Number}} The Image dimensions + * @memberof Internal + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (image) { + var rotation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image, 'getImageSize: parameter image must not be undefined'); + Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image.width, 'getImageSize: parameter image must have width'); + Object(_validator_js__WEBPACK_IMPORTED_MODULE_0__["validateParameterUndefinedOrNull"])(image.height, 'getImageSize: parameter image must have height'); + + if (isRotated(rotation)) { + return { + height: image.width, + width: image.height + }; + } + + return { + width: image.width, + height: image.height + }; +}); + +/***/ }), + +/***/ "./internal/getModalityLUT.js": +/*!************************************!*\ + !*** ./internal/getModalityLUT.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Generates a linear modality transformation function + * + * See DICOM PS3.3 C.11.1 Modality LUT Module + * + * http://dicom.nema.org/medical/Dicom/current/output/chtml/part03/sect_C.11.html + * + * @param {Number} slope m in the equation specified by Rescale Intercept (0028,1052). + * @param {Number} intercept The value b in relationship between stored values (SV) and the output units specified in Rescale Type (0028,1054). + + Output units = m*SV + b. + * @return {function(*): *} A linear modality LUT function. Given a stored pixel it returns the modality pixel value + * @memberof Internal + */ +function generateLinearModalityLUT(slope, intercept) { + return function (storedPixelValue) { + return storedPixelValue * slope + intercept; + }; +} + +function generateNonLinearModalityLUT(modalityLUT) { + var minValue = modalityLUT.lut[0]; + var maxValue = modalityLUT.lut[modalityLUT.lut.length - 1]; + var maxValueMapped = modalityLUT.firstValueMapped + modalityLUT.lut.length; + return function (storedPixelValue) { + if (storedPixelValue < modalityLUT.firstValueMapped) { + return minValue; + } else if (storedPixelValue >= maxValueMapped) { + return maxValue; + } + + return modalityLUT.lut[storedPixelValue]; + }; +} +/** + * Get the appropriate Modality LUT for the current situation. + * + * @param {Number} [slope] m in the equation specified by Rescale Intercept (0028,1052). + * @param {Number} [intercept] The value b in relationship between stored values (SV) and the output units specified in Rescale Type (0028,1054). + * @param {Function} [modalityLUT] A modality LUT function. Given a stored pixel it returns the modality pixel value. + * + * @return {function(*): *} A modality LUT function. Given a stored pixel it returns the modality pixel value. + * @memberof Internal + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (slope, intercept, modalityLUT) { + if (modalityLUT) { + return generateNonLinearModalityLUT(modalityLUT); + } + + return generateLinearModalityLUT(slope, intercept); +}); + +/***/ }), + +/***/ "./internal/getTransform.js": +/*!**********************************!*\ + !*** ./internal/getTransform.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calculateTransform.js */ "./internal/calculateTransform.js"); + +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement) { + // For now we will calculate it every time it is requested. + // In the future, we may want to cache it in the enabled element to speed things up. + return Object(_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement); +}); + +/***/ }), + +/***/ "./internal/getVOILut.js": +/*!*******************************!*\ + !*** ./internal/getVOILut.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } + +function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } + +/* eslint no-bitwise: 0 */ + +/** + * Volume of Interest Lookup Table Function + * + * @typedef {Function} VOILUTFunction + * + * @param {Number} modalityLutValue + * @returns {Number} transformed value + * @memberof Objects + */ + +/** + * @module: VOILUT + */ + +/** + * + * @param {Number} windowWidth Window Width + * @param {Number} windowCenter Window Center + * @returns {VOILUTFunction} VOI LUT mapping function + * @memberof VOILUT + */ +function generateLinearVOILUT(windowWidth, windowCenter) { + return function (modalityLutValue) { + return ((modalityLutValue - windowCenter) / windowWidth + 0.5) * 255.0; + }; +} +/** + * Generate a non-linear volume of interest lookup table + * + * @param {LUT} voiLUT Volume of Interest Lookup Table Object + * + * @returns {VOILUTFunction} VOI LUT mapping function + * @memberof VOILUT + */ + + +function generateNonLinearVOILUT(voiLUT) { + // We don't trust the voiLUT.numBitsPerEntry, mainly thanks to Agfa! + var bitsPerEntry = Math.max.apply(Math, _toConsumableArray(voiLUT.lut)).toString(2).length; + var shift = bitsPerEntry - 8; + var minValue = voiLUT.lut[0] >> shift; + var maxValue = voiLUT.lut[voiLUT.lut.length - 1] >> shift; + var maxValueMapped = voiLUT.firstValueMapped + voiLUT.lut.length - 1; + return function (modalityLutValue) { + if (modalityLutValue < voiLUT.firstValueMapped) { + return minValue; + } else if (modalityLutValue >= maxValueMapped) { + return maxValue; + } + + return voiLUT.lut[modalityLutValue - voiLUT.firstValueMapped] >> shift; + }; +} +/** + * Retrieve a VOI LUT mapping function given the current windowing settings + * and the VOI LUT for the image + * + * @param {Number} windowWidth Window Width + * @param {Number} windowCenter Window Center + * @param {LUT} [voiLUT] Volume of Interest Lookup Table Object + * + * @return {VOILUTFunction} VOI LUT mapping function + * @memberof VOILUT + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (windowWidth, windowCenter, voiLUT) { + if (voiLUT) { + return generateNonLinearVOILUT(voiLUT); + } + + return generateLinearVOILUT(windowWidth, windowCenter); +}); + +/***/ }), + +/***/ "./internal/guid.js": +/*!**************************!*\ + !*** ./internal/guid.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function s4() { + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); +} +/** + * Generate a unique identifier + * + * @return {string} A unique identifier + * @memberof Internal + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function () { + return "".concat(s4() + s4(), "-").concat(s4(), "-").concat(s4(), "-").concat(s4(), "-").concat(s4()).concat(s4()).concat(s4()); +}); + +/***/ }), + +/***/ "./internal/index.js": +/*!***************************!*\ + !*** ./internal/index.js ***! + \***************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _transform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transform.js */ "./internal/transform.js"); +/* harmony import */ var _calculateTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./calculateTransform.js */ "./internal/calculateTransform.js"); +/* harmony import */ var _drawImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./drawImage.js */ "./internal/drawImage.js"); +/* harmony import */ var _generateLut_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./generateLut.js */ "./internal/generateLut.js"); +/* harmony import */ var _getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony import */ var _getTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getTransform.js */ "./internal/getTransform.js"); +/* harmony import */ var _requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./requestAnimationFrame.js */ "./internal/requestAnimationFrame.js"); +/* harmony import */ var _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./setDefaultViewport.js */ "./internal/setDefaultViewport.js"); +/* harmony import */ var _storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js"); +/* harmony import */ var _storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js"); +/* harmony import */ var _storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js"); +/* harmony import */ var _storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js"); +/* harmony import */ var _storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./storedPixelDataToCanvasImageDataRGBA.js */ "./internal/storedPixelDataToCanvasImageDataRGBA.js"); + + + + + + + + + + + + + +/** + * @module Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = ({ + drawImage: _drawImage_js__WEBPACK_IMPORTED_MODULE_2__["default"], + generateLut: _generateLut_js__WEBPACK_IMPORTED_MODULE_3__["default"], + getDefaultViewport: _getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_4__["default"], + requestAnimationFrame: _requestAnimationFrame_js__WEBPACK_IMPORTED_MODULE_6__["default"], + setDefaultViewport: _setDefaultViewport_js__WEBPACK_IMPORTED_MODULE_7__["default"], + storedPixelDataToCanvasImageData: _storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_9__["default"], + storedPixelDataToCanvasImageDataRGBA: _storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_12__["default"], + storedPixelDataToCanvasImageDataColorLUT: _storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_10__["default"], + storedPixelDataToCanvasImageDataPseudocolorLUT: _storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_11__["default"], + storedColorPixelDataToCanvasImageData: _storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_8__["default"], + getTransform: _getTransform_js__WEBPACK_IMPORTED_MODULE_5__["default"], + calculateTransform: _calculateTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"], + Transform: _transform_js__WEBPACK_IMPORTED_MODULE_0__["Transform"] +}); + +/***/ }), + +/***/ "./internal/now.js": +/*!*************************!*\ + !*** ./internal/now.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * @module Polyfills + */ + +/** + * Use the performance.now() method if possible, and if not, use Date.now() + * + * @return {number} Time elapsed since the time origin + * @memberof Polyfills + */ +/* harmony default export */ __webpack_exports__["default"] = (function () { + if (window.performance) { + return performance.now(); + } + + return Date.now(); +}); + +/***/ }), + +/***/ "./internal/requestAnimationFrame.js": +/*!*******************************************!*\ + !*** ./internal/requestAnimationFrame.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function requestFrame(callback) { + window.setTimeout(callback, 1000 / 60); +} +/** + * Polyfills requestAnimationFrame for older browsers. + * + * @param {Function} callback A parameter specifying a function to call when it's time to update your animation for the next repaint. The callback has one single argument, a DOMHighResTimeStamp, which indicates the current time (the time returned from performance.now() ) for when requestAnimationFrame starts to fire callbacks. + * + * @return {Number} A long integer value, the request id, that uniquely identifies the entry in the callback list. This is a non-zero value, but you may not make any other assumptions about its value. You can pass this value to window.cancelAnimationFrame() to cancel the refresh callback request. + * @memberof Polyfills + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (callback) { + return window.requestAnimationFrame(callback) || window.webkitRequestAnimationFrame(callback) || window.mozRequestAnimationFrame(callback) || window.oRequestAnimationFrame(callback) || window.msRequestAnimationFrame(callback) || requestFrame(callback); +}); + +/***/ }), + +/***/ "./internal/setDefaultViewport.js": +/*!****************************************!*\ + !*** ./internal/setDefaultViewport.js ***! + \****************************************/ +/*! exports provided: default, state */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "state", function() { return state; }); +var state = { + viewport: {} +}; +/** + * Sets new default values for `getDefaultViewport` + * + * @param {Object} viewport - Object that sets new default values for getDefaultViewport + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (viewport) { + state.viewport = viewport || {}; +}); + + +/***/ }), + +/***/ "./internal/storedColorPixelDataToCanvasImageData.js": +/*!***********************************************************!*\ + !*** ./internal/storedColorPixelDataToCanvasImageData.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); + +/** + * Converts stored color pixel values to display pixel values using a LUT. + * + * Note: Skips alpha value for any input image pixel data. + * + * @param {Image} image A Cornerstone Image Object + * @param {Array} lut Lookup table array + * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels + * + * @returns {void} + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) { + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + var pixelData = image.getPixelData(); + image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; + var numPixels = pixelData.length; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes. + // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement + + start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + + if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Red + + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Green + + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex] + -minPixelValue]; // Blue + + storedPixelDataIndex += 2; + canvasImageDataIndex += 2; + } + } else { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Red + + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Green + + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex]]; // Blue + + storedPixelDataIndex += 2; + canvasImageDataIndex += 2; + } + } + + image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; +}); + +/***/ }), + +/***/ "./internal/storedPixelDataToCanvasImageData.js": +/*!******************************************************!*\ + !*** ./internal/storedPixelDataToCanvasImageData.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); + +/** + * This function transforms stored pixel values into a canvas image data buffer + * by using a LUT. This is the most performance sensitive code in cornerstone and + * we use a special trick to make this go as fast as possible. Specifically we + * use the alpha channel only to control the luminance rather than the red, green and + * blue channels which makes it over 3x faster. The canvasImageDataData buffer needs + * to be previously filled with white pixels. + * + * NOTE: Attribution would be appreciated if you use this technique! + * + * @param {Image} image A Cornerstone Image Object + * @param {Array} lut Lookup table array + * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels + * + * @returns {void} + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) { + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + var pixelData = image.getPixelData(); + image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + var numPixels = pixelData.length; + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 3; + var storedPixelDataIndex = 0; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes. + // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement + // Added two paths (Int16Array, Uint16Array) to avoid polymorphic deoptimization in chrome. + + start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + + if (pixelData instanceof Int16Array) { + if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Alpha + + canvasImageDataIndex += 4; + } + } else { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha + + canvasImageDataIndex += 4; + } + } + } else if (pixelData instanceof Uint16Array) { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha + + canvasImageDataIndex += 4; + } + } else if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Alpha + + canvasImageDataIndex += 4; + } + } else { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex] = lut[pixelData[storedPixelDataIndex++]]; // Alpha + + canvasImageDataIndex += 4; + } + } + + image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; +}); + +/***/ }), + +/***/ "./internal/storedPixelDataToCanvasImageDataColorLUT.js": +/*!**************************************************************!*\ + !*** ./internal/storedPixelDataToCanvasImageDataColorLUT.js ***! + \**************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js"); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); + + +/** + * + * @param {Image} image A Cornerstone Image Object + * @param {LookupTable|Array} colorLut Lookup table array + * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels + * + * @returns {void} + * @memberof Internal + */ + +function storedPixelDataToCanvasImageDataColorLUT(image, colorLut, canvasImageDataData) { + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + var pixelData = image.getPixelData(); + image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; + var numPixels = pixelData.length; + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; + var rgba; + var clut; + start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + + if (colorLut instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) { + clut = colorLut.Table; + } else { + clut = colorLut; + } + + if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + rgba = clut[pixelData[storedPixelDataIndex++] + -minPixelValue]; + canvasImageDataData[canvasImageDataIndex++] = rgba[0]; + canvasImageDataData[canvasImageDataIndex++] = rgba[1]; + canvasImageDataData[canvasImageDataIndex++] = rgba[2]; + canvasImageDataData[canvasImageDataIndex++] = rgba[3]; + } + } else { + while (storedPixelDataIndex < numPixels) { + rgba = clut[pixelData[storedPixelDataIndex++]]; + canvasImageDataData[canvasImageDataIndex++] = rgba[0]; + canvasImageDataData[canvasImageDataIndex++] = rgba[1]; + canvasImageDataData[canvasImageDataIndex++] = rgba[2]; + canvasImageDataData[canvasImageDataIndex++] = rgba[3]; + } + } + + image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; +} + +/* harmony default export */ __webpack_exports__["default"] = (storedPixelDataToCanvasImageDataColorLUT); + +/***/ }), + +/***/ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js": +/*!********************************************************************!*\ + !*** ./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js ***! + \********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js"); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); + + +/** + * + * @param {Image} image A Cornerstone Image Object + * @param {Array} grayscaleLut Lookup table array + * @param {LookupTable|Array} colorLut Lookup table array + * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels + * + * @returns {void} + * @memberof Internal + */ + +function storedPixelDataToCanvasImageDataPseudocolorLUT(image, grayscaleLut, colorLut, canvasImageDataData) { + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + var pixelData = image.getPixelData(); + image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; + var numPixels = pixelData.length; + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; + var grayscale; + var rgba; + var clut; + start = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + + if (colorLut instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) { + clut = colorLut.Table; + } else { + clut = colorLut; + } + + if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + grayscale = grayscaleLut[pixelData[storedPixelDataIndex++] + -minPixelValue]; + rgba = clut[grayscale]; + canvasImageDataData[canvasImageDataIndex++] = rgba[0]; + canvasImageDataData[canvasImageDataIndex++] = rgba[1]; + canvasImageDataData[canvasImageDataIndex++] = rgba[2]; + canvasImageDataData[canvasImageDataIndex++] = rgba[3]; + } + } else { + while (storedPixelDataIndex < numPixels) { + grayscale = grayscaleLut[pixelData[storedPixelDataIndex++]]; + rgba = clut[grayscale]; + canvasImageDataData[canvasImageDataIndex++] = rgba[0]; + canvasImageDataData[canvasImageDataIndex++] = rgba[1]; + canvasImageDataData[canvasImageDataIndex++] = rgba[2]; + canvasImageDataData[canvasImageDataIndex++] = rgba[3]; + } + } + + image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; +} + +/* harmony default export */ __webpack_exports__["default"] = (storedPixelDataToCanvasImageDataPseudocolorLUT); + +/***/ }), + +/***/ "./internal/storedPixelDataToCanvasImageDataRGBA.js": +/*!**********************************************************!*\ + !*** ./internal/storedPixelDataToCanvasImageDataRGBA.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); + +/** + * This function transforms stored pixel values into a canvas image data buffer + * by using a LUT. + * + * @param {Image} image A Cornerstone Image Object + * @param {Array} lut Lookup table array + * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels + * + * @returns {void} + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) { + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + var pixelData = image.getPixelData(); + image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + var numPixels = pixelData.length; + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; + var pixelValue; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes. + // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement + // Added two paths (Int16Array, Uint16Array) to avoid polymorphic deoptimization in chrome. + + start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + + if (pixelData instanceof Int16Array) { + if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + pixelValue = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha + } + } else { + while (storedPixelDataIndex < numPixels) { + pixelValue = lut[pixelData[storedPixelDataIndex++]]; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha + } + } + } else if (pixelData instanceof Uint16Array) { + while (storedPixelDataIndex < numPixels) { + pixelValue = lut[pixelData[storedPixelDataIndex++]]; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha + } + } else if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + pixelValue = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha + } + } else { + while (storedPixelDataIndex < numPixels) { + pixelValue = lut[pixelData[storedPixelDataIndex++]]; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = pixelValue; + canvasImageDataData[canvasImageDataIndex++] = 255; // Alpha + } + } + + image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; +}); + +/***/ }), + +/***/ "./internal/storedRGBAPixelDataToCanvasImageData.js": +/*!**********************************************************!*\ + !*** ./internal/storedRGBAPixelDataToCanvasImageData.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./now.js */ "./internal/now.js"); + +/** + * Converts stored RGBA color pixel values to display pixel values using a LUT. + * + * @param {Image} image A Cornerstone Image Object + * @param {Array} lut Lookup table array + * @param {Uint8ClampedArray} canvasImageDataData canvasImageData.data buffer filled with white pixels + * + * @returns {void} + * @memberof Internal + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, lut, canvasImageDataData) { + var start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + var pixelData = image.getPixelData(); + image.stats.lastGetPixelDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; + var numPixels = pixelData.length; // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes. + // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement + + start = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + + if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Red + + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Green + + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++] + -minPixelValue]; // Blue + + canvasImageDataData[canvasImageDataIndex++] = pixelData[storedPixelDataIndex++]; + } + } else { + while (storedPixelDataIndex < numPixels) { + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Red + + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Green + + canvasImageDataData[canvasImageDataIndex++] = lut[pixelData[storedPixelDataIndex++]]; // Blue + + canvasImageDataData[canvasImageDataIndex++] = pixelData[storedPixelDataIndex++]; + } + } + + image.stats.lastStoredPixelDataToCanvasImageDataTime = Object(_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; +}); + +/***/ }), + +/***/ "./internal/transform.js": +/*!*******************************!*\ + !*** ./internal/transform.js ***! + \*******************************/ +/*! exports provided: Transform */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Transform", function() { return Transform; }); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +// By Simon Sarris +// Www.simonsarris.com +// Sarris@acm.org +// +// Free to use and distribute at will +// So long as you are nice to people, etc +// Simple class for keeping track of the current transformation matrix +// For instance: +// Var t = new Transform(); +// T.rotate(5); +// Var m = t.m; +// Ctx.setTransform(m[0], m[1], m[2], m[3], m[4], m[5]); +// Is equivalent to: +// Ctx.rotate(5); +// But now you can retrieve it :) +// Remember that this does not account for any CSS transforms applied to the canvas +var Transform = +/*#__PURE__*/ +function () { + function Transform() { + _classCallCheck(this, Transform); + + this.reset(); + } + + _createClass(Transform, [{ + key: "reset", + value: function reset() { + this.m = [1, 0, 0, 1, 0, 0]; + } + }, { + key: "clone", + value: function clone() { + var transform = new Transform(); + transform.m[0] = this.m[0]; + transform.m[1] = this.m[1]; + transform.m[2] = this.m[2]; + transform.m[3] = this.m[3]; + transform.m[4] = this.m[4]; + transform.m[5] = this.m[5]; + return transform; + } + }, { + key: "multiply", + value: function multiply(matrix) { + var m11 = this.m[0] * matrix.m[0] + this.m[2] * matrix.m[1]; + var m12 = this.m[1] * matrix.m[0] + this.m[3] * matrix.m[1]; + var m21 = this.m[0] * matrix.m[2] + this.m[2] * matrix.m[3]; + var m22 = this.m[1] * matrix.m[2] + this.m[3] * matrix.m[3]; + var dx = this.m[0] * matrix.m[4] + this.m[2] * matrix.m[5] + this.m[4]; + var dy = this.m[1] * matrix.m[4] + this.m[3] * matrix.m[5] + this.m[5]; + this.m[0] = m11; + this.m[1] = m12; + this.m[2] = m21; + this.m[3] = m22; + this.m[4] = dx; + this.m[5] = dy; + } + }, { + key: "invert", + value: function invert() { + var d = 1 / (this.m[0] * this.m[3] - this.m[1] * this.m[2]); + var m0 = this.m[3] * d; + var m1 = -this.m[1] * d; + var m2 = -this.m[2] * d; + var m3 = this.m[0] * d; + var m4 = d * (this.m[2] * this.m[5] - this.m[3] * this.m[4]); + var m5 = d * (this.m[1] * this.m[4] - this.m[0] * this.m[5]); + this.m[0] = m0; + this.m[1] = m1; + this.m[2] = m2; + this.m[3] = m3; + this.m[4] = m4; + this.m[5] = m5; + } + }, { + key: "rotate", + value: function rotate(rad) { + var c = Math.cos(rad); + var s = Math.sin(rad); + var m11 = this.m[0] * c + this.m[2] * s; + var m12 = this.m[1] * c + this.m[3] * s; + var m21 = this.m[0] * -s + this.m[2] * c; + var m22 = this.m[1] * -s + this.m[3] * c; + this.m[0] = m11; + this.m[1] = m12; + this.m[2] = m21; + this.m[3] = m22; + } + }, { + key: "translate", + value: function translate(x, y) { + this.m[4] += this.m[0] * x + this.m[2] * y; + this.m[5] += this.m[1] * x + this.m[3] * y; + } + }, { + key: "scale", + value: function scale(sx, sy) { + this.m[0] *= sx; + this.m[1] *= sx; + this.m[2] *= sy; + this.m[3] *= sy; + } + }, { + key: "transformPoint", + value: function transformPoint(px, py) { + var x = px; + var y = py; + px = x * this.m[0] + y * this.m[2] + this.m[4]; + py = x * this.m[1] + y * this.m[3] + this.m[5]; + return { + x: px, + y: py + }; + } + }]); + + return Transform; +}(); + +/***/ }), + +/***/ "./internal/tryEnableWebgl.js": +/*!************************************!*\ + !*** ./internal/tryEnableWebgl.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../webgl/index.js */ "./webgl/index.js"); + +/** + * Checks if webGL is supported and initializes the rendering engine. + * @param {any} options Options to check if webgl rendering is requested (e.g. enable webgl by passing {renderer: 'webgl'}) + * @returns {Boolean} true if webgl rendering has been successfully initialized. Otherwise, false. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (options) { + if (_webgl_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].renderer.isWebGLAvailable()) { + // If WebGL is available on the device, initialize the renderer + // And return the renderCanvas from the WebGL rendering path + _webgl_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].renderer.initRenderer(); + options.renderer = 'webgl'; + return true; + } // If WebGL is not available on this device, we will fall back + // To using the Canvas renderer + + + console.error('WebGL not available, falling back to Canvas renderer'); + delete options.renderer; + return false; +}); + +/***/ }), + +/***/ "./internal/validator.js": +/*!*******************************!*\ + !*** ./internal/validator.js ***! + \*******************************/ +/*! exports provided: validateParameterUndefined, validateParameterUndefinedOrNull */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateParameterUndefined", function() { return validateParameterUndefined; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateParameterUndefinedOrNull", function() { return validateParameterUndefinedOrNull; }); +/** + * Check if the supplied parameter is undefined and throws and error + * @param {any} checkParam the parameter to validate for undefined + * @param {any} errorMsg the error message to be thrown + * @returns {void} + * @memberof internal + */ +function validateParameterUndefined(checkParam, errorMsg) { + if (checkParam === undefined) { + throw new Error(errorMsg); + } +} +/** + * Check if the supplied parameter is undefined or null and throws and error + * @param {any} checkParam the parameter to validate for undefined + * @param {any} errorMsg the error message to be thrown + * @returns {void} + * @memberof internal + */ + +function validateParameterUndefinedOrNull(checkParam, errorMsg) { + if (checkParam === undefined || checkParam === null) { + throw new Error(errorMsg); + } +} + +/***/ }), + +/***/ "./invalidate.js": +/*!***********************!*\ + !*** ./invalidate.js ***! + \***********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events.js */ "./events.js"); + + + +/** + * Sets the invalid flag on the enabled element and fire an event + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @returns {void} + * @memberof Drawing + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + enabledElement.invalid = true; + enabledElement.needsRedraw = true; + var eventData = { + element: element + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].INVALIDATED, eventData); +}); + +/***/ }), + +/***/ "./invalidateImageId.js": +/*!******************************!*\ + !*** ./invalidateImageId.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js"); + + +/** + * Forces the image to be updated/redrawn for the all enabled elements + * displaying the specified imageId + * + * @param {string} imageId The imageId of the Cornerstone Image Object to redraw + * @returns {void} + * @memberof Drawing + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (imageId) { + var enabledElements = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElementsByImageId"])(imageId); + enabledElements.forEach(function (enabledElement) { + Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, true); + }); +}); + +/***/ }), + +/***/ "./layers.js": +/*!*******************!*\ + !*** ./layers.js ***! + \*******************/ +/*! exports provided: rescaleImage, addLayer, removeLayer, getLayer, getLayers, getVisibleLayers, setActiveLayer, setLayerImage, getActiveLayer, purgeLayers */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rescaleImage", function() { return rescaleImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addLayer", function() { return addLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLayer", function() { return removeLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayer", function() { return getLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLayers", function() { return getLayers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVisibleLayers", function() { return getVisibleLayers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setActiveLayer", function() { return setActiveLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLayerImage", function() { return setLayerImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveLayer", function() { return getActiveLayer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "purgeLayers", function() { return purgeLayers; }); +/* harmony import */ var _internal_guid_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/guid.js */ "./internal/guid.js"); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./events.js */ "./events.js"); + + + + + + +/** + * @module EnabledElementLayers + */ + +/** + * Helper function to trigger an event on a Cornerstone element with + * a specific layerId + * + * @param {String} eventName The event name (e.g. CornerstoneLayerAdded) + * @param {EnabledElement} enabledElement The Cornerstone enabled element + * @param {String} layerId The layer's unique identifier + * @returns {void} + * @memberof EnabledElementLayers + */ + +function triggerEventForLayer(eventName, enabledElement, layerId) { + var element = enabledElement.element; + var eventData = { + viewport: enabledElement.viewport, + element: enabledElement.element, + image: enabledElement.image, + enabledElement: enabledElement, + layerId: layerId + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventName, eventData); +} +/** + * Rescale the target layer to the base layer based on the + * relative size of each image and their pixel dimensions. + * + * This function will update the Viewport parameters of the + * target layer to a new scale. + * + * @param {EnabledElementLayer} baseLayer The base layer + * @param {EnabledElementLayer} targetLayer The target layer to rescale + * @returns {void} + * @memberof EnabledElementLayers + */ + + +function rescaleImage(baseLayer, targetLayer) { + if (baseLayer.layerId === targetLayer.layerId) { + throw new Error('rescaleImage: both arguments represent the same layer'); + } + + var baseImage = baseLayer.image; + var targetImage = targetLayer.image; // Return if these images don't have an imageId (e.g. for dynamic images) + + if (!baseImage.imageId || !targetImage.imageId) { + return; + } // Column pixel spacing need to be considered when calculating the + // ratio between the layer added and base layer images + + + var colRelative = targetLayer.viewport.displayedArea.columnPixelSpacing * targetImage.width / (baseLayer.viewport.displayedArea.columnPixelSpacing * baseImage.width); + var viewportRatio = targetLayer.viewport.scale / baseLayer.viewport.scale * colRelative; + targetLayer.viewport.scale = baseLayer.viewport.scale * viewportRatio; +} +/** + * Add a layer to a Cornerstone element + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {Image} image A Cornerstone Image object to add as a new layer + * @param {Object} options Options for the layer + * + * @returns {String} layerId The new layer's unique identifier + * @memberof EnabledElementLayers + */ + +function addLayer(element, image, options) { + var layerId = Object(_internal_guid_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + var layers = enabledElement.layers; + var viewport; + + if (image) { + viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image); // Override the defaults if any optional viewport settings + // have been specified + + if (options && options.viewport) { + viewport = Object.assign(viewport, options.viewport); + } + } // Set syncViewports to true by default when a new layer is added + + + if (enabledElement.syncViewports !== false) { + enabledElement.syncViewports = true; + } + + var newLayer = { + image: image, + layerId: layerId, + viewport: viewport, + options: options || {}, + renderingTools: {} + }; // Rescale the new layer based on the base layer to make sure + // they will have a proportional size (pixel spacing) + + if (layers.length && image) { + rescaleImage(layers[0], newLayer); + } + + layers.push(newLayer); + triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_5__["default"].LAYER_ADDED, enabledElement, layerId); // Set the layer as active if it's the first layer added + + if (layers.length === 1 && image) { + setActiveLayer(element, layerId); + } + + return layerId; +} +/** + * Remove a layer from a Cornerstone element given a layer ID + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {String} layerId The unique identifier for the layer + * @returns {void} + * @memberof EnabledElementLayers + */ + +function removeLayer(element, layerId) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + var layers = enabledElement.layers; + var index = enabledElement.layers.findIndex(function (layer) { + return layer.layerId === layerId; + }); + + if (index !== -1) { + layers.splice(index, 1); // If the current layer is active, and we have other layers, + // switch to the first layer that remains in the array + + if (layerId === enabledElement.activeLayerId && layers.length) { + setActiveLayer(element, layers[0].layerId); + } + + triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_5__["default"].LAYER_REMOVED, enabledElement, layerId); + } +} +/** + * Retrieve a layer from a Cornerstone element given a layer ID + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {String} layerId The unique identifier for the layer + * @return {EnabledElementLayer} The layer + * @memberof EnabledElementLayers + */ + +function getLayer(element, layerId) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + return enabledElement.layers.find(function (layer) { + return layer.layerId === layerId; + }); +} +/** + * Retrieve all layers for a Cornerstone element + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * + * @return {EnabledElementLayer[]} An array of layers + * @memberof EnabledElementLayers + */ + +function getLayers(element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + return enabledElement.layers; +} +/** + * Retrieve all visible layers for a Cornerstone element + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * + * @return {EnabledElementLayer[]} An array of layers + * @memberof EnabledElementLayers + */ + +function getVisibleLayers(element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + return enabledElement.layers.filter(function (layer) { + return layer.options && layer.options.visible !== false && layer.options.opacity !== 0; + }); +} +/** + * Set the active layer for a Cornerstone element + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {String} layerId The unique identifier for the layer + * @returns {void} + * @memberof EnabledElementLayers + */ + +function setActiveLayer(element, layerId) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); // Stop here if this layer is already active + + if (enabledElement.activeLayerId === layerId) { + return; + } + + var index = enabledElement.layers.findIndex(function (layer) { + return layer.layerId === layerId; + }); + + if (index === -1) { + throw new Error('setActiveLayer: layer not found in layers array'); + } + + var layer = enabledElement.layers[index]; + + if (!layer.image) { + throw new Error('setActiveLayer: layer with undefined image cannot be set as active.'); + } + + enabledElement.activeLayerId = layerId; + enabledElement.image = layer.image; + enabledElement.viewport = layer.viewport; + Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element); + triggerEventForLayer(_events_js__WEBPACK_IMPORTED_MODULE_5__["default"].ACTIVE_LAYER_CHANGED, enabledElement, layerId); +} +/** + * Set a new image for a specific layerId + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {Image} image The image to be displayed in this layer + * @param {String} [layerId] The unique identifier for the layer + * @returns {void} + * @memberof EnabledElementLayers + */ + +function setLayerImage(element, image, layerId) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + var baseLayer = enabledElement.layers[0]; + var layer; + + if (layerId) { + layer = getLayer(element, layerId); + } else { + layer = getActiveLayer(element); + } + + if (!layer) { + throw new Error('setLayerImage: Layer not found'); + } + + layer.image = image; + + if (!image) { + layer.viewport = undefined; + return; + } + + if (!layer.viewport) { + var defaultViewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement.canvas, image); // Override the defaults if any optional viewport settings + // have been specified + + if (layer.options && layer.options.viewport) { + layer.viewport = Object.assign(defaultViewport, layer.options.viewport); + } + + if (baseLayer.layerId !== layerId) { + rescaleImage(baseLayer, layer); + } + } +} +/** + * Retrieve the currently active layer for a Cornerstone element + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @return {EnabledElementLayer} The currently active layer + * @memberof EnabledElementLayers + */ + +function getActiveLayer(element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + return enabledElement.layers.find(function (layer) { + return layer.layerId === enabledElement.activeLayerId; + }); +} +/** + * Purge the layers + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * + * @returns {void} + */ + +function purgeLayers(element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + enabledElement.layers = []; + delete enabledElement.activeLayerId; + delete enabledElement.lastSyncViewportsState; +} + +/***/ }), + +/***/ "./metaData.js": +/*!*********************!*\ + !*** ./metaData.js ***! + \*********************/ +/*! exports provided: addProvider, removeProvider, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addProvider", function() { return addProvider; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeProvider", function() { return removeProvider; }); +// This module defines a way to access various metadata about an imageId. This layer of abstraction exists +// So metadata can be provided in different ways (e.g. by parsing DICOM P10 or by a WADO-RS document) +var providers = []; +/** + * @module Metadata + */ + +/** + * Adds a metadata provider with the specified priority + * @param {Function} provider Metadata provider function + * @param {Number} [priority=0] - 0 is default/normal, > 0 is high, < 0 is low + * + * @returns {void} + * @memberof Metadata + */ + +function addProvider(provider) { + var priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var i; // Find the right spot to insert this provider based on priority + + for (i = 0; i < providers.length; i++) { + if (providers[i].priority <= priority) { + break; + } + } // Insert the decode task at position i + + + providers.splice(i, 0, { + priority: priority, + provider: provider + }); +} +/** + * Removes the specified provider + * + * @param {Function} provider Metadata provider function + * + * @returns {void} + * @memberof Metadata + */ + +function removeProvider(provider) { + for (var i = 0; i < providers.length; i++) { + if (providers[i].provider === provider) { + providers.splice(i, 1); + break; + } + } +} +/** + * Gets metadata from the registered metadata providers. Will call each one from highest priority to lowest + * until one responds + * + * @param {String} type The type of metadata requested from the metadata store + * @param {String} imageId The Cornerstone Image Object's imageId + * + * @returns {*} The metadata retrieved from the metadata store + * @memberof Metadata + */ + +function getMetaData(type, imageId) { + // Invoke each provider in priority order until one returns something + for (var i = 0; i < providers.length; i++) { + var result = providers[i].provider(type, imageId); + + if (result !== undefined) { + return result; + } + } +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + addProvider: addProvider, + removeProvider: removeProvider, + get: getMetaData +}); + +/***/ }), + +/***/ "./pageToPixel.js": +/*!************************!*\ + !*** ./pageToPixel.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getTransform.js */ "./internal/getTransform.js"); + + +/** + * Converts a point in the page coordinate system to the pixel coordinate + * system + * + * @param {HTMLElement} element The Cornerstone element within which the input point lies + * @param {Number} pageX The x value in the page coordinate system + * @param {Number} pageY The y value in the page coordinate system + * + * @returns {{x: Number, y: Number}} The transformed point in the pixel coordinate system + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, pageX, pageY) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + + if (enabledElement.image === undefined) { + throw new Error('image has not been loaded yet'); + } // Convert the pageX and pageY to the canvas client coordinates + + + var rect = element.getBoundingClientRect(); + var clientX = pageX - rect.left - window.pageXOffset; + var clientY = pageY - rect.top - window.pageYOffset; + var pt = { + x: clientX, + y: clientY + }; + var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement); + transform.invert(); + return transform.transformPoint(pt.x, pt.y); +}); + +/***/ }), + +/***/ "./pixelDataToFalseColorData.js": +/*!**************************************!*\ + !*** ./pixelDataToFalseColorData.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return pixelDataToFalseColorData; }); +/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colors/index.js */ "./colors/index.js"); + +/** + * Converts the image pixel data into a false color data + * + * @param {Image} image A Cornerstone Image Object + * @param {Object} lookupTable A lookup table Object + * + * @returns {void} + * @deprecated This function is superseded by the ability to set the Viewport parameters + * to include colormaps. + */ + +function pixelDataToFalseColorData(image, lookupTable) { + if (image.color && !image.falseColor) { + throw new Error('Color transforms are not implemented yet'); + } + + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; + var numPixels = image.width * image.height; + var origPixelData = image.origPixelData || image.getPixelData(); + var storedColorPixelData = new Uint8Array(numPixels * 4); + var sp; + var mapped; + image.color = true; + image.falseColor = true; + image.origPixelData = origPixelData; + + if (lookupTable instanceof _colors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].LookupTable) { + lookupTable.build(); + + while (storedPixelDataIndex < numPixels) { + sp = origPixelData[storedPixelDataIndex++]; + mapped = lookupTable.mapValue(sp); + storedColorPixelData[canvasImageDataIndex++] = mapped[0]; + storedColorPixelData[canvasImageDataIndex++] = mapped[1]; + storedColorPixelData[canvasImageDataIndex++] = mapped[2]; + storedColorPixelData[canvasImageDataIndex++] = mapped[3]; + } + } else if (minPixelValue < 0) { + while (storedPixelDataIndex < numPixels) { + sp = origPixelData[storedPixelDataIndex++]; + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][0]; // Red + + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][1]; // Green + + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][2]; // Blue + + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp + -minPixelValue][3]; // Alpha + } + } else { + while (storedPixelDataIndex < numPixels) { + sp = origPixelData[storedPixelDataIndex++]; + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][0]; // Red + + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][1]; // Green + + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][2]; // Blue + + storedColorPixelData[canvasImageDataIndex++] = lookupTable[sp][3]; // Alpha + } + } + + image.rgba = true; + image.cachedLut = undefined; + image.render = undefined; + image.slope = 1; + image.intercept = 0; + image.minPixelValue = 0; + image.maxPixelValue = 255; + image.windowWidth = 255; + image.windowCenter = 128; + + image.getPixelData = function () { + return storedColorPixelData; + }; +} + +/***/ }), + +/***/ "./pixelToCanvas.js": +/*!**************************!*\ + !*** ./pixelToCanvas.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/getTransform.js */ "./internal/getTransform.js"); + + +/** + * Converts a point in the pixel coordinate system to the canvas coordinate system + * system. This can be used to render using canvas context without having the weird + * side effects that come from scaling and non square pixels + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @param {{x: Number, y: Number}} pt The transformed point in the pixel coordinate system + * + * @returns {{x: Number, y: Number}} The input point in the canvas coordinate system + * @memberof PixelCoordinateSystem + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, pt) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var transform = Object(_internal_getTransform_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement); + return transform.transformPoint(pt.x, pt.y); +}); + +/***/ }), + +/***/ "./rendering/doesImageNeedToBeRendered.js": +/*!************************************************!*\ + !*** ./rendering/doesImageNeedToBeRendered.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Determine whether or not an Enabled Element needs to be re-rendered. + * + * If the imageId has changed, or if any of the last rendered viewport + * parameters have changed, this function will return true. + * + * @param {EnabledElement} enabledElement An Enabled Element + * @param {Image} image An Image + * @return {boolean} Whether or not the Enabled Element needs to re-render its image + * @memberof rendering + */ +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, image) { + var lastRenderedImageId = enabledElement.renderingTools.lastRenderedImageId; + var lastRenderedViewport = enabledElement.renderingTools.lastRenderedViewport; + return image.imageId !== lastRenderedImageId || !lastRenderedViewport || lastRenderedViewport.windowCenter !== enabledElement.viewport.voi.windowCenter || lastRenderedViewport.windowWidth !== enabledElement.viewport.voi.windowWidth || lastRenderedViewport.invert !== enabledElement.viewport.invert || lastRenderedViewport.rotation !== enabledElement.viewport.rotation || lastRenderedViewport.hflip !== enabledElement.viewport.hflip || lastRenderedViewport.vflip !== enabledElement.viewport.vflip || lastRenderedViewport.modalityLUT !== enabledElement.viewport.modalityLUT || lastRenderedViewport.voiLUT !== enabledElement.viewport.voiLUT || lastRenderedViewport.colormap !== enabledElement.viewport.colormap; +}); + +/***/ }), + +/***/ "./rendering/getLut.js": +/*!*****************************!*\ + !*** ./rendering/getLut.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_computeAutoVoi_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/computeAutoVoi.js */ "./internal/computeAutoVoi.js"); +/* harmony import */ var _lutMatches_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lutMatches.js */ "./rendering/lutMatches.js"); +/* harmony import */ var _internal_generateLut_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/generateLut.js */ "./internal/generateLut.js"); + + + +/** + * Retrieve or generate a LUT Array for an Image and Viewport + * + * @param {Image} image An Image Object + * @param {Viewport} viewport An Viewport Object + * @param {Boolean} invalidated Whether or not the LUT data has been invalidated + * (e.g. by a change to the windowWidth, windowCenter, or invert viewport parameters). + * @return {Uint8ClampedArray} LUT Array + * @memberof rendering + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, viewport, invalidated) { + // If we have a cached lut and it has the right values, return it immediately + if (image.cachedLut !== undefined && image.cachedLut.windowCenter === viewport.voi.windowCenter && image.cachedLut.windowWidth === viewport.voi.windowWidth && Object(_lutMatches_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image.cachedLut.modalityLUT, viewport.modalityLUT) && Object(_lutMatches_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image.cachedLut.voiLUT, viewport.voiLUT) && image.cachedLut.invert === viewport.invert && invalidated !== true) { + return image.cachedLut.lutArray; + } + + Object(_internal_computeAutoVoi_js__WEBPACK_IMPORTED_MODULE_0__["default"])(viewport, image); // Lut is invalid or not present, regenerate it and cache it + + Object(_internal_generateLut_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, viewport.voi.windowWidth, viewport.voi.windowCenter, viewport.invert, viewport.modalityLUT, viewport.voiLUT); + image.cachedLut.windowWidth = viewport.voi.windowWidth; + image.cachedLut.windowCenter = viewport.voi.windowCenter; + image.cachedLut.invert = viewport.invert; + image.cachedLut.voiLUT = viewport.voiLUT; + image.cachedLut.modalityLUT = viewport.modalityLUT; + return image.cachedLut.lutArray; +}); + +/***/ }), + +/***/ "./rendering/index.js": +/*!****************************!*\ + !*** ./rendering/index.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _renderColorImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderColorImage.js */ "./rendering/renderColorImage.js"); +/* harmony import */ var _renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderGrayscaleImage.js */ "./rendering/renderGrayscaleImage.js"); +/* harmony import */ var _renderWebImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderWebImage.js */ "./rendering/renderWebImage.js"); +/* harmony import */ var _renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./renderPseudoColorImage.js */ "./rendering/renderPseudoColorImage.js"); +/* harmony import */ var _renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./renderLabelMapImage.js */ "./rendering/renderLabelMapImage.js"); +/* harmony import */ var _renderToCanvas_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./renderToCanvas.js */ "./rendering/renderToCanvas.js"); + + + + + + +/** + * @module rendering + */ + +/* harmony default export */ __webpack_exports__["default"] = ({ + colorImage: _renderColorImage_js__WEBPACK_IMPORTED_MODULE_0__["renderColorImage"], + grayscaleImage: _renderGrayscaleImage_js__WEBPACK_IMPORTED_MODULE_1__["renderGrayscaleImage"], + webImage: _renderWebImage_js__WEBPACK_IMPORTED_MODULE_2__["renderWebImage"], + pseudoColorImage: _renderPseudoColorImage_js__WEBPACK_IMPORTED_MODULE_3__["renderPseudoColorImage"], + labelMapImage: _renderLabelMapImage_js__WEBPACK_IMPORTED_MODULE_4__["renderLabelMapImage"], + toCanvas: _renderToCanvas_js__WEBPACK_IMPORTED_MODULE_5__["default"] +}); + +/***/ }), + +/***/ "./rendering/initializeRenderCanvas.js": +/*!*********************************************!*\ + !*** ./rendering/initializeRenderCanvas.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Sets size and clears canvas + * + * @param {Object} enabledElement Cornerstone Enabled Element + * @param {Object} image Image to be rendered + * @returns {void} + * @memberof rendering + */ +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, image) { + var renderCanvas = enabledElement.renderingTools.renderCanvas; // Resize the canvas + + renderCanvas.width = image.width; + renderCanvas.height = image.height; + var canvasContext = renderCanvas.getContext('2d'); // NOTE - we need to fill the render canvas with white pixels since we + // control the luminance using the alpha channel to improve rendering performance. + + canvasContext.fillStyle = 'white'; + canvasContext.fillRect(0, 0, renderCanvas.width, renderCanvas.height); + var renderCanvasData = canvasContext.getImageData(0, 0, image.width, image.height); + enabledElement.renderingTools.renderCanvasContext = canvasContext; + enabledElement.renderingTools.renderCanvasData = renderCanvasData; +}); + +/***/ }), + +/***/ "./rendering/lutMatches.js": +/*!*********************************!*\ + !*** ./rendering/lutMatches.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Check if two lookup tables match + * + * @param {LUT} a A lookup table function + * @param {LUT} b Another lookup table function + * @return {boolean} Whether or not they match + * @memberof rendering + */ +/* harmony default export */ __webpack_exports__["default"] = (function (a, b) { + // If undefined, they are equal + if (!a && !b) { + return true; + } // If one is undefined, not equal + + + if (!a || !b) { + return false; + } // Check the unique ids + + + return a.id === b.id; +}); + +/***/ }), + +/***/ "./rendering/renderColorImage.js": +/*!***************************************!*\ + !*** ./rendering/renderColorImage.js ***! + \***************************************/ +/*! exports provided: renderColorImage, addColorLayer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderColorImage", function() { return renderColorImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addColorLayer", function() { return addColorLayer; }); +/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js"); +/* harmony import */ var _internal_generateColorLut_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/generateColorLut.js */ "./internal/generateColorLut.js"); +/* harmony import */ var _internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/storedColorPixelDataToCanvasImageData.js */ "./internal/storedColorPixelDataToCanvasImageData.js"); +/* harmony import */ var _internal_storedRGBAPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/storedRGBAPixelDataToCanvasImageData.js */ "./internal/storedRGBAPixelDataToCanvasImageData.js"); +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); +/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../webgl/index.js */ "./webgl/index.js"); +/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js"); +/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js"); +/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js"); + + + + + + + + + +/** + * Generates an appropriate Look Up Table to render the given image with the given window width and level (specified in the viewport) + * Uses an internal cache for performance + * + * @param {Object} image The image to be rendered + * @param {Object} viewport The viewport values used for rendering + * @returns {Uint8ClampedArray} Look Up Table array. + * @memberof rendering + */ + +function getLut(image, viewport) { + // If we have a cached lut and it has the right values, return it immediately + if (image.cachedLut !== undefined && image.cachedLut.windowCenter === viewport.voi.windowCenter && image.cachedLut.windowWidth === viewport.voi.windowWidth && image.cachedLut.invert === viewport.invert) { + return image.cachedLut.lutArray; + } // Lut is invalid or not present, regenerate it and cache it + + + Object(_internal_generateColorLut_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, viewport.voi.windowWidth, viewport.voi.windowCenter, viewport.invert); + image.cachedLut.windowWidth = viewport.voi.windowWidth; + image.cachedLut.windowCenter = viewport.voi.windowCenter; + image.cachedLut.invert = viewport.invert; + return image.cachedLut.lutArray; +} +/** + * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate + * it is returned, otherwise adjustments are made. It also sets the color transfer functions. + * + * @param {Object} enabledElement The cornerstone enabled element + * @param {Object} image The image to be rendered + * @param {Boolean} invalidated Is pixel data valid + * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image + * @memberof rendering + */ + + +function getRenderCanvas(enabledElement, image, invalidated) { + var canvasWasColor = enabledElement.renderingTools.lastRenderedIsColor === true; + + if (!enabledElement.renderingTools.renderCanvas || !canvasWasColor) { + enabledElement.renderingTools.renderCanvas = document.createElement('canvas'); + } + + var renderCanvas = enabledElement.renderingTools.renderCanvas; // The ww/wc is identity and not inverted - get a canvas with the image rendered into it for + // Fast drawing + + if (enabledElement.viewport.voi.windowWidth === 255 && enabledElement.viewport.voi.windowCenter === 128 && enabledElement.viewport.invert === false && image.getCanvas && image.getCanvas()) { + return image.getCanvas(); + } // Apply the lut to the stored pixel data onto the render canvas + + + if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__["default"])(enabledElement, image) === false && invalidated !== true) { + return renderCanvas; + } // If our render canvas does not match the size of this image reset it + // NOTE: This might be inefficient if we are updating multiple images of different + // Sizes frequently. + + + if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) { + Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image); + } // Get the lut to use + + + var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + var colorLut = getLut(image, enabledElement.viewport); + image.stats = image.stats || {}; + image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + var renderCanvasData = enabledElement.renderingTools.renderCanvasData; + var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; // The color image voi/invert has been modified - apply the lut to the underlying + // Pixel data and put it into the renderCanvas + + if (image.rgba) { + Object(_internal_storedRGBAPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_3__["default"])(image, colorLut, renderCanvasData.data); + } else { + Object(_internal_storedColorPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_2__["default"])(image, colorLut, renderCanvasData.data); + } + + start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); + renderCanvasContext.putImageData(renderCanvasData, 0, 0); + image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_0__["default"])() - start; + return renderCanvas; +} +/** + * API function to render a color image to an enabled element + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof rendering + */ + + +function renderColorImage(enabledElement, invalidated) { + if (enabledElement === undefined) { + throw new Error('renderColorImage: enabledElement parameter must not be undefined'); + } + + var image = enabledElement.image; + + if (image === undefined) { + throw new Error('renderColorImage: image must be loaded before it can be drawn'); + } // Get the canvas context and reset the transform + + + var context = enabledElement.canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas + + context.fillStyle = 'black'; + context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties + + Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement, context); + var renderCanvas; + + if (enabledElement.options && enabledElement.options.renderer && enabledElement.options.renderer.toLowerCase() === 'webgl') { + // If this enabled element has the option set for WebGL, we should + // User it as our renderer. + renderCanvas = _webgl_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].renderer.render(enabledElement); + } else { + // If no options are set we will retrieve the renderCanvas through the + // Normal Canvas rendering path + renderCanvas = getRenderCanvas(enabledElement, image, invalidated); + } + + var sx = enabledElement.viewport.displayedArea.tlhc.x - 1; + var sy = enabledElement.viewport.displayedArea.tlhc.y - 1; + var width = enabledElement.viewport.displayedArea.brhc.x - sx; + var height = enabledElement.viewport.displayedArea.brhc.y - sy; + context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height); + enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement); +} +function addColorLayer(layer, invalidated) { + if (layer === undefined) { + throw new Error('addColorLayer: layer parameter must not be undefined'); + } + + var image = layer.image; + + if (image === undefined) { + throw new Error('addColorLayer: image must be loaded before it can be drawn'); + } // All multi-layer images should include the alpha value + + + image.rgba = true; + layer.canvas = getRenderCanvas(layer, image, invalidated); + var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !layer.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; + layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(layer); +} + +/***/ }), + +/***/ "./rendering/renderGrayscaleImage.js": +/*!*******************************************!*\ + !*** ./rendering/renderGrayscaleImage.js ***! + \*******************************************/ +/*! exports provided: renderGrayscaleImage, addGrayscaleLayer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderGrayscaleImage", function() { return renderGrayscaleImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addGrayscaleLayer", function() { return addGrayscaleLayer; }); +/* harmony import */ var _internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageData.js */ "./internal/storedPixelDataToCanvasImageData.js"); +/* harmony import */ var _internal_storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageDataRGBA.js */ "./internal/storedPixelDataToCanvasImageDataRGBA.js"); +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); +/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js"); +/* harmony import */ var _webgl_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../webgl/index.js */ "./webgl/index.js"); +/* harmony import */ var _getLut_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getLut.js */ "./rendering/getLut.js"); +/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js"); +/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js"); +/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js"); + + + + + + + + + +/** + * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate + * it is returned, otherwise adjustments are made. It also sets the color transfer functions. + * + * @param {Object} enabledElement The cornerstone enabled element + * @param {Object} image The image to be rendered + * @param {Boolean} invalidated Is pixel data valid + * @param {Boolean} [useAlphaChannel = true] Will an alpha channel be used + * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image + * @memberof rendering + */ + +function getRenderCanvas(enabledElement, image, invalidated) { + var useAlphaChannel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var canvasWasColor = enabledElement.renderingTools.lastRenderedIsColor === true; + + if (!enabledElement.renderingTools.renderCanvas || canvasWasColor) { + enabledElement.renderingTools.renderCanvas = document.createElement('canvas'); + Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image); + } + + var renderCanvas = enabledElement.renderingTools.renderCanvas; + + if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_6__["default"])(enabledElement, image) === false && invalidated !== true) { + return renderCanvas; + } // If our render canvas does not match the size of this image reset it + // NOTE: This might be inefficient if we are updating multiple images of different + // Sizes frequently. + + + if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) { + Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_7__["default"])(enabledElement, image); + } // Get the lut to use + + + var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); + var lut = Object(_getLut_js__WEBPACK_IMPORTED_MODULE_5__["default"])(image, enabledElement.viewport, invalidated); + image.stats = image.stats || {}; + image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - start; + var renderCanvasData = enabledElement.renderingTools.renderCanvasData; + var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; // Gray scale image - apply the lut and put the resulting image onto the render canvas + + if (useAlphaChannel) { + Object(_internal_storedPixelDataToCanvasImageData_js__WEBPACK_IMPORTED_MODULE_0__["default"])(image, lut, renderCanvasData.data); + } else { + Object(_internal_storedPixelDataToCanvasImageDataRGBA_js__WEBPACK_IMPORTED_MODULE_1__["default"])(image, lut, renderCanvasData.data); + } + + start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])(); + renderCanvasContext.putImageData(renderCanvasData, 0, 0); + image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_3__["default"])() - start; + return renderCanvas; +} +/** + * API function to draw a grayscale image to a given enabledElement + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof rendering + */ + + +function renderGrayscaleImage(enabledElement, invalidated) { + if (enabledElement === undefined) { + throw new Error('drawImage: enabledElement parameter must not be undefined'); + } + + var image = enabledElement.image; + + if (image === undefined) { + throw new Error('drawImage: image must be loaded before it can be drawn'); + } // Get the canvas context and reset the transform + + + var context = enabledElement.canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas + + context.fillStyle = 'black'; + context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties + + Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, context); + var renderCanvas; + + if (enabledElement.options && enabledElement.options.renderer && enabledElement.options.renderer.toLowerCase() === 'webgl') { + // If this enabled element has the option set for WebGL, we should + // User it as our renderer. + renderCanvas = _webgl_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].renderer.render(enabledElement); + } else { + // If no options are set we will retrieve the renderCanvas through the + // Normal Canvas rendering path + renderCanvas = getRenderCanvas(enabledElement, image, invalidated); + } + + var sx = enabledElement.viewport.displayedArea.tlhc.x - 1; + var sy = enabledElement.viewport.displayedArea.tlhc.y - 1; + var width = enabledElement.viewport.displayedArea.brhc.x - sx; + var height = enabledElement.viewport.displayedArea.brhc.y - sy; + context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height); + enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(enabledElement); +} +/** + * API function to draw a grayscale image to a given layer + * + * @param {EnabledElementLayer} layer The layer that the image will be added to + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @param {Boolean} [useAlphaChannel] - Whether or not to render the grayscale image using only the alpha channel. + This does not work if this layer is not the first layer in the enabledElement. + * @returns {void} + */ + +function addGrayscaleLayer(layer, invalidated) { + var useAlphaChannel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (layer === undefined) { + throw new Error('addGrayscaleLayer: layer parameter must not be undefined'); + } + + var image = layer.image; + + if (image === undefined) { + throw new Error('addGrayscaleLayer: image must be loaded before it can be drawn'); + } + + layer.canvas = getRenderCanvas(layer, image, invalidated, useAlphaChannel); + var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !layer.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; + layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_8__["default"])(layer); +} + +/***/ }), + +/***/ "./rendering/renderLabelMapImage.js": +/*!******************************************!*\ + !*** ./rendering/renderLabelMapImage.js ***! + \******************************************/ +/*! exports provided: renderLabelMapImage, addLabelMapLayer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderLabelMapImage", function() { return renderLabelMapImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addLabelMapLayer", function() { return addLabelMapLayer; }); +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); +/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js"); +/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js"); +/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js"); +/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js"); +/* harmony import */ var _internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageDataColorLUT.js */ "./internal/storedPixelDataToCanvasImageDataColorLUT.js"); +/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js"); + + + + + + + +/** + * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate + * it is returned, otherwise adjustments are made. It also sets the color transfer functions. + * + * @param {Object} enabledElement The cornerstone enabled element + * @param {Object} image The image to be rendered + * @param {Boolean} invalidated Is pixel data valid + * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image + * @memberof rendering + */ + +function getRenderCanvas(enabledElement, image, invalidated) { + if (!enabledElement.renderingTools.renderCanvas) { + enabledElement.renderingTools.renderCanvas = document.createElement('canvas'); + } + + var renderCanvas = enabledElement.renderingTools.renderCanvas; + var colormap = enabledElement.viewport.colormap || enabledElement.options.colormap; + + if (enabledElement.options.colormap) { + console.warn('enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead'); + } + + if (colormap && typeof colormap === 'string') { + colormap = _colors_index_js__WEBPACK_IMPORTED_MODULE_6__["default"].getColormap(colormap); + } + + if (!colormap) { + throw new Error('renderLabelMapImage: colormap not found.'); + } + + var colormapId = colormap.getId(); + + if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement, image) === false && invalidated !== true && enabledElement.renderingTools.colormapId === colormapId) { + return renderCanvas; + } // If our render canvas does not match the size of this image reset it + // NOTE: This might be inefficient if we are updating multiple images of different + // Sizes frequently. + + + if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) { + Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, image); + } // Get the lut to use + + + var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + + if (!enabledElement.renderingTools.colorLut || invalidated || enabledElement.renderingTools.colormapId !== colormapId) { + enabledElement.renderingTools.colorLut = colormap.createLookupTable(); + enabledElement.renderingTools.colormapId = colormapId; + } + + image.stats = image.stats || {}; + image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; + var colorLut = enabledElement.renderingTools.colorLut; + var renderCanvasData = enabledElement.renderingTools.renderCanvasData; + var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; + Object(_internal_storedPixelDataToCanvasImageDataColorLUT_js__WEBPACK_IMPORTED_MODULE_5__["default"])(image, colorLut, renderCanvasData.data); + start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + renderCanvasContext.putImageData(renderCanvasData, 0, 0); + image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; + return renderCanvas; +} +/** + * API function to draw a label map image to a given enabledElement + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof rendering + */ + + +function renderLabelMapImage(enabledElement, invalidated) { + if (enabledElement === undefined) { + throw new Error('renderLabelMapImage: enabledElement parameter must not be undefined'); + } + + var image = enabledElement.image; + + if (image === undefined) { + throw new Error('renderLabelMapImage: image must be loaded before it can be drawn'); + } // Get the canvas context and reset the transform + + + var context = enabledElement.canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas + + context.fillStyle = 'black'; + context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties + + Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); // If no options are set we will retrieve the renderCanvas through the + // Normal Canvas rendering path + // TODO: Add WebGL support for label map pipeline + + var renderCanvas = getRenderCanvas(enabledElement, image, invalidated); + var sx = enabledElement.viewport.displayedArea.tlhc.x - 1; + var sy = enabledElement.viewport.displayedArea.tlhc.y - 1; + var width = enabledElement.viewport.displayedArea.brhc.x - sx; + var height = enabledElement.viewport.displayedArea.brhc.y - sy; + context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height); + enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_3__["default"])(enabledElement); +} +/** + * API function to draw a pseudo-color image to a given layer + * + * @param {EnabledElementLayer} layer The layer that the image will be added to + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + */ + +function addLabelMapLayer(layer, invalidated) { + if (layer === undefined) { + throw new Error('addLabelMapLayer: layer parameter must not be undefined'); + } + + var image = layer.image; + + if (image === undefined) { + throw new Error('addLabelMapLayer: image must be loaded before it can be drawn'); + } + + layer.canvas = getRenderCanvas(layer, image, invalidated); + var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !layer.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; + layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_3__["default"])(layer); +} + +/***/ }), + +/***/ "./rendering/renderPseudoColorImage.js": +/*!*********************************************!*\ + !*** ./rendering/renderPseudoColorImage.js ***! + \*********************************************/ +/*! exports provided: renderPseudoColorImage, addPseudoColorLayer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderPseudoColorImage", function() { return renderPseudoColorImage; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addPseudoColorLayer", function() { return addPseudoColorLayer; }); +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); +/* harmony import */ var _internal_now_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/now.js */ "./internal/now.js"); +/* harmony import */ var _initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./initializeRenderCanvas.js */ "./rendering/initializeRenderCanvas.js"); +/* harmony import */ var _getLut_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getLut.js */ "./rendering/getLut.js"); +/* harmony import */ var _saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./saveLastRendered.js */ "./rendering/saveLastRendered.js"); +/* harmony import */ var _doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./doesImageNeedToBeRendered.js */ "./rendering/doesImageNeedToBeRendered.js"); +/* harmony import */ var _internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js */ "./internal/storedPixelDataToCanvasImageDataPseudocolorLUT.js"); +/* harmony import */ var _colors_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../colors/index.js */ "./colors/index.js"); + + + + + + + + +/** + * Returns an appropriate canvas to render the Image. If the canvas available in the cache is appropriate + * it is returned, otherwise adjustments are made. It also sets the color transfer functions. + * + * @param {Object} enabledElement The cornerstone enabled element + * @param {Object} image The image to be rendered + * @param {Boolean} invalidated Is pixel data valid + * @returns {HTMLCanvasElement} An appropriate canvas for rendering the image + * @memberof rendering + */ + +function getRenderCanvas(enabledElement, image, invalidated) { + if (!enabledElement.renderingTools.renderCanvas) { + enabledElement.renderingTools.renderCanvas = document.createElement('canvas'); + } + + var renderCanvas = enabledElement.renderingTools.renderCanvas; + var colormap = enabledElement.viewport.colormap || enabledElement.options.colormap; + + if (enabledElement.options.colormap) { + console.warn('enabledElement.options.colormap is deprecated. Use enabledElement.viewport.colormap instead'); + } + + if (colormap && typeof colormap === 'string') { + colormap = _colors_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getColormap(colormap); + } + + if (!colormap) { + throw new Error('renderPseudoColorImage: colormap not found.'); + } + + var colormapId = colormap.getId(); + + if (Object(_doesImageNeedToBeRendered_js__WEBPACK_IMPORTED_MODULE_5__["default"])(enabledElement, image) === false && invalidated !== true && enabledElement.renderingTools.colormapId === colormapId) { + return renderCanvas; + } // If our render canvas does not match the size of this image reset it + // NOTE: This might be inefficient if we are updating multiple images of different + // Sizes frequently. + + + if (renderCanvas.width !== image.width || renderCanvas.height !== image.height) { + Object(_initializeRenderCanvas_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElement, image); + } // Get the lut to use + + + var start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + + if (!enabledElement.renderingTools.colorLut || invalidated || enabledElement.renderingTools.colormapId !== colormapId) { + colormap.setNumberOfColors(256); + enabledElement.renderingTools.colorLut = colormap.createLookupTable(); + enabledElement.renderingTools.colormapId = colormapId; + } + + var lut = Object(_getLut_js__WEBPACK_IMPORTED_MODULE_3__["default"])(image, enabledElement.viewport, invalidated); + image.stats = image.stats || {}; + image.stats.lastLutGenerateTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; + var colorLut = enabledElement.renderingTools.colorLut; + var renderCanvasData = enabledElement.renderingTools.renderCanvasData; + var renderCanvasContext = enabledElement.renderingTools.renderCanvasContext; + Object(_internal_storedPixelDataToCanvasImageDataPseudocolorLUT_js__WEBPACK_IMPORTED_MODULE_6__["default"])(image, lut, colorLut, renderCanvasData.data); + start = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])(); + renderCanvasContext.putImageData(renderCanvasData, 0, 0); + image.stats.lastPutImageDataTime = Object(_internal_now_js__WEBPACK_IMPORTED_MODULE_1__["default"])() - start; + return renderCanvas; +} +/** + * API function to draw a pseudo-color image to a given enabledElement + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof rendering + */ + + +function renderPseudoColorImage(enabledElement, invalidated) { + if (enabledElement === undefined) { + throw new Error('drawImage: enabledElement parameter must not be undefined'); + } + + var image = enabledElement.image; + + if (image === undefined) { + throw new Error('drawImage: image must be loaded before it can be drawn'); + } // Get the canvas context and reset the transform + + + var context = enabledElement.canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas + + context.fillStyle = 'black'; + context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties + + Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); // If no options are set we will retrieve the renderCanvas through the + // Normal Canvas rendering path + // TODO: Add WebGL support for pseudocolor pipeline + + var renderCanvas = getRenderCanvas(enabledElement, image, invalidated); + var sx = enabledElement.viewport.displayedArea.tlhc.x - 1; + var sy = enabledElement.viewport.displayedArea.tlhc.y - 1; + var width = enabledElement.viewport.displayedArea.brhc.x - sx; + var height = enabledElement.viewport.displayedArea.brhc.y - sy; + context.drawImage(renderCanvas, sx, sy, width, height, 0, 0, width, height); + enabledElement.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement); +} +/** + * API function to draw a pseudo-color image to a given layer + * + * @param {EnabledElementLayer} layer The layer that the image will be added to + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + */ + +function addPseudoColorLayer(layer, invalidated) { + if (layer === undefined) { + throw new Error('addPseudoColorLayer: layer parameter must not be undefined'); + } + + var image = layer.image; + + if (image === undefined) { + throw new Error('addPseudoColorLayer: image must be loaded before it can be drawn'); + } + + layer.canvas = getRenderCanvas(layer, image, invalidated); + var context = layer.canvas.getContext('2d'); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !layer.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; + layer.renderingTools = Object(_saveLastRendered_js__WEBPACK_IMPORTED_MODULE_4__["default"])(layer); +} + +/***/ }), + +/***/ "./rendering/renderToCanvas.js": +/*!*************************************!*\ + !*** ./rendering/renderToCanvas.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internal/drawImageSync.js */ "./internal/drawImageSync.js"); +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony import */ var _internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../internal/tryEnableWebgl.js */ "./internal/tryEnableWebgl.js"); + + + + + +/** + * @typedef {Object} EnabledElementStub + * @property {HTMLElement} element The enabled element + * @property {HTMLCanvasElement} canvas The current canvas + * @property {Object} image Currently displayed image + * @property {Boolean} invalid Whether or not the image pixel data has been changed + * @property {Boolean} needsRedraw A flag for triggering a redraw of the canvas without re-retrieving the pixel data, since it remains valid + * @property {Object} options Layer drawing options + * @property {Object[]} layers Layers added to the EnabledElement + * @property {Object} data + * @property {Object} renderingTools + * @property {Object} viewport The current viewport + * @memberof rendering + */ + +/** + * creates a dummy enabled element + * + * @param {HTMLCanvasElement} canvas the canvas that will be assigned to the enabled element. + * @param {any} image An Image loaded by a Cornerstone Image Loader + * @param { any } options Options for rendering the image (e.g.enable webgl by {renderer: 'webgl' }) + * @param { any } viewport A set of Cornerstone viewport parameters + * @returns {EnabledElementStub} a dummy enabled element + * @memberof rendering + */ + +function createEnabledElementStub(canvas, image, options, viewport) { + return { + element: canvas, + canvas: canvas, + image: image, + invalid: true, + // True if image needs to be drawn, false if not + needsRedraw: true, + options: options, + layers: [], + data: {}, + renderingTools: {}, + viewport: viewport + }; +} +/** + * Render the image to the provided canvas immediately. + * @param {any} canvas The HTML canvas where the image will be rendered. + * @param {any} image An Image loaded by a Cornerstone Image Loader + * @param {any} [viewport = null] A set of Cornerstone viewport parameters + * @param {any} [options = null] Options for rendering the image (e.g. enable webgl by {renderer: 'webgl'}) + * @returns {void} + * @memberof rendering + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (canvas, image) { + var viewport = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + if (canvas === undefined) { + throw new Error('renderToCanvas: parameter canvas cannot be undefined'); + } // If this enabled element has the option set for WebGL, we should + // Check if this device actually supports it + + + if (options && options.renderer && options.renderer.toLowerCase() === 'webgl') { + Object(_internal_tryEnableWebgl_js__WEBPACK_IMPORTED_MODULE_4__["default"])(options); + } + + var defaultViewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])(canvas, image); + + if (viewport) { + Object.assign(defaultViewport, viewport); + } + + var enabledElementStub = createEnabledElementStub(canvas, image, options, defaultViewport); + var eventDetails = { + enabledElement: enabledElementStub, + timestamp: Date.now() + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElementStub.element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].PRE_RENDER, eventDetails); + Object(_internal_drawImageSync_js__WEBPACK_IMPORTED_MODULE_2__["default"])(enabledElementStub, enabledElementStub.invalid); +}); + +/***/ }), + +/***/ "./rendering/renderWebImage.js": +/*!*************************************!*\ + !*** ./rendering/renderWebImage.js ***! + \*************************************/ +/*! exports provided: renderWebImage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderWebImage", function() { return renderWebImage; }); +/* harmony import */ var _setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../setToPixelCoordinateSystem.js */ "./setToPixelCoordinateSystem.js"); +/* harmony import */ var _renderColorImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderColorImage.js */ "./rendering/renderColorImage.js"); + + +/** + * API function to draw a standard web image (PNG, JPG) to an enabledImage + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element to redraw + * @param {Boolean} invalidated - true if pixel data has been invalidated and cached rendering should not be used + * @returns {void} + * @memberof rendering + */ + +function renderWebImage(enabledElement, invalidated) { + if (enabledElement === undefined) { + throw new Error('renderWebImage: enabledElement parameter must not be undefined'); + } + + var image = enabledElement.image; + + if (image === undefined) { + throw new Error('renderWebImage: image must be loaded before it can be drawn'); + } // If the viewport ww/wc and invert all match the initial state of the image, we can draw the image + // Directly. If any of those are changed, we call renderColorImage() to apply the lut + + + if (enabledElement.viewport.voi.windowWidth === enabledElement.image.windowWidth && enabledElement.viewport.voi.windowCenter === enabledElement.image.windowCenter && enabledElement.viewport.invert === false) { + // Get the canvas context and reset the transform + var context = enabledElement.canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); // Clear the canvas + + context.fillStyle = 'black'; + context.fillRect(0, 0, enabledElement.canvas.width, enabledElement.canvas.height); // Turn off image smooth/interpolation if pixelReplication is set in the viewport + + context.imageSmoothingEnabled = !enabledElement.viewport.pixelReplication; + context.mozImageSmoothingEnabled = context.imageSmoothingEnabled; // Save the canvas context state and apply the viewport properties + + Object(_setToPixelCoordinateSystem_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, context); + var sx = enabledElement.viewport.displayedArea.tlhc.x - 1; + var sy = enabledElement.viewport.displayedArea.tlhc.y - 1; + var width = enabledElement.viewport.displayedArea.brhc.x - sx; + var height = enabledElement.viewport.displayedArea.brhc.y - sy; + context.drawImage(image.getImage(), sx, sy, width, height, 0, 0, width, height); + } else { + Object(_renderColorImage_js__WEBPACK_IMPORTED_MODULE_1__["renderColorImage"])(enabledElement, invalidated); + } +} + +/***/ }), + +/***/ "./rendering/saveLastRendered.js": +/*!***************************************!*\ + !*** ./rendering/saveLastRendered.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Saves the parameters of the last render into renderingTools, used later to decide if data can be reused. + * + * @param {Object} enabledElement Cornerstone EnabledElement + * @returns {Object} enabledElement.renderingTools + * @memberof rendering + */ +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement) { + var imageId = enabledElement.image.imageId; + var viewport = enabledElement.viewport; + var isColor = enabledElement.image.color; + enabledElement.renderingTools.lastRenderedImageId = imageId; + enabledElement.renderingTools.lastRenderedIsColor = isColor; + enabledElement.renderingTools.lastRenderedViewport = { + windowCenter: viewport.voi.windowCenter, + windowWidth: viewport.voi.windowWidth, + invert: viewport.invert, + rotation: viewport.rotation, + hflip: viewport.hflip, + vflip: viewport.vflip, + modalityLUT: viewport.modalityLUT, + voiLUT: viewport.voiLUT, + colormap: viewport.colormap + }; + return enabledElement.renderingTools; +}); + +/***/ }), + +/***/ "./reset.js": +/*!******************!*\ + !*** ./reset.js ***! + \******************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); + + + +/** + * Resets the viewport to the default settings + * + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); + enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement.canvas, enabledElement.image); + Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element); +}); + +/***/ }), + +/***/ "./resize.js": +/*!*******************!*\ + !*** ./resize.js ***! + \*******************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _fitToWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fitToWindow.js */ "./fitToWindow.js"); +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./triggerEvent.js */ "./triggerEvent.js"); +/* harmony import */ var _internal_getImageSize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./internal/getImageSize.js */ "./internal/getImageSize.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./events.js */ "./events.js"); + + + + + + +/** + * This module is responsible for enabling an element to display images with cornerstone + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {HTMLElement} canvas The Canvas DOM element within the DOM element enabled for Cornerstone + * @returns {void} + */ + +function setCanvasSize(element, canvas) { + // The device pixel ratio is 1.0 for normal displays and > 1.0 + // For high DPI displays like Retina + + /* + This functionality is disabled due to buggy behavior on systems with mixed DPI's. If the canvas + is created on a display with high DPI (e.g. 2.0) and then the browser window is dragged to + a different display with a different DPI (e.g. 1.0), the canvas is not recreated so the pageToPixel + produces incorrect results. I couldn't find any way to determine when the DPI changed other than + by polling which is not very clean. If anyone has any ideas here, please let me know, but for now + we will disable this functionality. We may want + to add a mechanism to optionally enable this functionality if we can determine it is safe to do + so (e.g. iPad or iPhone or perhaps enumerate the displays on the system. I am choosing + to be cautious here since I would rather not have bug reports or safety issues related to this + scenario. + var devicePixelRatio = window.devicePixelRatio; + if(devicePixelRatio === undefined) { + devicePixelRatio = 1.0; + } + */ + // Avoid setting the same value because it flashes the canvas with IE and Edge + if (canvas.width !== element.clientWidth) { + canvas.width = element.clientWidth; + canvas.style.width = "".concat(element.clientWidth, "px"); + } // Avoid setting the same value because it flashes the canvas with IE and Edge + + + if (canvas.height !== element.clientHeight) { + canvas.height = element.clientHeight; + canvas.style.height = "".concat(element.clientHeight, "px"); + } +} +/** + * Checks if the image of a given enabled element fitted the window + * before the resize + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element + * @param {number} oldCanvasWidth The width of the canvas before the resize + * @param {number} oldCanvasHeight The height of the canvas before the resize + * @return {Boolean} true if it fitted the windows, false otherwise + */ + + +function wasFitToWindow(enabledElement, oldCanvasWidth, oldCanvasHeight) { + var scale = enabledElement.viewport.scale; + var imageSize = Object(_internal_getImageSize_js__WEBPACK_IMPORTED_MODULE_4__["default"])(enabledElement.image, enabledElement.viewport.rotation); + var imageWidth = Math.round(imageSize.width * scale); + var imageHeight = Math.round(imageSize.height * scale); + var x = enabledElement.viewport.translation.x; + var y = enabledElement.viewport.translation.y; + return imageWidth === oldCanvasWidth && imageHeight <= oldCanvasHeight || imageWidth <= oldCanvasWidth && imageHeight === oldCanvasHeight && x === 0 && y === 0; +} +/** + * Rescale the image relative to the changed size of the canvas + * + * @param {EnabledElement} enabledElement The Cornerstone Enabled Element + * @param {number} oldCanvasWidth The width of the canvas before the resize + * @param {number} oldCanvasHeight The height of the canvas before the resize + * @return {void} + */ + + +function relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight) { + var scale = enabledElement.viewport.scale; + var canvasWidth = enabledElement.canvas.width; + var canvasHeight = enabledElement.canvas.height; + var relWidthChange = canvasWidth / oldCanvasWidth; + var relHeightChange = canvasHeight / oldCanvasHeight; + var relChange = Math.sqrt(relWidthChange * relHeightChange); + enabledElement.viewport.scale = relChange * scale; +} +/** + * Resizes an enabled element and optionally fits the image to window + * + * @param {HTMLElement} element The DOM element enabled for Cornerstone + * @param {Boolean} forceFitToWindow true to to force a refit, false to rescale accordingly + * @returns {void} + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (element, forceFitToWindow) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + var oldCanvasWidth = enabledElement.canvas.width; + var oldCanvasHeight = enabledElement.canvas.height; + setCanvasSize(element, enabledElement.canvas); + var eventData = { + element: element + }; + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_5__["default"].ELEMENT_RESIZED, eventData); + + if (enabledElement.image === undefined) { + return; + } + + if (forceFitToWindow || wasFitToWindow(enabledElement, oldCanvasWidth, oldCanvasHeight)) { + // Fit the image to the window again if it fitted before the resize + Object(_fitToWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element); + } else { + // Adapt the scale of a zoomed or panned image relative to the size change + relativeRescale(enabledElement, oldCanvasWidth, oldCanvasHeight); + Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element); + } +}); + +/***/ }), + +/***/ "./setToPixelCoordinateSystem.js": +/*!***************************************!*\ + !*** ./setToPixelCoordinateSystem.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/calculateTransform.js */ "./internal/calculateTransform.js"); + +/** + * Sets the canvas context transformation matrix to the pixel coordinate system. This allows + * geometry to be driven using the canvas context using coordinates in the pixel coordinate system + * @param {EnabledElement} enabledElement The + * @param {CanvasRenderingContext2D} context The CanvasRenderingContext2D for the enabledElement's Canvas + * @param {Number} [scale] Optional scale to apply + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, context, scale) { + if (enabledElement === undefined) { + throw new Error('setToPixelCoordinateSystem: parameter enabledElement must not be undefined'); + } + + if (context === undefined) { + throw new Error('setToPixelCoordinateSystem: parameter context must not be undefined'); + } + + var transform = Object(_internal_calculateTransform_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement, scale); + context.setTransform(transform.m[0], transform.m[1], transform.m[2], transform.m[3], transform.m[4], transform.m[5]); +}); + +/***/ }), + +/***/ "./setViewport.js": +/*!************************!*\ + !*** ./setViewport.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/getDefaultViewport.js */ "./internal/getDefaultViewport.js"); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _updateImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateImage.js */ "./updateImage.js"); + + + +var MIN_WINDOW_WIDTH = 0.000001; +var MIN_VIEWPORT_SCALE = 0.0001; +/** + * Sets/updates viewport of a given enabled element + * + * @param {HTMLElement} element - DOM element of the enabled element + * @param {Viewport} [viewport] - Object containing the viewport properties + * @returns {void} + * @memberof ViewportSettings + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, viewport) { + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_1__["getEnabledElement"])(element); // If viewport is not already set, start with default and merge new + // viewport options later + + if (enabledElement.viewport === undefined) { + enabledElement.viewport = Object(_internal_getDefaultViewport_js__WEBPACK_IMPORTED_MODULE_0__["default"])(enabledElement.canvas); + } // Merge viewport + + + if (viewport) { + for (var attrname in viewport) { + if (viewport[attrname] !== null) { + enabledElement.viewport[attrname] = viewport[attrname]; + } + } + } // Prevent window width from being too small (note that values close to zero are valid and can occur with + // PET images in particular) + + + if (enabledElement.viewport.voi.windowWidth) { + enabledElement.viewport.voi.windowWidth = Math.max(viewport.voi.windowWidth, MIN_WINDOW_WIDTH); + } // Prevent scale from getting too small + + + if (enabledElement.viewport.scale) { + enabledElement.viewport.scale = Math.max(viewport.scale, MIN_VIEWPORT_SCALE); + } // Normalize the rotation value to a positive rotation in degrees + + + enabledElement.viewport.rotation %= 360; + + if (enabledElement.viewport.rotation < 0) { + enabledElement.viewport.rotation += 360; + } + + if (enabledElement.image) { + // Force the image to be updated since the viewport has been modified + Object(_updateImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element); + } +}); + +/***/ }), + +/***/ "./triggerEvent.js": +/*!*************************!*\ + !*** ./triggerEvent.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return triggerEvent; }); +/** + * Trigger a CustomEvent + * + * @param {EventTarget} el The element or EventTarget to trigger the event upon + * @param {String} type The event type name + * @param {Object|null} detail=null The event data to be sent + * @returns {Boolean} The return value is false if at least one event listener called preventDefault(). Otherwise it returns true. + */ +function triggerEvent(el, type) { + var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var event; // This check is needed to polyfill CustomEvent on IE11- + + if (typeof window.CustomEvent === 'function') { + event = new CustomEvent(type, { + detail: detail, + cancelable: true + }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(type, true, true, detail); + } + + return el.dispatchEvent(event); +} + +/***/ }), + +/***/ "./updateImage.js": +/*!************************!*\ + !*** ./updateImage.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _enabledElements_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enabledElements.js */ "./enabledElements.js"); +/* harmony import */ var _internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/drawImage.js */ "./internal/drawImage.js"); + + +/** + * Forces the image to be updated/redrawn for the specified enabled element + * @param {HTMLElement} element An HTML Element enabled for Cornerstone + * @param {Boolean} [invalidated=false] Whether or not the image pixel data has been changed, necessitating a redraw + * + * @returns {void} + * @memberof Drawing + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element) { + var invalidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var enabledElement = Object(_enabledElements_js__WEBPACK_IMPORTED_MODULE_0__["getEnabledElement"])(element); + + if (enabledElement.image === undefined && !enabledElement.layers.length) { + throw new Error('updateImage: image has not been loaded yet'); + } + + Object(_internal_drawImage_js__WEBPACK_IMPORTED_MODULE_1__["default"])(enabledElement, invalidated); +}); + +/***/ }), + +/***/ "./webgl/createProgramFromString.js": +/*!******************************************!*\ + !*** ./webgl/createProgramFromString.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Creates and compiles a shader. + * + * @param {!WebGLRenderingContext} gl The WebGL Context. + * @param {string} shaderSource The GLSL source code for the shader. + * @param {number} shaderType The type of shader, VERTEX_SHADER or FRAGMENT_SHADER. + * + * @return {!WebGLShader} The shader. + * @memberof WebGLRendering + */ +function compileShader(gl, shaderSource, shaderType) { + // Create the shader object + var shader = gl.createShader(shaderType); // Set the shader source code. + + gl.shaderSource(shader, shaderSource); // Compile the shader + + gl.compileShader(shader); // Check if it compiled + + var success = gl.getShaderParameter(shader, gl.COMPILE_STATUS); + + if (!success && !gl.isContextLost()) { + // Something went wrong during compilation; get the error + var infoLog = gl.getShaderInfoLog(shader); + console.error("Could not compile shader:\n".concat(infoLog)); + } + + return shader; +} +/** + * Creates a program from 2 shaders. + * + * @param {!WebGLRenderingContext} gl The WebGL context. + * @param {!WebGLShader} vertexShader A vertex shader. + * @param {!WebGLShader} fragmentShader A fragment shader. + * @return {!WebGLProgram} A program. + * @memberof WebGLRendering + */ + + +function createProgram(gl, vertexShader, fragmentShader) { + // Create a program. + var program = gl.createProgram(); // Attach the shaders. + + gl.attachShader(program, vertexShader); + gl.attachShader(program, fragmentShader); // Link the program. + + gl.linkProgram(program); // Check if it linked. + + var success = gl.getProgramParameter(program, gl.LINK_STATUS); + + if (!success && !gl.isContextLost()) { + // Something went wrong with the link + var infoLog = gl.getProgramInfoLog(program); + console.error("WebGL program filed to link:\n".concat(infoLog)); + } + + return program; +} +/** + * Creates a program from 2 shaders source (Strings) + * @param {!WebGLRenderingContext} gl The WebGL context. + * @param {!WebGLShader} vertexShaderSrc Vertex shader string + * @param {!WebGLShader} fragShaderSrc Fragment shader string + * @return {!WebGLProgram} A program + * @memberof WebGLRendering + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (gl, vertexShaderSrc, fragShaderSrc) { + var vertexShader = compileShader(gl, vertexShaderSrc, gl.VERTEX_SHADER); + var fragShader = compileShader(gl, fragShaderSrc, gl.FRAGMENT_SHADER); + return createProgram(gl, vertexShader, fragShader); +}); + +/***/ }), + +/***/ "./webgl/index.js": +/*!************************!*\ + !*** ./webgl/index.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _renderer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderer.js */ "./webgl/renderer.js"); +/* harmony import */ var _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createProgramFromString.js */ "./webgl/createProgramFromString.js"); +/* harmony import */ var _textureCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textureCache.js */ "./webgl/textureCache.js"); + + + +/** + * @module WebGLRendering + */ + +var mod = { + createProgramFromString: _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_1__["default"], + renderer: { + render: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["render"], + initRenderer: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["initRenderer"], + getRenderCanvas: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["getRenderCanvas"], + isWebGLAvailable: _renderer_js__WEBPACK_IMPORTED_MODULE_0__["isWebGLAvailable"] + }, + textureCache: _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"] +}; +Object.defineProperty(mod, 'isWebGLInitialized', { + enumerable: true, + configurable: false, + get: function get() { + return _renderer_js__WEBPACK_IMPORTED_MODULE_0__["isWebGLInitialized"]; + } +}); +/* harmony default export */ __webpack_exports__["default"] = (mod); + +/***/ }), + +/***/ "./webgl/renderer.js": +/*!***************************!*\ + !*** ./webgl/renderer.js ***! + \***************************/ +/*! exports provided: isWebGLInitialized, getRenderCanvas, initRenderer, render, isWebGLAvailable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGLInitialized", function() { return isWebGLInitialized; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRenderCanvas", function() { return getRenderCanvas; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initRenderer", function() { return initRenderer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isWebGLAvailable", function() { return isWebGLAvailable; }); +/* harmony import */ var _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shaders/index.js */ "./webgl/shaders/index.js"); +/* harmony import */ var _vertexShader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./vertexShader.js */ "./webgl/vertexShader.js"); +/* harmony import */ var _textureCache_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textureCache.js */ "./webgl/textureCache.js"); +/* harmony import */ var _createProgramFromString_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./createProgramFromString.js */ "./webgl/createProgramFromString.js"); +/* eslint no-bitwise: 0 */ + + + + +var renderCanvas = document.createElement('canvas'); +var gl; +var texCoordBuffer; +var positionBuffer; +var isWebGLInitialized = false; + +function getRenderCanvas() { + return renderCanvas; +} + +function initShaders() { + for (var id in _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"]) { + // Console.log("WEBGL: Loading shader", id); + var shader = _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"][id]; + shader.attributes = {}; + shader.uniforms = {}; + shader.vert = _vertexShader_js__WEBPACK_IMPORTED_MODULE_1__["vertexShader"]; + shader.program = Object(_createProgramFromString_js__WEBPACK_IMPORTED_MODULE_3__["default"])(gl, shader.vert, shader.frag); + shader.attributes.texCoordLocation = gl.getAttribLocation(shader.program, 'a_texCoord'); + gl.enableVertexAttribArray(shader.attributes.texCoordLocation); + shader.attributes.positionLocation = gl.getAttribLocation(shader.program, 'a_position'); + gl.enableVertexAttribArray(shader.attributes.positionLocation); + shader.uniforms.resolutionLocation = gl.getUniformLocation(shader.program, 'u_resolution'); + } +} + +function initRenderer() { + if (isWebGLInitialized === true) { + // Console.log("WEBGL Renderer already initialized"); + return; + } + + if (initWebGL(renderCanvas)) { + initBuffers(); + initShaders(); // Console.log("WEBGL Renderer initialized!"); + + isWebGLInitialized = true; + } +} + +function updateRectangle(gl, width, height) { + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([width, height, 0, height, width, 0, 0, 0]), gl.STATIC_DRAW); +} + +function handleLostContext(event) { + event.preventDefault(); + console.warn('WebGL Context Lost!'); +} + +function handleRestoredContext(event) { + event.preventDefault(); + isWebGLInitialized = false; + _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].purgeCache(); + initRenderer(); // Console.log('WebGL Context Restored.'); +} + +function initWebGL(canvas) { + gl = null; + + try { + // Try to grab the standard context. If it fails, fallback to experimental. + var options = { + preserveDrawingBuffer: true // Preserve buffer so we can copy to display canvas element + + }; // ---------------- Testing purposes ------------- + // If (debug === true && WebGLDebugUtils) { + // RenderCanvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(renderCanvas); + // } + // ---------------- Testing purposes ------------- + + gl = canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options); // Set up event listeners for context lost / context restored + + canvas.removeEventListener('webglcontextlost', handleLostContext, false); + canvas.addEventListener('webglcontextlost', handleLostContext, false); + canvas.removeEventListener('webglcontextrestored', handleRestoredContext, false); + canvas.addEventListener('webglcontextrestored', handleRestoredContext, false); + } catch (error) { + throw new Error('Error creating WebGL context'); + } // If we don't have a GL context, give up now + + + if (!gl) { + console.error('Unable to initialize WebGL. Your browser may not support it.'); + gl = null; + } + + return gl; +} +/** + * Returns the image data type as a string representation. + * @param {any} image The cornerstone image object + * @returns {string} image data type (rgb, iint16, uint16, int8 and uint8) + * @memberof WebGLRendering + */ + + +function getImageDataType(image) { + if (image.color) { + return 'rgb'; + } + + var pixelData = image.getPixelData(); + + if (pixelData instanceof Int16Array) { + return 'int16'; + } + + if (pixelData instanceof Uint16Array) { + return 'uint16'; + } + + if (pixelData instanceof Int8Array) { + return 'int8'; + } + + return 'uint8'; +} + +function getShaderProgram(image) { + var datatype = getImageDataType(image); // We need a mechanism for + // Choosing the shader based on the image datatype + // Console.log("Datatype: " + datatype); + + if (_shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"].hasOwnProperty(datatype)) { + return _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"][datatype]; + } + + return _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["shaders"].rgb; +} + +function generateTexture(image) { + var TEXTURE_FORMAT = { + uint8: gl.LUMINANCE, + int8: gl.LUMINANCE_ALPHA, + uint16: gl.LUMINANCE_ALPHA, + int16: gl.RGB, + rgb: gl.RGB + }; + var TEXTURE_BYTES = { + int8: 1, + // Luminance + uint16: 2, + // Luminance + Alpha + int16: 3, + // RGB + rgb: 3 // RGB + + }; + var imageDataType = getImageDataType(image); + var format = TEXTURE_FORMAT[imageDataType]; // GL texture configuration + + var texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1); + var imageData = _shaders_index_js__WEBPACK_IMPORTED_MODULE_0__["dataUtilities"][imageDataType].storedPixelDataToImageData(image, image.width, image.height); + gl.texImage2D(gl.TEXTURE_2D, 0, format, image.width, image.height, 0, format, gl.UNSIGNED_BYTE, imageData); // Calculate the size in bytes of this image in memory + + var sizeInBytes = image.width * image.height * TEXTURE_BYTES[imageDataType]; + return { + texture: texture, + sizeInBytes: sizeInBytes + }; +} + +function getImageTexture(image) { + var imageTexture = _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].getImageTexture(image.imageId); + + if (!imageTexture) { + // Console.log("Generating texture for imageid: ", image.imageId); + imageTexture = generateTexture(image); + _textureCache_js__WEBPACK_IMPORTED_MODULE_2__["default"].putImageTexture(image, imageTexture); + } + + return imageTexture.texture; +} + +function initBuffers() { + positionBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, 0, 1, 1, 0, 0, 0]), gl.STATIC_DRAW); + texCoordBuffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0]), gl.STATIC_DRAW); +} + +function renderQuad(shader, parameters, texture, width, height) { + gl.clearColor(1.0, 0.0, 0.0, 1.0); + gl.viewport(0, 0, width, height); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + gl.useProgram(shader.program); + gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); + gl.vertexAttribPointer(shader.attributes.texCoordLocation, 2, gl.FLOAT, false, 0, 0); + gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); + gl.vertexAttribPointer(shader.attributes.positionLocation, 2, gl.FLOAT, false, 0, 0); + + for (var key in parameters) { + var uniformLocation = gl.getUniformLocation(shader.program, key); + + if (!uniformLocation) { + continue; // Disabling this error for now since RGB requires minPixelValue + // but the other shaders do not. + // throw `Could not access location for uniform: ${key}`; + } + + var uniform = parameters[key]; + var type = uniform.type; + var value = uniform.value; + + if (type === 'i') { + gl.uniform1i(uniformLocation, value); + } else if (type === 'f') { + gl.uniform1f(uniformLocation, value); + } else if (type === '2f') { + gl.uniform2f(uniformLocation, value[0], value[1]); + } + } + + updateRectangle(gl, width, height); + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, texture); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); +} + +function render(enabledElement) { + // Resize the canvas + var image = enabledElement.image; + renderCanvas.width = image.width; + renderCanvas.height = image.height; + var viewport = enabledElement.viewport; // Render the current image + + var shader = getShaderProgram(image); + var texture = getImageTexture(image); + var parameters = { + u_resolution: { + type: '2f', + value: [image.width, image.height] + }, + wc: { + type: 'f', + value: viewport.voi.windowCenter + }, + ww: { + type: 'f', + value: viewport.voi.windowWidth + }, + slope: { + type: 'f', + value: image.slope + }, + intercept: { + type: 'f', + value: image.intercept + }, + minPixelValue: { + type: 'f', + value: image.minPixelValue + }, + invert: { + type: 'i', + value: viewport.invert ? 1 : 0 + } + }; + renderQuad(shader, parameters, texture, image.width, image.height); + return renderCanvas; +} +function isWebGLAvailable() { + // Adapted from + // http://stackoverflow.com/questions/9899807/three-js-detect-webgl-support-and-fallback-to-regular-canvas + var options = { + failIfMajorPerformanceCaveat: true + }; + + try { + var canvas = document.createElement('canvas'); + return Boolean(window.WebGLRenderingContext) && (canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options)); + } catch (e) { + return false; + } +} + +/***/ }), + +/***/ "./webgl/shaders/index.js": +/*!********************************!*\ + !*** ./webgl/shaders/index.js ***! + \********************************/ +/*! exports provided: shaders, dataUtilities */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shaders", function() { return shaders; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataUtilities", function() { return dataUtilities; }); +/* harmony import */ var _int16_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int16.js */ "./webgl/shaders/int16.js"); +/* harmony import */ var _int8_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./int8.js */ "./webgl/shaders/int8.js"); +/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rgb.js */ "./webgl/shaders/rgb.js"); +/* harmony import */ var _uint16_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./uint16.js */ "./webgl/shaders/uint16.js"); +/* harmony import */ var _uint8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./uint8.js */ "./webgl/shaders/uint8.js"); + + + + + +var shaders = { + int16: _int16_js__WEBPACK_IMPORTED_MODULE_0__["int16Shader"], + int8: _int8_js__WEBPACK_IMPORTED_MODULE_1__["int8Shader"], + rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__["rgbShader"], + uint16: _uint16_js__WEBPACK_IMPORTED_MODULE_3__["uint16Shader"], + uint8: _uint8_js__WEBPACK_IMPORTED_MODULE_4__["uint8Shader"] +}; +var dataUtilities = { + int16: _int16_js__WEBPACK_IMPORTED_MODULE_0__["int16DataUtilities"], + int8: _int8_js__WEBPACK_IMPORTED_MODULE_1__["int8DataUtilities"], + rgb: _rgb_js__WEBPACK_IMPORTED_MODULE_2__["rgbDataUtilities"], + uint16: _uint16_js__WEBPACK_IMPORTED_MODULE_3__["uint16DataUtilities"], + uint8: _uint8_js__WEBPACK_IMPORTED_MODULE_4__["uint8DataUtilities"] +}; + + +/***/ }), + +/***/ "./webgl/shaders/int16.js": +/*!********************************!*\ + !*** ./webgl/shaders/int16.js ***! + \********************************/ +/*! exports provided: int16DataUtilities, int16Shader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int16DataUtilities", function() { return int16DataUtilities; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int16Shader", function() { return int16Shader; }); +/* eslint no-bitwise: 0 */ +var int16Shader = {}; +/** + * Convert stored pixel data to image data. + * + * Pack int16 into three uint8 channels (r, g, b) + * + * @param {Image} image A Cornerstone Image Object + * @returns {Uint8Array} The image data for use by the WebGL shader + * @memberof WebGLRendering + */ + +function storedPixelDataToImageData(image) { + // Transfer image data to alpha and luminance channels of WebGL texture + // Credit to @jpambrun and @fernandojsg + // Pack int16 into three uint8 channels (r, g, b) + var pixelData = image.getPixelData(); + var numberOfChannels = 3; + var data = new Uint8Array(image.width * image.height * numberOfChannels); + var offset = 0; + + for (var i = 0; i < pixelData.length; i++) { + var val = Math.abs(pixelData[i]); + data[offset++] = val & 0xFF; + data[offset++] = val >> 8; + data[offset++] = pixelData[i] < 0 ? 0 : 1; // 0 For negative, 1 for positive + } + + return data; +} + +var int16DataUtilities = { + storedPixelDataToImageData: storedPixelDataToImageData +}; +int16Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture +'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture +'float intensity = color.r*256.0 + color.g*65536.0;' + 'if (color.b == 0.0)' + 'intensity = -intensity;' + // Rescale based on slope and window settings +'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity +'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output +'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary +'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}'; + + +/***/ }), + +/***/ "./webgl/shaders/int8.js": +/*!*******************************!*\ + !*** ./webgl/shaders/int8.js ***! + \*******************************/ +/*! exports provided: int8DataUtilities, int8Shader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int8DataUtilities", function() { return int8DataUtilities; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "int8Shader", function() { return int8Shader; }); +var int8Shader = {}; +/** + * Convert stored pixel data to image data. + * + * Store data in Uint8Array + * + * @param {Image} image A Cornerstone Image Object + * @returns {Uint8Array} The image data for use by the WebGL shader + * @memberof WebGLRendering + */ + +function storedPixelDataToImageData(image) { + // Transfer image data to alpha channel of WebGL texture + // Store data in Uint8Array + var pixelData = image.getPixelData(); + var numberOfChannels = 2; + var data = new Uint8Array(image.width * image.height * numberOfChannels); + var offset = 0; + + for (var i = 0; i < pixelData.length; i++) { + data[offset++] = pixelData[i]; + data[offset++] = pixelData[i] < 0 ? 0 : 1; // 0 For negative, 1 for positive + } + + return data; +} + +var int8DataUtilities = { + storedPixelDataToImageData: storedPixelDataToImageData +}; +int8Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture +'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture +'float intensity = color.r*256.;' + 'if (color.a == 0.0)' + 'intensity = -intensity;' + // Rescale based on slope and window settings +'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity +'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output +'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary +'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}'; + + +/***/ }), + +/***/ "./webgl/shaders/rgb.js": +/*!******************************!*\ + !*** ./webgl/shaders/rgb.js ***! + \******************************/ +/*! exports provided: rgbDataUtilities, rgbShader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbDataUtilities", function() { return rgbDataUtilities; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rgbShader", function() { return rgbShader; }); +var rgbShader = {}; +/** + * Convert stored pixel data to image data. + * + * Pack RGB images into a 3-channel RGB texture + * + * @param {Image} image A Cornerstone Image Object + * @returns {Uint8Array} The image data for use by the WebGL shader + * @memberof WebGLRendering + */ + +function storedPixelDataToImageData(image) { + var minPixelValue = image.minPixelValue; + var canvasImageDataIndex = 0; + var storedPixelDataIndex = 0; // Only 3 channels, since we use WebGL's RGB texture format + + var numStoredPixels = image.width * image.height * 4; + var numOutputPixels = image.width * image.height * 3; + var storedPixelData = image.getPixelData(); + var data = new Uint8Array(numOutputPixels); // NOTE: As of Nov 2014, most javascript engines have lower performance when indexing negative indexes. + // We have a special code path for this case that improves performance. Thanks to @jpambrun for this enhancement + + if (minPixelValue < 0) { + while (storedPixelDataIndex < numStoredPixels) { + data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Red + + data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Green + + data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++] + -minPixelValue; // Blue + + storedPixelDataIndex += 1; // The stored pixel data has 4 channels + } + } else { + while (storedPixelDataIndex < numStoredPixels) { + data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Red + + data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Green + + data[canvasImageDataIndex++] = storedPixelData[storedPixelDataIndex++]; // Blue + + storedPixelDataIndex += 1; // The stored pixel data has 4 channels + } + } + + return data; +} + +var rgbDataUtilities = { + storedPixelDataToImageData: storedPixelDataToImageData +}; +rgbShader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform float minPixelValue;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture +'vec3 color = texture2D(u_image, v_texCoord).xyz;' + // Rescale based on slope and intercept +'color = color * 256.0 * slope + intercept;' + // Apply window settings +'float center0 = wc - 0.5 - minPixelValue;' + 'float width0 = max(ww, 1.0);' + 'color = (color - center0) / width0 + 0.5;' + // RGBA output +'gl_FragColor = vec4(color, 1);' + // Apply any inversion necessary +'if (invert == 1)' + 'gl_FragColor.rgb = 1. - gl_FragColor.rgb;' + '}'; + + +/***/ }), + +/***/ "./webgl/shaders/uint16.js": +/*!*********************************!*\ + !*** ./webgl/shaders/uint16.js ***! + \*********************************/ +/*! exports provided: uint16DataUtilities, uint16Shader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint16DataUtilities", function() { return uint16DataUtilities; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint16Shader", function() { return uint16Shader; }); +/* eslint no-bitwise: 0 */ +var uint16Shader = {}; +/** + * Convert stored pixel data to image data. + * + * For uint16 pack uint16 into two uint8 channels (r and a). + * + * @param {Image} image A Cornerstone Image Object + * @returns {Uint8Array} The image data for use by the WebGL shader + * @memberof WebGLRendering + */ + +function storedPixelDataToImageData(image) { + // Transfer image data to alpha and luminance channels of WebGL texture + // Credit to @jpambrun and @fernandojsg + // Pack uint16 into two uint8 channels (r and a) + var pixelData = image.getPixelData(); + var numberOfChannels = 2; + var data = new Uint8Array(image.width * image.height * numberOfChannels); + var offset = 0; + + for (var i = 0; i < pixelData.length; i++) { + var val = pixelData[i]; + data[offset++] = val & 0xFF; + data[offset++] = val >> 8; + } + + return data; +} + +var uint16DataUtilities = { + storedPixelDataToImageData: storedPixelDataToImageData +}; +uint16Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture +'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture +'float intensity = color.r*256.0 + color.a*65536.0;' + // Rescale based on slope and window settings +'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity +'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output +'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary +'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}'; + + +/***/ }), + +/***/ "./webgl/shaders/uint8.js": +/*!********************************!*\ + !*** ./webgl/shaders/uint8.js ***! + \********************************/ +/*! exports provided: uint8DataUtilities, uint8Shader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8DataUtilities", function() { return uint8DataUtilities; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uint8Shader", function() { return uint8Shader; }); +var uint8Shader = {}; +/** + * Convert stored pixel data to image data. Here we will store + * all data in the alpha channel. + * + * @param {Image} image A Cornerstone Image Object + * @returns {Uint8Array} The image data for use by the WebGL shader + * @memberof WebGLRendering + */ + +function storedPixelDataToImageData(image) { + // Transfer image data to alpha channel of WebGL texture + return image.getPixelData(); +} + +var uint8DataUtilities = { + storedPixelDataToImageData: storedPixelDataToImageData +}; +uint8Shader.frag = 'precision mediump float;' + 'uniform sampler2D u_image;' + 'uniform float ww;' + 'uniform float wc;' + 'uniform float slope;' + 'uniform float intercept;' + 'uniform int invert;' + 'varying vec2 v_texCoord;' + 'void main() {' + // Get texture +'vec4 color = texture2D(u_image, v_texCoord);' + // Calculate luminance from packed texture +'float intensity = color.r*256.0;' + // Rescale based on slope and window settings +'intensity = intensity * slope + intercept;' + 'float center0 = wc - 0.5;' + 'float width0 = max(ww, 1.0);' + 'intensity = (intensity - center0) / width0 + 0.5;' + // Clamp intensity +'intensity = clamp(intensity, 0.0, 1.0);' + // RGBA output +'gl_FragColor = vec4(intensity, intensity, intensity, 1.0);' + // Apply any inversion necessary +'if (invert == 1)' + 'gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;' + '}'; + + +/***/ }), + +/***/ "./webgl/textureCache.js": +/*!*******************************!*\ + !*** ./webgl/textureCache.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../triggerEvent.js */ "./triggerEvent.js"); + + +/** + * This module deals with caching image textures in VRAM for WebGL + * @module WebGLTextureCache + */ + +var imageCache = {}; +var cachedImages = []; +var maximumSizeInBytes = 1024 * 1024 * 256; // 256 MB + +var cacheSizeInBytes = 0; + +function getCacheInfo() { + return { + maximumSizeInBytes: maximumSizeInBytes, + cacheSizeInBytes: cacheSizeInBytes, + numberOfImagesCached: cachedImages.length + }; +} + +function purgeCacheIfNecessary() { + // If max cache size has not been exceeded, do nothing + if (cacheSizeInBytes <= maximumSizeInBytes) { + return; + } // Cache size has been exceeded, create list of images sorted by timeStamp + // So we can purge the least recently used image + + + function compare(a, b) { + if (a.timeStamp > b.timeStamp) { + return -1; + } + + if (a.timeStamp < b.timeStamp) { + return 1; + } + + return 0; + } + + cachedImages.sort(compare); // Remove images as necessary + + while (cacheSizeInBytes > maximumSizeInBytes) { + var lastCachedImage = cachedImages[cachedImages.length - 1]; + cacheSizeInBytes -= lastCachedImage.sizeInBytes; + delete imageCache[lastCachedImage.imageId]; + cachedImages.pop(); + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].WEBGL_TEXTURE_REMOVED, { + imageId: lastCachedImage.imageId + }); + } + + var cacheInfo = getCacheInfo(); + Object(_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(_events_js__WEBPACK_IMPORTED_MODULE_0__["events"], _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].WEBGL_TEXTURE_CACHE_FULL, cacheInfo); +} + +function setMaximumSizeBytes(numBytes) { + if (numBytes === undefined) { + throw new Error('setMaximumSizeBytes: parameter numBytes must not be undefined'); + } + + if (numBytes.toFixed === undefined) { + throw new Error('setMaximumSizeBytes: parameter numBytes must be a number'); + } + + maximumSizeInBytes = numBytes; + purgeCacheIfNecessary(); +} + +function putImageTexture(image, imageTexture) { + var imageId = image.imageId; + + if (image === undefined) { + throw new Error('putImageTexture: image must not be undefined'); + } + + if (imageId === undefined) { + throw new Error('putImageTexture: imageId must not be undefined'); + } + + if (imageTexture === undefined) { + throw new Error('putImageTexture: imageTexture must not be undefined'); + } + + if (Object.prototype.hasOwnProperty.call(imageCache, imageId) === true) { + throw new Error('putImageTexture: imageId already in cache'); + } + + var cachedImage = { + imageId: imageId, + imageTexture: imageTexture, + timeStamp: new Date(), + sizeInBytes: imageTexture.sizeInBytes + }; + imageCache[imageId] = cachedImage; + cachedImages.push(cachedImage); + + if (imageTexture.sizeInBytes === undefined) { + throw new Error('putImageTexture: imageTexture.sizeInBytes must not be undefined'); + } + + if (imageTexture.sizeInBytes.toFixed === undefined) { + throw new Error('putImageTexture: imageTexture.sizeInBytes is not a number'); + } + + cacheSizeInBytes += cachedImage.sizeInBytes; + purgeCacheIfNecessary(); +} + +function getImageTexture(imageId) { + if (imageId === undefined) { + throw new Error('getImageTexture: imageId must not be undefined'); + } + + var cachedImage = imageCache[imageId]; + + if (cachedImage === undefined) { + return; + } // Bump time stamp for cached image + + + cachedImage.timeStamp = new Date(); + return cachedImage.imageTexture; +} + +function removeImageTexture(imageId) { + if (imageId === undefined) { + throw new Error('removeImageTexture: imageId must not be undefined'); + } + + var cachedImage = imageCache[imageId]; + + if (cachedImage === undefined) { + throw new Error('removeImageTexture: imageId must not be undefined'); + } + + cachedImages.splice(cachedImages.indexOf(cachedImage), 1); + cacheSizeInBytes -= cachedImage.sizeInBytes; + delete imageCache[imageId]; + return cachedImage.imageTexture; +} + +function purgeCache() { + while (cachedImages.length > 0) { + var removedCachedImage = cachedImages.pop(); + delete imageCache[removedCachedImage.imageId]; + } + + cacheSizeInBytes = 0; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + purgeCache: purgeCache, + getImageTexture: getImageTexture, + putImageTexture: putImageTexture, + removeImageTexture: removeImageTexture, + setMaximumSizeBytes: setMaximumSizeBytes +}); + +/***/ }), + +/***/ "./webgl/vertexShader.js": +/*!*******************************!*\ + !*** ./webgl/vertexShader.js ***! + \*******************************/ +/*! exports provided: vertexShader */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "vertexShader", function() { return vertexShader; }); +var vertexShader = 'attribute vec2 a_position;' + 'attribute vec2 a_texCoord;' + 'uniform vec2 u_resolution;' + 'varying vec2 v_texCoord;' + 'void main() {' + 'vec2 zeroToOne = a_position / u_resolution;' + 'vec2 zeroToTwo = zeroToOne * 2.0;' + 'vec2 clipSpace = zeroToTwo - 1.0;' + 'gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);' + 'v_texCoord = a_texCoord;' + '}'; + +/***/ }) + +/******/ }); +}); +//# sourceMappingURL=cornerstone.js.map \ No newline at end of file diff --git a/lib/cornerstone/cornerstone.min.css b/lib/cornerstone/cornerstone.min.css new file mode 100644 index 0000000..ed02f58 --- /dev/null +++ b/lib/cornerstone/cornerstone.min.css @@ -0,0 +1 @@ +/*! cornerstone - v0.9.0 - 2016-02-03 | (c) 2014 Chris Hafey | https://github.com/chafey/cornerstone */.cornerstone-enabled-image{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default} \ No newline at end of file diff --git a/lib/cornerstone/cornerstone.min.js b/lib/cornerstone/cornerstone.min.js new file mode 100644 index 0000000..03e88da --- /dev/null +++ b/lib/cornerstone/cornerstone.min.js @@ -0,0 +1,3 @@ +/*! cornerstone-core - 2.3.0 - 2019-07-03 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstone */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("cornerstone-core",[],t):"object"==typeof exports?exports["cornerstone-core"]=t():e.cornerstone=t()}(window,function(){return function(r){var a={};function n(e){if(a[e])return a[e].exports;var t=a[e]={i:e,l:!1,exports:{}};return r[e].call(t.exports,t,t.exports,n),t.l=!0,t.exports}return n.m=r,n.c=a,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)n.d(r,a,function(e){return t[e]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,r){"use strict";function n(e,t){for(var r=0;rthis.TableRange[1])return this.AboveRangeColor;return this.Table[t]}},{key:"getIndex",value:function(e){var t={Range:[]};if(t.MaxIndex=this.NumberOfColors-1,t.Shift=-this.TableRange[0],this.TableRange[1]<=this.TableRange[0]?t.Scale=Number.MAX_VALUE:t.Scale=t.MaxIndex/(this.TableRange[1]-this.TableRange[0]),t.Range[0]=this.TableRange[0],t.Range[1]=this.TableRange[1],isNaN(e))return-1;var r,a,n,i=(n=(r=e)<(a=t).Range[0]?a.MaxIndex+0+1.5:r>a.Range[1]?a.MaxIndex+1+1.5:(r+a.Shift)*a.Scale,Math.floor(n));return i===this.NumberOfColors+0?i=0:i===this.NumberOfColors+1&&(i=this.NumberOfColors-1),i}},{key:"setTableValue",value:function(e,t){if(5===arguments.length&&(t=Array.prototype.slice.call(arguments,1)),e<0)throw new Error("Can't set the table value for negative index (".concat(e,")"));e>=this.NumberOfColors&&new Error("Index ".concat(e," is greater than the number of colors ").concat(this.NumberOfColors)),this.Table[e]=t,0!==e&&e!==this.NumberOfColors-1||this.buildSpecialColors()}}])&&_(t.prototype,r),a&&_(t,a),e}(),O=[0,0,0,0],U={hotIron:{name:"Hot Iron",numOfColors:256,colors:[[0,0,0,255],[2,0,0,255],[4,0,0,255],[6,0,0,255],[8,0,0,255],[10,0,0,255],[12,0,0,255],[14,0,0,255],[16,0,0,255],[18,0,0,255],[20,0,0,255],[22,0,0,255],[24,0,0,255],[26,0,0,255],[28,0,0,255],[30,0,0,255],[32,0,0,255],[34,0,0,255],[36,0,0,255],[38,0,0,255],[40,0,0,255],[42,0,0,255],[44,0,0,255],[46,0,0,255],[48,0,0,255],[50,0,0,255],[52,0,0,255],[54,0,0,255],[56,0,0,255],[58,0,0,255],[60,0,0,255],[62,0,0,255],[64,0,0,255],[66,0,0,255],[68,0,0,255],[70,0,0,255],[72,0,0,255],[74,0,0,255],[76,0,0,255],[78,0,0,255],[80,0,0,255],[82,0,0,255],[84,0,0,255],[86,0,0,255],[88,0,0,255],[90,0,0,255],[92,0,0,255],[94,0,0,255],[96,0,0,255],[98,0,0,255],[100,0,0,255],[102,0,0,255],[104,0,0,255],[106,0,0,255],[108,0,0,255],[110,0,0,255],[112,0,0,255],[114,0,0,255],[116,0,0,255],[118,0,0,255],[120,0,0,255],[122,0,0,255],[124,0,0,255],[126,0,0,255],[128,0,0,255],[130,0,0,255],[132,0,0,255],[134,0,0,255],[136,0,0,255],[138,0,0,255],[140,0,0,255],[142,0,0,255],[144,0,0,255],[146,0,0,255],[148,0,0,255],[150,0,0,255],[152,0,0,255],[154,0,0,255],[156,0,0,255],[158,0,0,255],[160,0,0,255],[162,0,0,255],[164,0,0,255],[166,0,0,255],[168,0,0,255],[170,0,0,255],[172,0,0,255],[174,0,0,255],[176,0,0,255],[178,0,0,255],[180,0,0,255],[182,0,0,255],[184,0,0,255],[186,0,0,255],[188,0,0,255],[190,0,0,255],[192,0,0,255],[194,0,0,255],[196,0,0,255],[198,0,0,255],[200,0,0,255],[202,0,0,255],[204,0,0,255],[206,0,0,255],[208,0,0,255],[210,0,0,255],[212,0,0,255],[214,0,0,255],[216,0,0,255],[218,0,0,255],[220,0,0,255],[222,0,0,255],[224,0,0,255],[226,0,0,255],[228,0,0,255],[230,0,0,255],[232,0,0,255],[234,0,0,255],[236,0,0,255],[238,0,0,255],[240,0,0,255],[242,0,0,255],[244,0,0,255],[246,0,0,255],[248,0,0,255],[250,0,0,255],[252,0,0,255],[254,0,0,255],[255,0,0,255],[255,2,0,255],[255,4,0,255],[255,6,0,255],[255,8,0,255],[255,10,0,255],[255,12,0,255],[255,14,0,255],[255,16,0,255],[255,18,0,255],[255,20,0,255],[255,22,0,255],[255,24,0,255],[255,26,0,255],[255,28,0,255],[255,30,0,255],[255,32,0,255],[255,34,0,255],[255,36,0,255],[255,38,0,255],[255,40,0,255],[255,42,0,255],[255,44,0,255],[255,46,0,255],[255,48,0,255],[255,50,0,255],[255,52,0,255],[255,54,0,255],[255,56,0,255],[255,58,0,255],[255,60,0,255],[255,62,0,255],[255,64,0,255],[255,66,0,255],[255,68,0,255],[255,70,0,255],[255,72,0,255],[255,74,0,255],[255,76,0,255],[255,78,0,255],[255,80,0,255],[255,82,0,255],[255,84,0,255],[255,86,0,255],[255,88,0,255],[255,90,0,255],[255,92,0,255],[255,94,0,255],[255,96,0,255],[255,98,0,255],[255,100,0,255],[255,102,0,255],[255,104,0,255],[255,106,0,255],[255,108,0,255],[255,110,0,255],[255,112,0,255],[255,114,0,255],[255,116,0,255],[255,118,0,255],[255,120,0,255],[255,122,0,255],[255,124,0,255],[255,126,0,255],[255,128,4,255],[255,130,8,255],[255,132,12,255],[255,134,16,255],[255,136,20,255],[255,138,24,255],[255,140,28,255],[255,142,32,255],[255,144,36,255],[255,146,40,255],[255,148,44,255],[255,150,48,255],[255,152,52,255],[255,154,56,255],[255,156,60,255],[255,158,64,255],[255,160,68,255],[255,162,72,255],[255,164,76,255],[255,166,80,255],[255,168,84,255],[255,170,88,255],[255,172,92,255],[255,174,96,255],[255,176,100,255],[255,178,104,255],[255,180,108,255],[255,182,112,255],[255,184,116,255],[255,186,120,255],[255,188,124,255],[255,190,128,255],[255,192,132,255],[255,194,136,255],[255,196,140,255],[255,198,144,255],[255,200,148,255],[255,202,152,255],[255,204,156,255],[255,206,160,255],[255,208,164,255],[255,210,168,255],[255,212,172,255],[255,214,176,255],[255,216,180,255],[255,218,184,255],[255,220,188,255],[255,222,192,255],[255,224,196,255],[255,226,200,255],[255,228,204,255],[255,230,208,255],[255,232,212,255],[255,234,216,255],[255,236,220,255],[255,238,224,255],[255,240,228,255],[255,242,232,255],[255,244,236,255],[255,246,240,255],[255,248,244,255],[255,250,248,255],[255,252,252,255],[255,255,255,255]]},pet:{name:"PET",numColors:256,colors:[[0,0,0,255],[0,2,1,255],[0,4,3,255],[0,6,5,255],[0,8,7,255],[0,10,9,255],[0,12,11,255],[0,14,13,255],[0,16,15,255],[0,18,17,255],[0,20,19,255],[0,22,21,255],[0,24,23,255],[0,26,25,255],[0,28,27,255],[0,30,29,255],[0,32,31,255],[0,34,33,255],[0,36,35,255],[0,38,37,255],[0,40,39,255],[0,42,41,255],[0,44,43,255],[0,46,45,255],[0,48,47,255],[0,50,49,255],[0,52,51,255],[0,54,53,255],[0,56,55,255],[0,58,57,255],[0,60,59,255],[0,62,61,255],[0,65,63,255],[0,67,65,255],[0,69,67,255],[0,71,69,255],[0,73,71,255],[0,75,73,255],[0,77,75,255],[0,79,77,255],[0,81,79,255],[0,83,81,255],[0,85,83,255],[0,87,85,255],[0,89,87,255],[0,91,89,255],[0,93,91,255],[0,95,93,255],[0,97,95,255],[0,99,97,255],[0,101,99,255],[0,103,101,255],[0,105,103,255],[0,107,105,255],[0,109,107,255],[0,111,109,255],[0,113,111,255],[0,115,113,255],[0,117,115,255],[0,119,117,255],[0,121,119,255],[0,123,121,255],[0,125,123,255],[0,128,125,255],[1,126,127,255],[3,124,129,255],[5,122,131,255],[7,120,133,255],[9,118,135,255],[11,116,137,255],[13,114,139,255],[15,112,141,255],[17,110,143,255],[19,108,145,255],[21,106,147,255],[23,104,149,255],[25,102,151,255],[27,100,153,255],[29,98,155,255],[31,96,157,255],[33,94,159,255],[35,92,161,255],[37,90,163,255],[39,88,165,255],[41,86,167,255],[43,84,169,255],[45,82,171,255],[47,80,173,255],[49,78,175,255],[51,76,177,255],[53,74,179,255],[55,72,181,255],[57,70,183,255],[59,68,185,255],[61,66,187,255],[63,64,189,255],[65,63,191,255],[67,61,193,255],[69,59,195,255],[71,57,197,255],[73,55,199,255],[75,53,201,255],[77,51,203,255],[79,49,205,255],[81,47,207,255],[83,45,209,255],[85,43,211,255],[86,41,213,255],[88,39,215,255],[90,37,217,255],[92,35,219,255],[94,33,221,255],[96,31,223,255],[98,29,225,255],[100,27,227,255],[102,25,229,255],[104,23,231,255],[106,21,233,255],[108,19,235,255],[110,17,237,255],[112,15,239,255],[114,13,241,255],[116,11,243,255],[118,9,245,255],[120,7,247,255],[122,5,249,255],[124,3,251,255],[126,1,253,255],[128,0,255,255],[130,2,252,255],[132,4,248,255],[134,6,244,255],[136,8,240,255],[138,10,236,255],[140,12,232,255],[142,14,228,255],[144,16,224,255],[146,18,220,255],[148,20,216,255],[150,22,212,255],[152,24,208,255],[154,26,204,255],[156,28,200,255],[158,30,196,255],[160,32,192,255],[162,34,188,255],[164,36,184,255],[166,38,180,255],[168,40,176,255],[170,42,172,255],[171,44,168,255],[173,46,164,255],[175,48,160,255],[177,50,156,255],[179,52,152,255],[181,54,148,255],[183,56,144,255],[185,58,140,255],[187,60,136,255],[189,62,132,255],[191,64,128,255],[193,66,124,255],[195,68,120,255],[197,70,116,255],[199,72,112,255],[201,74,108,255],[203,76,104,255],[205,78,100,255],[207,80,96,255],[209,82,92,255],[211,84,88,255],[213,86,84,255],[215,88,80,255],[217,90,76,255],[219,92,72,255],[221,94,68,255],[223,96,64,255],[225,98,60,255],[227,100,56,255],[229,102,52,255],[231,104,48,255],[233,106,44,255],[235,108,40,255],[237,110,36,255],[239,112,32,255],[241,114,28,255],[243,116,24,255],[245,118,20,255],[247,120,16,255],[249,122,12,255],[251,124,8,255],[253,126,4,255],[255,128,0,255],[255,130,4,255],[255,132,8,255],[255,134,12,255],[255,136,16,255],[255,138,20,255],[255,140,24,255],[255,142,28,255],[255,144,32,255],[255,146,36,255],[255,148,40,255],[255,150,44,255],[255,152,48,255],[255,154,52,255],[255,156,56,255],[255,158,60,255],[255,160,64,255],[255,162,68,255],[255,164,72,255],[255,166,76,255],[255,168,80,255],[255,170,85,255],[255,172,89,255],[255,174,93,255],[255,176,97,255],[255,178,101,255],[255,180,105,255],[255,182,109,255],[255,184,113,255],[255,186,117,255],[255,188,121,255],[255,190,125,255],[255,192,129,255],[255,194,133,255],[255,196,137,255],[255,198,141,255],[255,200,145,255],[255,202,149,255],[255,204,153,255],[255,206,157,255],[255,208,161,255],[255,210,165,255],[255,212,170,255],[255,214,174,255],[255,216,178,255],[255,218,182,255],[255,220,186,255],[255,222,190,255],[255,224,194,255],[255,226,198,255],[255,228,202,255],[255,230,206,255],[255,232,210,255],[255,234,214,255],[255,236,218,255],[255,238,222,255],[255,240,226,255],[255,242,230,255],[255,244,234,255],[255,246,238,255],[255,248,242,255],[255,250,246,255],[255,252,250,255],[255,255,255,255]]},hotMetalBlue:{name:"Hot Metal Blue",numColors:256,colors:[[0,0,0,255],[0,0,2,255],[0,0,4,255],[0,0,6,255],[0,0,8,255],[0,0,10,255],[0,0,12,255],[0,0,14,255],[0,0,16,255],[0,0,17,255],[0,0,19,255],[0,0,21,255],[0,0,23,255],[0,0,25,255],[0,0,27,255],[0,0,29,255],[0,0,31,255],[0,0,33,255],[0,0,35,255],[0,0,37,255],[0,0,39,255],[0,0,41,255],[0,0,43,255],[0,0,45,255],[0,0,47,255],[0,0,49,255],[0,0,51,255],[0,0,53,255],[0,0,55,255],[0,0,57,255],[0,0,59,255],[0,0,61,255],[0,0,63,255],[0,0,65,255],[0,0,67,255],[0,0,69,255],[0,0,71,255],[0,0,73,255],[0,0,75,255],[0,0,77,255],[0,0,79,255],[0,0,81,255],[0,0,83,255],[0,0,84,255],[0,0,86,255],[0,0,88,255],[0,0,90,255],[0,0,92,255],[0,0,94,255],[0,0,96,255],[0,0,98,255],[0,0,100,255],[0,0,102,255],[0,0,104,255],[0,0,106,255],[0,0,108,255],[0,0,110,255],[0,0,112,255],[0,0,114,255],[0,0,116,255],[0,0,117,255],[0,0,119,255],[0,0,121,255],[0,0,123,255],[0,0,125,255],[0,0,127,255],[0,0,129,255],[0,0,131,255],[0,0,133,255],[0,0,135,255],[0,0,137,255],[0,0,139,255],[0,0,141,255],[0,0,143,255],[0,0,145,255],[0,0,147,255],[0,0,149,255],[0,0,151,255],[0,0,153,255],[0,0,155,255],[0,0,157,255],[0,0,159,255],[0,0,161,255],[0,0,163,255],[0,0,165,255],[0,0,167,255],[3,0,169,255],[6,0,171,255],[9,0,173,255],[12,0,175,255],[15,0,177,255],[18,0,179,255],[21,0,181,255],[24,0,183,255],[26,0,184,255],[29,0,186,255],[32,0,188,255],[35,0,190,255],[38,0,192,255],[41,0,194,255],[44,0,196,255],[47,0,198,255],[50,0,200,255],[52,0,197,255],[55,0,194,255],[57,0,191,255],[59,0,188,255],[62,0,185,255],[64,0,182,255],[66,0,179,255],[69,0,176,255],[71,0,174,255],[74,0,171,255],[76,0,168,255],[78,0,165,255],[81,0,162,255],[83,0,159,255],[85,0,156,255],[88,0,153,255],[90,0,150,255],[93,2,144,255],[96,4,138,255],[99,6,132,255],[102,8,126,255],[105,9,121,255],[108,11,115,255],[111,13,109,255],[114,15,103,255],[116,17,97,255],[119,19,91,255],[122,21,85,255],[125,23,79,255],[128,24,74,255],[131,26,68,255],[134,28,62,255],[137,30,56,255],[140,32,50,255],[143,34,47,255],[146,36,44,255],[149,38,41,255],[152,40,38,255],[155,41,35,255],[158,43,32,255],[161,45,29,255],[164,47,26,255],[166,49,24,255],[169,51,21,255],[172,53,18,255],[175,55,15,255],[178,56,12,255],[181,58,9,255],[184,60,6,255],[187,62,3,255],[190,64,0,255],[194,66,0,255],[198,68,0,255],[201,70,0,255],[205,72,0,255],[209,73,0,255],[213,75,0,255],[217,77,0,255],[221,79,0,255],[224,81,0,255],[228,83,0,255],[232,85,0,255],[236,87,0,255],[240,88,0,255],[244,90,0,255],[247,92,0,255],[251,94,0,255],[255,96,0,255],[255,98,3,255],[255,100,6,255],[255,102,9,255],[255,104,12,255],[255,105,15,255],[255,107,18,255],[255,109,21,255],[255,111,24,255],[255,113,26,255],[255,115,29,255],[255,117,32,255],[255,119,35,255],[255,120,38,255],[255,122,41,255],[255,124,44,255],[255,126,47,255],[255,128,50,255],[255,130,53,255],[255,132,56,255],[255,134,59,255],[255,136,62,255],[255,137,65,255],[255,139,68,255],[255,141,71,255],[255,143,74,255],[255,145,76,255],[255,147,79,255],[255,149,82,255],[255,151,85,255],[255,152,88,255],[255,154,91,255],[255,156,94,255],[255,158,97,255],[255,160,100,255],[255,162,103,255],[255,164,106,255],[255,166,109,255],[255,168,112,255],[255,169,115,255],[255,171,118,255],[255,173,121,255],[255,175,124,255],[255,177,126,255],[255,179,129,255],[255,181,132,255],[255,183,135,255],[255,184,138,255],[255,186,141,255],[255,188,144,255],[255,190,147,255],[255,192,150,255],[255,194,153,255],[255,196,156,255],[255,198,159,255],[255,200,162,255],[255,201,165,255],[255,203,168,255],[255,205,171,255],[255,207,174,255],[255,209,176,255],[255,211,179,255],[255,213,182,255],[255,215,185,255],[255,216,188,255],[255,218,191,255],[255,220,194,255],[255,222,197,255],[255,224,200,255],[255,226,203,255],[255,228,206,255],[255,229,210,255],[255,231,213,255],[255,233,216,255],[255,235,219,255],[255,237,223,255],[255,239,226,255],[255,240,229,255],[255,242,232,255],[255,244,236,255],[255,246,239,255],[255,248,242,255],[255,250,245,255],[255,251,249,255],[255,253,252,255],[255,255,255,255]]},pet20Step:{name:"PET 20 Step",numColors:256,colors:[[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255]]},gray:{name:"Gray",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,1,1]]}},jet:{name:"Jet",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.35,0,0],[.66,1,1],[.89,1,1],[1,.5,.5]],green:[[0,0,0],[.125,0,0],[.375,1,1],[.64,1,1],[.91,0,0],[1,0,0]],blue:[[0,.5,.5],[.11,1,1],[.34,1,1],[.65,0,0],[1,0,0]]}},hsv:{name:"HSV",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[.15873,1,1],[.174603,.96875,.96875],[.333333,.03125,.03125],[.349206,0,0],[.666667,0,0],[.68254,.03125,.03125],[.84127,.96875,.96875],[.857143,1,1],[1,1,1]],green:[[0,0,0],[.15873,.9375,.9375],[.174603,1,1],[.507937,1,1],[.666667,.0625,.0625],[.68254,0,0],[1,0,0]],blue:[[0,0,0],[.333333,0,0],[.349206,.0625,.0625],[.507937,1,1],[.84127,1,1],[.857143,.9375,.9375],[1,.09375,.09375]]}},hot:{name:"Hot",numColors:256,gamma:1,segmentedData:{red:[[0,.0416,.0416],[.365079,1,1],[1,1,1]],green:[[0,0,0],[.365079,0,0],[.746032,1,1],[1,1,1]],blue:[[0,0,0],[.746032,0,0],[1,1,1]]}},cool:{name:"Cool",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,1,1],[1,0,0]],blue:[[0,1,1],[1,1,1]]}},spring:{name:"Spring",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,0,0]]}},summer:{name:"Summer",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,.5,.5],[1,1,1]],blue:[[0,.4,.4],[1,.4,.4]]}},autumn:{name:"Autumn",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,0,0]]}},winter:{name:"Winter",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,0,0]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,.5,.5]]}},bone:{name:"Bone",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.746032,.652778,.652778],[1,1,1]],green:[[0,0,0],[.365079,.319444,.319444],[.746032,.777778,.777778],[1,1,1]],blue:[[0,0,0],[.365079,.444444,.444444],[1,1,1]]}},copper:{name:"Copper",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.809524,1,1],[1,1,1]],green:[[0,0,0],[1,.7812,.7812]],blue:[[0,0,0],[1,.4975,.4975]]}},spectral:{name:"Spectral",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.05,.4667,.4667],[.1,.5333,.5333],[.15,0,0],[.2,0,0],[.25,0,0],[.3,0,0],[.35,0,0],[.4,0,0],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,.7333,.7333],[.7,.9333,.9333],[.75,1,1],[.8,1,1],[.85,1,1],[.9,.8667,.8667],[.95,.8,.8],[1,.8,.8]],green:[[0,0,0],[.05,0,0],[.1,0,0],[.15,0,0],[.2,0,0],[.25,.4667,.4667],[.3,.6,.6],[.35,.6667,.6667],[.4,.6667,.6667],[.45,.6,.6],[.5,.7333,.7333],[.55,.8667,.8667],[.6,1,1],[.65,1,1],[.7,.9333,.9333],[.75,.8,.8],[.8,.6,.6],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]],blue:[[0,0,0],[.05,.5333,.5333],[.1,.6,.6],[.15,.6667,.6667],[.2,.8667,.8667],[.25,.8667,.8667],[.3,.8667,.8667],[.35,.6667,.6667],[.4,.5333,.5333],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,0,0],[.7,0,0],[.75,0,0],[.8,0,0],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]]}},coolwarm:{name:"CoolWarm",numColors:256,gamma:1,segmentedData:{red:[[0,.2298057,.2298057],[.03125,.26623388,.26623388],[.0625,.30386891,.30386891],[.09375,.342804478,.342804478],[.125,.38301334,.38301334],[.15625,.424369608,.424369608],[.1875,.46666708,.46666708],[.21875,.509635204,.509635204],[.25,.552953156,.552953156],[.28125,.596262162,.596262162],[.3125,.639176211,.639176211],[.34375,.681291281,.681291281],[.375,.722193294,.722193294],[.40625,.761464949,.761464949],[.4375,.798691636,.798691636],[.46875,.833466556,.833466556],[.5,.865395197,.865395197],[.53125,.897787179,.897787179],[.5625,.924127593,.924127593],[.59375,.944468518,.944468518],[.625,.958852946,.958852946],[.65625,.96732803,.96732803],[.6875,.969954137,.969954137],[.71875,.966811177,.966811177],[.75,.958003065,.958003065],[.78125,.943660866,.943660866],[.8125,.923944917,.923944917],[.84375,.89904617,.89904617],[.875,.869186849,.869186849],[.90625,.834620542,.834620542],[.9375,.795631745,.795631745],[.96875,.752534934,.752534934],[1,.705673158,.705673158]],green:[[0,.298717966,.298717966],[.03125,.353094838,.353094838],[.0625,.406535296,.406535296],[.09375,.458757618,.458757618],[.125,.50941904,.50941904],[.15625,.558148092,.558148092],[.1875,.604562568,.604562568],[.21875,.648280772,.648280772],[.25,.688929332,.688929332],[.28125,.726149107,.726149107],[.3125,.759599947,.759599947],[.34375,.788964712,.788964712],[.375,.813952739,.813952739],[.40625,.834302879,.834302879],[.4375,.849786142,.849786142],[.46875,.860207984,.860207984],[.5,.86541021,.86541021],[.53125,.848937047,.848937047],[.5625,.827384882,.827384882],[.59375,.800927443,.800927443],[.625,.769767752,.769767752],[.65625,.734132809,.734132809],[.6875,.694266682,.694266682],[.71875,.650421156,.650421156],[.75,.602842431,.602842431],[.78125,.551750968,.551750968],[.8125,.49730856,.49730856],[.84375,.439559467,.439559467],[.875,.378313092,.378313092],[.90625,.312874446,.312874446],[.9375,.24128379,.24128379],[.96875,.157246067,.157246067],[1,.01555616,.01555616]],blue:[[0,.753683153,.753683153],[.03125,.801466763,.801466763],[.0625,.84495867,.84495867],[.09375,.883725899,.883725899],[.125,.917387822,.917387822],[.15625,.945619588,.945619588],[.1875,.968154911,.968154911],[.21875,.98478814,.98478814],[.25,.995375608,.995375608],[.28125,.999836203,.999836203],[.3125,.998151185,.998151185],[.34375,.990363227,.990363227],[.375,.976574709,.976574709],[.40625,.956945269,.956945269],[.4375,.931688648,.931688648],[.46875,.901068838,.901068838],[.5,.865395561,.865395561],[.53125,.820880546,.820880546],[.5625,.774508472,.774508472],[.59375,.726736146,.726736146],[.625,.678007945,.678007945],[.65625,.628751763,.628751763],[.6875,.579375448,.579375448],[.71875,.530263762,.530263762],[.75,.481775914,.481775914],[.78125,.434243684,.434243684],[.8125,.387970225,.387970225],[.84375,.343229596,.343229596],[.875,.300267182,.300267182],[.90625,.259301199,.259301199],[.9375,.220525627,.220525627],[.96875,.184115123,.184115123],[1,.150232812,.150232812]]}},blues:{name:"Blues",numColors:256,gamma:1,segmentedData:{red:[[0,.9686274528503418,.9686274528503418],[.125,.8705882430076599,.8705882430076599],[.25,.7764706015586853,.7764706015586853],[.375,.6196078658103943,.6196078658103943],[.5,.41960784792900085,.41960784792900085],[.625,.25882354378700256,.25882354378700256],[.75,.12941177189350128,.12941177189350128],[.875,.0313725508749485,.0313725508749485],[1,.0313725508749485,.0313725508749485]],green:[[0,.9843137264251709,.9843137264251709],[.125,.9215686321258545,.9215686321258545],[.25,.8588235378265381,.8588235378265381],[.375,.7921568751335144,.7921568751335144],[.5,.6823529601097107,.6823529601097107],[.625,.572549045085907,.572549045085907],[.75,.4431372582912445,.4431372582912445],[.875,.3176470696926117,.3176470696926117],[1,.1882352977991104,.1882352977991104]],blue:[[0,1,1],[.125,.9686274528503418,.9686274528503418],[.25,.9372549057006836,.9372549057006836],[.375,.8823529481887817,.8823529481887817],[.5,.8392156958580017,.8392156958580017],[.625,.7764706015586853,.7764706015586853],[.75,.7098039388656616,.7098039388656616],[.875,.6117647290229797,.6117647290229797],[1,.41960784792900085,.41960784792900085]]}}};function N(e,t){for(var r=0,a=e.length-1;r<=a;){var n=r+Math.floor((a-r)/2),i=e[n];if(i===t)return n;tt.timeStamp?-1:e.timeStamp>8,r[a++]=t[n]<0?0:1}return r}};Te.frag="precision mediump float;uniform sampler2D u_image;uniform float ww;uniform float wc;uniform float slope;uniform float intercept;uniform int invert;varying vec2 v_texCoord;void main() {vec4 color = texture2D(u_image, v_texCoord);float intensity = color.r*256.0 + color.g*65536.0;if (color.b == 0.0)intensity = -intensity;intensity = intensity * slope + intercept;float center0 = wc - 0.5;float width0 = max(ww, 1.0);intensity = (intensity - center0) / width0 + 0.5;intensity = clamp(intensity, 0.0, 1.0);gl_FragColor = vec4(intensity, intensity, intensity, 1.0);if (invert == 1)gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;}";var Ae={};var De={storedPixelDataToImageData:function(e){for(var t=e.getPixelData(),r=new Uint8Array(e.width*e.height*2),a=0,n=0;n>8}return r}};Re.frag="precision mediump float;uniform sampler2D u_image;uniform float ww;uniform float wc;uniform float slope;uniform float intercept;uniform int invert;varying vec2 v_texCoord;void main() {vec4 color = texture2D(u_image, v_texCoord);float intensity = color.r*256.0 + color.a*65536.0;intensity = intensity * slope + intercept;float center0 = wc - 0.5;float width0 = max(ww, 1.0);intensity = (intensity - center0) / width0 + 0.5;intensity = clamp(intensity, 0.0, 1.0);gl_FragColor = vec4(intensity, intensity, intensity, 1.0);if (invert == 1)gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;}";var Me={};var Ve={storedPixelDataToImageData:function(e){return e.getPixelData()}};Me.frag="precision mediump float;uniform sampler2D u_image;uniform float ww;uniform float wc;uniform float slope;uniform float intercept;uniform int invert;varying vec2 v_texCoord;void main() {vec4 color = texture2D(u_image, v_texCoord);float intensity = color.r*256.0;intensity = intensity * slope + intercept;float center0 = wc - 0.5;float width0 = max(ww, 1.0);intensity = (intensity - center0) / width0 + 0.5;intensity = clamp(intensity, 0.0, 1.0);gl_FragColor = vec4(intensity, intensity, intensity, 1.0);if (invert == 1)gl_FragColor.rgb = 1.0 - gl_FragColor.rgb;}";var Oe={int16:Te,int8:Ae,rgb:Pe,uint16:Re,uint8:Me},Ue={int16:Le,int8:De,rgb:Se,uint16:_e,uint8:Ve},Ne="attribute vec2 a_position;attribute vec2 a_texCoord;uniform vec2 u_resolution;varying vec2 v_texCoord;void main() {vec2 zeroToOne = a_position / u_resolution;vec2 zeroToTwo = zeroToOne * 2.0;vec2 clipSpace = zeroToTwo - 1.0;gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);v_texCoord = a_texCoord;}",Be={},Fe=[],Ge=268435456,ze=0;function ke(){if(!(ze<=Ge)){for(Fe.sort(function(e,t){return e.timeStamp>t.timeStamp?-1:e.timeStamp>n,o=a.lut[a.lut.length-1]>>n,l=a.firstValueMapped+a.lut.length-1,function(e){return e>n}):(s=e,d=t,function(e){return 255*((e-d)/s+.5)});var a,n,i,o,l,s,d},ut=function(e,t,r,a,n,i){var o=e.maxPixelValue,l=e.minPixelValue,s=Math.min(l,0);if(void 0===e.cachedLut){var d=o-s+1;e.cachedLut={},e.cachedLut.lutArray=new Uint8ClampedArray(d)}var u=e.cachedLut.lutArray,m=lt(e.slope,e.intercept,n),c=dt(t,r,i);if(!0===a)for(var v=l;v<=o;v++)u[v+-s]=255-c(m(v));else for(var g=l;g<=o;g++)u[g+-s]=c(m(g));return u},mt=function(e,t,r){return void 0!==e.cachedLut&&e.cachedLut.windowCenter===t.voi.windowCenter&&e.cachedLut.windowWidth===t.voi.windowWidth&&ot(e.cachedLut.modalityLUT,t.modalityLUT)&&ot(e.cachedLut.voiLUT,t.voiLUT)&&e.cachedLut.invert===t.invert&&!0!==r||(it(t,e),ut(e,t.voi.windowWidth,t.voi.windowCenter,t.invert,t.modalityLUT,t.voiLUT),e.cachedLut.windowWidth=t.voi.windowWidth,e.cachedLut.windowCenter=t.voi.windowCenter,e.cachedLut.invert=t.invert,e.cachedLut.voiLUT=t.voiLUT,e.cachedLut.modalityLUT=t.modalityLUT),e.cachedLut.lutArray},ct=function(e,t){var r=e.renderingTools.lastRenderedImageId,a=e.renderingTools.lastRenderedViewport;return t.imageId!==r||!a||a.windowCenter!==e.viewport.voi.windowCenter||a.windowWidth!==e.viewport.voi.windowWidth||a.invert!==e.viewport.invert||a.rotation!==e.viewport.rotation||a.hflip!==e.viewport.hflip||a.vflip!==e.viewport.vflip||a.modalityLUT!==e.viewport.modalityLUT||a.voiLUT!==e.viewport.voiLUT||a.colormap!==e.viewport.colormap},vt=function(e,t){var r=e.renderingTools.renderCanvas;r.width=t.width,r.height=t.height;var a=r.getContext("2d");a.fillStyle="white",a.fillRect(0,0,r.width,r.height);var n=a.getImageData(0,0,t.width,t.height);e.renderingTools.renderCanvasContext=a,e.renderingTools.renderCanvasData=n},gt=function(e){var t=e.image.imageId,r=e.viewport,a=e.image.color;return e.renderingTools.lastRenderedImageId=t,e.renderingTools.lastRenderedIsColor=a,e.renderingTools.lastRenderedViewport={windowCenter:r.voi.windowCenter,windowWidth:r.voi.windowWidth,invert:r.invert,rotation:r.rotation,hflip:r.hflip,vflip:r.vflip,modalityLUT:r.modalityLUT,voiLUT:r.voiLUT,colormap:r.colormap},e.renderingTools};function ft(e,t,r){var a=!(3i?i:t},e.degToRad=function(t){return t*(Math.PI/180)},e.radToDeg=function(t){return t*(180/Math.PI)},e.sign=function(t){return"number"==typeof t?t?t<0?-1:1:t==t?0:NaN:NaN}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(3),s=(n=o)&&n.__esModule?n:{default:n},r=i(0);var a,h,u,c,l,f=function(t,e,i){this.x=t||0,this.y=e||0,this.z=i||0};f.prototype={constructor:f,set:function(t,e,i){return this.x=t,this.y=e,this.z=i,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},sub:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyAxisAngle:(l=void 0,function(t,e){return void 0===l&&(l=new s.default),this.applyQuaternion(l.setFromAxisAngle(t.normalize(),e)),this}),applyMatrix3:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements;return this.x=o[0]*e+o[3]*i+o[6]*n,this.y=o[1]*e+o[4]*i+o[7]*n,this.z=o[2]*e+o[5]*i+o[8]*n,this},applyMatrix4:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements;return this.x=o[0]*e+o[4]*i+o[8]*n+o[12],this.y=o[1]*e+o[5]*i+o[9]*n+o[13],this.z=o[2]*e+o[6]*i+o[10]*n+o[14],this},applyProjection:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements,s=1/(o[3]*e+o[7]*i+o[11]*n+o[15]);return this.x=(o[0]*e+o[4]*i+o[8]*n+o[12])*s,this.y=(o[1]*e+o[5]*i+o[9]*n+o[13])*s,this.z=(o[2]*e+o[6]*i+o[10]*n+o[14])*s,this},applyQuaternion:function(t){var e=this.x,i=this.y,n=this.z,o=t.x,s=t.y,r=t.z,a=t.w,h=a*e+s*n-r*i,u=a*i+r*e-o*n,c=a*n+o*i-s*e,l=-o*e-s*i-r*n;return this.x=h*a+l*-o+u*-r-c*-s,this.y=u*a+l*-s+c*-o-h*-r,this.z=c*a+l*-r+h*-s-u*-o,this},transformDirection:function(t){var e=this.x,i=this.y,n=this.z,o=t.elements;return this.x=o[0]*e+o[4]*i+o[8]*n,this.y=o[1]*e+o[5]*i+o[9]*n,this.z=o[2]*e+o[6]*i+o[10]*n,this.normalize(),this},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){if(0!==t){var e=1/t;this.x*=e,this.y*=e,this.z*=e}else this.x=0,this.y=0,this.z=0;return this},min:function(t){return this.x>t.x&&(this.x=t.x),this.y>t.y&&(this.y=t.y),this.z>t.z&&(this.z=t.z),this},max:function(t){return this.xe.x&&(this.x=e.x),this.ye.y&&(this.y=e.y),this.ze.z&&(this.z=e.z),this},clampScalar:(u=void 0,c=void 0,function(t,e){return void 0===u&&(u=new f,c=new f),u.set(t,t,t),c.set(e,e,e),this.clamp(u,c)}),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.multiplyScalar(-1)},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){var e=this.length();return 0!==e&&t!==e&&this.multiplyScalar(t/e),this},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},cross:function(t,e){if(void 0!==e)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var i=this.x,n=this.y,o=this.z;return this.x=n*t.z-o*t.y,this.y=o*t.x-i*t.z,this.z=i*t.y-n*t.x,this},crossVectors:function(t,e){var i=t.x,n=t.y,o=t.z,s=e.x,r=e.y,a=e.z;return this.x=n*a-o*r,this.y=o*s-i*a,this.z=i*r-n*s,this},projectOnVector:(a=void 0,h=void 0,function(t){return void 0===a&&(a=new f),a.copy(t).normalize(),h=this.dot(a),this.copy(a).multiplyScalar(h)}),projectOnPlane:function(){var t=void 0;return function(e){return void 0===t&&(t=new f),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t=void 0;return function(e){return void 0===t&&(t=new f),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/(this.length()*t.length());return Math.acos((0,r.clamp)(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,i=this.y-t.y,n=this.z-t.z;return e*e+i*i+n*n},setFromMatrixPosition:function(t){return this.x=t.elements[12],this.y=t.elements[13],this.z=t.elements[14],this},setFromMatrixScale:function(t){var e=this.set(t.elements[0],t.elements[1],t.elements[2]).length(),i=this.set(t.elements[4],t.elements[5],t.elements[6]).length(),n=this.set(t.elements[8],t.elements[9],t.elements[10]).length();return this.x=e,this.y=i,this.z=n,this},setFromMatrixColumn:function(t,e){var i=4*t,n=e.elements;return this.x=n[i],this.y=n[i+1],this.z=n[i+2],this},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t){return this.x=t[0],this.y=t[1],this.z=t[2],this},toArray:function(){return[this.x,this.y,this.z]},clone:function(){return new f(this.x,this.y,this.z)}},e.default=f},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0);function o(t){return t*t}function s(t,e){return o(t.x-e.x)+o(t.y-e.y)}var r={distanceToPoint:function(t,e){return Math.sqrt(function(t,e){var i=s(t.start,t.end);if(0===i)return s(e,t.start);var n=((e.x-t.start.x)*(t.end.x-t.start.x)+(e.y-t.start.y)*(t.end.y-t.start.y))/i;return s(e,n<0?t.start:n>1?t.end:{x:t.start.x+n*(t.end.x-t.start.x),y:t.start.y+n*(t.end.y-t.start.y)})}(t,e))},intersectLine:function(t,e){var i,o,s,r,a,h,u,c,l,f,y,d={},p=t.start.x,x=t.start.y,m=t.end.x,v=t.end.y,g=e.start.x,z=e.start.y,b=e.end.x,M=e.end.y,w=void 0;if(f=(i=v-x)*b+(s=p-m)*M+(a=m*x-p*v),(0===(l=i*g+s*z+a)||0===f||(0,n.sign)(l)!==(0,n.sign)(f))&&(c=(o=M-z)*m+(r=g-b)*v+(h=b*z-g*M),0===(u=o*p+r*x+h)||0===c||(0,n.sign)(u)!==(0,n.sign)(c))){y=i*r-o*s,w=s*h-r*a;var R=parseFloat(w/y);w=o*a-i*h;var P=parseFloat(w/y);return d.x=R,d.y=P,d}}};e.default=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(t,e,i,n){this.x=t||0,this.y=e||0,this.z=i||0,this.w=void 0!==n?n:1};n.prototype.setFromAxisAngle=function(t,e){var i=e/2,n=Math.sin(i);return this.x=t.x*n,this.y=t.y*n,this.z=t.z*n,this.w=Math.cos(i),this},n.prototype.multiplyQuaternions=function(t,e){var i=t.x,n=t.y,o=t.z,s=t.w,r=e.x,a=e.y,h=e.z,u=e.w;return this.x=i*u+s*r+n*h-o*a,this.y=n*u+s*a+o*r-i*h,this.z=o*u+s*h+i*a-n*r,this.w=s*u-i*r-n*a-o*h,this},n.prototype.setFromRotationMatrix=function(t){var e=t.elements,i=e[0],n=e[4],o=e[8],s=e[1],r=e[5],a=e[9],h=e[2],u=e[6],c=e[10],l=i+r+c,f=void 0;return l>0?(f=.5/Math.sqrt(l+1),this.w=.25/f,this.x=(u-a)*f,this.y=(o-h)*f,this.z=(s-n)*f):i>r&&i>c?(f=2*Math.sqrt(1+i-r-c),this.w=(u-a)/f,this.x=.25*f,this.y=(n+s)/f,this.z=(o+h)/f):r>c?(f=2*Math.sqrt(1+r-i-c),this.w=(o-h)/f,this.x=(n+s)/f,this.y=.25*f,this.z=(a+u)/f):(f=2*Math.sqrt(1+c-i-r),this.w=(s-n)/f,this.x=(o+h)/f,this.y=(a+u)/f,this.z=.25*f),this},e.default=n},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(2),s=(n=o)&&n.__esModule?n:{default:n};function r(t){return{topLeft:{x:t.left,y:t.top},bottomRight:{x:t.left+t.width,y:t.top+t.height}}}var a={distanceToPoint:function(t,e){var i=655535;return function(t){return[{start:{x:t.left,y:t.top},end:{x:t.left+t.width,y:t.top}},{start:{x:t.left+t.width,y:t.top},end:{x:t.left+t.width,y:t.top+t.height}},{start:{x:t.left+t.width,y:t.top+t.height},end:{x:t.left,y:t.top+t.height}},{start:{x:t.left,y:t.top+t.height},end:{x:t.left,y:t.top}}]}(t).forEach(function(t){var n=s.default.distanceToPoint(t,e);n=0?e.width>=0?!(o.bottomRight.x<=s.topLeft.x||s.bottomRight.x<=o.topLeft.x):!(o.bottomRight.x<=s.bottomRight.x||s.topLeft.x<=o.topLeft.x):e.width>=0?!(o.topLeft.x<=s.topLeft.x||s.bottomRight.x<=o.bottomRight.x):!(o.topLeft.x<=s.bottomRight.x||s.topLeft.x<=o.bottomRight.x),n=t.height>=0?e.height>=0?!(o.bottomRight.y<=s.topLeft.y||s.bottomRight.y<=o.topLeft.y):!(o.bottomRight.y<=s.bottomRight.y||s.topLeft.y<=o.topLeft.y):e.height>=0?!(o.topLeft.y<=s.topLeft.y||s.bottomRight.y<=o.bottomRight.y):!(o.topLeft.y<=s.bottomRight.y||s.top<=o.bottomRight.y),i&&n}(t,e)){var n=r(t),o=r(e);return t.width>=0?e.width>=0?(i.topLeft.x=Math.max(n.topLeft.x,o.topLeft.x),i.bottomRight.x=Math.min(n.bottomRight.x,o.bottomRight.x)):(i.topLeft.x=Math.max(n.topLeft.x,o.bottomRight.x),i.bottomRight.x=Math.min(n.bottomRight.x,o.topLeft.x)):e.width>=0?(i.topLeft.x=Math.min(n.topLeft.x,o.bottomRight.x),i.bottomRight.x=Math.max(n.bottomRight.x,o.topLeft.x)):(i.topLeft.x=Math.min(n.topLeft.x,o.topLeft.x),i.bottomRight.x=Math.max(n.bottomRight.x,o.bottomRight.x)),t.height>=0?e.height>=0?(i.topLeft.y=Math.max(n.topLeft.y,o.topLeft.y),i.bottomRight.y=Math.min(n.bottomRight.y,o.bottomRight.y)):(i.topLeft.y=Math.max(n.topLeft.y,o.bottomRight.y),i.bottomRight.y=Math.min(n.bottomRight.y,o.topLeft.y)):e.height>=0?(i.topLeft.y=Math.min(n.topLeft.y,o.bottomRight.y),i.bottomRight.y=Math.max(n.bottomRight.y,o.topLeft.y)):(i.topLeft.y=Math.min(n.topLeft.y,o.topLeft.y),i.bottomRight.y=Math.max(n.bottomRight.y,o.bottomRight.y)),i}}};e.default=a},function(t,e,i){"use strict";function n(t,e){return{x:t.x-e.x,y:t.y-e.y}}function o(t,e){return Math.sqrt(s(t,e))}function s(t,e){var i=n(t,e);return i.x*i.x+i.y*i.y}Object.defineProperty(e,"__esModule",{value:!0});var r={subtract:n,copy:function(t){return{x:t.x,y:t.y}},pageToPoint:function(t){return{x:t.pageX,y:t.pageY}},distance:o,distanceSquared:s,insideRect:function(t,e){return!(t.xe.left+e.width||t.ye.top+e.height)},findClosestPoint:function(t,e){var i=[],n=void 0;return t.forEach(function(t,s){var r=o(t,e);i.push(r),n=0===s?r:Math.min(r,n)}),t[i.indexOf(n)]}};e.default=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(1),s=(n=o)&&n.__esModule?n:{default:n};var r,a,h=function(t,e){this.normal=void 0!==t?t:new s.default(1,0,0),this.constant=void 0!==e?e:0};h.prototype={constructor:h,set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,i,n){return this.normal.set(t,e,i),this.constant=n,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:(r=new s.default,a=new s.default,function(t,e,i){var n=r.subVectors(i,e).cross(a.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(n,t),this}),copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return this.orthoPoint(t,e).sub(t).negate()},orthoPoint:function(t,e){var i=this.distanceToPoint(t);return(e||new s.default).copy(this.normal).multiplyScalar(i)},isIntersectionLine:function(t){var e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0},intersectLine:function(){var t=new s.default;return function(e,i){var n=i||new s.default,o=e.delta(t),r=this.normal.dot(o);if(0===r)return 0===this.distanceToPoint(e.start)?n.copy(e.start):void 0;var a=-(e.start.dot(this.normal)+this.constant)/r;return a<0||a>1?void 0:n.copy(o).multiplyScalar(a).add(e.start)}}(),intersectPlane:function(t){var e=this.normal.clone().cross(t.normal),i={origin:new s.default,direction:e};if(this.normal.clone().cross(t.normal).length<1e-10)return i.direction=new s.default,i;var n=this.constant,o=t.constant,r=this.normal.clone().dot(t.normal),a=-(n-o*r)/(1-r*r),h=-(o-n*r)/(1-r*r);return i.origin=this.normal.clone().multiplyScalar(a).add(t.normal.clone().multiplyScalar(h)),i},coplanarPoint:function(t){return(t||new s.default).copy(this.normal).multiplyScalar(-this.constant)},translate:function(t){return this.constant=this.constant-t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant},clone:function(){return(new h).copy(this)}},e.default=h},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n,o=i(1),s=(n=o)&&n.__esModule?n:{default:n};var r=function(t,e,i,n,o,s,r,a,h,u,c,l,f,y,d,p){this.elements=new Float32Array(16);var x=this.elements;x[0]=void 0!==t?t:1,x[4]=e||0,x[8]=i||0,x[12]=n||0,x[1]=o||0,x[5]=void 0!==s?s:1,x[9]=r||0,x[13]=a||0,x[2]=h||0,x[6]=u||0,x[10]=void 0!==c?c:1,x[14]=l||0,x[3]=f||0,x[7]=y||0,x[11]=d||0,x[15]=void 0!==p?p:1};r.prototype.makeRotationFromQuaternion=function(t){var e=this.elements,i=t.x,n=t.y,o=t.z,s=t.w,r=i+i,a=n+n,h=o+o,u=i*r,c=i*a,l=i*h,f=n*a,y=n*h,d=o*h,p=s*r,x=s*a,m=s*h;return e[0]=1-(f+d),e[4]=c-m,e[8]=l+x,e[1]=c+m,e[5]=1-(u+d),e[9]=y-p,e[2]=l-x,e[6]=y+p,e[10]=1-(u+f),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},r.prototype.multiplyMatrices=function(t,e){var i=t.elements,n=e.elements,o=this.elements,s=i[0],r=i[4],a=i[8],h=i[12],u=i[1],c=i[5],l=i[9],f=i[13],y=i[2],d=i[6],p=i[10],x=i[14],m=i[3],v=i[7],g=i[11],z=i[15],b=n[0],M=n[4],w=n[8],R=n[12],P=n[1],L=n[5],T=n[9],S=n[13],_=n[2],V=n[6],q=n[10],j=n[14],E=n[3],k=n[7],O=n[11],A=n[15];return o[0]=s*b+r*P+a*_+h*E,o[4]=s*M+r*L+a*V+h*k,o[8]=s*w+r*T+a*q+h*O,o[12]=s*R+r*S+a*j+h*A,o[1]=u*b+c*P+l*_+f*E,o[5]=u*M+c*L+l*V+f*k,o[9]=u*w+c*T+l*q+f*O,o[13]=u*R+c*S+l*j+f*A,o[2]=y*b+d*P+p*_+x*E,o[6]=y*M+d*L+p*V+x*k,o[10]=y*w+d*T+p*q+x*O,o[14]=y*R+d*S+p*j+x*A,o[3]=m*b+v*P+g*_+z*E,o[7]=m*M+v*L+g*V+z*k,o[11]=m*w+v*T+g*q+z*O,o[15]=m*R+v*S+g*j+z*A,this},r.prototype.multiply=function(t,e){return void 0!==e?(console.warn("DEPRECATED: Matrix4's .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},r.prototype.getInverse=function(t,e){var i=this.elements,n=t.elements,o=n[0],s=n[4],r=n[8],a=n[12],h=n[1],u=n[5],c=n[9],l=n[13],f=n[2],y=n[6],d=n[10],p=n[14],x=n[3],m=n[7],v=n[11],g=n[15];i[0]=c*p*m-l*d*m+l*y*v-u*p*v-c*y*g+u*d*g,i[4]=a*d*m-r*p*m-a*y*v+s*p*v+r*y*g-s*d*g,i[8]=r*l*m-a*c*m+a*u*v-s*l*v-r*u*g+s*c*g,i[12]=a*c*y-r*l*y-a*u*d+s*l*d+r*u*p-s*c*p,i[1]=l*d*x-c*p*x-l*f*v+h*p*v+c*f*g-h*d*g,i[5]=r*p*x-a*d*x+a*f*v-o*p*v-r*f*g+o*d*g,i[9]=a*c*x-r*l*x-a*h*v+o*l*v+r*h*g-o*c*g,i[13]=r*l*f-a*c*f+a*h*d-o*l*d-r*h*p+o*c*p,i[2]=u*p*x-l*y*x+l*f*m-h*p*m-u*f*g+h*y*g,i[6]=a*y*x-s*p*x-a*f*m+o*p*m+s*f*g-o*y*g,i[10]=s*l*x-a*u*x+a*h*m-o*l*m-s*h*g+o*u*g,i[14]=a*u*f-s*l*f-a*h*y+o*l*y+s*h*p-o*u*p,i[3]=c*y*x-u*d*x-c*f*m+h*d*m+u*f*v-h*y*v,i[7]=s*d*x-r*y*x+r*f*m-o*d*m-s*f*v+o*y*v,i[11]=r*u*x-s*c*x-r*h*m+o*c*m+s*h*v-o*u*v,i[15]=s*c*f-r*u*f+r*h*y-o*c*y-s*h*d+o*u*d;var z=o*i[0]+h*i[4]+f*i[8]+x*i[12];if(0===z){var b="Matrix4.getInverse(): can't invert matrix, determinant is 0";if(e)throw new Error(b);return console.warn(b),this.identity(),this}return this.multiplyScalar(1/z),this},r.prototype.applyToVector3Array=function(){var t=new s.default;return function(e,i,n){void 0===i&&(i=0),void 0===n&&(n=e.length);for(var o=0,s=i;o1||isNaN(r))){var a=this.start.clone().add(e.clone().multiplyScalar(r));return a.clone().sub(t.start).lengthSq()+a.clone().sub(t.end).lengthSq()<=t.distanceSq()?a:void 0}}}}]),t}();e.default=h},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Vector3=e.rect=e.quaternion=e.point=e.Plane=e.Matrix4=e.sign=e.radToDeg=e.degToRad=e.clamp=e.lineSegment=e.Line3=void 0;var n=f(i(8)),o=f(i(2)),s=i(0),r=f(i(7)),a=f(i(6)),h=f(i(5)),u=f(i(3)),c=f(i(4)),l=f(i(1));function f(t){return t&&t.__esModule?t:{default:t}}var y={Line3:n.default,lineSegment:o.default,clamp:s.clamp,degToRad:s.degToRad,radToDeg:s.radToDeg,sign:s.sign,Matrix4:r.default,Plane:a.default,point:h.default,quaternion:u.default,rect:c.default,Vector3:l.default};e.Line3=n.default,e.lineSegment=o.default,e.clamp=s.clamp,e.degToRad=s.degToRad,e.radToDeg=s.radToDeg,e.sign=s.sign,e.Matrix4=r.default,e.Plane=a.default,e.point=h.default,e.quaternion=u.default,e.rect=c.default,e.Vector3=l.default,e.default=y}])}); +//# sourceMappingURL=cornerstoneMath.min.js.map \ No newline at end of file diff --git a/lib/cornerstone/cornerstoneTools.js b/lib/cornerstone/cornerstoneTools.js new file mode 100644 index 0000000..797252e --- /dev/null +++ b/lib/cornerstone/cornerstoneTools.js @@ -0,0 +1,37500 @@ +/*! cornerstone-tools - 4.12.1 - 2020-01-30 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/cornerstoneTools */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define("cornerstone-tools", [], factory); + else if(typeof exports === 'object') + exports["cornerstone-tools"] = factory(); + else + root["cornerstoneTools"] = factory(); +})(window, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ function hotDisposeChunk(chunkId) { +/******/ delete installedChunks[chunkId]; +/******/ } +/******/ var parentHotUpdateCallback = window["webpackHotUpdate"]; +/******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars +/******/ function webpackHotUpdateCallback(chunkId, moreModules) { +/******/ hotAddUpdateChunk(chunkId, moreModules); +/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules); +/******/ } ; +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotDownloadUpdateChunk(chunkId) { +/******/ var script = document.createElement("script"); +/******/ script.charset = "utf-8"; +/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js"; +/******/ if (null) script.crossOrigin = null; +/******/ document.head.appendChild(script); +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotDownloadManifest(requestTimeout) { +/******/ requestTimeout = requestTimeout || 10000; +/******/ return new Promise(function(resolve, reject) { +/******/ if (typeof XMLHttpRequest === "undefined") { +/******/ return reject(new Error("No browser support")); +/******/ } +/******/ try { +/******/ var request = new XMLHttpRequest(); +/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json"; +/******/ request.open("GET", requestPath, true); +/******/ request.timeout = requestTimeout; +/******/ request.send(null); +/******/ } catch (err) { +/******/ return reject(err); +/******/ } +/******/ request.onreadystatechange = function() { +/******/ if (request.readyState !== 4) return; +/******/ if (request.status === 0) { +/******/ // timeout +/******/ reject( +/******/ new Error("Manifest request to " + requestPath + " timed out.") +/******/ ); +/******/ } else if (request.status === 404) { +/******/ // no update available +/******/ resolve(); +/******/ } else if (request.status !== 200 && request.status !== 304) { +/******/ // other failure +/******/ reject(new Error("Manifest request to " + requestPath + " failed.")); +/******/ } else { +/******/ // success +/******/ try { +/******/ var update = JSON.parse(request.responseText); +/******/ } catch (e) { +/******/ reject(e); +/******/ return; +/******/ } +/******/ resolve(update); +/******/ } +/******/ }; +/******/ }); +/******/ } +/******/ +/******/ var hotApplyOnUpdate = true; +/******/ // eslint-disable-next-line no-unused-vars +/******/ var hotCurrentHash = "b1761a661dc8a6f2df90"; +/******/ var hotRequestTimeout = 10000; +/******/ var hotCurrentModuleData = {}; +/******/ var hotCurrentChildModule; +/******/ // eslint-disable-next-line no-unused-vars +/******/ var hotCurrentParents = []; +/******/ // eslint-disable-next-line no-unused-vars +/******/ var hotCurrentParentsTemp = []; +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotCreateRequire(moduleId) { +/******/ var me = installedModules[moduleId]; +/******/ if (!me) return __webpack_require__; +/******/ var fn = function(request) { +/******/ if (me.hot.active) { +/******/ if (installedModules[request]) { +/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) { +/******/ installedModules[request].parents.push(moduleId); +/******/ } +/******/ } else { +/******/ hotCurrentParents = [moduleId]; +/******/ hotCurrentChildModule = request; +/******/ } +/******/ if (me.children.indexOf(request) === -1) { +/******/ me.children.push(request); +/******/ } +/******/ } else { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + +/******/ request + +/******/ ") from disposed module " + +/******/ moduleId +/******/ ); +/******/ hotCurrentParents = []; +/******/ } +/******/ return __webpack_require__(request); +/******/ }; +/******/ var ObjectFactory = function ObjectFactory(name) { +/******/ return { +/******/ configurable: true, +/******/ enumerable: true, +/******/ get: function() { +/******/ return __webpack_require__[name]; +/******/ }, +/******/ set: function(value) { +/******/ __webpack_require__[name] = value; +/******/ } +/******/ }; +/******/ }; +/******/ for (var name in __webpack_require__) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) && +/******/ name !== "e" && +/******/ name !== "t" +/******/ ) { +/******/ Object.defineProperty(fn, name, ObjectFactory(name)); +/******/ } +/******/ } +/******/ fn.e = function(chunkId) { +/******/ if (hotStatus === "ready") hotSetStatus("prepare"); +/******/ hotChunksLoading++; +/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) { +/******/ finishChunkLoading(); +/******/ throw err; +/******/ }); +/******/ +/******/ function finishChunkLoading() { +/******/ hotChunksLoading--; +/******/ if (hotStatus === "prepare") { +/******/ if (!hotWaitingFilesMap[chunkId]) { +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ } +/******/ }; +/******/ fn.t = function(value, mode) { +/******/ if (mode & 1) value = fn(value); +/******/ return __webpack_require__.t(value, mode & ~1); +/******/ }; +/******/ return fn; +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotCreateModule(moduleId) { +/******/ var hot = { +/******/ // private stuff +/******/ _acceptedDependencies: {}, +/******/ _declinedDependencies: {}, +/******/ _selfAccepted: false, +/******/ _selfDeclined: false, +/******/ _disposeHandlers: [], +/******/ _main: hotCurrentChildModule !== moduleId, +/******/ +/******/ // Module API +/******/ active: true, +/******/ accept: function(dep, callback) { +/******/ if (dep === undefined) hot._selfAccepted = true; +/******/ else if (typeof dep === "function") hot._selfAccepted = dep; +/******/ else if (typeof dep === "object") +/******/ for (var i = 0; i < dep.length; i++) +/******/ hot._acceptedDependencies[dep[i]] = callback || function() {}; +/******/ else hot._acceptedDependencies[dep] = callback || function() {}; +/******/ }, +/******/ decline: function(dep) { +/******/ if (dep === undefined) hot._selfDeclined = true; +/******/ else if (typeof dep === "object") +/******/ for (var i = 0; i < dep.length; i++) +/******/ hot._declinedDependencies[dep[i]] = true; +/******/ else hot._declinedDependencies[dep] = true; +/******/ }, +/******/ dispose: function(callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ addDisposeHandler: function(callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ removeDisposeHandler: function(callback) { +/******/ var idx = hot._disposeHandlers.indexOf(callback); +/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ // Management API +/******/ check: hotCheck, +/******/ apply: hotApply, +/******/ status: function(l) { +/******/ if (!l) return hotStatus; +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ addStatusHandler: function(l) { +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ removeStatusHandler: function(l) { +/******/ var idx = hotStatusHandlers.indexOf(l); +/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ //inherit from previous dispose call +/******/ data: hotCurrentModuleData[moduleId] +/******/ }; +/******/ hotCurrentChildModule = undefined; +/******/ return hot; +/******/ } +/******/ +/******/ var hotStatusHandlers = []; +/******/ var hotStatus = "idle"; +/******/ +/******/ function hotSetStatus(newStatus) { +/******/ hotStatus = newStatus; +/******/ for (var i = 0; i < hotStatusHandlers.length; i++) +/******/ hotStatusHandlers[i].call(null, newStatus); +/******/ } +/******/ +/******/ // while downloading +/******/ var hotWaitingFiles = 0; +/******/ var hotChunksLoading = 0; +/******/ var hotWaitingFilesMap = {}; +/******/ var hotRequestedFilesMap = {}; +/******/ var hotAvailableFilesMap = {}; +/******/ var hotDeferred; +/******/ +/******/ // The update info +/******/ var hotUpdate, hotUpdateNewHash; +/******/ +/******/ function toModuleId(id) { +/******/ var isNumber = +id + "" === id; +/******/ return isNumber ? +id : id; +/******/ } +/******/ +/******/ function hotCheck(apply) { +/******/ if (hotStatus !== "idle") { +/******/ throw new Error("check() is only allowed in idle status"); +/******/ } +/******/ hotApplyOnUpdate = apply; +/******/ hotSetStatus("check"); +/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) { +/******/ if (!update) { +/******/ hotSetStatus("idle"); +/******/ return null; +/******/ } +/******/ hotRequestedFilesMap = {}; +/******/ hotWaitingFilesMap = {}; +/******/ hotAvailableFilesMap = update.c; +/******/ hotUpdateNewHash = update.h; +/******/ +/******/ hotSetStatus("prepare"); +/******/ var promise = new Promise(function(resolve, reject) { +/******/ hotDeferred = { +/******/ resolve: resolve, +/******/ reject: reject +/******/ }; +/******/ }); +/******/ hotUpdate = {}; +/******/ var chunkId = "cornerstoneTools"; +/******/ // eslint-disable-next-line no-lone-blocks +/******/ { +/******/ /*globals chunkId */ +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if ( +/******/ hotStatus === "prepare" && +/******/ hotChunksLoading === 0 && +/******/ hotWaitingFiles === 0 +/******/ ) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ return promise; +/******/ }); +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotAddUpdateChunk(chunkId, moreModules) { +/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId]) +/******/ return; +/******/ hotRequestedFilesMap[chunkId] = false; +/******/ for (var moduleId in moreModules) { +/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ hotUpdate[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ +/******/ function hotEnsureUpdateChunk(chunkId) { +/******/ if (!hotAvailableFilesMap[chunkId]) { +/******/ hotWaitingFilesMap[chunkId] = true; +/******/ } else { +/******/ hotRequestedFilesMap[chunkId] = true; +/******/ hotWaitingFiles++; +/******/ hotDownloadUpdateChunk(chunkId); +/******/ } +/******/ } +/******/ +/******/ function hotUpdateDownloaded() { +/******/ hotSetStatus("ready"); +/******/ var deferred = hotDeferred; +/******/ hotDeferred = null; +/******/ if (!deferred) return; +/******/ if (hotApplyOnUpdate) { +/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to +/******/ // avoid triggering uncaught exception warning in Chrome. +/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666 +/******/ Promise.resolve() +/******/ .then(function() { +/******/ return hotApply(hotApplyOnUpdate); +/******/ }) +/******/ .then( +/******/ function(result) { +/******/ deferred.resolve(result); +/******/ }, +/******/ function(err) { +/******/ deferred.reject(err); +/******/ } +/******/ ); +/******/ } else { +/******/ var outdatedModules = []; +/******/ for (var id in hotUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ outdatedModules.push(toModuleId(id)); +/******/ } +/******/ } +/******/ deferred.resolve(outdatedModules); +/******/ } +/******/ } +/******/ +/******/ function hotApply(options) { +/******/ if (hotStatus !== "ready") +/******/ throw new Error("apply() is only allowed in ready status"); +/******/ options = options || {}; +/******/ +/******/ var cb; +/******/ var i; +/******/ var j; +/******/ var module; +/******/ var moduleId; +/******/ +/******/ function getAffectedStuff(updateModuleId) { +/******/ var outdatedModules = [updateModuleId]; +/******/ var outdatedDependencies = {}; +/******/ +/******/ var queue = outdatedModules.map(function(id) { +/******/ return { +/******/ chain: [id], +/******/ id: id +/******/ }; +/******/ }); +/******/ while (queue.length > 0) { +/******/ var queueItem = queue.pop(); +/******/ var moduleId = queueItem.id; +/******/ var chain = queueItem.chain; +/******/ module = installedModules[moduleId]; +/******/ if (!module || module.hot._selfAccepted) continue; +/******/ if (module.hot._selfDeclined) { +/******/ return { +/******/ type: "self-declined", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ if (module.hot._main) { +/******/ return { +/******/ type: "unaccepted", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ for (var i = 0; i < module.parents.length; i++) { +/******/ var parentId = module.parents[i]; +/******/ var parent = installedModules[parentId]; +/******/ if (!parent) continue; +/******/ if (parent.hot._declinedDependencies[moduleId]) { +/******/ return { +/******/ type: "declined", +/******/ chain: chain.concat([parentId]), +/******/ moduleId: moduleId, +/******/ parentId: parentId +/******/ }; +/******/ } +/******/ if (outdatedModules.indexOf(parentId) !== -1) continue; +/******/ if (parent.hot._acceptedDependencies[moduleId]) { +/******/ if (!outdatedDependencies[parentId]) +/******/ outdatedDependencies[parentId] = []; +/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); +/******/ continue; +/******/ } +/******/ delete outdatedDependencies[parentId]; +/******/ outdatedModules.push(parentId); +/******/ queue.push({ +/******/ chain: chain.concat([parentId]), +/******/ id: parentId +/******/ }); +/******/ } +/******/ } +/******/ +/******/ return { +/******/ type: "accepted", +/******/ moduleId: updateModuleId, +/******/ outdatedModules: outdatedModules, +/******/ outdatedDependencies: outdatedDependencies +/******/ }; +/******/ } +/******/ +/******/ function addAllToSet(a, b) { +/******/ for (var i = 0; i < b.length; i++) { +/******/ var item = b[i]; +/******/ if (a.indexOf(item) === -1) a.push(item); +/******/ } +/******/ } +/******/ +/******/ // at begin all updates modules are outdated +/******/ // the "outdated" status can propagate to parents if they don't accept the children +/******/ var outdatedDependencies = {}; +/******/ var outdatedModules = []; +/******/ var appliedUpdate = {}; +/******/ +/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module" +/******/ ); +/******/ }; +/******/ +/******/ for (var id in hotUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ moduleId = toModuleId(id); +/******/ /** @type {TODO} */ +/******/ var result; +/******/ if (hotUpdate[id]) { +/******/ result = getAffectedStuff(moduleId); +/******/ } else { +/******/ result = { +/******/ type: "disposed", +/******/ moduleId: id +/******/ }; +/******/ } +/******/ /** @type {Error|false} */ +/******/ var abortError = false; +/******/ var doApply = false; +/******/ var doDispose = false; +/******/ var chainInfo = ""; +/******/ if (result.chain) { +/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); +/******/ } +/******/ switch (result.type) { +/******/ case "self-declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of self decline: " + +/******/ result.moduleId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of declined dependency: " + +/******/ result.moduleId + +/******/ " in " + +/******/ result.parentId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "unaccepted": +/******/ if (options.onUnaccepted) options.onUnaccepted(result); +/******/ if (!options.ignoreUnaccepted) +/******/ abortError = new Error( +/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo +/******/ ); +/******/ break; +/******/ case "accepted": +/******/ if (options.onAccepted) options.onAccepted(result); +/******/ doApply = true; +/******/ break; +/******/ case "disposed": +/******/ if (options.onDisposed) options.onDisposed(result); +/******/ doDispose = true; +/******/ break; +/******/ default: +/******/ throw new Error("Unexception type " + result.type); +/******/ } +/******/ if (abortError) { +/******/ hotSetStatus("abort"); +/******/ return Promise.reject(abortError); +/******/ } +/******/ if (doApply) { +/******/ appliedUpdate[moduleId] = hotUpdate[moduleId]; +/******/ addAllToSet(outdatedModules, result.outdatedModules); +/******/ for (moduleId in result.outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call( +/******/ result.outdatedDependencies, +/******/ moduleId +/******/ ) +/******/ ) { +/******/ if (!outdatedDependencies[moduleId]) +/******/ outdatedDependencies[moduleId] = []; +/******/ addAllToSet( +/******/ outdatedDependencies[moduleId], +/******/ result.outdatedDependencies[moduleId] +/******/ ); +/******/ } +/******/ } +/******/ } +/******/ if (doDispose) { +/******/ addAllToSet(outdatedModules, [result.moduleId]); +/******/ appliedUpdate[moduleId] = warnUnexpectedRequire; +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Store self accepted outdated modules to require them later by the module system +/******/ var outdatedSelfAcceptedModules = []; +/******/ for (i = 0; i < outdatedModules.length; i++) { +/******/ moduleId = outdatedModules[i]; +/******/ if ( +/******/ installedModules[moduleId] && +/******/ installedModules[moduleId].hot._selfAccepted && +/******/ // removed self-accepted modules should not be required +/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire +/******/ ) { +/******/ outdatedSelfAcceptedModules.push({ +/******/ module: moduleId, +/******/ errorHandler: installedModules[moduleId].hot._selfAccepted +/******/ }); +/******/ } +/******/ } +/******/ +/******/ // Now in "dispose" phase +/******/ hotSetStatus("dispose"); +/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) { +/******/ if (hotAvailableFilesMap[chunkId] === false) { +/******/ hotDisposeChunk(chunkId); +/******/ } +/******/ }); +/******/ +/******/ var idx; +/******/ var queue = outdatedModules.slice(); +/******/ while (queue.length > 0) { +/******/ moduleId = queue.pop(); +/******/ module = installedModules[moduleId]; +/******/ if (!module) continue; +/******/ +/******/ var data = {}; +/******/ +/******/ // Call dispose handlers +/******/ var disposeHandlers = module.hot._disposeHandlers; +/******/ for (j = 0; j < disposeHandlers.length; j++) { +/******/ cb = disposeHandlers[j]; +/******/ cb(data); +/******/ } +/******/ hotCurrentModuleData[moduleId] = data; +/******/ +/******/ // disable module (this disables requires from this module) +/******/ module.hot.active = false; +/******/ +/******/ // remove module from cache +/******/ delete installedModules[moduleId]; +/******/ +/******/ // when disposing there is no need to call dispose handler +/******/ delete outdatedDependencies[moduleId]; +/******/ +/******/ // remove "parents" references from all children +/******/ for (j = 0; j < module.children.length; j++) { +/******/ var child = installedModules[module.children[j]]; +/******/ if (!child) continue; +/******/ idx = child.parents.indexOf(moduleId); +/******/ if (idx >= 0) { +/******/ child.parents.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ +/******/ // remove outdated dependency from module children +/******/ var dependency; +/******/ var moduleOutdatedDependencies; +/******/ for (moduleId in outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId) +/******/ ) { +/******/ module = installedModules[moduleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) { +/******/ dependency = moduleOutdatedDependencies[j]; +/******/ idx = module.children.indexOf(dependency); +/******/ if (idx >= 0) module.children.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Now in "apply" phase +/******/ hotSetStatus("apply"); +/******/ +/******/ hotCurrentHash = hotUpdateNewHash; +/******/ +/******/ // insert new code +/******/ for (moduleId in appliedUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) { +/******/ modules[moduleId] = appliedUpdate[moduleId]; +/******/ } +/******/ } +/******/ +/******/ // call accept handlers +/******/ var error = null; +/******/ for (moduleId in outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId) +/******/ ) { +/******/ module = installedModules[moduleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ var callbacks = []; +/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) { +/******/ dependency = moduleOutdatedDependencies[i]; +/******/ cb = module.hot._acceptedDependencies[dependency]; +/******/ if (cb) { +/******/ if (callbacks.indexOf(cb) !== -1) continue; +/******/ callbacks.push(cb); +/******/ } +/******/ } +/******/ for (i = 0; i < callbacks.length; i++) { +/******/ cb = callbacks[i]; +/******/ try { +/******/ cb(moduleOutdatedDependencies); +/******/ } catch (err) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "accept-errored", +/******/ moduleId: moduleId, +/******/ dependencyId: moduleOutdatedDependencies[i], +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Load self accepted modules +/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) { +/******/ var item = outdatedSelfAcceptedModules[i]; +/******/ moduleId = item.module; +/******/ hotCurrentParents = [moduleId]; +/******/ try { +/******/ __webpack_require__(moduleId); +/******/ } catch (err) { +/******/ if (typeof item.errorHandler === "function") { +/******/ try { +/******/ item.errorHandler(err); +/******/ } catch (err2) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-error-handler-errored", +/******/ moduleId: moduleId, +/******/ error: err2, +/******/ originalError: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err2; +/******/ } +/******/ if (!error) error = err; +/******/ } +/******/ } else { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-errored", +/******/ moduleId: moduleId, +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // handle errors in accept handlers and self accepted module load +/******/ if (error) { +/******/ hotSetStatus("fail"); +/******/ return Promise.reject(error); +/******/ } +/******/ +/******/ hotSetStatus("idle"); +/******/ return new Promise(function(resolve) { +/******/ resolve(outdatedModules); +/******/ }); +/******/ } +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {}, +/******/ hot: hotCreateModule(moduleId), +/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp), +/******/ children: [] +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId)); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // __webpack_hash__ +/******/ __webpack_require__.h = function() { return hotCurrentHash; }; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return hotCreateRequire("./index.js")(__webpack_require__.s = "./index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js": +/*!****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/arrayWithHoles.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +module.exports = _arrayWithHoles; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js": +/*!*******************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { + arr2[i] = arr[i]; + } + + return arr2; + } +} + +module.exports = _arrayWithoutHoles; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js": +/*!***********************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/assertThisInitialized.js ***! + \***********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; +} + +module.exports = _assertThisInitialized; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js": +/*!******************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } +} + +function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); + + function _next(value) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); + } + + function _throw(err) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); + } + + _next(undefined); + }); + }; +} + +module.exports = _asyncToGenerator; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/classCallCheck.js": +/*!****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/classCallCheck.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +module.exports = _classCallCheck; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/createClass.js": +/*!*************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/createClass.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +module.exports = _createClass; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/defineProperty.js": +/*!****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/defineProperty.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +module.exports = _defineProperty; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js": +/*!****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/getPrototypeOf.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _getPrototypeOf(o) { + module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +module.exports = _getPrototypeOf; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/inherits.js": +/*!**********************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/inherits.js ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js"); + +function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + if (superClass) setPrototypeOf(subClass, superClass); +} + +module.exports = _inherits; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/iterableToArray.js": +/*!*****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/iterableToArray.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); +} + +module.exports = _iterableToArray; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js": +/*!**********************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_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; +} + +module.exports = _iterableToArrayLimit; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/nonIterableRest.js": +/*!*****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/nonIterableRest.js ***! + \*****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); +} + +module.exports = _nonIterableRest; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/nonIterableSpread.js": +/*!*******************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/nonIterableSpread.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); +} + +module.exports = _nonIterableSpread; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": +/*!***************************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***! + \***************************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var _typeof = __webpack_require__(/*! ../helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); + +var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); + +function _possibleConstructorReturn(self, call) { + if (call && (_typeof(call) === "object" || typeof call === "function")) { + return call; + } + + return assertThisInitialized(self); +} + +module.exports = _possibleConstructorReturn; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/setPrototypeOf.js": +/*!****************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/setPrototypeOf.js ***! + \****************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _setPrototypeOf(o, p) { + module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +module.exports = _setPrototypeOf; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/slicedToArray.js": +/*!***************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/slicedToArray.js ***! + \***************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles */ "../node_modules/@babel/runtime/helpers/arrayWithHoles.js"); + +var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit */ "../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"); + +var nonIterableRest = __webpack_require__(/*! ./nonIterableRest */ "../node_modules/@babel/runtime/helpers/nonIterableRest.js"); + +function _slicedToArray(arr, i) { + return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest(); +} + +module.exports = _slicedToArray; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/toConsumableArray.js": +/*!*******************************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/toConsumableArray.js ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles */ "../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js"); + +var iterableToArray = __webpack_require__(/*! ./iterableToArray */ "../node_modules/@babel/runtime/helpers/iterableToArray.js"); + +var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread */ "../node_modules/@babel/runtime/helpers/nonIterableSpread.js"); + +function _toConsumableArray(arr) { + return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread(); +} + +module.exports = _toConsumableArray; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/helpers/typeof.js": +/*!********************************************************!*\ + !*** ../node_modules/@babel/runtime/helpers/typeof.js ***! + \********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } + +function _typeof(obj) { + if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") { + module.exports = _typeof = function _typeof(obj) { + return _typeof2(obj); + }; + } else { + module.exports = _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); + }; + } + + return _typeof(obj); +} + +module.exports = _typeof; + +/***/ }), + +/***/ "../node_modules/@babel/runtime/regenerator/index.js": +/*!***********************************************************!*\ + !*** ../node_modules/@babel/runtime/regenerator/index.js ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(/*! regenerator-runtime */ "../node_modules/regenerator-runtime/runtime-module.js"); + + +/***/ }), + +/***/ "../node_modules/ms/index.js": +/*!***********************************!*\ + !*** ../node_modules/ms/index.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} + + +/***/ }), + +/***/ "../node_modules/process/browser.js": +/*!******************************************!*\ + !*** ../node_modules/process/browser.js ***! + \******************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + + +/***/ }), + +/***/ "../node_modules/regenerator-runtime/runtime-module.js": +/*!*************************************************************!*\ + !*** ../node_modules/regenerator-runtime/runtime-module.js ***! + \*************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// This method of obtaining a reference to the global object needs to be +// kept identical to the way it is obtained in runtime.js +var g = (function() { + return this || (typeof self === "object" && self); +})() || Function("return this")(); + +// Use `getOwnPropertyNames` because not all browsers support calling +// `hasOwnProperty` on the global `self` object in a worker. See #183. +var hadRuntime = g.regeneratorRuntime && + Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; + +// Save the old regeneratorRuntime in case it needs to be restored later. +var oldRuntime = hadRuntime && g.regeneratorRuntime; + +// Force reevalutation of runtime.js. +g.regeneratorRuntime = undefined; + +module.exports = __webpack_require__(/*! ./runtime */ "../node_modules/regenerator-runtime/runtime.js"); + +if (hadRuntime) { + // Restore the original runtime. + g.regeneratorRuntime = oldRuntime; +} else { + // Remove the global property added by runtime.js. + try { + delete g.regeneratorRuntime; + } catch(e) { + g.regeneratorRuntime = undefined; + } +} + + +/***/ }), + +/***/ "../node_modules/regenerator-runtime/runtime.js": +/*!******************************************************!*\ + !*** ../node_modules/regenerator-runtime/runtime.js ***! + \******************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/** + * Copyright (c) 2014-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. + result.value = unwrapped; + resolve(result); + }, function(error) { + // If a rejected Promise was yielded, throw the rejection back + // into the async generator function so it can be handled there. + return invoke("throw", error, resolve, reject); + }); + } + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; +})( + // In sloppy mode, unbound `this` refers to the global object, fallback to + // Function constructor if we're in global strict mode. That is sadly a form + // of indirect eval which violates Content Security Policy. + (function() { + return this || (typeof self === "object" && self); + })() || Function("return this")() +); + + +/***/ }), + +/***/ "./drawing/draw.js": +/*!*************************!*\ + !*** ./drawing/draw.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * This function manages the {@link https://www.w3.org/TR/2dcontext/#the-canvas-state|save/restore} + * pattern for working in a new context state stack. The parameter `fn` is passed the `context` and can + * execute any API calls in a clean stack. + * @public + * @method draw + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target Canvas + * @param {ContextFn} fn - A function which performs drawing operations within the given context. + * @returns {undefined} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (context, fn) { + context.save(); + fn(context); + context.restore(); +}); + +/***/ }), + +/***/ "./drawing/drawArrow.js": +/*!******************************!*\ + !*** ./drawing/drawArrow.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _drawLine_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drawLine.js */ "./drawing/drawLine.js"); +/* harmony import */ var _drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drawJoinedLines.js */ "./drawing/drawJoinedLines.js"); + + +/** + * Draw an arrow using the drawing API. + * @public + * @method drawArrow + * @memberof Drawing + * + * @param {Object} context The canvas context. + * @param {Object} start The start position. + * @param {Object} end The end position. + * @param {string} color The color of the arrow. + * @param {number} lineWidth The width of the arrow line. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, start, end, color, lineWidth) { + // Variables to be used when creating the arrow + var headLength = 10; + var angle = Math.atan2(end.y - start.y, end.x - start.x); // Starting path of the arrow from the start square to the end square and drawing the stroke + + var options = { + color: color, + lineWidth: lineWidth + }; + Object(_drawLine_js__WEBPACK_IMPORTED_MODULE_0__["default"])(context, undefined, start, end, options, 'canvas'); + options = { + color: color, + lineWidth: lineWidth, + fillStyle: color + }; + var points = [{ + x: end.x - headLength * Math.cos(angle - Math.PI / 7), + y: end.y - headLength * Math.sin(angle - Math.PI / 7) + }, { + x: end.x - headLength * Math.cos(angle + Math.PI / 7), + y: end.y - headLength * Math.sin(angle + Math.PI / 7) + }, end]; + Object(_drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, undefined, end, points, options, 'canvas'); +}); + +/***/ }), + +/***/ "./drawing/drawCircle.js": +/*!*******************************!*\ + !*** ./drawing/drawCircle.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); + + +/** + * Draw a circle with given `center` and `radius`. + * @public + * @method drawCircle + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object} center - `{ x, y }` in either pixel or canvas coordinates. + * @param {number} radius - The circle's radius in canvas units. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, center, radius, options) { + var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel'; + + if (coordSystem === 'pixel') { + center = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, center); + } + + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + context.arc(center.x, center.y, radius, 0, 2 * Math.PI); + }); +}); + +/***/ }), + +/***/ "./drawing/drawEllipse.js": +/*!********************************!*\ + !*** ./drawing/drawEllipse.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); +/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/pointProjector.js */ "./util/pointProjector.js"); + + + +/** + * Draw an ellipse within the bounding box defined by `corner1` and `corner2`. + * @public + * @method drawEllipse + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object} corner1 - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} corner2 - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @param {Number} initialRotation - Ellipse initial rotation + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, corner1, corner2, options) { + var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel'; + var initialRotation = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0.0; + + if (coordSystem === 'pixel') { + corner1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, corner1); + corner2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, corner2); + } + + var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getViewport(element); // Calculate the center of the image + + var width = element.clientWidth, + height = element.clientHeight; + var scale = viewport.scale, + translation = viewport.translation; + var rotation = viewport.rotation - initialRotation; + var centerPoint = { + x: width / 2 + translation.x * scale, + y: height / 2 + translation.y * scale + }; + + if (Math.abs(rotation) > 0.05) { + corner1 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner1, centerPoint, -rotation); + corner2 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner2, centerPoint, -rotation); + } + + var w = Math.abs(corner1.x - corner2.x); + var h = Math.abs(corner1.y - corner2.y); + var xMin = Math.min(corner1.x, corner2.x); + var yMin = Math.min(corner1.y, corner2.y); + var center = { + x: xMin + w / 2, + y: yMin + h / 2 + }; + + if (Math.abs(rotation) > 0.05) { + center = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(center, centerPoint, rotation); + } + + var angle = rotation * Math.PI / 180; + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + context.ellipse(center.x, center.y, w / 2, h / 2, angle, 0, 2 * Math.PI); + context.closePath(); + }); +}); + +/***/ }), + +/***/ "./drawing/drawHandles.js": +/*!********************************!*\ + !*** ./drawing/drawHandles.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); + + + + + +/** + * Draws proivded handles to the provided context + * @public + * @method drawHandles + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {*} evtDetail - Cornerstone's 'cornerstoneimagerendered' event's `detail` + * @param {Object[]|Object} handles - An array of handle objects, or an object w/ named handle objects + * @param {Object} [options={}] - Options object + * @param {string} [options.color] + * @param {Boolean} [options.drawHandlesIfActive=false] - Whether the handles should only be drawn if Active (hovered/selected) + * @param {string} [options.fill] + * @param {Number} [options.handleRadius=6] + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, evtDetail, handles) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var element = evtDetail.element; + var defaultColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getToolColor(); + context.strokeStyle = options.color || defaultColor; + var handleKeys = Object.keys(handles); + + var _loop = function _loop(i) { + var handleKey = handleKeys[i]; + var handle = handles[handleKey]; + + if (handle.drawnIndependently === true) { + return "continue"; + } + + if (options.drawHandlesIfActive === true && !handle.active) { + return "continue"; + } + + var lineWidth = handle.active ? _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"].getActiveWidth() : _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"].getToolWidth(); + var fillStyle = options.fill; + Object(_path_js__WEBPACK_IMPORTED_MODULE_3__["default"])(context, { + lineWidth: lineWidth, + fillStyle: fillStyle + }, function (context) { + var handleCanvasCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, handle); // Handle's radisu, then tool's radius, then default radius + + var handleRadius = handle.radius || options.handleRadius || _store_index_js__WEBPACK_IMPORTED_MODULE_4__["state"].handleRadius; + context.arc(handleCanvasCoords.x, handleCanvasCoords.y, handleRadius, 0, 2 * Math.PI); + }); + }; + + for (var i = 0; i < handleKeys.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } +}); + +/***/ }), + +/***/ "./drawing/drawJoinedLines.js": +/*!************************************!*\ + !*** ./drawing/drawJoinedLines.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); + + +/** + * Draw a series of joined lines, starting at `start` and then going to each point in `points`. + * @public + * @method drawJoinedLines + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object} start - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object[]} points - `[{ x, y }]` An array of points in either pixel or canvas coordinates. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, start, points, options) { + var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel'; + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + if (coordSystem === 'pixel') { + start = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, start); + points = points.map(function (p) { + return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, p); + }); + } + + context.moveTo(start.x, start.y); + points.forEach(function (_ref) { + var x = _ref.x, + y = _ref.y; + context.lineTo(x, y); + }); + }); +}); + +/***/ }), + +/***/ "./drawing/drawLine.js": +/*!*****************************!*\ + !*** ./drawing/drawLine.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return drawLine; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); + + +/** + * Draw a line between `start` and `end`. + * + * @public + * @method drawLine + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object} start - `{ x, y } in either pixel or canvas coordinates. + * @param {Object} end - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @returns {undefined} + */ + +function drawLine(context, element, start, end, options) { + var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel'; + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + if (coordSystem === 'pixel') { + start = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, start); + end = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.pixelToCanvas(element, end); + } + + context.moveTo(start.x, start.y); + context.lineTo(end.x, end.y); + }); +} + +/***/ }), + +/***/ "./drawing/drawLines.js": +/*!******************************!*\ + !*** ./drawing/drawLines.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); + + +/** + * Draw multiple lines. + * @public + * @method drawJoinedLines + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object[]} lines - `[{ start: {x, y}, end: { x, y }]` An array of `start`, `end` pairs. + * Each point is `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, lines, options) { + var coordSystem = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'pixel'; + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + lines.forEach(function (line) { + var start = line.start; + var end = line.end; + + if (coordSystem === 'pixel') { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + start = cornerstone.pixelToCanvas(element, start); + end = cornerstone.pixelToCanvas(element, end); + } + + context.moveTo(start.x, start.y); + context.lineTo(end.x, end.y); + }); + }); +}); + +/***/ }), + +/***/ "./drawing/drawLink.js": +/*!*****************************!*\ + !*** ./drawing/drawLink.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _drawLine_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drawLine.js */ "./drawing/drawLine.js"); + + +/** + * Draw a link between an annotation to a box. + * @public + * @method drawLink + * @memberof Drawing + * + * @param {Object[]} linkAnchorPoints An array of possible anchor points. + * @param {Object} refPoint A reference point to select the anchor point. + * @param {Object} boundingBox The bounding box to link. + * @param {Object} context The canvas context. + * @param {string} color The link color. + * @param {number} lineWidth The line width of the link. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (linkAnchorPoints, refPoint, boundingBox, context, color, lineWidth) { + // Draw a link from "the closest anchor point to refPoint" to "the nearest midpoint on the bounding box". + // Find the closest anchor point to RefPoint + var start = linkAnchorPoints.length > 0 ? _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.findClosestPoint(linkAnchorPoints, refPoint) : refPoint; // Calculate the midpoints of the bounding box + + var boundingBoxPoints = [{ + x: boundingBox.left + boundingBox.width / 2, + y: boundingBox.top + }, { + x: boundingBox.left, + y: boundingBox.top + boundingBox.height / 2 + }, { + x: boundingBox.left + boundingBox.width / 2, + y: boundingBox.top + boundingBox.height + }, { + x: boundingBox.left + boundingBox.width, + y: boundingBox.top + boundingBox.height / 2 + }]; // Calculate the link endpoint by identifying which midpoint of the bounding box + // Is closest to the start point. + + var end = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.findClosestPoint(boundingBoxPoints, start); // Finally we draw the dashed linking line + + var options = { + color: color, + lineWidth: lineWidth, + lineDash: [2, 3] + }; + Object(_drawLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, undefined, start, end, options, 'canvas'); +}); + +/***/ }), + +/***/ "./drawing/drawLinkedTextBox.js": +/*!**************************************!*\ + !*** ./drawing/drawLinkedTextBox.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _drawTextBox_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _drawLink_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./drawLink.js */ "./drawing/drawLink.js"); + + + +/** + * Draw a link between an annotation to a textBox. + * @public + * @method drawLinkedTextBox + * @memberof Drawing + * + * @param {Object} context - The canvas context. + * @param {HTMLElement} element - The element on which to draw the link. + * @param {Object} textBox - The textBox to link. + * @param {Object} text - The text to display in the textbox. + * @param {Object[]} handles - The handles of the annotation. + * @param {Object[]} textBoxAnchorPoints - An array of possible anchor points on the textBox. + * @param {string} color - The link color. + * @param {number} lineWidth - The line width of the link. + * @param {number} xOffset - The x offset of the textbox. + * @param {boolean} yCenter - Vertically centers the text if true. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, textBox, text, handles, textBoxAnchorPoints, color, lineWidth, xOffset, yCenter) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Convert the textbox Image coordinates into Canvas coordinates + + var textCoords = cornerstone.pixelToCanvas(element, textBox); + + if (xOffset) { + textCoords.x += xOffset; + } + + var options = { + centering: { + x: false, + y: yCenter + } + }; // Draw the text box + + textBox.boundingBox = Object(_drawTextBox_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, text, textCoords.x, textCoords.y, color, options); + + if (textBox.hasMoved) { + // Identify the possible anchor points for the tool -> text line + var linkAnchorPoints = textBoxAnchorPoints(handles).map(function (h) { + return cornerstone.pixelToCanvas(element, h); + }); // Draw dashed link line between tool and text + + Object(_drawLink_js__WEBPACK_IMPORTED_MODULE_2__["default"])(linkAnchorPoints, textCoords, textBox.boundingBox, context, color, lineWidth); + } +}); + +/***/ }), + +/***/ "./drawing/drawRect.js": +/*!*****************************!*\ + !*** ./drawing/drawRect.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); +/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/pointProjector.js */ "./util/pointProjector.js"); + + + +/** + * Draw a rectangle defined by `corner1` and `corner2`. + * @public + * @method drawRect + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object} corner1 - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} corner2 - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @param {Number} initialRotation - Rectangle initial rotation + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, corner1, corner2, options) { + var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel'; + var initialRotation = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0.0; + + if (coordSystem === 'pixel') { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + corner1 = cornerstone.pixelToCanvas(element, corner1); + corner2 = cornerstone.pixelToCanvas(element, corner2); + } + + var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getViewport(element); // Calculate the center of the image + + var width = element.clientWidth, + height = element.clientHeight; + var scale = viewport.scale, + translation = viewport.translation; + var rotation = viewport.rotation - initialRotation; + var centerPoint = { + x: width / 2 + translation.x * scale, + y: height / 2 + translation.y * scale + }; + + if (Math.abs(rotation) > 0.05) { + corner1 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner1, centerPoint, -rotation); + corner2 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner2, centerPoint, -rotation); + } + + var w = Math.abs(corner1.x - corner2.x); + var h = Math.abs(corner1.y - corner2.y); + corner1 = { + x: Math.min(corner1.x, corner2.x), + y: Math.min(corner1.y, corner2.y) + }; + corner2 = { + x: corner1.x + w, + y: corner1.y + h + }; + var corner3 = { + x: corner1.x + w, + y: corner1.y + }; + var corner4 = { + x: corner1.x, + y: corner1.y + h + }; + + if (Math.abs(rotation) > 0.05) { + corner1 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner1, centerPoint, rotation); + corner2 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner2, centerPoint, rotation); + corner3 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner3, centerPoint, rotation); + corner4 = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_2__["rotatePoint"])(corner4, centerPoint, rotation); + } + + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + context.moveTo(corner1.x, corner1.y); + context.lineTo(corner3.x, corner3.y); + context.moveTo(corner3.x, corner3.y); + context.lineTo(corner2.x, corner2.y); + context.moveTo(corner2.x, corner2.y); + context.lineTo(corner4.x, corner4.y); + context.moveTo(corner4.x, corner4.y); + context.lineTo(corner1.x, corner1.y); + }); +}); + +/***/ }), + +/***/ "./drawing/drawTextBox.js": +/*!********************************!*\ + !*** ./drawing/drawTextBox.js ***! + \********************************/ +/*! exports provided: textBoxWidth, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "textBoxWidth", function() { return textBoxWidth; }); +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./draw.js */ "./drawing/draw.js"); +/* harmony import */ var _fillTextLines_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fillTextLines.js */ "./drawing/fillTextLines.js"); +/* harmony import */ var _fillBox_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fillBox.js */ "./drawing/fillBox.js"); + + + + +/** + * Compute the width of the box required to display the given `text` with a given `padding`. + * @public + * @function textBoxWidth + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {String} text - The text to find the width of. + * @param {Number} padding - The padding to apply on either end of the text. + * @returns {Number} computed text box width + */ + +function textBoxWidth(context, text, padding) { + var font = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFont(); + var origFont = context.font; + + if (font && font !== origFont) { + context.font = font; + } + + var width = context.measureText(text).width; + + if (font && font !== origFont) { + context.font = origFont; + } + + return width + 2 * padding; +} +/** + * Draws a textBox. + * @public + * @function drawTextBox + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context The canvas context. + * @param {string} textLines The text to display. + * @param {number} x The x position of the textBox. + * @param {number} y The y position of the textBox. + * @param {string} color The color of the textBox. + * @param {Object} options Options for the textBox. + * @returns {Object} {top, left, width, height} - Bounding box; can be used for pointNearTool + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, textLines, x, y, color, options) { + if (Object.prototype.toString.call(textLines) !== '[object Array]') { + textLines = [textLines]; + } + + var padding = 5; + var fontSize = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFontSize(); + var backgroundColor = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getBackgroundColor(); // Find the longest text width in the array of text data + + var maxWidth = 0; + textLines.forEach(function (text) { + // Get the text width in the current font + var width = textBoxWidth(context, text, padding); // Find the maximum with for all the text rows; + + maxWidth = Math.max(maxWidth, width); + }); // Calculate the bounding box for this text box + + var boundingBox = { + width: maxWidth, + height: padding + textLines.length * (fontSize + padding) + }; + Object(_draw_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, function (context) { + context.strokeStyle = color; // Draw the background box with padding + + if (options && options.centering && options.centering.x === true) { + x -= boundingBox.width / 2; + } + + if (options && options.centering && options.centering.y === true) { + y -= boundingBox.height / 2; + } + + boundingBox.left = x; + boundingBox.top = y; + var fillStyle = options && options.debug === true ? '#FF0000' : backgroundColor; + Object(_fillBox_js__WEBPACK_IMPORTED_MODULE_3__["default"])(context, boundingBox, fillStyle); // Draw each of the text lines on top of the background box + + Object(_fillTextLines_js__WEBPACK_IMPORTED_MODULE_2__["default"])(context, boundingBox, textLines, color, padding); + }); // Return the bounding box so it can be used for pointNearHandle + + return boundingBox; +}); + +/***/ }), + +/***/ "./drawing/fillBox.js": +/*!****************************!*\ + !*** ./drawing/fillBox.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Draw a filled rectangle defined by `boundingBox` using the style defined by `fillStyle`. + * @public + * @method fillBox + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {Object} boundingBox - `{ left, top, width, height }` in canvas coordinates. + * @param {FillStyle} fillStyle - The fillStyle to apply to the region. + * @returns {undefined} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (context, boundingBox, fillStyle) { + context.fillStyle = fillStyle; + context.fillRect(boundingBox.left, boundingBox.top, boundingBox.width, boundingBox.height); +}); + +/***/ }), + +/***/ "./drawing/fillOutsideRect.js": +/*!************************************!*\ + !*** ./drawing/fillOutsideRect.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); + + +/** + * Fill the region outside a rectangle defined by `corner1` and `corner2`. + * @public + * @method fillOutsideRect + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {HTMLElement} element - The DOM Element to draw on + * @param {Object} corner1 - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} corner2 - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} options - See {@link path} + * @param {String} [coordSystem='pixel'] - Can be "pixel" (default) or "canvas". The coordinate + * system of the points passed in to the function. If "pixel" then cornerstone.pixelToCanvas + * is used to transform the points from pixel to canvas coordinates. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, element, corner1, corner2, options) { + var coordSystem = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'pixel'; + + if (coordSystem === 'pixel') { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + corner1 = cornerstone.pixelToCanvas(element, corner1); + corner2 = cornerstone.pixelToCanvas(element, corner2); + } + + var left = Math.min(corner1.x, corner2.x); + var top = Math.min(corner1.y, corner2.y); + var width = Math.abs(corner1.x - corner2.x); + var height = Math.abs(corner1.y - corner2.y); + Object(_path_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, options, function (context) { + context.rect(0, 0, context.canvas.clientWidth, context.canvas.clientHeight); + context.rect(left + width, top, -width, height); + }); +}); + +/***/ }), + +/***/ "./drawing/fillTextLines.js": +/*!**********************************!*\ + !*** ./drawing/fillTextLines.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); + +/** + * Draw multiple lines of text within a bounding box. + * @public + * @method fillTextLines + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Target context + * @param {Object} boundingBox - `{ left, top }` in canvas coordinates. Only the top-left corner is specified, as the text will take up as much space as it needs. + * @param {String[]} textLines - The text to be displayed. + * @param {FillStyle} fillStyle - The fillStyle to apply to the text. + * @param {Number} padding - The amount of padding above/below each line in canvas units. Note this gives an inter-line spacing of `2*padding`. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, boundingBox, textLines, fillStyle, padding) { + var fontSize = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFontSize(); + context.font = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getFont(); + context.textBaseline = 'top'; + context.fillStyle = fillStyle; + textLines.forEach(function (text, index) { + context.fillText(text, boundingBox.left + padding, boundingBox.top + padding + index * (fontSize + padding)); + }); +}); + +/***/ }), + +/***/ "./drawing/getNewContext.js": +/*!**********************************!*\ + !*** ./drawing/getNewContext.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Create a new {@link CanvasRenderingContext2D|context} object for the given {@link HTMLCanvasElement|canvas} + * and set the transform to the {@link https://www.w3.org/TR/2dcontext/#transformations|identity transform}. + * + * @public + * @function getNewContext + * @memberof Drawing + * + * @param {HTMLCanvasElement} canvas - Canvas you would like the context for + * @returns {CanvasRenderingContext2D} - The provided canvas's 2d context + */ +/* harmony default export */ __webpack_exports__["default"] = (function (canvas) { + var context = canvas.getContext('2d'); + context.setTransform(1, 0, 0, 1, 0, 0); + return context; +}); + +/***/ }), + +/***/ "./drawing/index.js": +/*!**************************!*\ + !*** ./drawing/index.js ***! + \**************************/ +/*! exports provided: draw, drawArrow, drawCircle, drawEllipse, drawHandles, drawJoinedLines, drawLine, drawLines, drawLink, drawLinkedTextBox, drawRect, drawTextBox, fillBox, fillOutsideRect, fillTextLines, getNewContext, path, setShadow, transformCanvasContext, resetCanvasContextTransform */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _draw_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./draw.js */ "./drawing/draw.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "draw", function() { return _draw_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _drawArrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drawArrow.js */ "./drawing/drawArrow.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawArrow", function() { return _drawArrow_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _drawCircle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./drawCircle.js */ "./drawing/drawCircle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawCircle", function() { return _drawCircle_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _drawEllipse_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./drawEllipse.js */ "./drawing/drawEllipse.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawEllipse", function() { return _drawEllipse_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _drawHandles_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawHandles", function() { return _drawHandles_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./drawJoinedLines.js */ "./drawing/drawJoinedLines.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawJoinedLines", function() { return _drawJoinedLines_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _drawLine_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./drawLine.js */ "./drawing/drawLine.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawLine", function() { return _drawLine_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _drawLines_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./drawLines.js */ "./drawing/drawLines.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawLines", function() { return _drawLines_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _drawLink_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./drawLink.js */ "./drawing/drawLink.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawLink", function() { return _drawLink_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawLinkedTextBox", function() { return _drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _drawRect_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./drawRect.js */ "./drawing/drawRect.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawRect", function() { return _drawRect_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawTextBox", function() { return _drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _fillBox_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./fillBox.js */ "./drawing/fillBox.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillBox", function() { return _fillBox_js__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _fillOutsideRect_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./fillOutsideRect.js */ "./drawing/fillOutsideRect.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillOutsideRect", function() { return _fillOutsideRect_js__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _fillTextLines_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./fillTextLines.js */ "./drawing/fillTextLines.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillTextLines", function() { return _fillTextLines_js__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _getNewContext_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./getNewContext.js */ "./drawing/getNewContext.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getNewContext", function() { return _getNewContext_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _path_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./path.js */ "./drawing/path.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "path", function() { return _path_js__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _setShadow_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./setShadow.js */ "./drawing/setShadow.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setShadow", function() { return _setShadow_js__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony import */ var _transformCanvasContext_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./transformCanvasContext.js */ "./drawing/transformCanvasContext.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "transformCanvasContext", function() { return _transformCanvasContext_js__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _resetCanvasContextTransform_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./resetCanvasContextTransform.js */ "./drawing/resetCanvasContextTransform.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "resetCanvasContextTransform", function() { return _resetCanvasContextTransform_js__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/** + * A {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle|color, gradient or pattern} to use inside shapes. + * @typedef {(String|CanvasGradient|CanvasPattern)} FillStyle + */ + +/** + * A {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/strokeStyle|color, gradient or pattern} to use for the lines around shapes. + * @typedef {(String|CanvasGradient|CanvasPattern)} StrokeStyle + */ + +/** + * @callback ContextFn + * @param {CanvasRenderingContext2D} context + */ + + + + + + + + + + + + + + + + + + + + // Named exports + + + +/***/ }), + +/***/ "./drawing/path.js": +/*!*************************!*\ + !*** ./drawing/path.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); + +/** + * This function manages the beginPath/stroke pattern for working with + * {@link https://www.w3.org/TR/2dcontext/#drawing-paths-to-the-canvas|path objects}. + * + * @public + * @function path + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Context to add path to + * @param {Object} [options={}] - Drawing Options + * @param {StrokeStyle} [options.color] - The stroke style of the path. + * @param {number} [options.lineWidth] - The width of lines in the path. If null, no line width is set. + * If undefined then toolStyle.getToolWidth() is set. + * @param {FillStyle} [options.fillStyle] - The style to fill the path with. If undefined then no filling is done. + * @param {Number[]} [options.lineDash] - The {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash|dash pattern} + * to use on the lines. + * @param {boolean} [options.shouldDrawLines = true] Whether context.stroke should be evoked. + * @param {ContextFn} fn - A drawing function to execute with the provided stroke pattern. + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var fn = arguments.length > 2 ? arguments[2] : undefined; + var color = options.color, + lineWidth = options.lineWidth, + fillStyle = options.fillStyle, + lineDash = options.lineDash, + _options$shouldDrawLi = options.shouldDrawLines, + shouldDrawLines = _options$shouldDrawLi === void 0 ? true : _options$shouldDrawLi; + context.beginPath(); + context.strokeStyle = color || context.strokeStyle; + context.lineWidth = lineWidth || lineWidth === undefined && _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"].getToolWidth() || context.lineWidth; + + if (lineDash) { + context.setLineDash(lineDash); + } + + fn(context); + + if (fillStyle) { + context.fillStyle = fillStyle; + context.fill(); + } + + if (shouldDrawLines) { + context.stroke(); + } + + if (lineDash) { + context.setLineDash([]); + } +}); + +/***/ }), + +/***/ "./drawing/resetCanvasContextTransform.js": +/*!************************************************!*\ + !*** ./drawing/resetCanvasContextTransform.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Resets the canvas {@link CanvasRenderingContext2D|context} transform to the + * {@link https://www.w3.org/TR/2dcontext/#transformations|identity transform}. + * + * @public + * @function resetCanvasContextTransform + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - context you wish to transform + * @returns {void} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (context) { + context.setTransform(1, 0, 0, 1, 0, 0); +}); + +/***/ }), + +/***/ "./drawing/setShadow.js": +/*!******************************!*\ + !*** ./drawing/setShadow.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../util/getDefault.js */ "./util/getDefault.js"); + +/** + * Set the {@link https://www.w3.org/TR/2dcontext/#shadows|shadow} properties of the context. + * Each property is set on the context object if defined, otherwise a default value is set. + * + * @public + * @method setShadow + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Context to apply shadow options on + * @param {Object} [options={}] - Options object + * @param {Boolean} [options.shadow=undefined] - Whether to set any shadow options + * @param {String} [options.shadowColor=#000000] - Default value: #000000 + * @param {Number} [options.shadowBlur=0] - Default Value: 0 + * @param {Number} [options.shadowOffsetX=1] - Default value: 1 + * @param {Number} [options.shadowOffsetY=1] - Default value: 1 + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (options.shadow) { + context.shadowColor = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowColor, '#000000'); + context.shadowBlur = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowBlur, 0); + context.shadowOffsetX = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowOffsetX, 1); + context.shadowOffsetY = Object(_util_getDefault_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options.shadowOffsetY, 1); + } +}); + +/***/ }), + +/***/ "./drawing/transformCanvasContext.js": +/*!*******************************************!*\ + !*** ./drawing/transformCanvasContext.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Transform the canvas {@link CanvasRenderingContext2D|context} such that it + * coincides with the orientation of the viewport. + * + * @public + * @function transformCanvasContext + * @memberof Drawing + * + * @param {CanvasRenderingContext2D} context - Context you wish to transform. + * @param {HTMLCanvasElement} canvas - Canvas the context relates to. + * @param {*} viewport - The viewport you wish to map on to. + * @returns {void} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (context, canvas, viewport) { + if (!(viewport.hflip || viewport.vflip || viewport.rotation)) { + return; + } + + var translation = { + x: canvas.width / 2 + viewport.translation.x * viewport.scale, + y: canvas.height / 2 + viewport.translation.y * viewport.scale + }; + context.translate(translation.x, translation.y); + + if (viewport.rotation) { + context.rotate(viewport.rotation * Math.PI / 180); + } + + if (viewport.vflip) { + context.scale(1, -1); + } + + if (viewport.hflip) { + context.scale(-1, 1); + } + + context.translate(-translation.x, -translation.y); +}); + +/***/ }), + +/***/ "./eventDispatchers/imageRenderedEventDispatcher.js": +/*!**********************************************************!*\ + !*** ./eventDispatchers/imageRenderedEventDispatcher.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); +/* harmony import */ var _stateManagement_toolState__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState */ "./stateManagement/toolState.js"); +/* harmony import */ var _eventListeners_onImageRenderedBrushEventHandler_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../eventListeners/onImageRenderedBrushEventHandler.js */ "./eventListeners/onImageRenderedBrushEventHandler.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); + + + + +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'); + +var onImageRendered = function onImageRendered(evt) { + var eventData = evt.detail; + var element = eventData.element; // Render Annotation Tools + + var toolsToRender = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) { + return tool.element === element && (tool.mode === 'active' || tool.mode === 'passive' || tool.mode === 'enabled'); + }); // Must be using stacks in order to use segmentation tools. + + var stackToolState = Object(_stateManagement_toolState__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var segmentationConfiguration = segmentationModule.configuration; + + if (stackToolState && (segmentationConfiguration.renderFill || segmentationConfiguration.renderOutline)) { + Object(_eventListeners_onImageRenderedBrushEventHandler_js__WEBPACK_IMPORTED_MODULE_2__["default"])(evt); + } + + toolsToRender.forEach(function (tool) { + if (tool.renderToolData) { + tool.renderToolData(evt); + } + }); +}; + +var enable = function enable(element) { + element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.IMAGE_RENDERED, onImageRendered); +}; + +var disable = function disable(element) { + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.IMAGE_RENDERED, onImageRendered); +}; + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventDispatchers/index.js": +/*!***********************************!*\ + !*** ./eventDispatchers/index.js ***! + \***********************************/ +/*! exports provided: imageRenderedEventDispatcher, mouseToolEventDispatcher, newImageEventDispatcher, touchToolEventDispatcher */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _imageRenderedEventDispatcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageRenderedEventDispatcher.js */ "./eventDispatchers/imageRenderedEventDispatcher.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "imageRenderedEventDispatcher", function() { return _imageRenderedEventDispatcher_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _mouseToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mouseToolEventDispatcher.js */ "./eventDispatchers/mouseToolEventDispatcher.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseToolEventDispatcher", function() { return _mouseToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _newImageEventDispatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./newImageEventDispatcher.js */ "./eventDispatchers/newImageEventDispatcher.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "newImageEventDispatcher", function() { return _newImageEventDispatcher_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _touchToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./touchToolEventDispatcher.js */ "./eventDispatchers/touchToolEventDispatcher.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touchToolEventDispatcher", function() { return _touchToolEventDispatcher_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + + + + + + + +/***/ }), + +/***/ "./eventDispatchers/mouseEventHandlers/addNewMeasurement.js": +/*!******************************************************************!*\ + !*** ./eventDispatchers/mouseEventHandlers/addNewMeasurement.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js"); + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('eventDispatchers:mouseEventHandlers'); +/* harmony default export */ __webpack_exports__["default"] = (function (evt, tool) { + logger.log('addNewMeasurement'); + evt.preventDefault(); + evt.stopPropagation(); + var eventData = evt.detail; + var element = eventData.element; + var measurementData = tool.createNewMeasurement(eventData); + + if (!measurementData) { + return; + } // Associate this data with this imageId so we can render it and manipulate it + + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["addToolState"])(element, tool.name, measurementData); + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + var handleMover = Object.keys(measurementData.handles).length === 1 ? _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveHandle"] : _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveNewHandle"]; + handleMover(eventData, tool.name, measurementData, measurementData.handles.end, tool.options, 'mouse', function () { + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_COMPLETED; + var eventData = { + toolName: tool.name, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, eventType, eventData); + }); +}); + +/***/ }), + +/***/ "./eventDispatchers/mouseEventHandlers/index.js": +/*!******************************************************!*\ + !*** ./eventDispatchers/mouseEventHandlers/index.js ***! + \******************************************************/ +/*! exports provided: mouseClick, mouseDown, mouseDownActivate, mouseDoubleClick, mouseDrag, mouseMove, mouseUp, mouseWheel */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseClick", function() { return mouseClick; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseDoubleClick", function() { return mouseDoubleClick; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseUp", function() { return mouseUp; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseWheel", function() { return mouseWheel; }); +/* harmony import */ var _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../shared/customCallbackHandler.js */ "./eventDispatchers/shared/customCallbackHandler.js"); +/* harmony import */ var _mouseDown_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mouseDown.js */ "./eventDispatchers/mouseEventHandlers/mouseDown.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseDown", function() { return _mouseDown_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _mouseDownActivate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mouseDownActivate.js */ "./eventDispatchers/mouseEventHandlers/mouseDownActivate.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseDownActivate", function() { return _mouseDownActivate_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _mouseDrag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mouseDrag.js */ "./eventDispatchers/mouseEventHandlers/mouseDrag.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseDrag", function() { return _mouseDrag_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _mouseMove_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mouseMove.js */ "./eventDispatchers/mouseEventHandlers/mouseMove.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseMove", function() { return _mouseMove_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + + + + + + +var mouseClick = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Mouse', 'mouseClickCallback'); +var mouseDoubleClick = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Mouse', 'doubleClickCallback'); +var mouseUp = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Mouse', 'mouseUpCallback'); +var mouseWheel = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'MouseWheel', 'mouseWheelCallback'); + + +/***/ }), + +/***/ "./eventDispatchers/mouseEventHandlers/mouseDown.js": +/*!**********************************************************!*\ + !*** ./eventDispatchers/mouseEventHandlers/mouseDown.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/getToolsWithMoveableHandles.js */ "./store/getToolsWithMoveableHandles.js"); +/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js"); +/* harmony import */ var _store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../store/getInteractiveToolsForElement.js */ "./store/getInteractiveToolsForElement.js"); +/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js"); +/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js"); +// State + + // Util + + + + + + +/** + * MouseDown is called before MouseDownActivate. If MouseDown + * finds an existing tool to interact with, it can prevent the + * event from bubbling to MouseDownActivate. + * + * @private + * @param {mousedown} evt + * @listens {CornerstoneTools.event:cornerstonetoolsmousedown} + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) { + return; + } + + var eventData = evt.detail; + var element = evt.detail.element; + var coords = evt.detail.currentPoints.canvas; // High level filtering + + var activeAndPassiveTools = Object(_store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].mouseTools()); // ACTIVE TOOL W/ PRE CALLBACK? + // Note: In theory, this should only ever be a single tool. + + var activeTools = activeAndPassiveTools.filter(function (tool) { + return tool.mode === 'active' && Array.isArray(tool.options.mouseButtonMask) && tool.options.mouseButtonMask.includes(eventData.buttons) && tool.options.isMouseActive; + }); + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + activeTools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__["default"])(activeTools); + } // If any tools are active, check if they have a special reason for dealing with the event. + + + if (activeTools.length > 0) { + // TODO: If length > 1, you could assess fitness and select the ideal tool + // TODO: But because we're locking this to 'active' tools, that should rarely be an issue + // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button? + var firstActiveToolWithCallback = activeTools.find(function (tool) { + return typeof tool.preMouseDownCallback === 'function'; + }); + + if (firstActiveToolWithCallback) { + var consumedEvent = firstActiveToolWithCallback.preMouseDownCallback(evt); + + if (consumedEvent) { + return; + } + } + } + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + // Don't fire events to Annotation Tools during a multi part loop. + return; + } // Annotation tool specific + + + var annotationTools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, activeAndPassiveTools); // NEAR HANDLES? + + var annotationToolsWithMoveableHandles = Object(_store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, annotationTools, coords, 'mouse'); + + if (annotationToolsWithMoveableHandles.length > 0) { + var firstToolWithMoveableHandles = annotationToolsWithMoveableHandles[0]; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, firstToolWithMoveableHandles.name); + + var _findHandleDataNearIm = Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_3__["findHandleDataNearImagePoint"])(element, toolState, firstToolWithMoveableHandles.name, coords), + handle = _findHandleDataNearIm.handle, + data = _findHandleDataNearIm.data; + + firstToolWithMoveableHandles.handleSelectedCallback(evt, data, handle, 'mouse'); + return; + } // NEAR TOOL? + + + var annotationToolsWithPointNearClick = activeAndPassiveTools.filter(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, tool.name); + var isNearPoint = toolState && toolState.data && tool.pointNearTool && toolState.data.some(function (data) { + return tool.pointNearTool(element, data, coords, 'mouse'); + }); + return isNearPoint; + }); + + if (annotationToolsWithPointNearClick.length > 0) { + var firstToolNearPoint = annotationToolsWithPointNearClick[0]; + + var _toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, firstToolNearPoint.name); + + var firstAnnotationNearPoint = _toolState.data.find(function (data) { + return firstToolNearPoint.pointNearTool(element, data, coords); + }); + + firstToolNearPoint.toolSelectedCallback(evt, firstAnnotationNearPoint, 'mouse'); + return; + } // ACTIVE TOOL W/ POST CALLBACK? + // If any tools are active, check if they have a special reason for dealing with the event. + + + if (activeTools.length > 0) { + // TODO: If length > 1, you could assess fitness and select the ideal tool + // TODO: But because we're locking this to 'active' tools, that should rarely be an issue + // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button? + var _firstActiveToolWithCallback = activeTools.find(function (tool) { + return typeof tool.postMouseDownCallback === 'function'; + }); + + if (_firstActiveToolWithCallback) { + var _consumedEvent = _firstActiveToolWithCallback.postMouseDownCallback(evt); + + if (_consumedEvent) { + return; + } + } + } +}); + +/***/ }), + +/***/ "./eventDispatchers/mouseEventHandlers/mouseDownActivate.js": +/*!******************************************************************!*\ + !*** ./eventDispatchers/mouseEventHandlers/mouseDownActivate.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./addNewMeasurement.js */ "./eventDispatchers/mouseEventHandlers/addNewMeasurement.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/getActiveTool */ "./util/getActiveTool.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked) { + return; + } + + var _evt$detail = evt.detail, + element = _evt$detail.element, + buttons = _evt$detail.buttons; + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__["default"])(element, buttons, 'mouse'); + + if (!activeTool) { + return; + } + + if (typeof activeTool.preMouseDownActivateCallback === 'function') { + var consumedEvent = activeTool.preMouseDownActivateCallback(evt); + + if (consumedEvent) { + return; + } + } + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isMultiPartToolActive) { + return; + } // Note: custom `addNewMeasurement` will need to prevent event bubbling + + + if (activeTool.addNewMeasurement) { + activeTool.addNewMeasurement(evt, 'mouse'); + } else if (activeTool instanceof _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]) { + Object(_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(evt, activeTool); + } +}); + +/***/ }), + +/***/ "./eventDispatchers/mouseEventHandlers/mouseDrag.js": +/*!**********************************************************!*\ + !*** ./eventDispatchers/mouseEventHandlers/mouseDrag.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js"); +/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js"); + + + // Tools like wwwc. Non-annotation tools w/ specific +// Down + mouse behavior +// TODO: I don't like filtering in drag because it's such +// A high frequency event. Anything we can do to reduce +// Repeat math here would be a big help + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) { + return; + } + + var tools; + var eventData = evt.detail; + var element = eventData.element; // Filter out disabled, enabled, and passive + + tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].mouseTools()); + tools = tools.filter(function (tool) { + return Array.isArray(tool.options.mouseButtonMask) && tool.options.mouseButtonMask.includes(eventData.buttons) && tool.options.isMouseActive; + }); + tools = tools.filter(function (tool) { + return typeof tool.mouseDragCallback === 'function'; + }); + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + tools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__["default"])(tools); + } + + if (tools.length === 0) { + return; + } + + var activeTool = tools[0]; + activeTool.mouseDragCallback(evt); +}); + +/***/ }), + +/***/ "./eventDispatchers/mouseEventHandlers/mouseMove.js": +/*!**********************************************************!*\ + !*** ./eventDispatchers/mouseEventHandlers/mouseMove.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../store/getInteractiveToolsForElement.js */ "./store/getInteractiveToolsForElement.js"); +/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js"); + // State + + + + +/** + * This is mostly used to update the [un]hover state + * of a tool. + * + * @private + * @param {*} evt + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked || _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isMultiPartToolActive) { + return; + } + + var tools; + var _evt$detail = evt.detail, + element = _evt$detail.element, + currentPoints = _evt$detail.currentPoints; // Set the mouse position incase any tool needs it. + + _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].mousePositionImage = currentPoints.image; // TODO: instead of filtering these for every interaction, we can change our + // TODO: State's structure to always know these values. + // Filter out disabled and enabled + + tools = Object(_store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_1__["getters"].mouseTools()); + var activeTools = tools.filter(function (tool) { + return tool.mode === 'active' && tool.options.isMouseActive; + }); + var imageNeedsUpdate = false; // If any tools are active, check if they have a canvas cursor, and if so update image. + + if (activeTools.length > 0) { + imageNeedsUpdate = activeTools.some(function (tool) { + return tool.updateOnMouseMove; + }); + } + + tools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, tools); // Iterate over each tool, and each tool's data + // Activate any handles we're hovering over, or whole tools if we're near the tool + // If we've changed the state of anything, redrawn the image + + for (var t = 0; t < tools.length; t++) { + var tool = tools[t]; + + if (typeof tool.mouseMoveCallback === 'function') { + imageNeedsUpdate = tool.mouseMoveCallback(evt) || imageNeedsUpdate; + } + } // Tool data activation status changed, redraw the image + + + if (imageNeedsUpdate === true) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + } +}); + +/***/ }), + +/***/ "./eventDispatchers/mouseToolEventDispatcher.js": +/*!******************************************************!*\ + !*** ./eventDispatchers/mouseToolEventDispatcher.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../events.js */ "./events.js"); +/* harmony import */ var _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mouseEventHandlers/index.js */ "./eventDispatchers/mouseEventHandlers/index.js"); + + +/** + * These listeners are emitted in order, and can be cancelled/prevented from bubbling + * by any previous event. + * - mouseMove: used to update the [un]hover state of a tool (highlighting) + * - mouseDown: check to see if we are close to an existing annotation, grab it + * - mouseDownActivate: createNewMeasurement (usually) + * - mouseDrag: update measurement or apply strategy (wwwc) + * - mouseDoubleClick: usually a one-time apply specialty action + * - onImageRendered: redraw visible tool data + * @private + * @param {*} element + * @returns {undefined} + */ + +var enable = function enable(element) { + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseClick"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDown"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDownActivate"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOUBLE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDoubleClick"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDrag"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseMove"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseUp"]); + //element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_WHEEL, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseWheel"]); +}; + +var disable = function disable(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseClick"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDown"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDownActivate"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOUBLE_CLICK, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDoubleClick"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseDrag"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseMove"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseUp"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_WHEEL, _mouseEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseWheel"]); +}; + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventDispatchers/newImageEventDispatcher.js": +/*!*****************************************************!*\ + !*** ./eventDispatchers/newImageEventDispatcher.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); + + + +var onNewImage = function onNewImage(evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) { + return false; + } + + var element = evt.detail.element; + var tools = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) { + return tool.element === element && (tool.mode === 'active' || tool.mode === 'passive' || tool.mode === 'enabled'); + }); + + if (tools.length === 0) { + return false; + } + + tools.forEach(function (tool) { + if (tool.newImageCallback) { + tool.newImageCallback(evt); + } + }); +}; + +var enable = function enable(element) { + element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.EVENTS.NEW_IMAGE, onNewImage); +}; + +var disable = function disable(element) { + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.EVENTS.NEW_IMAGE, onNewImage); +}; + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventDispatchers/shared/customCallbackHandler.js": +/*!**********************************************************!*\ + !*** ./eventDispatchers/shared/customCallbackHandler.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js"); +/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function (handlerType, customFunction, evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) { + return false; + } // TODO: We sometimes see a null detail for TOUCH_PRESS + + + var element = evt.detail.element; + var tools = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) { + return tool.supportedInteractionTypes.includes(handlerType); + }); // Tool is active, and specific callback is active + + tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, tools, handlerType); // Tool has expected callback custom function + + tools = tools.filter(function (tool) { + return typeof tool[customFunction] === 'function'; + }); + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + tools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__["default"])(tools); + } + + if (tools.length === 0) { + return false; + } + + tools[0][customFunction](evt); +}); + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/addNewMeasurement.js": +/*!******************************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/addNewMeasurement.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_7__["getLogger"])('eventDispatchers:touchEventHandlers'); +/* harmony default export */ __webpack_exports__["default"] = (function (evt, tool) { + logger.log('addNewMeasurement'); + evt.preventDefault(); + evt.stopPropagation(); + var touchEventData = evt.detail; + var element = touchEventData.element; + var measurementData = tool.createNewMeasurement(touchEventData); + + if (!measurementData) { + return; + } + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["addToolState"])(element, tool.name, measurementData); // Todo: Looks like we're handling the "up" of the tap? + + if (Object.keys(measurementData.handles).length === 1 && touchEventData.type === _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP) { + // Todo: bold assumptions about measurement data for all tools? + measurementData.active = false; + measurementData.handles.end.active = false; + measurementData.handles.end.highlight = false; + measurementData.invalidated = true; + var deleteIfHandleOutsideImage = _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].deleteIfHandleOutsideImage || tool.options.deleteIfHandleOutsideImage; + + if (deleteIfHandleOutsideImage && Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(touchEventData, measurementData.handles)) { + // Delete the measurement + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["removeToolState"])(element, tool.name, measurementData); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + return; + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_4__["moveNewHandle"])(touchEventData, tool.name, measurementData, measurementData.handles.end, tool.options, 'touch', function () { + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_COMPLETED; + var eventData = { + toolName: tool.name, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, eventType, eventData); + }); +}); + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/index.js": +/*!******************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/index.js ***! + \******************************************************/ +/*! exports provided: doubleTap, multiTouchDrag, tap, touchDrag, touchEnd, touchPinch, touchPress, touchRotate, touchStart, touchStartActive */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "doubleTap", function() { return doubleTap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchDrag", function() { return touchDrag; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchEnd", function() { return touchEnd; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchPinch", function() { return touchPinch; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchPress", function() { return touchPress; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchRotate", function() { return touchRotate; }); +/* harmony import */ var _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../shared/customCallbackHandler.js */ "./eventDispatchers/shared/customCallbackHandler.js"); +/* harmony import */ var _multiTouchDrag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./multiTouchDrag.js */ "./eventDispatchers/touchEventHandlers/multiTouchDrag.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multiTouchDrag", function() { return _multiTouchDrag_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _tap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tap.js */ "./eventDispatchers/touchEventHandlers/tap.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _tap_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _touchStart_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./touchStart.js */ "./eventDispatchers/touchEventHandlers/touchStart.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touchStart", function() { return _touchStart_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _touchStartActive_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./touchStartActive.js */ "./eventDispatchers/touchEventHandlers/touchStartActive.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touchStartActive", function() { return _touchStartActive_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + + + + + + +var doubleTap = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'DoubleTap', 'doubleTapCallback'); // TODO: some touchDrag tools don't want to fire on touchStart +// TODO: Drag tools have an option `fireOnTouchStart` used to filter +// TODO: Them out of TOUCH_START handler + +var touchDrag = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Touch', 'touchDragCallback'); +var touchEnd = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Touch', 'touchEndCallback'); +var touchPinch = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'TouchPinch', 'touchPinchCallback'); +var touchPress = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'Touch', 'touchPressCallback'); +var touchRotate = _shared_customCallbackHandler_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(null, 'TouchRotate', 'touchRotateCallback'); + + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/multiTouchDrag.js": +/*!***************************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/multiTouchDrag.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js"); +/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) { + return false; + } // TODO: We sometimes see a null detail for TOUCH_PRESS + + + var _evt$detail = evt.detail, + element = _evt$detail.element, + numPointers = _evt$detail.numPointers; + var tools = _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.filter(function (tool) { + return tool.supportedInteractionTypes.includes('MultiTouch'); + }); // Tool is active, and specific callback is active + + tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, tools, 'MultiTouch'); // Tool has expected callback custom function + + tools = tools.filter(function (tool) { + return typeof tool.multiTouchDragCallback === 'function' && numPointers === tool.configuration.touchPointers; + }); + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + tools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_2__["default"])(tools); + } + + if (tools.length === 0) { + return false; + } + + var activeTool = tools[0]; + activeTool.multiTouchDragCallback(evt); +}); + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/shared/deactivateAllToolInstances.js": +/*!**********************************************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/shared/deactivateAllToolInstances.js ***! + \**********************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (toolData) { + if (!toolData) { + return; + } + + for (var i = 0; i < toolData.data.length; i++) { + var data = toolData.data[i]; + data.active = false; + + if (!data.handles) { + continue; + } + + deactivateAllHandles(data.handles); + } +}); + +function deactivateAllHandles(handles) { + Object.keys(handles).forEach(function (name) { + var handle = handles[name]; + handle.active = false; + }); +} + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/tap.js": +/*!****************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/tap.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _touchStartActive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./touchStartActive.js */ "./eventDispatchers/touchEventHandlers/touchStartActive.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store/getActiveToolsForElement.js */ "./store/getActiveToolsForElement.js"); +/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _shared_deactivateAllToolInstances_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./shared/deactivateAllToolInstances.js */ "./eventDispatchers/touchEventHandlers/shared/deactivateAllToolInstances.js"); + + // State + + + + + // + + + // + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].isToolLocked || _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].isMultiPartToolActive) { + return; + } + + var tools; + var distanceFromHandle = 28; + var element = evt.detail.element; + var coords = evt.detail.currentPoints.canvas; + tools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_2__["getters"].touchTools()); + tools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, tools); // Deactivate everything + // DeactivateAllToolInstances(toolData); + // Find all tools w/ handles that we are near + + var toolsWithMoveableHandles = tools.filter(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, tool.name); + + for (var i = 0; i < toolState.data.length; i++) { + if (Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, toolState.data[i].handles, coords, distanceFromHandle) !== undefined) { + return true; + } + } + + return false; + }); // TODO: More than one? Which one was moved most recently? + // We'll just grab the first one we encounter for now + + if (toolsWithMoveableHandles.length > 0) { + // Todo: ignore: touch_start, tap + var firstToolWithMoveableHandles = toolsWithMoveableHandles[0]; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, firstToolWithMoveableHandles.name); + var moveableHandle = toolState.data.find(function (d) { + return Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, d.handles, coords, distanceFromHandle) !== undefined; + }); + toolState.data.active = true; + moveableHandle.active = true; // Why here, but not touchStart? + + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveHandle"])(evt.detail, firstToolWithMoveableHandles.name, toolState.data, moveableHandle, firstToolWithMoveableHandles.options, 'touch', function () { + return Object(_shared_deactivateAllToolInstances_js__WEBPACK_IMPORTED_MODULE_8__["default"])(toolState); + }); + evt.stopImmediatePropagation(); + evt.preventDefault(); // Why no stopPropagation? + + return; + } // Find all tools near our point + + + var toolsNearPoint = tools.filter(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, tool.name); + var isNearPoint = toolState && toolState.data && tool.pointNearTool && toolState.data.some(function (data) { + return tool.pointNearTool(element, data, coords); + }); + return isNearPoint; + }); // TODO: More than one? Which one was moved most recently? + // We'll just grab the first one we encounter for now + + if (toolsNearPoint.length > 0) { + // Todo: Ignore: TAP, START, PRESS + var firstToolNearPoint = toolsNearPoint[0]; + + var _toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, firstToolNearPoint.name); + + var firstAnnotationNearPoint = _toolState.data.find(function (data) { + return firstToolNearPoint.pointNearTool(element, data, coords); + }); // Todo: ignore: touch_start, tap + + + firstAnnotationNearPoint.active = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveAllHandles"])(evt.detail, firstToolNearPoint.name, firstAnnotationNearPoint, null, firstToolNearPoint.options, 'touch', function () { + return Object(_shared_deactivateAllToolInstances_js__WEBPACK_IMPORTED_MODULE_8__["default"])(_toolState); + }); + evt.stopImmediatePropagation(); + evt.preventDefault(); // TODO: Why no stop propagation? + + return; + } // If there is nothing to move, add a new instance of the tool + // Need to check here to see if activation is allowed! + // TODO: What would this be? First active tool? + // Or should _always_ pass through to our larger event handler that checks + // All tools anyway? + + + var allActiveTools = Object(_store_getActiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_2__["getters"].touchTools()); + + if (allActiveTools.length > 0 && allActiveTools[0].touchStartActiveCallback) { + allActiveTools[0].touchStartActiveCallback(evt); + } else { + Object(_touchStartActive_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt); + } + + return false; +}); + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/touchStart.js": +/*!***********************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/touchStart.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js"); +/* harmony import */ var _store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/getToolsWithMoveableHandles.js */ "./store/getToolsWithMoveableHandles.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../store/getInteractiveToolsForElement.js */ "./store/getInteractiveToolsForElement.js"); +/* harmony import */ var _store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../store/getToolsWithDataForElement.js */ "./store/getToolsWithDataForElement.js"); +/* harmony import */ var _store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../store/filterToolsUsableWithMultiPartTools.js */ "./store/filterToolsUsableWithMultiPartTools.js"); +// State + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked) { + return; + } + + var eventData = evt.detail; + var element = eventData.element; + var coords = eventData.startPoints.canvas; + var activeAndPassiveTools = Object(_store_getInteractiveToolsForElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _store_index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].touchTools()); + var activeTools = activeAndPassiveTools.filter(function (tool) { + return tool.mode === 'active' && tool.options.isTouchActive; + }); + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + activeTools = Object(_store_filterToolsUsableWithMultiPartTools_js__WEBPACK_IMPORTED_MODULE_6__["default"])(activeTools); + } // If any tools are active, check if they have a special reason for dealing with the event. + + + if (activeTools.length > 0) { + // TODO: If length > 1, you could assess fitness and select the ideal tool + // TODO: But because we're locking this to 'active' tools, that should rarely be an issue + // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button? + var firstActiveToolWithCallback = activeTools.find(function (tool) { + return typeof tool.preTouchStartCallback === 'function'; + }); + + if (firstActiveToolWithCallback) { + var consumedEvent = firstActiveToolWithCallback.preTouchStartCallback(evt); + + if (consumedEvent) { + return; + } + } + } + + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + return; + } + + var annotationTools = Object(_store_getToolsWithDataForElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, activeAndPassiveTools); // NEAR HANDLES? + + var annotationToolsWithMoveableHandles = Object(_store_getToolsWithMoveableHandles_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, annotationTools, coords, 'touch'); // TODO: More than one? Which one was moved most recently? + // We'll just grab the first one we encounter for now + + if (annotationToolsWithMoveableHandles.length > 0) { + // Todo: Ignore TAP, START, PRESS + var firstToolWithMoveableHandles = annotationToolsWithMoveableHandles[0]; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, firstToolWithMoveableHandles.name); + + var _findHandleDataNearIm = Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_1__["findHandleDataNearImagePoint"])(element, toolState, firstToolWithMoveableHandles.name, coords, 'touch'), + handle = _findHandleDataNearIm.handle, + data = _findHandleDataNearIm.data; + + firstToolWithMoveableHandles.handleSelectedCallback(evt, data, handle, 'touch'); + return; + } // NEAR POINT? + + + var annotationToolsWithPointNearTouch = annotationTools.filter(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, tool.name); + var isNearPoint = toolState && toolState.data && tool.pointNearTool && toolState.data.some(function (data) { + return tool.pointNearTool(element, data, coords, 'touch'); + }); + return isNearPoint; + }); // TODO: More than one? Which one was moved most recently? + // We'll just grab the first one we encounter for now + + if (annotationToolsWithPointNearTouch.length > 0) { + // Todo: Ignore: TAP, START, PRESS + var firstToolNearPoint = annotationToolsWithPointNearTouch[0]; + + var _toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, firstToolNearPoint.name); + + var firstAnnotationNearPoint = _toolState.data.find(function (data) { + return firstToolNearPoint.pointNearTool(element, data, coords); + }); + + firstToolNearPoint.toolSelectedCallback(evt, firstAnnotationNearPoint, 'touch'); + return; + } // If any tools are active, check if they have a special reason for dealing with the event. + + + if (activeTools.length > 0) { + // TODO: If length > 1, you could assess fitness and select the ideal tool + // TODO: But because we're locking this to 'active' tools, that should rarely be an issue + // Super-Meta-TODO: ^ I think we should just take the approach of one active tool per mouse button? + var _firstActiveToolWithCallback = activeTools.find(function (tool) { + return typeof tool.postTouchStartCallback === 'function'; + }); + + if (_firstActiveToolWithCallback) { + var _consumedEvent = _firstActiveToolWithCallback.postTouchStartCallback(evt); + + if (_consumedEvent) { + return; + } + } + } +}); + +/***/ }), + +/***/ "./eventDispatchers/touchEventHandlers/touchStartActive.js": +/*!*****************************************************************!*\ + !*** ./eventDispatchers/touchEventHandlers/touchStartActive.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./addNewMeasurement.js */ "./eventDispatchers/touchEventHandlers/addNewMeasurement.js"); +/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/getActiveTool */ "./util/getActiveTool.js"); +// State + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + if (_store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked || _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + return; + } + + var element = evt.detail.element; + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_3__["default"])(element, null, 'touch'); // Note: custom `addNewMeasurement` will need to prevent event bubbling + + if (activeTool && activeTool.addNewMeasurement) { + activeTool.addNewMeasurement(evt, 'touch'); + } else if (activeTool instanceof _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]) { + Object(_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, activeTool); + } +}); + +/***/ }), + +/***/ "./eventDispatchers/touchToolEventDispatcher.js": +/*!******************************************************!*\ + !*** ./eventDispatchers/touchToolEventDispatcher.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./touchEventHandlers/index.js */ "./eventDispatchers/touchEventHandlers/index.js"); + + +/** + * These listeners are emitted in order, and can be cancelled/prevented from bubbling + * by any previous event. + * - tap: + * - touchStart: check to see if we are close to an existing annotation, grab it + * - touchDrag: + * - touchStartActive: createNewMeasurement (usually) + * - touchPress: + * - touchRotate: + * - doubleTap: usually a one-time apply specialty action + * - touchPinch: + * - onImageRendered: redraw visible tool data + * @private + * @param {*} element + * @returns {void} + */ + +var enable = function enable(element) { + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["tap"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStart"], { + passive: false + }); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchDrag"], { + passive: false + }); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchEnd"]); // Mouse equivelant is `mouse_down_activate` + // Should the naming pattern here match? + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START_ACTIVE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStartActive"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPress"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].DOUBLE_TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["doubleTap"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPinch"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_ROTATE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchRotate"]); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["multiTouchDrag"]); +}; + +var disable = function disable(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["tap"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStart"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchDrag"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchEnd"]); // Mouse equivelant is `mouse_down_activate` + // Should the naming pattern here match? + + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START_ACTIVE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchStartActive"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPress"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].DOUBLE_TAP, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["doubleTap"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchPinch"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_ROTATE, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchRotate"]); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_DRAG, _touchEventHandlers_index_js__WEBPACK_IMPORTED_MODULE_1__["multiTouchDrag"]); +}; + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventListeners/index.js": +/*!*********************************!*\ + !*** ./eventListeners/index.js ***! + \*********************************/ +/*! exports provided: mouseEventListeners, wheelEventListener, touchEventListeners */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _mouseEventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mouseEventListeners.js */ "./eventListeners/mouseEventListeners.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mouseEventListeners", function() { return _mouseEventListeners_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _wheelEventListener_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wheelEventListener.js */ "./eventListeners/wheelEventListener.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "wheelEventListener", function() { return _wheelEventListener_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _touchEventListeners_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./touchEventListeners.js */ "./eventListeners/touchEventListeners.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "touchEventListeners", function() { return _touchEventListeners_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + + + + + + +/***/ }), + +/***/ "./eventListeners/internals/normalizeWheel.js": +/*!****************************************************!*\ + !*** ./eventListeners/internals/normalizeWheel.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Reasonable defaults +var PIXEL_STEP = 10; +var LINE_HEIGHT = 40; +var PAGE_HEIGHT = 800; +/** + * Normalizes wheel events and provides properties that are more + * consistent and helpful across different browsers + * + * @private + * @function normalizeWheel + * @param {WheelEvent} event + * @returns {Object} { spinX, spinY, pixlX, pixelY } + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (event) { + var spinX = 0, + spinY = 0, + pixelX = 0, + pixelY = 0; // Legacy + + if ('detail' in event) { + spinY = event.detail; + } + + if ('wheelDelta' in event) { + spinY = -event.wheelDelta / 120; + } + + if ('wheelDeltaY' in event) { + spinY = -event.wheelDeltaY / 120; + } + + if ('wheelDeltaX' in event) { + spinX = -event.wheelDeltaX / 120; + } + + pixelX = spinX * PIXEL_STEP; + pixelY = spinY * PIXEL_STEP; + + if ('deltaY' in event) { + pixelY = event.deltaY; + } + + if ('deltaX' in event) { + pixelX = event.deltaX; + } + + if ((pixelX || pixelY) && event.deltaMode) { + if (event.deltaMode === 1) { + // Delta in LINE units + pixelX *= LINE_HEIGHT; + pixelY *= LINE_HEIGHT; + } else { + // Delta in PAGE units + pixelX *= PAGE_HEIGHT; + pixelY *= PAGE_HEIGHT; + } + } // Fall-back if spin cannot be determined + + + if (pixelX && !spinX) { + spinX = pixelX < 1 ? -1 : 1; + } + + if (pixelY && !spinY) { + spinY = pixelY < 1 ? -1 : 1; + } + + return { + spinX: spinX, + spinY: spinY, + pixelX: pixelX, + pixelY: pixelY + }; +}); + +/***/ }), + +/***/ "./eventListeners/internals/renderSegmentation.js": +/*!********************************************************!*\ + !*** ./eventListeners/internals/renderSegmentation.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return renderSegmentation; }); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _renderSegmentationFill__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderSegmentationFill */ "./eventListeners/internals/renderSegmentationFill.js"); +/* harmony import */ var _renderSegmentationOutline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderSegmentationOutline */ "./eventListeners/internals/renderSegmentationOutline.js"); + + + +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'); +/** + * Renders the segmentation based on the brush configuration and + * the active status of the labelmap. + * @param {Object} evt The cornerstone event. + * @param {Labelmap3D} labelmap3D The `Labelmap3D` object. + * @param {number} labelmapIndex The index of the active label map. + * @param {Labelmap2D} labelmap2D The `Labelmap2D` object to render. + * @param {boolean} isActiveLabelMap Whether or not the labelmap is active. + * @returns {null} + */ + +function renderSegmentation(evt, labelmap3D, labelmapIndex, labelmap2D, isActiveLabelMap) { + if (shouldRenderFill(isActiveLabelMap)) { + Object(_renderSegmentationFill__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap); + } + + if (shouldRenderOutline(isActiveLabelMap)) { + Object(_renderSegmentationOutline__WEBPACK_IMPORTED_MODULE_2__["default"])(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap); + } +} +/** + * ShouldRenderFill - Returns true if `configuration.renderFill` + * is true , and if the global alpha is not zero. + * + * @param {boolean} isActiveLabelMap + * @returns {boolean} True if the segmentation should be filled. + */ + +function shouldRenderFill(isActiveLabelMap) { + var configuration = segmentationModule.configuration; + return configuration.renderFill && (isActiveLabelMap && configuration.fillAlpha !== 0 || !isActiveLabelMap && configuration.fillAlphaInactive !== 0); +} +/** + * ShouldRenderOutline - Returns true if `configuration.renderOutline` + * is true , and if the global alpha is not zero. + * + * @param {boolean} isActiveLabelMap + * @returns {boolean} True if the segmentation should be outlined. + */ + + +function shouldRenderOutline(isActiveLabelMap) { + var configuration = segmentationModule.configuration; + return configuration.renderOutline && (isActiveLabelMap && configuration.outlineAlpha !== 0 || !isActiveLabelMap && configuration.outlineAlphaInactive !== 0); +} + +/***/ }), + +/***/ "./eventListeners/internals/renderSegmentationFill.js": +/*!************************************************************!*\ + !*** ./eventListeners/internals/renderSegmentationFill.js ***! + \************************************************************/ +/*! exports provided: default, getLabelmapCanvas, renderFill */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return renderSegmentationFill; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLabelmapCanvas", function() { return getLabelmapCanvas; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderFill", function() { return renderFill; }); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../externalModules */ "./externalModules.js"); + + + +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'); +function renderSegmentationFill(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap) { + var labelmapCanvas = getLabelmapCanvas(evt, labelmap3D, labelmap2D); + renderFill(evt, labelmapCanvas, isActiveLabelMap); +} +/** + * Generates a canvas of the `Labelmap2D` data with transparent background, to draw onto the + * cornerstone canvas. Reduces the number of `putImageData` calls that need to be made by + * scanning across the labelmap and painting to the canvas in chunks. + * + * @param {Object} evt The cornerstone event. + * @param {Labelmap3D} labelmap3D The `Labelmap3D` object. + * @param {Labelmap2D} labelmap2D The `Labelmap2D` object containing the pixelData to render. + * @returns {HTMLCanvasElement} + */ + +function getLabelmapCanvas(evt, labelmap3D, labelmap2D) { + var state = segmentationModule.state; + var eventData = evt.detail; + var image = eventData.image; + var cols = image.width; + var rows = image.height; + var segmentsHidden = labelmap3D.segmentsHidden; + var pixelData = labelmap2D.pixelData; + var colorLutTable = state.colorLutTables[labelmap3D.colorLUTIndex]; + var canvasElement = document.createElement('canvas'); + canvasElement.width = cols; + canvasElement.height = rows; + var ctx = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["getNewContext"])(canvasElement); // Image data initialized with all transparent black. + + var imageData = new ImageData(cols, rows); + var data = imageData.data; + + for (var i = 0; i < pixelData.length; i++) { + var segmentIndex = pixelData[i]; + + if (segmentIndex !== 0 && !segmentsHidden[segmentIndex]) { + var color = colorLutTable[pixelData[i]]; // Modify ImageData. + + data[4 * i] = color[0]; // R value + + data[4 * i + 1] = color[1]; // G value + + data[4 * i + 2] = color[2]; // B value + + data[4 * i + 3] = color[3]; // A value + } + } // Put this image data onto the labelmapCanvas. + + + ctx.putImageData(imageData, 0, 0); + return canvasElement; +} +/** + * Renders the filled region of each segment in the segmentation. + * @param {Object} evt The cornerstone event. + * @param {HTMLCanvasElement} labelmapCanvas The canvas generated for the labelmap. + * @param {boolean} isActiveLabelMap Whether or not the labelmap is active. + * @returns {null} + */ + +function renderFill(evt, labelmapCanvas, isActiveLabelMap) { + var configuration = segmentationModule.configuration; + var eventData = evt.detail; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["getNewContext"])(eventData.canvasContext.canvas); + var canvasTopLeft = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.pixelToCanvas(eventData.element, { + x: 0, + y: 0 + }); + var canvasTopRight = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.pixelToCanvas(eventData.element, { + x: eventData.image.width, + y: 0 + }); + var canvasBottomRight = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.pixelToCanvas(eventData.element, { + x: eventData.image.width, + y: eventData.image.height + }); + var cornerstoneCanvasWidth = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstoneMath.point.distance(canvasTopLeft, canvasTopRight); + var cornerstoneCanvasHeight = _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstoneMath.point.distance(canvasTopRight, canvasBottomRight); + var canvas = eventData.canvasContext.canvas; + var viewport = eventData.viewport; + var previousImageSmoothingEnabled = context.imageSmoothingEnabled; + var previousGlobalAlpha = context.globalAlpha; + context.imageSmoothingEnabled = false; + context.globalAlpha = isActiveLabelMap ? configuration.fillAlpha : configuration.fillAlphaInactive; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["transformCanvasContext"])(context, canvas, viewport); + var canvasViewportTranslation = { + x: viewport.translation.x * viewport.scale, + y: viewport.translation.y * viewport.scale + }; + context.drawImage(labelmapCanvas, canvas.width / 2 - cornerstoneCanvasWidth / 2 + canvasViewportTranslation.x, canvas.height / 2 - cornerstoneCanvasHeight / 2 + canvasViewportTranslation.y, cornerstoneCanvasWidth, cornerstoneCanvasHeight); + context.globalAlpha = previousGlobalAlpha; + context.imageSmoothingEnabled = previousImageSmoothingEnabled; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_1__["resetCanvasContextTransform"])(context); +} + +/***/ }), + +/***/ "./eventListeners/internals/renderSegmentationOutline.js": +/*!***************************************************************!*\ + !*** ./eventListeners/internals/renderSegmentationOutline.js ***! + \***************************************************************/ +/*! exports provided: default, renderOutline, getOutline, _addTopRightCorner */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return renderSegmentationOutline; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderOutline", function() { return renderOutline; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOutline", function() { return getOutline; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_addTopRightCorner", function() { return _addTopRightCorner; }); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../index.js */ "./index.js"); + + + + +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'); +function renderSegmentationOutline(evt, labelmap3D, labelmap2D, labelmapIndex, isActiveLabelMap) { + var configuration = segmentationModule.configuration; + var outline = getOutline(evt, labelmap3D, labelmap2D, configuration.outlineWidth); + renderOutline(evt, outline, labelmap3D.colorLUTIndex, isActiveLabelMap); +} +/** + * RenderOutline - Renders the outlines of segments to the canvas. + * + * @param {Object} evt The cornerstone event. + * @param {Object} outline The outline to render. + * @param {number} colorLUTIndex The index of the colorLUT. + * @param {number} isActiveLabelMap Whether the labelmap is active. + * @returns {null} + */ + +function renderOutline(evt, outline, colorLUTIndex) { + var isActiveLabelMap = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var configuration = segmentationModule.configuration, + state = segmentationModule.state; + var eventData = evt.detail; + var element = eventData.element, + canvasContext = eventData.canvasContext; + var lineWidth = configuration.outlineWidth || 1; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_2__["getNewContext"])(canvasContext.canvas); + var colorLutTable = state.colorLutTables[colorLUTIndex]; + var previousAlpha = context.globalAlpha; + context.globalAlpha = isActiveLabelMap ? configuration.outlineAlpha : configuration.outlineAlphaInactive; // Draw outlines. + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_2__["draw"])(context, function (context) { + for (var i = 1; i < outline.length; i++) { + if (outline[i]) { + var color = colorLutTable[i]; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_2__["drawLines"])(context, element, outline[i], { + color: "rgba(".concat(color[0], ", ").concat(color[1], ", ").concat(color[2], ", 1.0 )"), + lineWidth: lineWidth + }, 'canvas'); + } + } + }); + context.globalAlpha = previousAlpha; +} +/** + * GetOutline - Returns an object containing all the line segments to be + * drawn the canvas. + * + * @param {Object} evt The cornerstone event. + * @param {Labelmap3D} labelmap3D The 3D labelmap. + * @param {Labelmap2D} labelmap2D The 2D labelmap for this current image. + * @param {number} lineWidth The width of the outline in canvas pixels. + * + * @returns {Object[][]} An array of arrays of lines for each segment. + */ + +function getOutline(evt, labelmap3D, labelmap2D, lineWidth) { + var eventData = evt.detail; + var element = eventData.element, + image = eventData.image, + viewport = eventData.viewport; + var cols = image.width; + var rows = image.height; + lineWidth = lineWidth || 1; + var segmentsHidden = labelmap3D.segmentsHidden; + var pixelData = labelmap2D.pixelData; + var activeSegmentIndex = labelmap3D.activeSegmentIndex; + var lineSegments = []; + labelmap2D.segmentsOnLabelmap.forEach(function (segmentIndex) { + var visible = !segmentsHidden[segmentIndex]; + + if (visible) { + lineSegments[segmentIndex] = []; + } + }); + + if (!lineSegments[activeSegmentIndex]) { + lineSegments[activeSegmentIndex] = []; + } + + var _getPixelCoordinateFromPixelIndex = function _getPixelCoordinateFromPixelIndex(pixelIndex) { + return { + x: pixelIndex % cols, + y: Math.floor(pixelIndex / cols) + }; + }; + + var offset = getOutlineOffset(viewport, lineWidth); + + for (var i = 0; i < pixelData.length; i++) { + var segmentIndex = pixelData[i]; + + if (segmentIndex === 0) { + continue; + } + + var visible = !segmentsHidden[segmentIndex]; + + if (!visible) { + continue; + } + + var coord = _getPixelCoordinateFromPixelIndex(i); + + var pixels = _getPixelIndiciesAroundPixel(coord, rows, cols); // Check pixel above + + + if (pixels.top === undefined || pixelData[pixels.top] !== segmentIndex) { + _addTopOutline(lineSegments[segmentIndex], element, coord, offset); + } // Check pixel below + + + if (pixels.bottom === undefined || pixelData[pixels.bottom] !== segmentIndex) { + _addBottomOutline(lineSegments[segmentIndex], element, coord, offset); + } // Check pixel to the left + + + if (pixels.left === undefined || pixelData[pixels.left] !== segmentIndex) { + _addLeftOutline(lineSegments[segmentIndex], element, coord, offset); + } // Check pixel to the right + + + if (pixels.right === undefined || pixelData[pixels.right] !== segmentIndex) { + _addRightOutline(lineSegments[segmentIndex], element, coord, offset); + } // Top left corner + + + if (pixels.topLeft !== undefined && pixelData[pixels.topLeft] !== segmentIndex && pixelData[pixels.top] === segmentIndex && pixelData[pixels.left] === segmentIndex) { + _addTopLeftCorner(lineSegments[segmentIndex], element, coord, offset); + } // Top right corner + + + if (pixels.topRight !== undefined && pixelData[pixels.topRight] !== segmentIndex && pixelData[pixels.top] === segmentIndex && pixelData[pixels.right] === segmentIndex) { + _addTopRightCorner(lineSegments[segmentIndex], element, coord, offset); + } // Bottom left corner + + + if (pixels.bottomLeft !== undefined && pixelData[pixels.bottomLeft] !== segmentIndex && pixelData[pixels.bottom] === segmentIndex && pixelData[pixels.left] === segmentIndex) { + _addBottomLeftCorner(lineSegments[segmentIndex], element, coord, offset); + } // Bottom right corner + + + if (pixels.bottomRight !== undefined && pixelData[pixels.bottomRight] !== segmentIndex && pixelData[pixels.bottom] === segmentIndex && pixelData[pixels.right] === segmentIndex) { + _addBottomRightCorner(lineSegments[segmentIndex], element, coord, offset); + } + } + + return lineSegments; +} +/** + * GetOutlineOffset - Returns the outline offset (half line width) in the + * i (column) and j (row) pixel directions in the viewport's rotated frame. + * @param {Object} viewport The cornerstone viewport. + * @param {number} lineWidth The width of the outline. + * @returns {Object} Two vectors in the i and j pixel directions, with magnitude + * lineWidth / 2 + */ + +function getOutlineOffset(viewport, lineWidth) { + var halfLineWidth = lineWidth / 2; + var theta = viewport.rotation; + theta *= Math.PI / 180; + var cosTheta = Math.cos(theta); + var sinTheta = Math.sin(theta); + var unitVectorI = [cosTheta, sinTheta]; + var unitVectorJ = [-sinTheta, cosTheta]; + var i = { + x: halfLineWidth * unitVectorI[0], + y: halfLineWidth * unitVectorI[1] + }; + var j = { + x: halfLineWidth * unitVectorJ[0], + y: halfLineWidth * unitVectorJ[1] + }; + + if (viewport.hflip) { + i.x *= -1; + i.y *= -1; + } + + if (viewport.vflip) { + j.x *= -1; + j.y *= -1; + } + + return { + i: i, + j: j + }; +} +/** + * _getPixelIndiciesAroundPixel - Returnns the coordinates for up to 8 surrounding + * pixels, if they within the bounds of the image. + * + * @param {Object} coord The coordinate to check. + * @param {number} rows The number of rows in the image. + * @param {number} cols The number of cols in the image. + * + * @returns {Object} Object containing the position of adjacent pixels. + */ + + +function _getPixelIndiciesAroundPixel(coord, rows, cols) { + var pixelIndex = coord.y * cols + coord.x; + var pixel = {}; + var hasPixelToTop = coord.y - 1 >= 0; + var hasPixelToBotoom = coord.y + 1 < rows; + var hasPixelToLeft = coord.x - 1 >= 0; + var hasPixelToRight = coord.x + 1 < cols; + + if (hasPixelToTop) { + pixel.top = pixelIndex - cols; + + if (hasPixelToRight) { + pixel.topRight = pixel.top + 1; + } + + if (hasPixelToLeft) { + pixel.topLeft = pixel.top - 1; + } + } + + if (hasPixelToBotoom) { + pixel.bottom = pixelIndex + cols; + + if (hasPixelToRight) { + pixel.bottomRight = pixel.bottom + 1; + } + + if (hasPixelToLeft) { + pixel.bottomLeft = pixel.bottom - 1; + } + } + + if (hasPixelToLeft) { + pixel.left = pixelIndex - 1; + } + + if (hasPixelToRight) { + pixel.right = pixelIndex + 1; + } + + return pixel; +} +/** + * _addTopLeftCorner - Adds an outline to the top left corner of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addTopLeftCorner(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, coord); + start.x += offset.j.x; + start.y += offset.j.y; + var end = { + x: start.x, + y: start.y + }; + end.x += offset.i.x * 2; + end.y += offset.i.y * 2; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addTopRightCorner - Adds an outline to the top right corner of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addTopRightCorner(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, { + x: coord.x + 1, + y: coord.y + }); + start.x += offset.j.x; + start.y += offset.j.y; + var end = { + x: start.x, + y: start.y + }; + end.x -= offset.i.x * 2; + end.y -= offset.i.y * 2; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addBottomLeftCorner - Adds an outline to the bottom left corner of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + +function _addBottomLeftCorner(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, { + x: coord.x, + y: coord.y + 1 + }); + start.x -= offset.j.x; + start.y -= offset.j.y; + var end = { + x: start.x, + y: start.y + }; + end.x += offset.i.x * 2; + end.y += offset.i.y * 2; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addBottomRightCorner - Adds an outline to the bottom right corner of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addBottomRightCorner(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, { + x: coord.x + 1, + y: coord.y + 1 + }); + start.x -= offset.j.x; + start.y -= offset.j.y; + var end = { + x: start.x, + y: start.y + }; + end.x -= offset.i.x * 2; + end.y -= offset.i.y * 2; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addTopOutline - adds an outline at the top of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {number} halfLineWidth - Half the line width, to place line within the pixel. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addTopOutline(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, coord); + var end = pixelToCanvas(element, { + x: coord.x + 1, + y: coord.y + }); // Move the line in the y-direction. + + start.x += offset.j.x; + start.y += offset.j.y; + end.x += offset.j.x; + end.y += offset.j.y; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addBottomOutline - adds an outline at the bottom of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addBottomOutline(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, { + x: coord.x, + y: coord.y + 1 + }); + var end = pixelToCanvas(element, { + x: coord.x + 1, + y: coord.y + 1 + }); // Move the line in the negative y-direction. + + start.x -= offset.j.x; + start.y -= offset.j.y; + end.x -= offset.j.x; + end.y -= offset.j.y; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addLeftOutline - adds an outline at the left side of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addLeftOutline(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, coord); + var end = pixelToCanvas(element, { + x: coord.x, + y: coord.y + 1 + }); // Move the line in the x-direction. + + start.x += offset.i.x; + start.y += offset.i.y; + end.x += offset.i.x; + end.y += offset.i.y; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} +/** + * _addRightOutline - adds an outline at the right side of the pixel. + * + * @param {Object[]} lineSegmentsForSegment - The list to append. + * @param {Object} element - The Cornerstone enabled element. + * @param {Object} coord - The pixel to add a line to. + * @param {Object} offset - The x and y offset in the rotated frame. + * + * @returns {null} + */ + + +function _addRightOutline(lineSegmentsForSegment, element, coord, offset) { + var pixelToCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas; + var start = pixelToCanvas(element, { + x: coord.x + 1, + y: coord.y + }); + var end = pixelToCanvas(element, { + x: coord.x + 1, + y: coord.y + 1 + }); // Move the line in the negative x-direction. + + start.x -= offset.i.x; + start.y -= offset.i.y; + end.x -= offset.i.x; + end.y -= offset.i.y; + lineSegmentsForSegment.push({ + start: start, + end: end + }); +} + +/***/ }), + +/***/ "./eventListeners/mouseEventListeners.js": +/*!***********************************************!*\ + !*** ./eventListeners/mouseEventListeners.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/copyPoints.js */ "./util/copyPoints.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('eventListeners:mouseEventListeners'); +var isClickEvent = true; +var preventClickTimeout; +var clickDelay = 200; + +function getEventButtons(event) { + if (typeof event.buttons === 'number') { + return event.buttons; + } + + switch (event.which) { + // No button + case 0: + return 0; + // Left + + case 1: + return 1; + // Middle + + case 2: + return 4; + // Right + + case 3: + return 2; + } + + return 0; +} + +function preventClickHandler() { + isClickEvent = false; +} + +function mouseDoubleClick(e) { + var element = e.currentTarget; + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return; + } + + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOUBLE_CLICK; + var startPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY), + client: { + x: e.clientX, + y: e.clientY + } + }; + startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + var lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints); + logger.log('double-click: %o', getEventButtons(e)); + var eventData = { + event: e, + buttons: getEventButtons(e), + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: startPoints, + deltaPoints: { + x: 0, + y: 0 + }, + type: eventType + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData); +} + +function mouseDown(e) { + var element = e.currentTarget; + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return; + } + + preventClickTimeout = setTimeout(preventClickHandler, clickDelay); // Prevent CornerstoneToolsMouseMove while mouse is down + + element.removeEventListener('mousemove', mouseMove); + var startPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY), + client: { + x: e.clientX, + y: e.clientY + } + }; + startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + var lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints); + var eventData = { + event: e, + buttons: getEventButtons(e), + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: startPoints, + deltaPoints: { + x: 0, + y: 0 + }, + type: _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN + }; + var eventPropagated = Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN, eventData); + + if (eventPropagated) { + // No tools responded to this event, create a new tool + eventData.type = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DOWN_ACTIVATE, eventData); + } + + function onMouseMove(e) { + // Calculate our current points in page and image coordinates + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG; + var currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY), + client: { + x: e.clientX, + y: e.clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates + + var deltaPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image), + client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client), + canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas) + }; + logger.log('mousemove: %o', getEventButtons(e)); + var eventData = { + buttons: getEventButtons(e), + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: currentPoints, + deltaPoints: deltaPoints, + type: eventType, + ctrlKey: e.ctrlKey, + metaKey: e.metaKey, + shiftKey: e.shiftKey + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, eventType, eventData); // Update the last points + + lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints); + } // Hook mouseup so we can unbind our event listeners + // When they stop dragging + + + function onMouseUp(e) { + // Cancel the timeout preventing the click event from triggering + clearTimeout(preventClickTimeout); + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP; + + if (isClickEvent) { + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK; + } // Calculate our current points in page and image coordinates + + + var currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY), + client: { + x: e.clientX, + y: e.clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates + + var deltaPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image), + client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client), + canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas) + }; + logger.log('mouseup: %o', getEventButtons(e)); + var eventData = { + event: e, + buttons: getEventButtons(e), + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: currentPoints, + deltaPoints: deltaPoints, + type: eventType + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.element, eventType, eventData); + document.removeEventListener('mousemove', onMouseMove); + document.removeEventListener('mouseup', onMouseUp); + element.addEventListener('mousemove', mouseMove); + isClickEvent = true; + } + + document.addEventListener('mousemove', onMouseMove); + document.addEventListener('mouseup', onMouseUp); +} + +function mouseMove(e) { + var element = e.currentTarget; + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return; + } + + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE; + var startPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY), + client: { + x: e.clientX, + y: e.clientY + } + }; + startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + var lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints); // Calculate our current points in page and image coordinates + + var currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pageX, e.pageY), + client: { + x: e.clientX, + y: e.clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates + + var deltaPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image), + client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client), + canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas) + }; + var eventData = { + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: currentPoints, + deltaPoints: deltaPoints, + type: eventType + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData); // Update the last points + + lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints); +} + +function disable(element) { + element.removeEventListener('mousedown', mouseDown); + element.removeEventListener('mousemove', mouseMove); + element.removeEventListener('dblclick', mouseDoubleClick); +} + +function enable(element) { + // Prevent handlers from being attached multiple times + disable(element); + element.addEventListener('mousedown', mouseDown); + element.addEventListener('mousemove', mouseMove); + element.addEventListener('dblclick', mouseDoubleClick); +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventListeners/onImageRenderedBrushEventHandler.js": +/*!************************************************************!*\ + !*** ./eventListeners/onImageRenderedBrushEventHandler.js ***! + \************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/index.js */ "./store/index.js"); +/* harmony import */ var _internals_renderSegmentation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internals/renderSegmentation.js */ "./eventListeners/internals/renderSegmentation.js"); + + +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'); +/** + * Finds which segmentations need to be rendered based on the configuration and + * presence of `Labelmap2D` data on these frames. + * + * @param {Object} evt - The cornerstone event. + * @returns {null} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + var eventData = evt.detail; + var element = eventData.element; + var configuration = segmentationModule.configuration, + getters = segmentationModule.getters; + + var _getters$labelmaps3D = getters.labelmaps3D(element), + activeLabelmapIndex = _getters$labelmaps3D.activeLabelmapIndex, + labelmaps3D = _getters$labelmaps3D.labelmaps3D, + currentImageIdIndex = _getters$labelmaps3D.currentImageIdIndex; + + if (!labelmaps3D) { + return; + } + + if (configuration.shouldRenderInactiveLabelmaps) { + renderInactiveLabelMaps(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex); + } + + renderActiveLabelMap(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex); +}); +/** + * RenderActiveLabelMap - Renders the `Labelmap3D` for this element if a `Labelmap2D` + * view of the `currentImageIdIndex` exists. + * + * @param {Object} evt The cornerstone event. + * @param {Labelmap3D[]} labelmaps3D An array of `Labelmap3D` objects. + * @param {number} activeLabelmapIndex The index of the active label map. + * @param {number} currentImageIdIndex The in-stack image position. + * @returns {null} + */ + +function renderActiveLabelMap(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex) { + var labelmap3D = labelmaps3D[activeLabelmapIndex]; + + if (!labelmap3D) { + return; + } + + var labelmap2D = labelmap3D.labelmaps2D[currentImageIdIndex]; + + if (labelmap2D) { + Object(_internals_renderSegmentation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, labelmap3D, activeLabelmapIndex, labelmap2D, true); + } +} +/** + * RenderInactiveLabelMaps - Renders all the inactive `Labelmap3D`s for this element. + * + * @param {Object} evt The cornerstone event. + * @param {Labelmap3D[]} labelmaps3D An array of labelmaps. + * @param {number} activeLabelmapIndex The index of the active label map. + * @param {number} currentImageIdIndex The in-stack image position. + * @returns {null} + */ + + +function renderInactiveLabelMaps(evt, labelmaps3D, activeLabelmapIndex, currentImageIdIndex) { + for (var i = 0; i < labelmaps3D.length; i++) { + var labelmap3D = labelmaps3D[i]; + + if (i === activeLabelmapIndex || !labelmap3D) { + continue; + } + + var labelmap2D = labelmap3D.labelmaps2D[currentImageIdIndex]; + + if (labelmap2D) { + Object(_internals_renderSegmentation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, labelmap3D, i, labelmap2D, false); + } + } +} + +/***/ }), + +/***/ "./eventListeners/preventGhostClick.js": +/*!*********************************************!*\ + !*** ./eventListeners/preventGhostClick.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Functions to prevent ghost clicks following a touch +// All credit to @kosich +// https://gist.github.com/kosich/23188dd86633b6c2efb7 +var antiGhostDelay = 2000, + pointerType = { + mouse: 0, + touch: 1 +}; +var lastInteractionType, lastInteractionTime; + +function handleTap(type, e) { + var now = Date.now(); + + if (type !== lastInteractionType) { + if (now - lastInteractionTime <= antiGhostDelay) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + return false; + } + + lastInteractionType = type; + } + + lastInteractionTime = now; +} // Cacheing the function references +// Necessary because a new function reference is created after .bind() is called +// http://stackoverflow.com/questions/11565471/removing-event-listener-which-was-added-with-bind + + +var handleTapMouse = handleTap.bind(null, pointerType.mouse); +var handleTapTouch = handleTap.bind(null, pointerType.touch); + +function attachEvents(element, eventList, interactionType) { + var tapHandler = interactionType ? handleTapMouse : handleTapTouch; + eventList.forEach(function (eventName) { + element.addEventListener(eventName, tapHandler, { + passive: false + }); + }); +} + +function removeEvents(element, eventList, interactionType) { + var tapHandler = interactionType ? handleTapMouse : handleTapTouch; + eventList.forEach(function (eventName) { + element.removeEventListener(eventName, tapHandler); + }); +} + +var mouseEvents = ['mousedown', 'mouseup']; +var touchEvents = ['touchstart', 'touchend']; + +function disable(element) { + removeEvents(element, mouseEvents, pointerType.mouse); + removeEvents(element, touchEvents, pointerType.touch); +} + +function enable(element) { + disable(element); + attachEvents(element, mouseEvents, pointerType.mouse); + attachEvents(element, touchEvents, pointerType.touch); +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventListeners/touchEventListeners.js": +/*!***********************************************!*\ + !*** ./eventListeners/touchEventListeners.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/copyPoints.js */ "./util/copyPoints.js"); +/* harmony import */ var _preventGhostClick_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./preventGhostClick.js */ "./eventListeners/preventGhostClick.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../toolOptions.js */ "./toolOptions.js"); + + + + + + +var startPoints, currentPoints, lastPoints, deltaPoints, eventData, touchStartDelay, pressTimeout, pageDistanceMoved; +var lastScale = 1.0, + lastRotation = 0.0, + preventNextPinch = false, + isPress = false, + lastDelta; +var pressDelay = 700, + pressMaxDistance = 5; +var toolType = 'touchInput'; + +function onTouch(e) { + var element = e.currentTarget || e.srcEvent.currentTarget; + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return; + } + + var eventType, scaleChange, delta, remainingPointers, rotation; // Prevent mouse events from occurring alongside touch events + + e.preventDefault(); // If more than one finger is placed on the element, stop the press timeout + + if (e.pointers && e.pointers.length > 1 || e.touches && e.touches.length > 1) { + isPress = false; + clearTimeout(pressTimeout); + } + + switch (e.type) { + case 'tap': + isPress = false; + clearTimeout(pressTimeout); // Calculate our current points in page and image coordinates + + currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY), + client: { + x: e.pointers[0].clientX, + y: e.pointers[0].clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP; + eventData = { + event: e, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + currentPoints: currentPoints, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + break; + + case 'doubletap': + isPress = false; + clearTimeout(pressTimeout); // Calculate our current points in page and image coordinates + + currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY), + client: { + x: e.pointers[0].clientX, + y: e.pointers[0].clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].DOUBLE_TAP; + eventData = { + event: e, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + currentPoints: currentPoints, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + break; + + case 'pinchstart': + isPress = false; + clearTimeout(pressTimeout); + lastScale = 1.0; + break; + + case 'pinchmove': + isPress = false; + clearTimeout(pressTimeout); + + if (preventNextPinch === true) { + lastScale = e.scale; + preventNextPinch = false; + break; + } + + scaleChange = (e.scale - lastScale) / lastScale; + startPoints = { + page: e.center, + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.center.x, e.center.y) + }; + startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH; + eventData = { + event: e, + startPoints: startPoints, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + direction: e.scale < 1 ? 1 : -1, + scaleChange: scaleChange, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + lastScale = e.scale; + break; + + case 'touchstart': + lastScale = 1.0; + clearTimeout(pressTimeout); + clearTimeout(touchStartDelay); + touchStartDelay = setTimeout(function () { + startPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.touches[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.touches[0].pageX, e.touches[0].pageY), + client: { + x: e.touches[0].clientX, + y: e.touches[0].clientY + } + }; + startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START; + + if (e.touches.length > 1) { + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_START; + } + + eventData = { + event: e, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + currentPoints: startPoints, + type: eventType, + isTouchEvent: true + }; + var eventPropagated = Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + + if (eventPropagated === true) { + // IsPress = false; + // ClearTimeout(pressTimeout); + // No current tools responded to the drag action. + // Create new tool measurement + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START_ACTIVE; + + if (e.touches.length > 1) { + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_START_ACTIVE; + } + + eventData.type = eventType; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + } // Console.log(eventType); + + + lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(startPoints); + }, 50); + isPress = true; + pageDistanceMoved = 0; + pressTimeout = setTimeout(function () { + if (!isPress) { + return; + } + + currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.touches[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.touches[0].pageX, e.touches[0].pageY), + client: { + x: e.touches[0].clientX, + y: e.touches[0].clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS; + eventData = { + event: e, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + currentPoints: currentPoints, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); // Console.log(eventType); + }, pressDelay); + break; + + case 'touchend': + lastScale = 1.0; + isPress = false; + clearTimeout(pressTimeout); + setTimeout(function () { + startPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.changedTouches[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.changedTouches[0].pageX, e.changedTouches[0].pageY), + client: { + x: e.changedTouches[0].clientX, + y: e.changedTouches[0].clientY + } + }; + startPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, startPoints.image); + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END; + eventData = { + event: e, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + currentPoints: startPoints, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + }, 50); + break; + + case 'panmove': + // Using the delta-value of HammerJS, because it takes all pointers into account + // This is very important when using panning in combination with pinch-zooming + // But HammerJS' delta is relative to the start of the pan event + // So it needs to be converted to a per-event-delta for CornerstoneTools + delta = { + x: e.deltaX - lastDelta.x, + y: e.deltaY - lastDelta.y + }; + lastDelta = { + x: e.deltaX, + y: e.deltaY + }; // Calculate our current points in page and image coordinates + + currentPoints = { + page: { + x: lastPoints.page.x + delta.x, + y: lastPoints.page.y + delta.y + }, + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, lastPoints.page.x + delta.x, lastPoints.page.y + delta.y), + client: { + x: lastPoints.client.x + delta.x, + y: lastPoints.client.y + delta.y + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates + + deltaPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image), + client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client), + canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas) + }; + pageDistanceMoved += Math.sqrt(deltaPoints.page.x * deltaPoints.page.x + deltaPoints.page.y * deltaPoints.page.y); // Console.log("pageDistanceMoved: " + pageDistanceMoved); + + if (pageDistanceMoved > pressMaxDistance) { + // Console.log('Press event aborted due to movement'); + isPress = false; + clearTimeout(pressTimeout); + } + + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG; + + if (e.pointers.length > 1) { + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MULTI_TOUCH_DRAG; + } + + eventData = { + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: currentPoints, + deltaPoints: deltaPoints, + numPointers: e.pointers.length, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints); + break; + + case 'panstart': + lastDelta = { + x: e.deltaX, + y: e.deltaY + }; + currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY), + client: { + x: e.pointers[0].clientX, + y: e.pointers[0].clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); + lastPoints = Object(_util_copyPoints_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentPoints); + break; + + case 'panend': + isPress = false; + clearTimeout(pressTimeout); // If lastPoints is not yet set, it means panend fired without panstart or pan, + // So we can ignore this event + + if (!lastPoints) { + return false; + } + + currentPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.pageToPoint(e.pointers[0]), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, e.pointers[0].pageX, e.pointers[0].pageY), + client: { + x: e.pointers[0].clientX, + y: e.pointers[0].clientY + } + }; + currentPoints.canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, currentPoints.image); // Calculate delta values in page and image coordinates + + deltaPoints = { + page: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.page, lastPoints.page), + image: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.image, lastPoints.image), + client: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.client, lastPoints.client), + canvas: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.subtract(currentPoints.canvas, lastPoints.canvas) + }; + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG_END; + eventData = { + event: e.srcEvent, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + startPoints: startPoints, + lastPoints: lastPoints, + currentPoints: currentPoints, + deltaPoints: deltaPoints, + type: eventType, + isTouchEvent: true + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + remainingPointers = e.pointers.length - e.changedPointers.length; + + if (remainingPointers === 2) { + preventNextPinch = true; + } + + break; + + case 'rotatemove': + isPress = false; + clearTimeout(pressTimeout); + rotation = e.rotation - lastRotation; + lastRotation = e.rotation; + eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_ROTATE; + eventData = { + event: e.srcEvent, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + image: enabledElement.image, + element: element, + rotation: rotation, + type: eventType + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, eventData); + break; + } + + return false; +} + +function enable(element) { + disable(element); + var Hammer = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].Hammer; + var hammerOptions = { + inputClass: Hammer.SUPPORT_POINTER_EVENTS ? Hammer.PointerEventInput : Hammer.TouchInput + }; + var mc = new Hammer.Manager(element, hammerOptions); + var panOptions = { + pointers: 0, + direction: Hammer.DIRECTION_ALL, + threshold: 0 + }; + var pan = new Hammer.Pan(panOptions); + var pinch = new Hammer.Pinch({ + threshold: 0 + }); + var rotate = new Hammer.Rotate({ + threshold: 0 + }); + pinch.recognizeWith(pan); + pinch.recognizeWith(rotate); + rotate.recognizeWith(pan); + var doubleTap = new Hammer.Tap({ + event: 'doubletap', + taps: 2, + interval: 1500, + threshold: 50, + posThreshold: 50 + }); + doubleTap.recognizeWith(pan); // Add to the Manager + + mc.add([doubleTap, pan, rotate, pinch]); + mc.on('tap doubletap panstart panmove panend pinchstart pinchmove rotatemove', onTouch); + _preventGhostClick_js__WEBPACK_IMPORTED_MODULE_3__["default"].enable(element); + var touchEvents = ['touchstart', 'touchend']; + touchEvents.forEach(function (eventType) { + element.addEventListener(eventType, onTouch, { + passive: false + }); + }); + var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["getToolOptions"])(toolType, element); + options.hammer = mc; + Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["setToolOptions"])(toolType, element, options); +} + +function disable(element) { + _preventGhostClick_js__WEBPACK_IMPORTED_MODULE_3__["default"].disable(element); + var touchEvents = ['touchstart', 'touchend']; + touchEvents.forEach(function (eventType) { + element.removeEventListener(eventType, onTouch); + }); + var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_5__["getToolOptions"])(toolType, element); + var mc = options.hammer; + + if (mc) { + mc.off('tap doubletap panstart panmove panend pinchstart pinchmove rotatemove', onTouch); + } +} // Module exports + + +var touchInput = { + enable: enable, + disable: disable +}; +/* harmony default export */ __webpack_exports__["default"] = (touchInput); + +/***/ }), + +/***/ "./eventListeners/wheelEventListener.js": +/*!**********************************************!*\ + !*** ./eventListeners/wheelEventListener.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _internals_normalizeWheel_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./internals/normalizeWheel.js */ "./eventListeners/internals/normalizeWheel.js"); +/** + * Internal module used to turn on listening, handling, and normalizing of the + * native `wheel` event + */ + + + + +/** + * + * @private + * @function wheelEventHandler + * @param {WheelEvent} evt + * @returns {undefined} + */ + +function wheelEventHandler(evt) { + var element = evt.currentTarget; + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return; + } // Prevent triggering MouseWheel events that are not real scroll events: + // E.g. when clicking the MiddleMouseWheelButton, a deltaY of 0 is emitted. + // See https://github.com/cornerstonejs/cornerstoneTools/issues/935 + + + if (evt.deltaY > -1 && evt.deltaY < 1) { + return; + } + + evt.preventDefault(); + var pageX = evt.pageX, + pageY = evt.pageY; + var startingCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, pageX, pageY); + + var _normalizeWheel = Object(_internals_normalizeWheel_js__WEBPACK_IMPORTED_MODULE_3__["default"])(evt), + spinX = _normalizeWheel.spinX, + spinY = _normalizeWheel.spinY, + pixelX = _normalizeWheel.pixelX, + pixelY = _normalizeWheel.pixelY; + + var direction = spinY < 0 ? -1 : 1; + var mouseWheelData = { + element: element, + viewport: _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getViewport(element), + detail: evt, + image: enabledElement.image, + direction: direction, + spinX: spinX, + spinY: spinY, + pixelX: pixelX, + pixelY: pixelY, + pageX: pageX, + pageY: pageY, + imageX: startingCoords.x, + imageY: startingCoords.y + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_WHEEL, mouseWheelData); +} +/** + * Listens for the wheel event, and handles it. Handled event + * will be "normalized" and re-emitted as `EVENTS.MOUSE_WHEEL` + * + * @private + * @param {HTMLElement} element + * @returns {undefined} + */ + + +function enable(element) { + disable(element); + //element.addEventListener('wheel', wheelEventHandler, { + // passive: false + //}); +} +/** + * Removes listener and handler for wheel event. `EVENTS.MOUSE_WHEEL` + * will no longer be emitted. + * + * @private + * @param {HTMLElement} element + * @returns {undefined} + */ + + +function disable(element) { + element.removeEventListener('wheel', wheelEventHandler, { + passive: false + }); +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./eventListeners/windowResizeHandler.js": +/*!***********************************************!*\ + !*** ./eventListeners/windowResizeHandler.js ***! + \***********************************************/ +/*! exports provided: forceEnabledElementResize, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forceEnabledElementResize", function() { return forceEnabledElementResize; }); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); + + + +var enable = function enable() { + disable(); // Clean up any lingering listeners + + window.addEventListener('resize', resizeThrottler, false); +}; + +var disable = function disable() { + window.removeEventListener('resize', resizeThrottler, false); +}; + +var resizeTimeout; + +function resizeThrottler() { + // Ignore resize events as long as an actualResizeHandler execution is in the queue + if (!resizeTimeout) { + resizeTimeout = setTimeout(function () { + resizeTimeout = null; + forceEnabledElementResize(); // The actualResizeHandler will execute at a rate of 15fps + }, 66); + } +} + +var forceEnabledElementResize = function forceEnabledElementResize() { + _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].enabledElements.forEach(function (element) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.resize(element); + }); +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + enable: enable, + disable: disable +}); + +/***/ }), + +/***/ "./events.js": +/*!*******************!*\ + !*** ./events.js ***! + \*******************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Enumerates the events for CornestoneTools. Native events are captured, + * normalized, and re-triggered with a `cornerstonetools` prefix. This allows + * us to handle events consistently across different browsers. + * + * @enum {String} + * @memberof CornerstoneTools + * @readonly + */ +var EVENTS = { + // + // MOUSE + // + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/mousedown + * @type {String} + */ + MOUSE_DOWN: 'cornerstonetoolsmousedown', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/mouseup + * @type {String} + */ + MOUSE_UP: 'cornerstonetoolsmouseup', + + /** + * Is fired if a handled `MOUSE_DOWN` event does not `stopPropagation`. The hook + * we use to create new measurement data for mouse events. + * @type {String} + */ + MOUSE_DOWN_ACTIVATE: 'cornerstonetoolsmousedownactivate', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/drag + * @type {String} + */ + MOUSE_DRAG: 'cornerstonetoolsmousedrag', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/mousemove + * @type {String} + */ + MOUSE_MOVE: 'cornerstonetoolsmousemove', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/click + * @type {String} + */ + MOUSE_CLICK: 'cornerstonetoolsmouseclick', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/dblclick + * @type {String} + */ + MOUSE_DOUBLE_CLICK: 'cornerstonetoolsmousedoubleclick', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/wheel + * @type {String} + */ + MOUSE_WHEEL: 'cornerstonetoolsmousewheel', + // + // TOUCH + // + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/touchstart + * @type {String} + */ + TOUCH_START: 'cornerstonetoolstouchstart', + + /** + * Is fired if a handled `TOUCH_START` event does not `stopPropagation`. The hook + * we use to create new measurement data for touch events. + * @type {String} + */ + TOUCH_START_ACTIVE: 'cornerstonetoolstouchstartactive', + + /** + * @type {String} + */ + TOUCH_END: 'cornerstonetoolstouchend', + + /** + * @type {String} + */ + TOUCH_DRAG: 'cornerstonetoolstouchdrag', + + /** + * @type {String} + */ + TOUCH_DRAG_END: 'cornerstonetoolstouchdragend', + + /** + * http://hammerjs.github.io/recognizer-pinch/ + * @type {String} + */ + TOUCH_PINCH: 'cornerstonetoolstouchpinch', + + /** + * http://hammerjs.github.io/recognizer-rotate/ + * @type {String} + */ + TOUCH_ROTATE: 'cornerstonetoolstouchrotate', + + /** + * http://hammerjs.github.io/recognizer-press/ + * @type {String} + */ + TOUCH_PRESS: 'cornerstonetoolstouchpress', + + /** + * http://hammerjs.github.io/recognizer-tap/ + * @type {String} + */ + TAP: 'cornerstonetoolstap', + + /** + * @type {String} + */ + DOUBLE_TAP: 'cornerstonetoolsdoubletap', + + /** + * @type {String} + */ + MULTI_TOUCH_START: 'cornerstonetoolsmultitouchstart', + + /** + * @type {String} + */ + MULTI_TOUCH_START_ACTIVE: 'cornerstonetoolsmultitouchstartactive', + + /** + * @type {String} + */ + MULTI_TOUCH_DRAG: 'cornerstonetoolsmultitouchdrag', + // + // KEYBOARD + // + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/keydown + * @type {String} + */ + KEY_DOWN: 'cornerstonetoolskeydown', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/keyup + * @type {String} + */ + KEY_UP: 'cornerstonetoolskeyup', + + /** + * https://developer.mozilla.org/en-US/docs/Web/Events/keypress + * @type {String} + */ + KEY_PRESS: 'cornerstonetoolskeypress', + // + // CUSTOM + // + + /** + * @type {String} + */ + MEASUREMENT_ADDED: 'cornerstonetoolsmeasurementadded', + + /** + * @type {String} + */ + MEASUREMENT_MODIFIED: 'cornerstonetoolsmeasurementmodified', + + /** + * @type {String} + */ + MEASUREMENT_COMPLETED: 'cornerstonetoolsmeasurementcompleted', + + /** + * @type {String} + */ + MEASUREMENT_REMOVED: 'cornerstonetoolsmeasurementremoved', + + /** + * @type {String} + */ + TOOL_DEACTIVATED: 'cornerstonetoolstooldeactivated', + + /** + * @type {String} + */ + CLIP_STOPPED: 'cornerstonetoolsclipstopped', + + /** + * @type {String} + */ + STACK_SCROLL: 'cornerstonetoolsstackscroll', + + /** + * @type {String} + */ + STACK_PREFETCH_IMAGE_LOADED: 'cornerstonetoolsstackprefetchimageloaded', + + /** + * @type {String} + */ + STACK_PREFETCH_DONE: 'cornerstonetoolsstackprefetchdone', + + /** + * @type {String} + */ + LABELMAP_MODIFIED: 'cornersontetoolslabelmapmodified' +}; +/* harmony default export */ __webpack_exports__["default"] = (EVENTS); + +/***/ }), + +/***/ "./externalModules.js": +/*!****************************!*\ + !*** ./externalModules.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var cornerstone = window.cornerstone; +var cornerstoneMath = window.cornerstoneMath; +var Hammer = window.Hammer; +/* harmony default export */ __webpack_exports__["default"] = ({ + set cornerstone(cs) { + cornerstone = cs; + }, + + get cornerstone() { + return cornerstone; + }, + + set cornerstoneMath(cm) { + cornerstoneMath = cm; + }, + + get cornerstoneMath() { + return cornerstoneMath; + }, + + set Hammer(module) { + Hammer = module; + }, + + get Hammer() { + return Hammer; + } + +}); + +/***/ }), + +/***/ "./importInternal.js": +/*!***************************!*\ + !*** ./importInternal.js ***! + \***************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _lib_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib.js */ "./lib.js"); + +/** + * Imports functionality from cornerstoneTools for use in external packages/plugins. + * @param {string} uri the import path for the entity to import. + * @returns {Class|Object|Function} The entity requested. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (uri) { + return _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"][uri]; +}); + +/***/ }), + +/***/ "./index.js": +/*!******************!*\ + !*** ./index.js ***! + \******************/ +/*! exports provided: AngleTool, ArrowAnnotateTool, BidirectionalTool, CircleRoiTool, CobbAngleTool, EllipticalRoiTool, FreehandRoiTool, LengthTool, ProbeTool, RectangleRoiTool, TextMarkerTool, BrushTool, SphericalBrushTool, RectangleScissorsTool, FreehandScissorsTool, CircleScissorsTool, CorrectionScissorsTool, CrosshairsTool, DoubleTapFitToWindowTool, DragProbeTool, EraserTool, FreehandRoiSculptorTool, MagnifyTool, OverlayTool, OrientationMarkersTool, PanMultiTouchTool, PanTool, ReferenceLinesTool, RotateTool, RotateTouchTool, ScaleOverlayTool, StackScrollMouseWheelTool, StackScrollMultiTouchTool, StackScrollTool, WwwcRegionTool, WwwcTool, ZoomMouseWheelTool, ZoomTool, ZoomTouchPinchTool, init, stackPrefetch, stackRenderers, playClip, stopClip, store, getModule, getToolForElement, addTool, addToolForElement, removeTool, removeToolForElement, setToolOptions, setToolOptionsForElement, isToolActiveForElement, setToolActive, setToolActiveForElement, setToolEnabled, setToolEnabledForElement, setToolDisabled, setToolDisabledForElement, setToolPassive, setToolPassiveForElement, addToolState, getToolState, removeToolState, clearToolState, setElementToolStateManager, getElementToolStateManager, textStyle, toolStyle, toolColors, toolCoordinates, stackSpecificStateManager, newStackSpecificToolStateManager, addStackStateManager, loadHandlerManager, newImageIdSpecificToolStateManager, globalImageIdSpecificToolStateManager, newFrameOfReferenceSpecificToolStateManager, globalFrameOfReferenceSpecificToolStateManager, forceEnabledElementResize, orientation, SaveAs, enableLogger, disableLogger, register, registerSome, wwwcSynchronizer, updateImageSynchronizer, Synchronizer, stackScrollSynchronizer, stackImagePositionSynchronizer, stackImagePositionOffsetSynchronizer, stackImageIndexSynchronizer, panZoomSynchronizer, requestPoolManager, importInternal, external, EVENTS, version, import, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/annotation/index.js */ "./tools/annotation/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AngleTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["AngleTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ArrowAnnotateTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ArrowAnnotateTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BidirectionalTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["BidirectionalTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CircleRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CircleRoiTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CobbAngleTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CobbAngleTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EllipticalRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["EllipticalRoiTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FreehandRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["FreehandRoiTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LengthTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["LengthTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ProbeTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ProbeTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RectangleRoiTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["RectangleRoiTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TextMarkerTool", function() { return _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["TextMarkerTool"]; }); + +/* harmony import */ var _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/segmentation/index.js */ "./tools/segmentation/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BrushTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["BrushTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SphericalBrushTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["SphericalBrushTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RectangleScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["RectangleScissorsTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FreehandScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["FreehandScissorsTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CircleScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CircleScissorsTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CorrectionScissorsTool", function() { return _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CorrectionScissorsTool"]; }); + +/* harmony import */ var _tools_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/index.js */ "./tools/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CrosshairsTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["CrosshairsTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DoubleTapFitToWindowTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DoubleTapFitToWindowTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DragProbeTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DragProbeTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EraserTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["EraserTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FreehandRoiSculptorTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["FreehandRoiSculptorTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MagnifyTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["MagnifyTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "OverlayTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OverlayTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "OrientationMarkersTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OrientationMarkersTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PanMultiTouchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanMultiTouchTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PanTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReferenceLinesTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ReferenceLinesTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RotateTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RotateTouchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTouchTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ScaleOverlayTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ScaleOverlayTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StackScrollMouseWheelTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMouseWheelTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StackScrollMultiTouchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMultiTouchTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StackScrollTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WwwcRegionTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcRegionTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WwwcTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ZoomMouseWheelTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomMouseWheelTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ZoomTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ZoomTouchPinchTool", function() { return _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTouchPinchTool"]; }); + +/* harmony import */ var _init_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./init.js */ "./init.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "init", function() { return _init_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _stackTools_stackPrefetch_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stackTools/stackPrefetch.js */ "./stackTools/stackPrefetch.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackPrefetch", function() { return _stackTools_stackPrefetch_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _stackTools_stackRenderers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stackTools/stackRenderers.js */ "./stackTools/stackRenderers.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackRenderers", function() { return _stackTools_stackRenderers_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stackTools/playClip.js */ "./stackTools/playClip.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "playClip", function() { return _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["playClip"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stopClip", function() { return _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["stopClip"]; }); + +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./store/index.js */ "./store/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "store", function() { return _store_index_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getModule", function() { return _store_index_js__WEBPACK_IMPORTED_MODULE_7__["getModule"]; }); + +/* harmony import */ var _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./store/getToolForElement.js */ "./store/getToolForElement.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getToolForElement", function() { return _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./store/addTool.js */ "./store/addTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addTool", function() { return _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToolForElement", function() { return _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addToolForElement"]; }); + +/* harmony import */ var _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./store/removeTool.js */ "./store/removeTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeTool", function() { return _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeTool"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeToolForElement", function() { return _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeToolForElement"]; }); + +/* harmony import */ var _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./store/setToolOptions.js */ "./store/setToolOptions.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolOptions", function() { return _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptions"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolOptionsForElement", function() { return _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptionsForElement"]; }); + +/* harmony import */ var _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./store/setToolMode.js */ "./store/setToolMode.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolActive", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolActiveForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActiveForElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolEnabled", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabled"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolEnabledForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabledForElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolDisabled", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabled"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolDisabledForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabledForElement"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolPassive", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassive"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setToolPassiveForElement", function() { return _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassiveForElement"]; }); + +/* harmony import */ var _store_isToolActiveForElement__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./store/isToolActiveForElement */ "./store/isToolActiveForElement.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isToolActiveForElement", function() { return _store_isToolActiveForElement__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["addToolState"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getToolState"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["removeToolState"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "clearToolState", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["clearToolState"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElementToolStateManager", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["setElementToolStateManager"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElementToolStateManager", function() { return _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getElementToolStateManager"]; }); + +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "textStyle", function() { return _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toolStyle", function() { return _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toolColors", function() { return _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony import */ var _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./stateManagement/toolCoordinates.js */ "./stateManagement/toolCoordinates.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toolCoordinates", function() { return _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./stateManagement/stackSpecificStateManager.js */ "./stateManagement/stackSpecificStateManager.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackSpecificStateManager", function() { return _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["stackSpecificStateManager"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "newStackSpecificToolStateManager", function() { return _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["newStackSpecificToolStateManager"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addStackStateManager", function() { return _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["addStackStateManager"]; }); + +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "loadHandlerManager", function() { return _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony import */ var _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./stateManagement/imageIdSpecificStateManager.js */ "./stateManagement/imageIdSpecificStateManager.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "newImageIdSpecificToolStateManager", function() { return _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["newImageIdSpecificToolStateManager"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "globalImageIdSpecificToolStateManager", function() { return _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["globalImageIdSpecificToolStateManager"]; }); + +/* harmony import */ var _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./stateManagement/frameOfReferenceStateManager.js */ "./stateManagement/frameOfReferenceStateManager.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "newFrameOfReferenceSpecificToolStateManager", function() { return _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["newFrameOfReferenceSpecificToolStateManager"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "globalFrameOfReferenceSpecificToolStateManager", function() { return _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["globalFrameOfReferenceSpecificToolStateManager"]; }); + +/* harmony import */ var _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./eventListeners/windowResizeHandler.js */ "./eventListeners/windowResizeHandler.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forceEnabledElementResize", function() { return _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_23__["forceEnabledElementResize"]; }); + +/* harmony import */ var _orientation_index_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./orientation/index.js */ "./orientation/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "orientation", function() { return _orientation_index_js__WEBPACK_IMPORTED_MODULE_24__["default"]; }); + +/* harmony import */ var _util_SaveAs_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./util/SaveAs.js */ "./util/SaveAs.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SaveAs", function() { return _util_SaveAs_js__WEBPACK_IMPORTED_MODULE_25__["default"]; }); + +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./util/logger.js */ "./util/logger.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "enableLogger", function() { return _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["enable"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "disableLogger", function() { return _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["disable"]; }); + +/* harmony import */ var _thirdParty_register_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./thirdParty/register.js */ "./thirdParty/register.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "register", function() { return _thirdParty_register_js__WEBPACK_IMPORTED_MODULE_27__["default"]; }); + +/* harmony import */ var _thirdParty_registerSome_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./thirdParty/registerSome.js */ "./thirdParty/registerSome.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerSome", function() { return _thirdParty_registerSome_js__WEBPACK_IMPORTED_MODULE_28__["default"]; }); + +/* harmony import */ var _synchronization_wwwcSynchronizer_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./synchronization/wwwcSynchronizer.js */ "./synchronization/wwwcSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "wwwcSynchronizer", function() { return _synchronization_wwwcSynchronizer_js__WEBPACK_IMPORTED_MODULE_29__["default"]; }); + +/* harmony import */ var _synchronization_updateImageSynchronizer_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./synchronization/updateImageSynchronizer.js */ "./synchronization/updateImageSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "updateImageSynchronizer", function() { return _synchronization_updateImageSynchronizer_js__WEBPACK_IMPORTED_MODULE_30__["default"]; }); + +/* harmony import */ var _synchronization_Synchronizer_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./synchronization/Synchronizer.js */ "./synchronization/Synchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Synchronizer", function() { return _synchronization_Synchronizer_js__WEBPACK_IMPORTED_MODULE_31__["default"]; }); + +/* harmony import */ var _synchronization_stackScrollSynchronizer_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./synchronization/stackScrollSynchronizer.js */ "./synchronization/stackScrollSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackScrollSynchronizer", function() { return _synchronization_stackScrollSynchronizer_js__WEBPACK_IMPORTED_MODULE_32__["default"]; }); + +/* harmony import */ var _synchronization_stackImagePositionSynchronizer_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./synchronization/stackImagePositionSynchronizer.js */ "./synchronization/stackImagePositionSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackImagePositionSynchronizer", function() { return _synchronization_stackImagePositionSynchronizer_js__WEBPACK_IMPORTED_MODULE_33__["default"]; }); + +/* harmony import */ var _synchronization_stackImagePositionOffsetSynchronizer_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./synchronization/stackImagePositionOffsetSynchronizer.js */ "./synchronization/stackImagePositionOffsetSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackImagePositionOffsetSynchronizer", function() { return _synchronization_stackImagePositionOffsetSynchronizer_js__WEBPACK_IMPORTED_MODULE_34__["default"]; }); + +/* harmony import */ var _synchronization_stackImageIndexSynchronizer_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./synchronization/stackImageIndexSynchronizer.js */ "./synchronization/stackImageIndexSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "stackImageIndexSynchronizer", function() { return _synchronization_stackImageIndexSynchronizer_js__WEBPACK_IMPORTED_MODULE_35__["default"]; }); + +/* harmony import */ var _synchronization_panZoomSynchronizer_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./synchronization/panZoomSynchronizer.js */ "./synchronization/panZoomSynchronizer.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "panZoomSynchronizer", function() { return _synchronization_panZoomSynchronizer_js__WEBPACK_IMPORTED_MODULE_36__["default"]; }); + +/* harmony import */ var _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./requestPool/requestPoolManager.js */ "./requestPool/requestPoolManager.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "requestPoolManager", function() { return _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_37__["default"]; }); + +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./externalModules.js */ "./externalModules.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "external", function() { return _externalModules_js__WEBPACK_IMPORTED_MODULE_38__["default"]; }); + +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./events.js */ "./events.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EVENTS", function() { return _events_js__WEBPACK_IMPORTED_MODULE_39__["default"]; }); + +/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./version.js */ "./version.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "version", function() { return _version_js__WEBPACK_IMPORTED_MODULE_40__["default"]; }); + +/* harmony import */ var _importInternal_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./importInternal.js */ "./importInternal.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "importInternal", function() { return _importInternal_js__WEBPACK_IMPORTED_MODULE_41__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "import", function() { return _importInternal_js__WEBPACK_IMPORTED_MODULE_41__["default"]; }); + +/** + * Root + * @namespace CornerstoneTools + */ + +/** + * Drawing API to assist in consistent annotation creation + * @namespace Drawing + */ + +/** + * Event dispatchers listen for events from `cornerstone` and `enabledElements`. Dispatchers + * choose which tool(s) get to handle the event by looking at callbacks, priority, and other factors. + * @private + * @namespace EventDispatchers + */ + +/** + * Event listeners normalize events emitted by `cornerstone` and `enabledElements`. The listeners + * then re-emit events prefixed with `cornerstonetools`. For example, `mousemove` becomes `cornerstonetoolsmousemove`. + * Most of these events are caught by an `eventDispatcher`, and used to shape tool behavior. + * @private + * @namespace EventListeners + */ + +/** + * Manipulators describe a tool's `handle` behavior. Leveraging a small set of manipulators + * allows us to create a consistent experience when interacting with tools via their handles. + * @namespace Manipulators + */ + +/** + * Mixins are "tool beahviors" that can be added to a tool via its mixin + * array configuration property + * @namespace Mixins + */ + +/** + * StateManagement + * @namespace StateManagement + */ + +/** + * Sync + * @namespace Synchronization + */ + +/** + * Third party + * @namespace ThirdParty + */ + +/** + * Tools + * @namespace Tools + */ + +/** + * Tools that extend the {@link #Tools.Base.BaseAnnotationTool|`BaseAnnotationTool`} + * @namespace Tools.Annotation + */ + +/** + * The parent (abstract) classes that all tools derive from. + * @namespace Tools.Base + */ + +/** + * Tools that extend the {@link #Tools.Base.BaseBrushTool|`BaseBrushTool`} + * @namespace Tools.Brush + */ + +/** + * Util + * @namespace Util + */ + + + + // ~~~~~~ STACK TOOLS ~~~~~ // + + + + // ~~~~~~ STATE MANAGEMENT ~~~~~ // + + + + + + + + + + + + + + + + + + + // ~~~~~~ ORIENTATION ~~~~~ // + + // ~~~~~~ CANVAS EXPORT ~~~~~ // + + + // ~~~~~~ THIRD PARTY SUPPORT ~~~~~ // + + + // ~~~~~~ SYNCHRONIZERS ~~~~~ // + + + + + + + + + // ~~~~~~ REQUEST POOL MANAGER ~~~~~ // + + + + + + +var cornerstoneTools = { + // ~~~ TOOLS + // ~ Annotation Tools + AngleTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["AngleTool"], + ArrowAnnotateTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ArrowAnnotateTool"], + BidirectionalTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["BidirectionalTool"], + CircleRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CircleRoiTool"], + CobbAngleTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["CobbAngleTool"], + EllipticalRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["EllipticalRoiTool"], + FreehandRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["FreehandRoiTool"], + LengthTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["LengthTool"], + ProbeTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["ProbeTool"], + RectangleRoiTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["RectangleRoiTool"], + TextMarkerTool: _tools_annotation_index_js__WEBPACK_IMPORTED_MODULE_0__["TextMarkerTool"], + // ~ Segmentation Tools + BrushTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["BrushTool"], + SphericalBrushTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["SphericalBrushTool"], + RectangleScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["RectangleScissorsTool"], + FreehandScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["FreehandScissorsTool"], + CircleScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CircleScissorsTool"], + CorrectionScissorsTool: _tools_segmentation_index_js__WEBPACK_IMPORTED_MODULE_1__["CorrectionScissorsTool"], + // ~ Tools + CrosshairsTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["CrosshairsTool"], + DoubleTapFitToWindowTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DoubleTapFitToWindowTool"], + DragProbeTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["DragProbeTool"], + EraserTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["EraserTool"], + FreehandRoiSculptorTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["FreehandRoiSculptorTool"], + MagnifyTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["MagnifyTool"], + OverlayTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OverlayTool"], + OrientationMarkersTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["OrientationMarkersTool"], + PanMultiTouchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanMultiTouchTool"], + PanTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["PanTool"], + ReferenceLinesTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ReferenceLinesTool"], + RotateTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTool"], + RotateTouchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["RotateTouchTool"], + ScaleOverlayTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ScaleOverlayTool"], + StackScrollMouseWheelTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMouseWheelTool"], + StackScrollMultiTouchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollMultiTouchTool"], + StackScrollTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["StackScrollTool"], + WwwcRegionTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcRegionTool"], + WwwcTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["WwwcTool"], + ZoomMouseWheelTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomMouseWheelTool"], + ZoomTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTool"], + ZoomTouchPinchTool: _tools_index_js__WEBPACK_IMPORTED_MODULE_2__["ZoomTouchPinchTool"], + init: _init_js__WEBPACK_IMPORTED_MODULE_3__["default"], + stackPrefetch: _stackTools_stackPrefetch_js__WEBPACK_IMPORTED_MODULE_4__["default"], + stackRenderers: _stackTools_stackRenderers_js__WEBPACK_IMPORTED_MODULE_5__["default"], + playClip: _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["playClip"], + stopClip: _stackTools_playClip_js__WEBPACK_IMPORTED_MODULE_6__["stopClip"], + store: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["default"], + getModule: _store_index_js__WEBPACK_IMPORTED_MODULE_7__["getModule"], + getToolForElement: _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_8__["default"], + addTool: _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addTool"], + addToolForElement: _store_addTool_js__WEBPACK_IMPORTED_MODULE_9__["addToolForElement"], + removeTool: _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeTool"], + removeToolForElement: _store_removeTool_js__WEBPACK_IMPORTED_MODULE_10__["removeToolForElement"], + setToolOptions: _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptions"], + setToolOptionsForElement: _store_setToolOptions_js__WEBPACK_IMPORTED_MODULE_11__["setToolOptionsForElement"], + isToolActiveForElement: _store_isToolActiveForElement__WEBPACK_IMPORTED_MODULE_13__["default"], + setToolActive: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActive"], + setToolActiveForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolActiveForElement"], + setToolEnabled: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabled"], + setToolEnabledForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolEnabledForElement"], + setToolDisabled: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabled"], + setToolDisabledForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolDisabledForElement"], + setToolPassive: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassive"], + setToolPassiveForElement: _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_12__["setToolPassiveForElement"], + addToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["addToolState"], + getToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getToolState"], + removeToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["removeToolState"], + clearToolState: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["clearToolState"], + setElementToolStateManager: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["setElementToolStateManager"], + getElementToolStateManager: _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_14__["getElementToolStateManager"], + textStyle: _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_15__["default"], + toolStyle: _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_16__["default"], + toolColors: _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_17__["default"], + toolCoordinates: _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_18__["default"], + stackSpecificStateManager: _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["stackSpecificStateManager"], + newStackSpecificToolStateManager: _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["newStackSpecificToolStateManager"], + addStackStateManager: _stateManagement_stackSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_19__["addStackStateManager"], + loadHandlerManager: _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_20__["default"], + newImageIdSpecificToolStateManager: _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["newImageIdSpecificToolStateManager"], + globalImageIdSpecificToolStateManager: _stateManagement_imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_21__["globalImageIdSpecificToolStateManager"], + newFrameOfReferenceSpecificToolStateManager: _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["newFrameOfReferenceSpecificToolStateManager"], + globalFrameOfReferenceSpecificToolStateManager: _stateManagement_frameOfReferenceStateManager_js__WEBPACK_IMPORTED_MODULE_22__["globalFrameOfReferenceSpecificToolStateManager"], + forceEnabledElementResize: _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_23__["forceEnabledElementResize"], + orientation: _orientation_index_js__WEBPACK_IMPORTED_MODULE_24__["default"], + SaveAs: _util_SaveAs_js__WEBPACK_IMPORTED_MODULE_25__["default"], + enableLogger: _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["enable"], + disableLogger: _util_logger_js__WEBPACK_IMPORTED_MODULE_26__["disable"], + importInternal: _importInternal_js__WEBPACK_IMPORTED_MODULE_41__["default"], + import: _importInternal_js__WEBPACK_IMPORTED_MODULE_41__["default"], + register: _thirdParty_register_js__WEBPACK_IMPORTED_MODULE_27__["default"], + registerSome: _thirdParty_registerSome_js__WEBPACK_IMPORTED_MODULE_28__["default"], + wwwcSynchronizer: _synchronization_wwwcSynchronizer_js__WEBPACK_IMPORTED_MODULE_29__["default"], + updateImageSynchronizer: _synchronization_updateImageSynchronizer_js__WEBPACK_IMPORTED_MODULE_30__["default"], + Synchronizer: _synchronization_Synchronizer_js__WEBPACK_IMPORTED_MODULE_31__["default"], + stackScrollSynchronizer: _synchronization_stackScrollSynchronizer_js__WEBPACK_IMPORTED_MODULE_32__["default"], + stackImagePositionSynchronizer: _synchronization_stackImagePositionSynchronizer_js__WEBPACK_IMPORTED_MODULE_33__["default"], + stackImagePositionOffsetSynchronizer: _synchronization_stackImagePositionOffsetSynchronizer_js__WEBPACK_IMPORTED_MODULE_34__["default"], + stackImageIndexSynchronizer: _synchronization_stackImageIndexSynchronizer_js__WEBPACK_IMPORTED_MODULE_35__["default"], + panZoomSynchronizer: _synchronization_panZoomSynchronizer_js__WEBPACK_IMPORTED_MODULE_36__["default"], + requestPoolManager: _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_37__["default"], + external: _externalModules_js__WEBPACK_IMPORTED_MODULE_38__["default"], + EVENTS: _events_js__WEBPACK_IMPORTED_MODULE_39__["default"], + version: _version_js__WEBPACK_IMPORTED_MODULE_40__["default"] +}; // Named Exports + + + +/* harmony default export */ __webpack_exports__["default"] = (cornerstoneTools); + +/***/ }), + +/***/ "./init.js": +/*!*****************!*\ + !*** ./init.js ***! + \*****************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./store/index.js */ "./store/index.js"); +/* harmony import */ var _store_internals_addEnabledElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./store/internals/addEnabledElement.js */ "./store/internals/addEnabledElement.js"); +/* harmony import */ var _store_internals_removeEnabledElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store/internals/removeEnabledElement.js */ "./store/internals/removeEnabledElement.js"); +/* harmony import */ var _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./eventListeners/windowResizeHandler.js */ "./eventListeners/windowResizeHandler.js"); + + + + + +/** + * Merges the provided configuration with default values and returns a + * configured CornerstoneTools instance. + * @export + * @public + * @method + * @name init + * + * @param {Object|Object[]} [defaultConfiguration = {}] The configuration to apply. Assumed globalConfiguration + * only one value, otherwise moduleName, configuration entires in an array. + * @returns {Object} A configured CornerstoneTools instance with top level API members. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function () { + var defaultConfiguration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _addCornerstoneEventListeners(); + + _initModules(); + + var globalConfigurationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('globalConfiguration'); + + if (Array.isArray(defaultConfiguration)) { + defaultConfiguration.forEach(function (configurationEntry) { + var moduleName = configurationEntry.moduleName, + configuration = configurationEntry.configuration; + var module = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])(moduleName); + + if (module) { + module.configuration = Object.assign({}, module.configuration, configuration); + } + }); + } else { + // defaultConfiguration is an object, default to assigning it to globalConfiguration. + globalConfigurationModule.configuration = Object.assign({}, globalConfigurationModule.configuration, defaultConfiguration); + } + + if (globalConfigurationModule.configuration.autoResizeViewports) { + _eventListeners_windowResizeHandler_js__WEBPACK_IMPORTED_MODULE_4__["default"].enable(); + } +}); +/** + * Wires up event listeners for the Cornerstone#ElementDisabled and + * Cornerstone#ElementEnabled events. + * @private + * @method + * @returns {void} + */ + +function _addCornerstoneEventListeners() { + // Clear any listeners that may already be set + _removeCornerstoneEventListeners(); + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var elementEnabledEvent = cornerstone.EVENTS.ELEMENT_ENABLED; + var elementDisabledEvent = cornerstone.EVENTS.ELEMENT_DISABLED; + cornerstone.events.addEventListener(elementEnabledEvent, _store_internals_addEnabledElement_js__WEBPACK_IMPORTED_MODULE_2__["default"]); + cornerstone.events.addEventListener(elementDisabledEvent, _store_internals_removeEnabledElement_js__WEBPACK_IMPORTED_MODULE_3__["default"]); +} +/** + * Removes event listeners for the Cornerstone#ElementDisabled and + * Cornerstone#ElementEnabled events. + * @private + * @method + * @returns {void} + */ + + +function _removeCornerstoneEventListeners() { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var elementEnabledEvent = cornerstone.EVENTS.ELEMENT_ENABLED; + var elementDisabledEvent = cornerstone.EVENTS.ELEMENT_DISABLED; + cornerstone.events.removeEventListener(elementEnabledEvent, _store_internals_addEnabledElement_js__WEBPACK_IMPORTED_MODULE_2__["default"]); + cornerstone.events.removeEventListener(elementDisabledEvent, _store_internals_removeEnabledElement_js__WEBPACK_IMPORTED_MODULE_3__["default"]); +} +/* + * TODO: This could cause issues if the module was already initialized for + * the store. As there's nothing stopping implementers from calling `init` + * multiple times. Modules should self-check if they have already been + * registered to prevent issues. + */ + +/** + * Iterate over our store's modules. If the module has an `onRegisterCallback` + * call it. This hook can be used to setup any global store requirements per + * module. + * @private + * @method + * @returns {void} + */ + + +function _initModules() { + var modules = _store_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].modules; + Object.keys(modules).forEach(function (key) { + if (typeof modules[key].onRegisterCallback === 'function') { + modules[key].onRegisterCallback(); + } + }); +} + +/***/ }), + +/***/ "./lib.js": +/*!****************!*\ + !*** ./lib.js ***! + \****************/ +/*! exports provided: lib */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lib", function() { return lib; }); +/* harmony import */ var _tools_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/base/BaseBrushTool.js */ "./tools/base/BaseBrushTool.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js"); +/* harmony import */ var _mixins_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mixins/index.js */ "./mixins/index.js"); +/* harmony import */ var _tools_cursors_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util/clip.js */ "./util/clip.js"); +/* harmony import */ var _util_debounce__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util/debounce */ "./util/debounce.js"); +/* harmony import */ var _util_deepmerge__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./util/deepmerge */ "./util/deepmerge.js"); +/* harmony import */ var _util_getDefault__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./util/getDefault */ "./util/getDefault.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./util/getPixelSpacing */ "./util/getPixelSpacing.js"); +/* harmony import */ var _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./util/isEmptyObject */ "./util/isEmptyObject.js"); +/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./util/isObject */ "./util/isObject.js"); +/* harmony import */ var _util_isPointInImage__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util/isPointInImage */ "./util/isPointInImage.js"); +/* harmony import */ var _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./util/isPointInPolygon */ "./util/isPointInPolygon.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./util/throttle */ "./util/throttle.js"); +/* harmony import */ var _util_wait__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./util/wait */ "./util/wait.js"); +/* harmony import */ var _util_getKeyPressData__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./util/getKeyPressData */ "./util/getKeyPressData.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./drawing/drawArrow.js */ "./drawing/drawArrow.js"); +/* harmony import */ var _drawing_drawLink_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./drawing/drawLink.js */ "./drawing/drawLink.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _util_getLuminance_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./util/getLuminance.js */ "./util/getLuminance.js"); +/* harmony import */ var _util_getROITextBoxCoords__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./util/getROITextBoxCoords */ "./util/getROITextBoxCoords.js"); +/* harmony import */ var _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./util/copyPoints.js */ "./util/copyPoints.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _util_setContextToDisplayFontSize_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./util/setContextToDisplayFontSize.js */ "./util/setContextToDisplayFontSize.js"); +/* harmony import */ var _util_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./util/scrollToIndex.js */ "./util/scrollToIndex.js"); +/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./util/scroll.js */ "./util/scroll.js"); +/* harmony import */ var _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./util/roundToDecimal.js */ "./util/roundToDecimal.js"); +/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./util/pointProjector.js */ "./util/pointProjector.js"); +/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./util/lineSegDistance.js */ "./util/lineSegDistance.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./util/logger */ "./util/logger.js"); +/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js"); +/* harmony import */ var _util_makeUnselectable_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./util/makeUnselectable.js */ "./util/makeUnselectable.js"); +/* harmony import */ var _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./util/getRGBPixels.js */ "./util/getRGBPixels.js"); +/* harmony import */ var _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util/getMaxSimultaneousRequests.js */ "./util/getMaxSimultaneousRequests.js"); +/* harmony import */ var _util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./util/angleBetweenPoints.js */ "./util/angleBetweenPoints.js"); +/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./util/numbersWithCommas.js */ "./util/numbersWithCommas.js"); +/* harmony import */ var _tools_cursors_MouseCursor_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./tools/cursors/MouseCursor.js */ "./tools/cursors/MouseCursor.js"); +/* harmony import */ var _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./util/ellipse/index.js */ "./util/ellipse/index.js"); +/* harmony import */ var _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./util/freehand/index.js */ "./util/freehand/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./util/zoom/index.js */ "./util/zoom/index.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./util/convertToVector3.js */ "./util/convertToVector3.js"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +var lib = { + 'base/BaseTool': _tools_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_0__["default"], + 'base/BaseAnnotationTool': _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_1__["default"], + 'base/BaseBrushTool': _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__["default"], + 'tools/cursors/MouseCursor': _tools_cursors_MouseCursor_js__WEBPACK_IMPORTED_MODULE_42__["default"], + 'tools/cursors': _tools_cursors_index_js__WEBPACK_IMPORTED_MODULE_6__, + 'manipulators/anyHandlesOutsideImage': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["anyHandlesOutsideImage"], + 'manipulators/getHandleNearImagePoint': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["getHandleNearImagePoint"], + 'manipulators/handleActivator': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["handleActivator"], + 'manipulators/moveAllHandles': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveAllHandles"], + 'manipulators/moveHandle': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveHandle"], + 'manipulators/moveNewHandle': _manipulators_index_js__WEBPACK_IMPORTED_MODULE_3__["moveNewHandle"], + 'manipulators/moveHandleNearImagePoint': _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__["moveHandleNearImagePoint"], + 'manipulators/findHandleDataNearImagePoint': _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__["findHandleDataNearImagePoint"], + 'manipulators/moveAnnotation': _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_4__["moveAnnotation"], + 'mixins/activeOrDisabledBinaryTool': _mixins_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].activeOrDisabledBinaryTool, + 'mixins/enabledOrDisabledBinaryTool': _mixins_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].enabledOrDisabledBinaryTool, + 'drawing/getNewContext': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"], + 'drawing/draw': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["draw"], + 'drawing/path': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["path"], + 'drawing/setShadow': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["setShadow"], + 'drawing/drawLine': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"], + 'drawing/drawLines': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLines"], + 'drawing/drawJoinedLines': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawJoinedLines"], + 'drawing/drawCircle': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawCircle"], + 'drawing/drawEllipse': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawEllipse"], + 'drawing/drawRect': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawRect"], + 'drawing/fillOutsideRect': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["fillOutsideRect"], + 'drawing/drawTextBox': _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__["default"], + 'drawing/drawArrow': _drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_21__["default"], + 'drawing/fillBox': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["fillBox"], + 'drawing/fillTextLines': _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["fillTextLines"], + 'drawing/drawLink': _drawing_drawLink_js__WEBPACK_IMPORTED_MODULE_22__["default"], + 'drawing/drawLinkedTextBox': _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_23__["default"], + 'drawing/drawHandles': _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_24__["default"], + 'drawing/textBoxWidth': _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__["textBoxWidth"], + 'util/getLuminance': _util_getLuminance_js__WEBPACK_IMPORTED_MODULE_25__["default"], + 'util/getROITextBoxCoords': _util_getROITextBoxCoords__WEBPACK_IMPORTED_MODULE_26__["default"], + 'util/copyPoints': _util_copyPoints_js__WEBPACK_IMPORTED_MODULE_27__["default"], + 'util/calculateSUV': _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_28__["default"], + 'util/setContextToDisplayFontSize': _util_setContextToDisplayFontSize_js__WEBPACK_IMPORTED_MODULE_29__["default"], + 'util/scrollToIndex': _util_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_30__["default"], + 'util/scroll': _util_scroll_js__WEBPACK_IMPORTED_MODULE_31__["default"], + 'util/roundToDecimal': _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_32__["default"], + 'util/projectPatientPointToImagePlane': _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_33__["projectPatientPointToImagePlane"], + 'util/imagePointToPatientPoint': _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_33__["imagePointToPatientPoint"], + 'util/planePlaneIntersection': _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_33__["planePlaneIntersection"], + 'util/pointInsideBoundingBox': _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_36__["default"], + 'util/makeUnselectable': _util_makeUnselectable_js__WEBPACK_IMPORTED_MODULE_37__["default"], + 'util/getRGBPixels': _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_38__["default"], + 'util/getDefaultSimultaneousRequests': _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_39__["getDefaultSimultaneousRequests"], + 'util/getMaxSimultaneousRequests': _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_39__["getMaxSimultaneousRequests"], + 'util/getBrowserInfo': _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_39__["getBrowserInfo"], + 'util/isMobileDevice': _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_39__["isMobileDevice"], + 'util/angleBetweenPoints': _util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_40__["default"], + 'util/numbersWithCommas': _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_41__["default"], + 'util/lineSegDistance': _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_34__["default"], + 'util/triggerEvent': _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_47__["default"], + 'util/convertToVector3': _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_48__["default"], + 'util/clip': _util_clip_js__WEBPACK_IMPORTED_MODULE_8__["clip"], + 'util/clipToBox': _util_clip_js__WEBPACK_IMPORTED_MODULE_8__["clipToBox"], + 'util/debounce': _util_debounce__WEBPACK_IMPORTED_MODULE_9__["default"], + 'util/deepmerge': _util_deepmerge__WEBPACK_IMPORTED_MODULE_10__["default"], + 'util/getDefault': _util_getDefault__WEBPACK_IMPORTED_MODULE_11__["default"], + 'util/getPixelSpacing': _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_12__["default"], + 'util/isEmptyObject': _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_13__["default"], + 'util/isObject': _util_isObject__WEBPACK_IMPORTED_MODULE_14__["default"], + 'util/isPointInImage': _util_isPointInImage__WEBPACK_IMPORTED_MODULE_15__["default"], + 'util/isPointInPolygon': _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_16__["default"], + 'util/getLogger': _util_logger__WEBPACK_IMPORTED_MODULE_35__["getLogger"], + 'util/throttle': _util_throttle__WEBPACK_IMPORTED_MODULE_17__["default"], + 'util/wait': _util_wait__WEBPACK_IMPORTED_MODULE_18__["wait"], + 'util/waitForEnabledElementImageToLoad': _util_wait__WEBPACK_IMPORTED_MODULE_18__["waitForEnabledElementImageToLoad"], + 'util/getKeyPressData': _util_getKeyPressData__WEBPACK_IMPORTED_MODULE_19__["default"], + // Whole tool specific util packages + 'util/ellipseUtils': _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_43__["default"], + 'util/freehandUtils': _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_44__["default"], + 'util/segmentationUtils': _util_segmentation__WEBPACK_IMPORTED_MODULE_45__, + 'util/zoomUtils': _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_46__["default"] +}; + +/***/ }), + +/***/ "./manipulators/anyHandlesOutsideImage.js": +/*!************************************************!*\ + !*** ./manipulators/anyHandlesOutsideImage.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Determine if a handle is outside the bounds of the rendered image. + * @public + * @function anyHandlesOutsideImage + * @memberof Manipulators + * + * @param {*} renderData - Cornerstone Tool's event detail + * @param {Object} handles - An object containing named handles + * @returns {Boolean} - True if the handle was placed outside the image + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (renderData, handles) { + var image = renderData.image; + var imageRect = { + left: 0, + top: 0, + width: image.width, + height: image.height + }; + var handleOutsideImage = false; + Object.keys(handles).forEach(function (name) { + var handle = handles[name]; + + if (handle.allowedOutsideImage === true) { + return; + } + + if (_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.insideRect(handle, imageRect) === false) { + handleOutsideImage = true; + } + }); + return handleOutsideImage; +}); + +/***/ }), + +/***/ "./manipulators/getHandleNearImagePoint.js": +/*!*************************************************!*\ + !*** ./manipulators/getHandleNearImagePoint.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js"); + + + +/** + * Returns the first handle found to be near the provided point. Handles to search can be an array of handles, an + * object of named handles, or an object of named handles AND named arrays of handles. + * + * @public + * @function getHandleNearImagePoint + * @memberof Manipulators + * + * @param {*} element - Target enabledElement + * @param {(Array|Object)} handles - An arry of handles, object with named handles, or object with named handles AND named arrays of handles + * @param {Object} coords - The coordinates to measure from when determining distance from handles + * @param {number} distanceThreshold - minimum distance handle needs to be from provided coords + * @returns {Object} Handle + */ + +var getHandleNearImagePoint = function getHandleNearImagePoint(element, handles, coords, distanceThreshold) { + var nearbyHandle; + + if (!handles) { + return; + } + + if (Array.isArray(handles)) { + var handleKeys = Object.keys(handles); + + for (var i = 0; i < handleKeys.length; i++) { + var key = handleKeys[i]; + var handle = handles[key]; + + if ( // Not a true handle + !handle.hasOwnProperty('x') || !handle.hasOwnProperty('y')) { + continue; + } + + if (_isHandleNearImagePoint(handle, element, coords, distanceThreshold)) { + nearbyHandle = handle; + break; + } + } + } else if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(handles) === 'object') { + var _handleKeys = Object.keys(handles); + + for (var _i = 0; _i < _handleKeys.length; _i++) { + var handleName = _handleKeys[_i]; + + if (Array.isArray(handles[handleName])) { + nearbyHandle = getHandleNearImagePoint(element, handles[handleName], coords, distanceThreshold); + + if (nearbyHandle) { + break; + } + } else { + var _handle = handles[handleName]; + + if (_isHandleNearImagePoint(_handle, element, coords, distanceThreshold)) { + nearbyHandle = _handle; + break; + } + } + } + } + + return nearbyHandle; +}; +/** + * Determines if the handle is less than the provided distance from the provided coordinates + * @private + * @function _isHandleNearImagePoint + * + * @param {*} handle + * @param {*} element + * @param {*} coords + * @param {*} distanceThreshold + * @returns {boolean} true if handles is near image point + */ + + +var _isHandleNearImagePoint = function _isHandleNearImagePoint(handle, element, coords, distanceThreshold) { + if (handle.hasOwnProperty('pointNearHandle')) { + if (handle.pointNearHandle(element, handle, coords)) { + return true; + } + } else if (handle.hasBoundingBox === true) { + if (Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__["default"])(handle, coords)) { + return true; + } + } else { + var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, handle); + var distance = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.distance(handleCanvas, coords); + + if (distance <= distanceThreshold) { + return true; + } + } + + return false; +}; + +/* harmony default export */ __webpack_exports__["default"] = (getHandleNearImagePoint); + +/***/ }), + +/***/ "./manipulators/handleActivator.js": +/*!*****************************************!*\ + !*** ./manipulators/handleActivator.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); + +/** + * Update the active handle + * @public + * @function handleActivator + * @memberof Manipulators + * + * @param {*} element + * @param {*} handles + * @param {*} canvasPoint + * @param {*} distanceThreshold + * @returns {Boolean} - True if a handle was activated + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, handles, canvasPoint, distanceThreshold) { + if (!distanceThreshold) { + distanceThreshold = 6; + } + + var activeHandle = _getActiveHandle(handles); + + var nearbyHandle = Object(_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, handles, canvasPoint, distanceThreshold); + + if (activeHandle !== nearbyHandle) { + if (nearbyHandle !== undefined) { + nearbyHandle.active = true; + } + + if (activeHandle !== undefined) { + activeHandle.active = false; + } + + return true; + } + + return false; +}); +/** + * + * @private + * + * @param {*} handles + * @returns {Object} - Activated Handle + */ + +function _getActiveHandle(handles) { + var activeHandle; + Object.keys(handles).forEach(function (name) { + var handle = handles[name]; + + if (handle.active === true) { + activeHandle = handle; + return; + } + }); + return activeHandle; +} + +/***/ }), + +/***/ "./manipulators/index.js": +/*!*******************************!*\ + !*** ./manipulators/index.js ***! + \*******************************/ +/*! exports provided: anyHandlesOutsideImage, getHandleNearImagePoint, handleActivator, moveAllHandles, moveHandle, moveNewHandle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "anyHandlesOutsideImage", function() { return _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getHandleNearImagePoint", function() { return _getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _handleActivator_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./handleActivator.js */ "./manipulators/handleActivator.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "handleActivator", function() { return _handleActivator_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _moveAllHandles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./moveAllHandles.js */ "./manipulators/moveAllHandles.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "moveAllHandles", function() { return _moveAllHandles_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _moveHandle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./moveHandle.js */ "./manipulators/moveHandle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "moveHandle", function() { return _moveHandle_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _moveNewHandle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./moveNewHandle.js */ "./manipulators/moveNewHandle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "moveNewHandle", function() { return _moveNewHandle_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + + + + + + + + + +/***/ }), + +/***/ "./manipulators/moveAllHandles.js": +/*!****************************************!*\ + !*** ./manipulators/moveAllHandles.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/getActiveTool */ "./util/getActiveTool.js"); +/* harmony import */ var _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../tools/base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('manipulators:moveAllHandles'); +var _dragEvents = { + mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG], + touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG] +}; +var _upOrEndEvents = { + mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK], + touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP] +}; +/** + * Manipulator to move all provided handles at the same time + * @public + * @function moveAllHandles + * @memberof Manipulators + * + * @param {*} evtDetail + * @param {*} evtDetail.element + * @param {String} toolName + * @param {*} annotation + * @param {*} [handle=null] - not needed by moveAllHandles, but keeps call signature the same as `moveHandle` + * @param {Object} [options={}] + * @param {Boolean} [options.deleteIfHandleOutsideImage] + * @param {Boolean} [options.preventHandleOutsideImage] + * @param {string} [interactionType=mouse] + * @param {function} [doneMovingCallback] + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (_ref, toolName, annotation, handle) { + var element = _ref.element; + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var interactionType = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'mouse'; + var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined; + // Use global defaults, unless overidden by provided options + options = Object.assign({ + deleteIfHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].deleteIfHandleOutsideImage, + preventHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].preventHandleOutsideImage + }, options); + + var dragHandler = _dragHandler.bind(this, toolName, annotation, options, interactionType); // So we don't need to inline the entire `upOrEndHandler` function + + + var upOrEndHandler = function upOrEndHandler(evt) { + _upOrEndHandler(toolName, annotation, options, interactionType, { + dragHandler: dragHandler, + upOrEndHandler: upOrEndHandler + }, evt, doneMovingCallback); + }; + + annotation.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = true; // Add Event Listeners + + _dragEvents[interactionType].forEach(function (eventType) { + element.addEventListener(eventType, dragHandler); + }); + + _upOrEndEvents[interactionType].forEach(function (eventType) { + element.addEventListener(eventType, upOrEndHandler); + }); +}); + +function _dragHandler(toolName, annotation) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var interactionType = arguments.length > 3 ? arguments[3] : undefined; + var evt = arguments.length > 4 ? arguments[4] : undefined; + var _evt$detail = evt.detail, + element = _evt$detail.element, + image = _evt$detail.image, + buttons = _evt$detail.buttons; + var _evt$detail$deltaPoin = evt.detail.deltaPoints.image, + x = _evt$detail$deltaPoin.x, + y = _evt$detail$deltaPoin.y; + annotation.active = true; + annotation.invalidated = true; + var handleKeys = Object.keys(annotation.handles); + + for (var i = 0; i < handleKeys.length; i++) { + var key = handleKeys[i]; + var handle = annotation.handles[key]; + + if ( // Don't move this part of the annotation + handle.movesIndependently === true || // Not a true handle + !handle.hasOwnProperty('x') || !handle.hasOwnProperty('y')) { + continue; + } + + handle.x += x; + handle.y += y; + + if (options.preventHandleOutsideImage) { + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_5__["clipToBox"])(handle, image); + } + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__["default"])(element, buttons, interactionType); + + if (activeTool instanceof _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__["default"]) { + activeTool.updateCachedStats(image, element, annotation); + } + + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_MODIFIED; + var modifiedEventData = { + toolName: toolName, + element: element, + measurementData: annotation + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, modifiedEventData); + evt.preventDefault(); + evt.stopPropagation(); +} + +function _upOrEndHandler(toolName, annotation) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var interactionType = arguments.length > 3 ? arguments[3] : undefined; + + var _ref2 = arguments.length > 4 ? arguments[4] : undefined, + dragHandler = _ref2.dragHandler, + upOrEndHandler = _ref2.upOrEndHandler; + + var evt = arguments.length > 5 ? arguments[5] : undefined; + var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined; + var eventData = evt.detail; + var element = evt.detail.element; + annotation.active = false; + annotation.invalidated = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = false; // Remove Event Listeners + + _dragEvents[interactionType].forEach(function (eventType) { + element.removeEventListener(eventType, dragHandler); + }); + + _upOrEndEvents[interactionType].forEach(function (eventType) { + element.removeEventListener(eventType, upOrEndHandler); + }); // If any handle is outside the image, delete the tool data + + + if (options.deleteIfHandleOutsideImage && Object(_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(eventData, annotation.handles)) { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["removeToolState"])(element, toolName, annotation); + } + + if (typeof options.doneMovingCallback === 'function') { + logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.'); + options.doneMovingCallback(); + } + + if (typeof doneMovingCallback === 'function') { + doneMovingCallback(); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} + +/***/ }), + +/***/ "./manipulators/moveHandle.js": +/*!************************************!*\ + !*** ./manipulators/moveHandle.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/getActiveTool */ "./util/getActiveTool.js"); +/* harmony import */ var _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../tools/base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('manipulators:moveHandle'); +var runAnimation = { + value: false +}; +var _dragEvents = { + mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG], + touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG] +}; +var _upOrEndEvents = { + mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK], + touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP] +}; +/** + * Move the provided handle + * + * @public + * @method moveHandle + * @memberof Manipulators + * + * @param {*} evtDetail + * @param {*} toolName + * @param {*} annotation + * @param {*} handle + * @param {*} [options={}] + * @param {Boolean} [options.deleteIfHandleOutsideImage] + * @param {Boolean} [options.preventHandleOutsideImage] + * @param {*} [interactionType=mouse] + * @param {function} doneMovingCallback + * @returns {undefined} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (evtDetail, toolName, annotation, handle) { + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var interactionType = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'mouse'; + var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined; + // Use global defaults, unless overidden by provided options + options = Object.assign({ + deleteIfHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].deleteIfHandleOutsideImage, + preventHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].preventHandleOutsideImage + }, options); + var element = evtDetail.element; + + var dragHandler = _dragHandler.bind(this, toolName, annotation, handle, options, interactionType); // So we don't need to inline the entire `upOrEndHandler` function + + + var upOrEndHandler = function upOrEndHandler(evt) { + _upOrEndHandler(toolName, evtDetail, annotation, handle, options, interactionType, { + dragHandler: dragHandler, + upOrEndHandler: upOrEndHandler + }, evt, doneMovingCallback); + }; + + handle.active = true; + annotation.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = true; // Add Event Listeners + + _dragEvents[interactionType].forEach(function (eventType) { + element.addEventListener(eventType, dragHandler); + }); + + _upOrEndEvents[interactionType].forEach(function (eventType) { + element.addEventListener(eventType, upOrEndHandler); + }); // ========================== + // ======== TOUCH ========== + // ========================== + + + if (interactionType === 'touch') { + runAnimation.value = true; + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); // Average pixel width of index finger is 45-57 pixels + // https://www.smashingmagazine.com/2012/02/finger-friendly-design-ideal-mobile-touchscreen-target-sizes/ + + var fingerDistance = -57; + var aboveFinger = { + x: evtDetail.currentPoints.page.x, + y: evtDetail.currentPoints.page.y + fingerDistance + }; + var targetLocation = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, aboveFinger.x, aboveFinger.y); + + _animate(handle, runAnimation, enabledElement, targetLocation); + } +}); + +function _dragHandler(toolName, annotation, handle, options, interactionType, evt) { + var _evt$detail = evt.detail, + image = _evt$detail.image, + currentPoints = _evt$detail.currentPoints, + element = _evt$detail.element, + buttons = _evt$detail.buttons; + var page = currentPoints.page; + var fingerOffset = -57; + var targetLocation = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, page.x, interactionType === 'touch' ? page.y + fingerOffset : page.y); + runAnimation.value = false; + handle.active = true; + handle.hasMoved = true; + handle.x = targetLocation.x; + handle.y = targetLocation.y; // TODO: A way to not flip this for textboxes on annotations + + annotation.invalidated = true; + + if (options.preventHandleOutsideImage) { + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_5__["clipToBox"])(handle, image); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__["default"])(element, buttons, interactionType); + + if (activeTool instanceof _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__["default"]) { + activeTool.updateCachedStats(image, element, annotation); + } + + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_MODIFIED; + var modifiedEventData = { + toolName: toolName, + element: element, + measurementData: annotation + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, modifiedEventData); +} + +function _upOrEndHandler(toolName, evtDetail, annotation, handle) { + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var interactionType = arguments.length > 5 ? arguments[5] : undefined; + + var _ref = arguments.length > 6 ? arguments[6] : undefined, + dragHandler = _ref.dragHandler, + upOrEndHandler = _ref.upOrEndHandler; + + var evt = arguments.length > 7 ? arguments[7] : undefined; + var doneMovingCallback = arguments.length > 8 ? arguments[8] : undefined; + var image = evtDetail.currentPoints.image; + var element = evt.detail.element; + handle.active = false; + annotation.active = false; // TODO: A way to not flip this for textboxes on annotations + + annotation.invalidated = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = false; + runAnimation.value = false; // Remove Event Listeners + + _dragEvents[interactionType].forEach(function (eventType) { + element.removeEventListener(eventType, dragHandler); + }); + + _upOrEndEvents[interactionType].forEach(function (eventType) { + element.removeEventListener(eventType, upOrEndHandler); + }); // If any handle is outside the image, delete the tool data + + + if (options.deleteIfHandleOutsideImage && Object(_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(evtDetail, annotation.handles)) { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["removeToolState"])(element, toolName, annotation); + } // TODO: What dark magic makes us want to handle TOUCH_PRESS differently? + + + if (evt.type === _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS) { + evt.detail.handlePressed = annotation; + handle.x = image.x; // Original Event + + handle.y = image.y; + } + + if (typeof options.doneMovingCallback === 'function') { + logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.'); + options.doneMovingCallback(); + } + + if (typeof doneMovingCallback === 'function') { + doneMovingCallback(); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} +/** + * Animates the provided handle using `requestAnimationFrame` + * @private + * @method _animate + * + * @param {*} handle + * @param {*} runAnimation + * @param {*} enabledElement + * @param {*} targetLocation + * @returns {undefined} + */ + + +function _animate(handle, runAnimation, enabledElement, targetLocation) { + if (!runAnimation.value) { + return; + } // Pixels / second + + + var distanceRemaining = Math.abs(handle.y - targetLocation.y); + var linearDistEachFrame = distanceRemaining / 10; + + if (distanceRemaining < 1) { + handle.y = targetLocation.y; + runAnimation.value = false; + return; + } + + if (handle.y > targetLocation.y) { + handle.y -= linearDistEachFrame; + } else if (handle.y < targetLocation.y) { + handle.y += linearDistEachFrame; + } // Update the image + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(enabledElement.element); // Request a new frame + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.requestAnimationFrame(function () { + _animate(handle, runAnimation, enabledElement, targetLocation); + }); +} + +/***/ }), + +/***/ "./manipulators/moveNewHandle.js": +/*!***************************************!*\ + !*** ./manipulators/moveNewHandle.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/getActiveTool */ "./util/getActiveTool.js"); +/* harmony import */ var _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../tools/base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('manipulators:moveNewHandle'); +var _moveEvents = { + mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_MOVE, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_DRAG], + touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_DRAG] +}; +var _moveEndEvents = { + mouse: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_UP, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MOUSE_CLICK], + touch: [_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TAP] +}; +/** + * Move a new handle + * @public + * @method moveNewHandle + * @memberof Manipulators + * + * @param {*} evtDetail + * @param {*} toolName + * @param {*} annotation + * @param {*} handle + * @param {*} [options={}] + * @param {Boolean} [options.deleteIfHandleOutsideImage] + * @param {Boolean} [options.preventHandleOutsideImage] + * @param {string} [interactionType=mouse] + * @param {function} [doneMovingCallback] + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (evtDetail, toolName, annotation, handle, options) { + var interactionType = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'mouse'; + var doneMovingCallback = arguments.length > 6 ? arguments[6] : undefined; + // Use global defaults, unless overidden by provided options + options = Object.assign({ + deleteIfHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].deleteIfHandleOutsideImage, + preventHandleOutsideImage: _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].preventHandleOutsideImage + }, options); + var element = evtDetail.element; + annotation.active = true; + handle.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = true; + + function moveHandler(evt) { + _moveHandler(toolName, annotation, handle, options, interactionType, { + moveHandler: moveHandler, + moveEndHandler: moveEndHandler + }, evt); + } // So we don't need to inline the entire `moveEndEventHandler` function + + + function moveEndHandler(evt) { + _moveEndHandler(toolName, annotation, handle, options, interactionType, { + moveHandler: moveHandler, + moveEndHandler: moveEndHandler + }, evt, doneMovingCallback); + } // Add event listeners + + + _moveEvents[interactionType].forEach(function (eventType) { + element.addEventListener(eventType, moveHandler); + }); + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _stopImmediatePropagation); +}); + +function _moveHandler(toolName, annotation, handle, options, interactionType, _ref, evt) { + var moveEndHandler = _ref.moveEndHandler; + var _evt$detail = evt.detail, + currentPoints = _evt$detail.currentPoints, + image = _evt$detail.image, + element = _evt$detail.element, + buttons = _evt$detail.buttons; // Add moveEndEvent Handler when move trigger + + _moveEndEvents[interactionType].forEach(function (eventType) { + element.addEventListener(eventType, moveEndHandler); + }); + + var page = currentPoints.page; + var fingerOffset = -57; + var targetLocation = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, interactionType === 'touch' ? page.x + fingerOffset : page.x, interactionType === 'touch' ? page.y + fingerOffset : page.y); + annotation.invalidated = true; + handle.active = true; + handle.x = targetLocation.x; + handle.y = targetLocation.y; + + if (options && options.preventHandleOutsideImage) { + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_5__["clipToBox"])(handle, image); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_7__["default"])(element, buttons, interactionType); + + if (activeTool instanceof _tools_base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_8__["default"]) { + activeTool.updateCachedStats(image, element, annotation); + } + + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_MODIFIED; + var modifiedEventData = { + toolName: toolName, + element: element, + measurementData: annotation + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, eventType, modifiedEventData); +} + +function _moveEndHandler(toolName, annotation, handle, options, interactionType, _ref2, evt, doneMovingCallback) { + var moveHandler = _ref2.moveHandler, + moveEndHandler = _ref2.moveEndHandler; + var _evt$detail2 = evt.detail, + element = _evt$detail2.element, + currentPoints = _evt$detail2.currentPoints; + var page = currentPoints.page; + var fingerOffset = -57; + var targetLocation = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pageToPixel(element, interactionType === 'touch' ? page.x + fingerOffset : page.x, interactionType === 'touch' ? page.y + fingerOffset : page.y); // "Release" the handle + + annotation.active = false; + annotation.invalidated = true; + handle.active = false; + handle.x = targetLocation.x; + handle.y = targetLocation.y; + _store_index_js__WEBPACK_IMPORTED_MODULE_6__["state"].isToolLocked = false; // Remove event listeners + + _moveEvents[interactionType].forEach(function (eventType) { + element.removeEventListener(eventType, moveHandler); + }); + + _moveEndEvents[interactionType].forEach(function (eventType) { + element.removeEventListener(eventType, moveEndHandler); + }); + + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_START, _stopImmediatePropagation); // TODO: WHY? + // Why would a Touch_Pinch or Touch_Press be associated with a new handle? + + if (evt.type === _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PINCH || evt.type === _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOUCH_PRESS) { + handle.active = false; + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + + if (typeof options.doneMovingCallback === 'function') { + logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.'); + options.doneMovingCallback(); + } + + if (typeof doneMovingCallback === 'function') { + doneMovingCallback(); + } + + return; + } + + if (options.preventHandleOutsideImage) { + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_5__["clipToBox"])(handle, evt.detail.image); + } // If any handle is outside the image, delete the tool data + + + if (options.deleteIfHandleOutsideImage && Object(_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(evt.detail, annotation.handles)) { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["removeToolState"])(element, toolName, annotation); + } + + if (typeof options.doneMovingCallback === 'function') { + logger.warn('`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details.'); + options.doneMovingCallback(); + } + + if (typeof doneMovingCallback === 'function') { + doneMovingCallback(); + } // Update Image + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} +/** + * Stop the CornerstoneToolsTouchStart event from + * Becoming a CornerstoneToolsTouchStartActive event when + * MoveNewHandle ends + * + * @private + * @function _stopImmediatePropagation + * + * @param {*} evt + * @returns {Boolean} false + */ + + +function _stopImmediatePropagation(evt) { + evt.stopImmediatePropagation(); + return false; +} + +/***/ }), + +/***/ "./mixins/activeOrDisabledBinaryTool.js": +/*!**********************************************!*\ + !*** ./mixins/activeOrDisabledBinaryTool.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/setToolMode.js */ "./store/setToolMode.js"); + +/** + * If one attempts to change mode to 'passive', redirect the tool to 'disabled'. + * + * @param {HTMLElement} element The element on which the tool resides. + * @returns {undefined} + */ + +function passiveCallback(element) { + Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolDisabledForElement"])(element, this.name); +} +/** + * If one attempts to turn the tool 'enabled', redirect the tool to 'active'. + * + * @param {HTMLElement} element The element on which the tool resides. + * @returns {undefined} + */ + + +function enabledCallback(element) { + Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolActiveForElement"])(element, this.name); +} +/** + * @mixin activeOrDisabledBinaryTool - Redirect enabled/passive mode changes to active/disabled. + * @memberof Mixins + */ + + +/* harmony default export */ __webpack_exports__["default"] = ({ + passiveCallback: passiveCallback, + enabledCallback: enabledCallback +}); + +/***/ }), + +/***/ "./mixins/enabledOrDisabledBinaryTool.js": +/*!***********************************************!*\ + !*** ./mixins/enabledOrDisabledBinaryTool.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/setToolMode.js */ "./store/setToolMode.js"); + +/** + * If one attempts to change mode to 'passive', redirect the tool to 'disabled'. + * + * @param {HTMLElement} element The element on which the tool resides. + * @returns {undefined} + */ + +function passiveCallback(element) { + Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolDisabledForElement"])(element, this.name); +} +/** + * If one attempts to change mode to 'active', redirect the tool to 'enabled'. + * + * @param {HTMLElement} element The element on which the tool resides. + * @returns {undefined} + */ + + +function activeCallback(element) { + Object(_store_setToolMode_js__WEBPACK_IMPORTED_MODULE_0__["setToolEnabledForElement"])(element, this.name); +} +/** + * + * @mixin enabledOrDisabledBinaryTool - Redirect active/passive mode changes to enabled/disabled. + * @memberof Mixins + */ + + +/* harmony default export */ __webpack_exports__["default"] = ({ + passiveCallback: passiveCallback, + activeCallback: activeCallback +}); + +/***/ }), + +/***/ "./mixins/index.js": +/*!*************************!*\ + !*** ./mixins/index.js ***! + \*************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _activeOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./activeOrDisabledBinaryTool.js */ "./mixins/activeOrDisabledBinaryTool.js"); +/* harmony import */ var _enabledOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enabledOrDisabledBinaryTool.js */ "./mixins/enabledOrDisabledBinaryTool.js"); +/* harmony import */ var _segmentation_circleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./segmentation/circleSegmentationMixin.js */ "./mixins/segmentation/circleSegmentationMixin.js"); +/* harmony import */ var _segmentation_polylineSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./segmentation/polylineSegmentationMixin.js */ "./mixins/segmentation/polylineSegmentationMixin.js"); +/* harmony import */ var _segmentation_freehandSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./segmentation/freehandSegmentationMixin.js */ "./mixins/segmentation/freehandSegmentationMixin.js"); +/* harmony import */ var _segmentation_rectangleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./segmentation/rectangleSegmentationMixin.js */ "./mixins/segmentation/rectangleSegmentationMixin.js"); +/* harmony import */ var _segmentation_renderBrushMixin_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./segmentation/renderBrushMixin.js */ "./mixins/segmentation/renderBrushMixin.js"); + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = ({ + activeOrDisabledBinaryTool: _activeOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_0__["default"], + enabledOrDisabledBinaryTool: _enabledOrDisabledBinaryTool_js__WEBPACK_IMPORTED_MODULE_1__["default"], + circleSegmentationMixin: _segmentation_circleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_2__["default"], + polylineSegmentationMixin: _segmentation_polylineSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_3__["default"], + freehandSegmentationMixin: _segmentation_freehandSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_4__["default"], + rectangleSegmentationMixin: _segmentation_rectangleSegmentationMixin_js__WEBPACK_IMPORTED_MODULE_5__["default"], + renderBrushMixin: _segmentation_renderBrushMixin_js__WEBPACK_IMPORTED_MODULE_6__["default"] +}); + +/***/ }), + +/***/ "./mixins/segmentation/circleSegmentationMixin.js": +/*!********************************************************!*\ + !*** ./mixins/segmentation/circleSegmentationMixin.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../drawing */ "./drawing/index.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../externalModules */ "./externalModules.js"); +/* harmony import */ var _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/isEmptyObject */ "./util/isEmptyObject.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store */ "./store/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/segmentation */ "./util/segmentation/index.js"); + + + + + + +var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'), + getters = _getModule.getters, + setters = _getModule.setters; +/** + * Sets the start and end handle points to empty objects + * + * @private + * @method _resetHandles + * @returns {undefined} + */ + + +function _resetHandles() { + this.handles = { + start: {}, + end: {} + }; +} +/** + * Render hook: draws the Scissors's outline, box, or circle + * + * @param {Object} evt Cornerstone.event#cornerstoneimagerendered > cornerstoneimagerendered event + * @memberof Tools.ScissorsTool + * @returns {void} + */ + + +function renderToolData(evt) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element; + var color = getters.brushColor(element, true); + var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["getNewContext"])(eventData.canvasContext.canvas); + var distance = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath.point.distance; + Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["draw"])(context, function (context) { + if (!_this.handles) { + return null; + } + + var startCanvas = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, _this.handles.start); + var endCanvas = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.pixelToCanvas(element, _this.handles.end); // Calculating the radius where startCanvas is the center of the circle to be drawn + + var radius = distance(startCanvas, endCanvas); // Draw Circle + + Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["drawCircle"])(context, element, _this.handles.start, radius, { + color: color + }); + }); +} +/** + * Sets the start handle point and claims the eventDispatcher event + * + * @private + * @param {*} evt // mousedown, touchstart, click + * @returns {Boolean} True + */ + + +function _startOutliningRegion(evt) { + var consumeEvent = true; + var element = evt.detail.element; + var image = evt.detail.currentPoints.image; + + if (Object(_util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__["default"])(this.handles.start)) { + this.handles.start = image; + } else { + this.handles.end = image; + + this._applyStrategy(evt); + } + + _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + return consumeEvent; +} +/** + * This function will update the handles and updateImage to force re-draw + * + * @private + * @method _setHandlesAndUpdate + * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + +function _setHandlesAndUpdate(evt) { + var _evt$detail = evt.detail, + element = _evt$detail.element, + currentPoints = _evt$detail.currentPoints; + var image = currentPoints.image; + this.handles.end = image; + _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} +/** + * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop. + * + * @private + * @method _applyStrategy + * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + +function _applyStrategy(evt) { + evt.detail.handles = this.handles; + var element = evt.detail.element; + + var _getters$labelmap2D = getters.labelmap2D(element), + labelmap2D = _getters$labelmap2D.labelmap2D, + labelmap3D = _getters$labelmap2D.labelmap3D, + currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex; + + var pixelData = labelmap2D.pixelData; + var previousPixeldata = pixelData.slice(); + var points = { + start: { + x: this.handles.start.x, + y: this.handles.start.y + }, + end: { + x: this.handles.end.x, + y: this.handles.end.y + } + }; + var operationData = { + points: points, + pixelData: pixelData, + segmentIndex: labelmap3D.activeSegmentIndex, + segmentationMixinType: "circleSegmentationMixin" + }; + this.applyActiveStrategy(evt, operationData); + var operation = { + imageIdIndex: currentImageIdIndex, + diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_4__["getDiffBetweenPixelData"])(previousPixeldata, pixelData) + }; + setters.pushState(this.element, [operation]); // Invalidate the brush tool data so it is redrawn + + setters.updateSegmentsOnLabelmap2D(labelmap2D); + _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + + this._resetHandles(); +} +/** + * @mixin circleSegmentationMixin - Segmentation operations for circles. + * @memberof Mixins + */ + + +/* harmony default export */ __webpack_exports__["default"] = ({ + postTouchStartCallback: _startOutliningRegion, + postMouseDownCallback: _startOutliningRegion, + mouseClickCallback: _startOutliningRegion, + touchDragCallback: _setHandlesAndUpdate, + mouseDragCallback: _setHandlesAndUpdate, + mouseMoveCallback: _setHandlesAndUpdate, + touchEndCallback: _applyStrategy, + mouseUpCallback: _applyStrategy, + initializeMixin: _resetHandles, + renderToolData: renderToolData, + _resetHandles: _resetHandles, + _applyStrategy: _applyStrategy +}); + +/***/ }), + +/***/ "./mixins/segmentation/freehandSegmentationMixin.js": +/*!**********************************************************!*\ + !*** ./mixins/segmentation/freehandSegmentationMixin.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store */ "./store/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../drawing */ "./drawing/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/segmentation */ "./util/segmentation/index.js"); + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('tools:ScissorsTool'); + +var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_2__["getModule"])('segmentation'), + getters = _getModule.getters, + setters = _getModule.setters; +/** + * Render hook: draws the FreehandScissors's outline + * + * @param {Object} evt Cornerstone.event#cornerstoneimagerendered > cornerstoneimagerendered event + * @memberof Tools.ScissorsTool + * @returns {void} + */ + + +function renderToolData(evt) { + var eventData = evt.detail; + var element = eventData.element; + var color = getters.brushColor(element, true); + var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_4__["getNewContext"])(eventData.canvasContext.canvas); + var points = this.handles.points; + + if (points.length < 2) { + return; + } + + Object(_drawing__WEBPACK_IMPORTED_MODULE_4__["draw"])(context, function (context) { + for (var j = 0; j < points.length; j++) { + var lines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(points[j].lines); + + if (j === points.length - 1) { + // If it's still being actively drawn, keep the last line to + // The mouse location + lines.push(points[0]); + } + + Object(_drawing__WEBPACK_IMPORTED_MODULE_4__["drawJoinedLines"])(context, element, points[j], lines, { + color: color + }); + } + }); +} +/** + * Sets the start handle point and claims the eventDispatcher event + * + * @private + * @param {*} evt // mousedown, touchstart, click + * @returns {void|null} + */ + + +function _startOutliningRegion(evt) { + var element = evt.detail.element; + var image = evt.detail.currentPoints.image; + var points = this.handles.points; + + if (!points.length) { + logger.warn('Something went wrong, empty handles detected.'); + return null; + } + + points.push({ + x: image.x, + y: image.y, + lines: [] + }); + this.currentHandle += 1; + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} +/** + * This function will update the handles and updateImage to force re-draw + * + * @private + * @method _setHandlesAndUpdate + * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + +function _setHandlesAndUpdate(evt) { + var eventData = evt.detail; + var element = evt.detail.element; + + this._addPoint(eventData); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} +/** + * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop. + * + * @private + * @method _applyStrategy + * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + +function _applyStrategy(evt) { + var points = this.handles.points; + var element = evt.detail.element; + + var _getters$labelmap2D = getters.labelmap2D(element), + labelmap2D = _getters$labelmap2D.labelmap2D, + labelmap3D = _getters$labelmap2D.labelmap3D, + currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex; + + var pixelData = labelmap2D.pixelData; + var previousPixeldata = pixelData.slice(); + var operationData = { + points: points, + pixelData: pixelData, + segmentIndex: labelmap3D.activeSegmentIndex, + segmentationMixinType: "freehandSegmentationMixin" + }; + this.applyActiveStrategy(evt, operationData); + var operation = { + imageIdIndex: currentImageIdIndex, + diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_5__["getDiffBetweenPixelData"])(previousPixeldata, pixelData) + }; + setters.pushState(this.element, [operation]); // Invalidate the brush tool data so it is redrawn + + setters.updateSegmentsOnLabelmap2D(labelmap2D); + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + + this._resetHandles(); +} +/** + * Sets the start and end handle points to empty objects + * + * @private + * @method _resetHandles + * @returns {undefined} + */ + + +function _resetHandles() { + this.handles = { + points: [] + }; + this.currentHandle = 0; +} +/** + * Adds a point on mouse click in polygon mode. + * + * @private + * @param {Object} evt - data object associated with an event. + * @returns {void} + */ + + +function _addPoint(evt) { + var points = this.handles.points; + + if (points.length) { + // Add the line from the current handle to the new handle + points[this.currentHandle - 1].lines.push({ + x: evt.currentPoints.image.x, + y: evt.currentPoints.image.y, + lines: [] + }); + } // Add the new handle + + + points.push({ + x: evt.currentPoints.image.x, + y: evt.currentPoints.image.y, + lines: [] + }); // Increment the current handle value + + this.currentHandle += 1; // Force onImageRendered to fire + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(evt.element); +} +/** + * @mixin freehandSegmentationMixin - segmentation operations for freehand + * @memberof Mixins + */ + + +/* harmony default export */ __webpack_exports__["default"] = ({ + postTouchStartCallback: _startOutliningRegion, + postMouseDownCallback: _startOutliningRegion, + mouseClickCallback: _startOutliningRegion, + touchDragCallback: _setHandlesAndUpdate, + mouseDragCallback: _setHandlesAndUpdate, + mouseMoveCallback: _setHandlesAndUpdate, + touchEndCallback: _applyStrategy, + mouseUpCallback: _applyStrategy, + initializeMixin: _resetHandles, + renderToolData: renderToolData, + _resetHandles: _resetHandles, + _addPoint: _addPoint, + _applyStrategy: _applyStrategy +}); + +/***/ }), + +/***/ "./mixins/segmentation/polylineSegmentationMixin.js": +/*!**********************************************************!*\ + !*** ./mixins/segmentation/polylineSegmentationMixin.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../drawing */ "./drawing/index.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store */ "./store/index.js"); +/* harmony import */ var _freehandSegmentationMixin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./freehandSegmentationMixin */ "./mixins/segmentation/freehandSegmentationMixin.js"); + + + + + +var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_2__["getModule"])('segmentation'), + getters = _getModule.getters; +/** + * Override for `freehandSegmentationMixin`'s `renderToolData` method to render a polyline instead + * of a freehand region with the first and last point connected. Apply after the `freehandSegmentationMixin`. + * + * @override + * @param {Object} evt The cornerstone render event. + * @returns {null} + */ + + +function renderToolData(evt) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element; + var color = getters.brushColor(element, true); + var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_1__["getNewContext"])(eventData.canvasContext.canvas); + var handles = this.handles; + Object(_drawing__WEBPACK_IMPORTED_MODULE_1__["draw"])(context, function (context) { + var isNotTheFirstHandle = handles.points.length > 1; + + if (isNotTheFirstHandle) { + for (var j = 0; j < handles.points.length; j++) { + var lines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(handles.points[j].lines); + + Object(_drawing__WEBPACK_IMPORTED_MODULE_1__["drawJoinedLines"])(context, element, _this.handles.points[j], lines, { + color: color + }); + } + } + }); +} + +var polylineSegmentationMixin = Object.assign({}, _freehandSegmentationMixin__WEBPACK_IMPORTED_MODULE_3__["default"], { + renderToolData: renderToolData +}); +/** + * @mixin freehandPolylineRenderOverride - segmentation operations for corrections Polyline + * @memberof Mixins + */ + +/* harmony default export */ __webpack_exports__["default"] = (polylineSegmentationMixin); + +/***/ }), + +/***/ "./mixins/segmentation/rectangleSegmentationMixin.js": +/*!***********************************************************!*\ + !*** ./mixins/segmentation/rectangleSegmentationMixin.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _drawing__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../drawing */ "./drawing/index.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../externalModules */ "./externalModules.js"); +/* harmony import */ var _util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/isEmptyObject */ "./util/isEmptyObject.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store */ "./store/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/segmentation */ "./util/segmentation/index.js"); + + + + + + +var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'), + getters = _getModule.getters, + setters = _getModule.setters; +/** + * Render hook: draws the Scissors's outline, box, or circle + * + * @param {Object} evt Cornerstone.event#cornerstoneimagerendered > cornerstoneimagerendered event + * @memberof Tools.ScissorsTool + * @returns {void} + */ + + +function renderToolData(evt) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element; + var color = getters.brushColor(element, true); + var context = Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["getNewContext"])(eventData.canvasContext.canvas); + Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["draw"])(context, function (context) { + Object(_drawing__WEBPACK_IMPORTED_MODULE_0__["drawRect"])(context, element, _this.handles.start, _this.handles.end, { + color: color + }); + }); +} +/** + * Sets the start handle point and claims the eventDispatcher event + * + * @private + * @param {*} evt // mousedown, touchstart, click + * @returns {Boolean} True + */ + + +function _startOutliningRegion(evt) { + var consumeEvent = true; + var element = evt.detail.element; + var image = evt.detail.currentPoints.image; + + if (Object(_util_isEmptyObject__WEBPACK_IMPORTED_MODULE_2__["default"])(this.handles.start)) { + this.handles.start = image; + } else { + this.handles.end = image; + + this._applyStrategy(evt); + } + + _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + return consumeEvent; +} +/** + * This function will update the handles and updateImage to force re-draw + * + * @private + * @method _setHandlesAndUpdate + * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + +function _setHandlesAndUpdate(evt) { + var _evt$detail = evt.detail, + element = _evt$detail.element, + image = _evt$detail.currentPoints.image; + this.handles.end = image; + _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); +} +/** + * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop. + * + * @private + * @method _applyStrategy + * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + +function _applyStrategy(evt) { + evt.detail.handles = this.handles; + var element = evt.detail.element; + + var _getters$labelmap2D = getters.labelmap2D(element), + labelmap2D = _getters$labelmap2D.labelmap2D, + labelmap3D = _getters$labelmap2D.labelmap3D, + currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex; + + var pixelData = labelmap2D.pixelData; + var previousPixeldata = pixelData.slice(); + var points = [{ + x: this.handles.start.x, + y: this.handles.start.y + }, { + x: this.handles.end.x, + y: this.handles.end.y + }]; + var operationData = { + points: points, + pixelData: pixelData, + segmentIndex: labelmap3D.activeSegmentIndex, + segmentationMixinType: "rectangleSegmentationMixin" + }; + this.applyActiveStrategy(evt, operationData); + var operation = { + imageIdIndex: currentImageIdIndex, + diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_4__["getDiffBetweenPixelData"])(previousPixeldata, pixelData) + }; + setters.pushState(this.element, [operation]); // Invalidate the brush tool data so it is redrawn + + setters.updateSegmentsOnLabelmap2D(labelmap2D); + _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + + this._resetHandles(); +} +/** + * Sets the start and end handle points to empty objects + * + * @private + * @method _resetHandles + * @returns {void} + */ + + +function _resetHandles() { + this.handles = { + start: {}, + end: {} + }; +} +/** + * @mixin rectangleSegmentationMixin - segmentation operations for rectangles + * @memberof Mixins + */ + + +/* harmony default export */ __webpack_exports__["default"] = ({ + postTouchStartCallback: _startOutliningRegion, + postMouseDownCallback: _startOutliningRegion, + mouseClickCallback: _startOutliningRegion, + touchDragCallback: _setHandlesAndUpdate, + mouseDragCallback: _setHandlesAndUpdate, + mouseMoveCallback: _setHandlesAndUpdate, + touchEndCallback: _applyStrategy, + mouseUpCallback: _applyStrategy, + initializeMixin: _resetHandles, + renderToolData: renderToolData, + _resetHandles: _resetHandles, + _applyStrategy: _applyStrategy +}); + +/***/ }), + +/***/ "./mixins/segmentation/renderBrushMixin.js": +/*!*************************************************!*\ + !*** ./mixins/segmentation/renderBrushMixin.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); + + +/** + * Called by the event dispatcher to render the image. + * + * @param {Object} evt - The event. + * @returns {void} + */ + +function renderBrush(evt) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + + var _getModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('segmentation'), + getters = _getModule.getters, + configuration = _getModule.configuration; + + var eventData = evt.detail; + var viewport = eventData.viewport; + var mousePosition; + + if (this._drawing) { + mousePosition = this._lastImageCoords; + } else if (this._mouseUpRender) { + mousePosition = this._lastImageCoords; + this._mouseUpRender = false; + } else { + mousePosition = _store_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].state.mousePositionImage; + } + + if (!mousePosition) { + return; + } + + var _eventData$image = eventData.image, + rows = _eventData$image.rows, + columns = _eventData$image.columns; + var _mousePosition = mousePosition, + x = _mousePosition.x, + y = _mousePosition.y; + + if (x < 0 || x > columns || y < 0 || y > rows) { + return; + } // Draw the hover overlay on top of the pixel data + + + var radius = configuration.radius; + var context = eventData.canvasContext; + var element = eventData.element; + var color = getters.brushColor(element, this._drawing); + context.setTransform(1, 0, 0, 1, 0, 0); + var circleRadius = radius * viewport.scale; + var mouseCoordsCanvas = cornerstone.pixelToCanvas(element, mousePosition); + context.beginPath(); + context.strokeStyle = color; + context.ellipse(mouseCoordsCanvas.x, mouseCoordsCanvas.y, circleRadius, circleRadius, 0, 0, 2 * Math.PI); + context.stroke(); +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + renderBrush: renderBrush +}); + +/***/ }), + +/***/ "./orientation/getOrientationString.js": +/*!*********************************************!*\ + !*** ./orientation/getOrientationString.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js"); + + +/** + * Returns the orientation of the vector in the patient coordinate system. + * @public + * @function getOrientationString + * + * @param {Array|cornerstoneMath.Vector3} vector Input array or Vector3 + * @returns {string} The orientation in the patient coordinate system. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (vector) { + var vec3 = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(vector); // Thanks to David Clunie + // https://sites.google.com/site/dicomnotes/ + + var orientation = ''; + var orientationX = vec3.x < 0 ? 'R' : 'L'; + var orientationY = vec3.y < 0 ? 'A' : 'P'; + var orientationZ = vec3.z < 0 ? 'F' : 'H'; // Should probably make this a function vector3.abs + + var abs = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Vector3(Math.abs(vec3.x), Math.abs(vec3.y), Math.abs(vec3.z)); + var MIN = 0.0001; + + for (var i = 0; i < 3; i++) { + if (abs.x > MIN && abs.x > abs.y && abs.x > abs.z) { + orientation += orientationX; + abs.x = 0; + } else if (abs.y > MIN && abs.y > abs.x && abs.y > abs.z) { + orientation += orientationY; + abs.y = 0; + } else if (abs.z > MIN && abs.z > abs.x && abs.z > abs.y) { + orientation += orientationZ; + abs.z = 0; + } else if (abs.x > MIN && abs.y > MIN && abs.x === abs.y) { + orientation += orientationX + orientationY; + abs.x = 0; + abs.y = 0; + } else if (abs.x > MIN && abs.z > MIN && abs.x === abs.z) { + orientation += orientationX + orientationZ; + abs.x = 0; + abs.z = 0; + } else if (abs.y > MIN && abs.z > MIN && abs.y === abs.z) { + orientation += orientationY + orientationZ; + abs.y = 0; + abs.z = 0; + } else { + break; + } + } + + return orientation; +}); + +/***/ }), + +/***/ "./orientation/index.js": +/*!******************************!*\ + !*** ./orientation/index.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getOrientationString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getOrientationString.js */ "./orientation/getOrientationString.js"); +/* harmony import */ var _invertOrientationString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./invertOrientationString.js */ "./orientation/invertOrientationString.js"); + + +var orientation = { + getOrientationString: _getOrientationString_js__WEBPACK_IMPORTED_MODULE_0__["default"], + invertOrientationString: _invertOrientationString_js__WEBPACK_IMPORTED_MODULE_1__["default"] +}; +/* harmony default export */ __webpack_exports__["default"] = (orientation); + +/***/ }), + +/***/ "./orientation/invertOrientationString.js": +/*!************************************************!*\ + !*** ./orientation/invertOrientationString.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Inverts an orientation string. + * @public + * @function invertOrientationString + * + * @param {string} orientationString The orientation. + * @returns {string} The inverted orientationString. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (orientationString) { + var inverted = orientationString.replace('H', 'f'); + inverted = inverted.replace('F', 'h'); + inverted = inverted.replace('R', 'l'); + inverted = inverted.replace('L', 'r'); + inverted = inverted.replace('A', 'p'); + inverted = inverted.replace('P', 'a'); + inverted = inverted.toUpperCase(); + return inverted; +}); + +/***/ }), + +/***/ "./requestPool/requestPoolManager.js": +/*!*******************************************!*\ + !*** ./requestPool/requestPoolManager.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/getMaxSimultaneousRequests.js */ "./util/getMaxSimultaneousRequests.js"); + + +var requestPool = { + interaction: [], + thumbnail: [], + prefetch: [] +}; +var numRequests = { + interaction: 0, + thumbnail: 0, + prefetch: 0 +}; +var maxNumRequests = { + interaction: 6, + thumbnail: 6, + prefetch: 5 +}; +var awake = false; +var grabDelay = 20; + +function addRequest(element, imageId, type, preventCache, doneCallback, failCallback, addToBeginning) { + if (!requestPool.hasOwnProperty(type)) { + throw new Error('Request type must be one of interaction, thumbnail, or prefetch'); + } + + if (!element || !imageId) { + return; + } // Describe the request + + + var requestDetails = { + type: type, + imageId: imageId, + preventCache: preventCache, + doneCallback: doneCallback, + failCallback: failCallback + }; // If this imageId is in the cache, resolve it immediately + + var imageLoadObject = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.imageCache.getImageLoadObject(imageId); + + if (imageLoadObject) { + imageLoadObject.promise.then(function (image) { + doneCallback(image); + }, function (error) { + failCallback(error); + }); + return; + } + + if (addToBeginning) { + // Add it to the beginning of the stack + requestPool[type].unshift(requestDetails); + } else { + // Add it to the end of the stack + requestPool[type].push(requestDetails); + } // Wake up + + + awake = true; +} + +function clearRequestStack(type) { + // Console.log('clearRequestStack'); + if (!requestPool.hasOwnProperty(type)) { + throw new Error('Request type must be one of interaction, thumbnail, or prefetch'); + } + + requestPool[type] = []; +} + +function startAgain() { + if (!awake) { + return; + } + + setTimeout(function () { + startGrabbing(); + }, grabDelay); +} + +function sendRequest(requestDetails) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Increment the number of current requests of this type + + var type = requestDetails.type; + numRequests[type]++; + awake = true; + var imageId = requestDetails.imageId; + var doneCallback = requestDetails.doneCallback; + var failCallback = requestDetails.failCallback; // Check if we already have this image promise in the cache + + var imageLoadObject = cornerstone.imageCache.getImageLoadObject(imageId); + + if (imageLoadObject) { + // If we do, remove from list (when resolved, as we could have + // Pending prefetch requests) and stop processing this iteration + imageLoadObject.promise.then(function (image) { + numRequests[type]--; // Console.log(numRequests); + + doneCallback(image); + startAgain(); + }, function (error) { + numRequests[type]--; // Console.log(numRequests); + + failCallback(error); + startAgain(); + }); + return; + } + + function requestTypeToLoadPriority(requestDetails) { + if (requestDetails.type === 'prefetch') { + return -5; + } else if (requestDetails.type === 'interactive') { + return 0; + } else if (requestDetails.type === 'thumbnail') { + return 5; + } + } + + var priority = requestTypeToLoadPriority(requestDetails); + var loader; + + if (requestDetails.preventCache === true) { + loader = cornerstone.loadImage(imageId, { + priority: priority, + type: requestDetails.type + }); + } else { + loader = cornerstone.loadAndCacheImage(imageId, { + priority: priority, + type: requestDetails.type + }); + } // Load and cache the image + + + loader.then(function (image) { + numRequests[type]--; // Console.log(numRequests); + + doneCallback(image); + startAgain(); + }, function (error) { + numRequests[type]--; // Console.log(numRequests); + + failCallback(error); + startAgain(); + }); +} + +function startGrabbing() { + // Begin by grabbing X images + var maxSimultaneousRequests = Object(_util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_1__["getMaxSimultaneousRequests"])(); + maxNumRequests = { + interaction: Math.max(maxSimultaneousRequests, 1), + thumbnail: Math.max(maxSimultaneousRequests - 2, 1), + prefetch: Math.max(maxSimultaneousRequests - 1, 1) + }; + var currentRequests = numRequests.interaction + numRequests.thumbnail + numRequests.prefetch; + var requestsToSend = maxSimultaneousRequests - currentRequests; + + for (var i = 0; i < requestsToSend; i++) { + var requestDetails = getNextRequest(); + + if (requestDetails) { + sendRequest(requestDetails); + } + } +} + +function getNextRequest() { + if (requestPool.interaction.length && numRequests.interaction < maxNumRequests.interaction) { + return requestPool.interaction.shift(); + } + + if (requestPool.thumbnail.length && numRequests.thumbnail < maxNumRequests.thumbnail) { + return requestPool.thumbnail.shift(); + } + + if (requestPool.prefetch.length && numRequests.prefetch < maxNumRequests.prefetch) { + return requestPool.prefetch.shift(); + } + + if (!requestPool.interaction.length && !requestPool.thumbnail.length && !requestPool.prefetch.length) { + awake = false; + } + + return false; +} + +function getRequestPool() { + return requestPool; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + addRequest: addRequest, + clearRequestStack: clearRequestStack, + startGrabbing: startGrabbing, + getRequestPool: getRequestPool +}); + +/***/ }), + +/***/ "./stackTools/fusionRenderer.js": +/*!**************************************!*\ + !*** ./stackTools/fusionRenderer.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FusionRenderer; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); + + + + + +var FusionRenderer = +/*#__PURE__*/ +function () { + function FusionRenderer() { + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FusionRenderer); + + this.currentImageIdIndex = 0; + this.layerIds = []; + this.findImageFn = undefined; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FusionRenderer, [{ + key: "render", + value: function render(element, imageStacks) { + var _this = this; + + // Move this to base Renderer class + if (!Number.isInteger(this.currentImageIdIndex)) { + throw new Error('FusionRenderer: render - Image ID Index is not an integer'); + } + + if (!this.findImageFn) { + throw new Error('No findImage function has been defined'); + } + + if (!imageStacks) { + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack'); + imageStacks = toolData.data; + } // TODO: Figure out what to do with LoadHandlers in this scenario... + + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone; // For the base layer, go to the currentImageIdIndex + + var baseImageObject = imageStacks[0]; + var currentImageId = baseImageObject.imageIds[this.currentImageIdIndex]; + var overlayImageStacks = imageStacks.slice(1, imageStacks.length); + cornerstone.loadAndCacheImage(currentImageId).then(function (baseImage) { + var baseLayerId = _this.layerIds[0]; // Get the base layer if one exists + + if (baseLayerId) { + cornerstone.setLayerImage(element, baseImage, baseLayerId); + } else { + // Otherwise, create a new layer with the base layer's image + baseLayerId = cornerstone.addLayer(element, baseImage, baseImageObject.options); + + _this.layerIds.push(baseLayerId); + } // Display the image immediately while the overlay images are identified + + + cornerstone.displayImage(element, baseImage); // Loop through the remaining 'overlay' image stacks + + overlayImageStacks.forEach(function (imgObj, overlayLayerIndex) { + var imageId = _this.findImageFn(imgObj.imageIds, currentImageId); + + var layerIndex = overlayLayerIndex + 1; + var currentLayerId = _this.layerIds[layerIndex]; // If no layer exists yet for this overlaid stack, create + // One and add it to the layerIds property for this instance + // Of the fusion renderer. + + if (!currentLayerId) { + currentLayerId = cornerstone.addLayer(element, undefined, imgObj.options); + + _this.layerIds.push(currentLayerId); + } + + if (imageId) { + // If an imageId was returned from the findImage function, + // Load it, make sure it's visible and update the layer + // With the new image object. + cornerstone.loadAndCacheImage(imageId).then(function (image) { + cornerstone.setLayerImage(element, image, currentLayerId); + cornerstone.updateImage(element); + }); + } else { + // If no imageId was returned from the findImage function. + // This means that there is no relevant image to display. + cornerstone.setLayerImage(element, undefined, currentLayerId); + cornerstone.setActiveLayer(element, baseLayerId); + cornerstone.updateImage(element); + } + }); + }); + } + }]); + + return FusionRenderer; +}(); + + + +/***/ }), + +/***/ "./stackTools/playClip.js": +/*!********************************!*\ + !*** ./stackTools/playClip.js ***! + \********************************/ +/*! exports provided: playClip, stopClip */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "playClip", function() { return playClip; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stopClip", function() { return stopClip; }); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); + + + + + +var toolType = 'playClip'; +/** + * [private] Turns a Frame Time Vector (0018,1065) array into a normalized array of timeouts. Each element + * ... of the resulting array represents the amount of time each frame will remain on the screen. + * @param {Array} vector A Frame Time Vector (0018,1065) as specified in section C.7.6.5.1.2 of DICOM standard. + * @param {Number} speed A speed factor which will be applied to each element of the resulting array. + * @returns {Array} An array with timeouts for each animation frame. + */ + +function getPlayClipTimeouts(vector, speed) { + var i; + var sample; + var delay; + var sum = 0; + var limit = vector.length; + var timeouts = []; // Initialize time varying to false + + timeouts.isTimeVarying = false; + + if (typeof speed !== 'number' || speed <= 0) { + speed = 1; + } // First element of a frame time vector must be discarded + + + for (i = 1; i < limit; i++) { + // eslint-disable-next-line no-bitwise + delay = Number(vector[i]) / speed | 0; // Integral part only + + timeouts.push(delay); + + if (i === 1) { + // Use first item as a sample for comparison + sample = delay; + } else if (delay !== sample) { + timeouts.isTimeVarying = true; + } + + sum += delay; + } + + if (timeouts.length > 0) { + if (timeouts.isTimeVarying) { + // If it's a time varying vector, make the last item an average... + // eslint-disable-next-line no-bitwise + delay = sum / timeouts.length | 0; + } else { + delay = timeouts[0]; + } + + timeouts.push(delay); + } + + return timeouts; +} +/** + * [private] Performs the heavy lifting of stopping an ongoing animation. + * @param {Object} playClipData The data from playClip that needs to be stopped. + * @returns {void} + */ + + +function stopClipWithData(playClipData) { + var id = playClipData.intervalId; + + if (typeof id !== 'undefined') { + playClipData.intervalId = undefined; + + if (playClipData.usingFrameTimeVector) { + clearTimeout(id); + } else { + clearInterval(id); + } + } +} +/** + * [private] Trigger playClip tool stop event. + * @param {HTMLElement} element + * @returns {void} + */ + + +function triggerStopEvent(element) { + var eventDetail = { + element: element + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].CLIP_STOPPED, eventDetail); +} +/** + * Starts playing a clip or adjusts the frame rate of an already playing clip. framesPerSecond is + * optional and defaults to 30 if not specified. A negative framesPerSecond will play the clip in reverse. + * The element must be a stack of images + * @param {HTMLElement} element + * @param {number} framesPerSecond + * @returns {void} + */ + + +function playClip(element, framesPerSecond) { + var playClipData; + var playClipTimeouts; + + if (element === undefined) { + throw new Error('playClip: element must not be undefined'); + } + + var stackToolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack'); + + if (!stackToolData || !stackToolData.data || !stackToolData.data.length) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; // If we have more than one stack, check if we have a stack renderer defined + + var stackRenderer; + + if (stackToolData.data.length > 1) { + var stackRendererData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stackRenderer'); + + if (stackRendererData && stackRendererData.data && stackRendererData.data.length) { + stackRenderer = stackRendererData.data[0]; + } + } + + var stackData = stackToolData.data[0]; + var playClipToolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolType); + + if (!playClipToolData || !playClipToolData.data || !playClipToolData.data.length) { + playClipData = { + intervalId: undefined, + framesPerSecond: 30, + lastFrameTimeStamp: undefined, + frameRate: 0, + frameTimeVector: undefined, + ignoreFrameTimeVector: false, + usingFrameTimeVector: false, + speed: 1, + reverse: false, + loop: true + }; + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["addToolState"])(element, toolType, playClipData); + } else { + playClipData = playClipToolData.data[0]; // Make sure the specified clip is not running before any property update + + stopClipWithData(playClipData); + } // If a framesPerSecond is specified and is valid, update the playClipData now + + + if (framesPerSecond < 0 || framesPerSecond > 0) { + playClipData.framesPerSecond = Number(framesPerSecond); + playClipData.reverse = playClipData.framesPerSecond < 0; // If framesPerSecond is given, frameTimeVector will be ignored... + + playClipData.ignoreFrameTimeVector = true; + } // Determine if frame time vector should be used instead of a fixed frame rate... + + + if (playClipData.ignoreFrameTimeVector !== true && playClipData.frameTimeVector && playClipData.frameTimeVector.length === stackData.imageIds.length) { + playClipTimeouts = getPlayClipTimeouts(playClipData.frameTimeVector, playClipData.speed); + } // This function encapsulates the frame rendering logic... + + + var playClipAction = function playClipAction() { + // Hoisting of context variables + var loader, + startLoadingHandler, + endLoadingHandler, + errorLoadingHandler, + newImageIdIndex = stackData.currentImageIdIndex; + var imageCount = stackData.imageIds.length; + + if (playClipData.reverse) { + newImageIdIndex--; + } else { + newImageIdIndex++; + } + + if (!playClipData.loop && (newImageIdIndex < 0 || newImageIdIndex >= imageCount)) { + stopClipWithData(playClipData); + triggerStopEvent(element); + return; + } // Loop around if we go outside the stack + + + if (newImageIdIndex >= imageCount) { + newImageIdIndex = 0; + } + + if (newImageIdIndex < 0) { + newImageIdIndex = imageCount - 1; + } + + if (newImageIdIndex !== stackData.currentImageIdIndex) { + startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(element); + endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(element); + errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(element); + + if (startLoadingHandler) { + startLoadingHandler(element); + } + + if (stackData.preventCache === true) { + loader = cornerstone.loadImage(stackData.imageIds[newImageIdIndex]); + } else { + loader = cornerstone.loadAndCacheImage(stackData.imageIds[newImageIdIndex]); + } + + loader.then(function (image) { + try { + stackData.currentImageIdIndex = newImageIdIndex; + + if (stackRenderer) { + stackRenderer.currentImageIdIndex = newImageIdIndex; + stackRenderer.render(element, stackToolData.data); + } else { + cornerstone.displayImage(element, image); + } + + if (endLoadingHandler) { + endLoadingHandler(element, image); + } + } catch (error) { + return; + } + }, function (error) { + var imageId = stackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(element, imageId, error); + } + }); + } + }; // If playClipTimeouts array is available, not empty and its elements are NOT uniform ... + // ... (at least one timeout is different from the others), use alternate setTimeout implementation + + + if (playClipTimeouts && playClipTimeouts.length > 0 && playClipTimeouts.isTimeVarying) { + playClipData.usingFrameTimeVector = true; + playClipData.intervalId = setTimeout(function playClipTimeoutHandler() { + playClipData.intervalId = setTimeout(playClipTimeoutHandler, playClipTimeouts[stackData.currentImageIdIndex]); + playClipAction(); + }, 0); + } else { + // ... otherwise user setInterval implementation which is much more efficient. + playClipData.usingFrameTimeVector = false; + playClipData.intervalId = setInterval(playClipAction, 1000 / Math.abs(playClipData.framesPerSecond)); + } +} +/** + * Stops an already playing clip. + * @param {HTMLElement} element + * @returns {void} + */ + + +function stopClip(element) { + var playClipToolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolType); + + if (!playClipToolData || !playClipToolData.data || !playClipToolData.data.length) { + return; + } + + stopClipWithData(playClipToolData.data[0]); +} + + + +/***/ }), + +/***/ "./stackTools/stackPrefetch.js": +/*!*************************************!*\ + !*** ./stackTools/stackPrefetch.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../requestPool/requestPoolManager.js */ "./requestPool/requestPoolManager.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/getMaxSimultaneousRequests.js */ "./util/getMaxSimultaneousRequests.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_triggerEvent__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/triggerEvent */ "./util/triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../events.js */ "./events.js"); + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_5__["getLogger"])('stackTools:stackPrefetch'); +var toolType = 'stackPrefetch'; +var requestType = 'prefetch'; +var configuration = { + maxImagesToPrefetch: Infinity, + preserveExistingPool: false +}; +var resetPrefetchTimeout; +var resetPrefetchDelay = 10; + +function range(lowEnd, highEnd) { + // Javascript version of Python's range function + // http://stackoverflow.com/questions/3895478/does-javascript-have-a-method-like-range-to-generate-an-array-based-on-suppl + lowEnd = Math.round(lowEnd) || 0; + highEnd = Math.round(highEnd) || 0; + var arr = []; + var c = highEnd - lowEnd + 1; + + if (c <= 0) { + return arr; + } + + while (c--) { + arr[c] = highEnd--; + } + + return arr; +} + +var max = function max(arr) { + return Math.max.apply(null, arr); +}; + +var min = function min(arr) { + return Math.min.apply(null, arr); +}; + +function nearestIndex(arr, x) { + // Return index of nearest values in array + // http://stackoverflow.com/questions/25854212/return-index-of-nearest-values-in-an-array + var l = []; + var h = []; + arr.forEach(function (v) { + if (v < x) { + l.push(v); + } else if (v > x) { + h.push(v); + } + }); + return { + low: arr.indexOf(max(l)), + high: arr.indexOf(min(h)) + }; +} + +function prefetch(element) { + // Check to make sure stack data exists + var stackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack'); + + if (!stackData || !stackData.data || !stackData.data.length) { + return; + } + + var stack = stackData.data[0]; // Get the stackPrefetch tool data + + var stackPrefetchData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolType); + + if (!stackPrefetchData) { + return; + } + + var stackPrefetch = stackPrefetchData.data[0] || {}; // If all the requests are complete, disable the stackPrefetch tool + + if (!stackPrefetch.indicesToRequest || !stackPrefetch.indicesToRequest.length) { + stackPrefetch.enabled = false; + } // Make sure the tool is still enabled + + + if (stackPrefetch.enabled === false) { + return; + } // Remove an imageIdIndex from the list of indices to request + // This fires when the individual image loading deferred is resolved + + + function removeFromList(imageIdIndex) { + var index = stackPrefetch.indicesToRequest.indexOf(imageIdIndex); + + if (index > -1) { + // Don't remove last element if imageIdIndex not found + stackPrefetch.indicesToRequest.splice(index, 1); + } + } // Remove all already cached images from the + // IndicesToRequest array + + + stackPrefetchData.data[0].indicesToRequest.sort(function (a, b) { + return a - b; + }); + var indicesToRequestCopy = stackPrefetch.indicesToRequest.slice(); + indicesToRequestCopy.forEach(function (imageIdIndex) { + var imageId = stack.imageIds[imageIdIndex]; + + if (!imageId) { + return; + } + + var imageLoadObject = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.imageCache.getImageLoadObject(imageId); + + if (imageLoadObject) { + removeFromList(imageIdIndex); + } + }); // Stop here if there are no images left to request + // After those in the cache have been removed + + if (!stackPrefetch.indicesToRequest.length) { + return; + } // Clear the requestPool of prefetch requests, if needed. + + + if (!configuration.preserveExistingPool) { + _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].clearRequestStack(requestType); + } // Identify the nearest imageIdIndex to the currentImageIdIndex + + + var nearest = nearestIndex(stackPrefetch.indicesToRequest, stack.currentImageIdIndex); + var imageId; + var nextImageIdIndex; + var preventCache = false; + + function doneCallback(image) { + logger.log('prefetch done: %s', image.imageId); + var imageIdIndex = stack.imageIds.indexOf(image.imageId); + removeFromList(imageIdIndex); + Object(_util_triggerEvent__WEBPACK_IMPORTED_MODULE_6__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].STACK_PREFETCH_IMAGE_LOADED, { + element: element, + imageId: image.imageId, + imageIndex: imageIdIndex, + stackPrefetch: stackPrefetch, + stack: stack + }); // If there are no more images to fetch + + if (!(stackPrefetch.indicesToRequest && stackPrefetch.indicesToRequest.length > 0)) { + Object(_util_triggerEvent__WEBPACK_IMPORTED_MODULE_6__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].STACK_PREFETCH_DONE, { + element: element, + stackPrefetch: stackPrefetch, + stack: stack + }); + } + } // Retrieve the errorLoadingHandler if one exists + + + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(element); + + function failCallback(error) { + logger.log('prefetch errored: %o', error); + + if (errorLoadingHandler) { + errorLoadingHandler(element, imageId, error, 'stackPrefetch'); + } + } // Prefetch images around the current image (before and after) + + + var lowerIndex = nearest.low; + var higherIndex = nearest.high; + var imageIdsToPrefetch = []; + + while (lowerIndex >= 0 || higherIndex < stackPrefetch.indicesToRequest.length) { + var currentIndex = stack.currentImageIdIndex; + var shouldSkipLower = currentIndex - stackPrefetch.indicesToRequest[lowerIndex] > configuration.maxImagesToPrefetch; + var shouldSkipHigher = stackPrefetch.indicesToRequest[higherIndex] - currentIndex > configuration.maxImagesToPrefetch; + var shouldLoadLower = !shouldSkipLower && lowerIndex >= 0; + var shouldLoadHigher = !shouldSkipHigher && higherIndex < stackPrefetch.indicesToRequest.length; + + if (!shouldLoadHigher && !shouldLoadLower) { + break; + } + + if (shouldLoadLower) { + nextImageIdIndex = stackPrefetch.indicesToRequest[lowerIndex--]; + imageId = stack.imageIds[nextImageIdIndex]; + imageIdsToPrefetch.push(imageId); + } + + if (shouldLoadHigher) { + nextImageIdIndex = stackPrefetch.indicesToRequest[higherIndex++]; + imageId = stack.imageIds[nextImageIdIndex]; + imageIdsToPrefetch.push(imageId); + } + } // Load images in reverse order, by adding them at the beginning of the pool. + + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = imageIdsToPrefetch.reverse()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var imageToLoad = _step.value; + _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].addRequest(element, imageToLoad, requestType, preventCache, doneCallback, failCallback, true); + } // Try to start the requestPool's grabbing procedure + // In case it isn't already running + + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].startGrabbing(); +} + +function getPromiseRemovedHandler(element) { + return function (e) { + var eventData = e.detail; // When an imagePromise has been pushed out of the cache, re-add its index + // It to the indicesToRequest list so that it will be retrieved later if the + // CurrentImageIdIndex is changed to an image nearby + + var stackData; + + try { + // It will throw an exception in some cases (eg: thumbnails) + stackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack'); + } catch (error) { + return; + } + + if (!stackData || !stackData.data || !stackData.data.length) { + return; + } + + var stack = stackData.data[0]; + var imageIdIndex = stack.imageIds.indexOf(eventData.imageId); // Make sure the image that was removed is actually in this stack + // Before adding it to the indicesToRequest array + + if (imageIdIndex < 0) { + return; + } + + var stackPrefetchData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolType); + + if (!stackPrefetchData || !stackPrefetchData.data || !stackPrefetchData.data.length) { + return; + } + + stackPrefetchData.data[0].indicesToRequest.push(imageIdIndex); + }; +} + +function onImageUpdated(e) { + // Start prefetching again (after a delay) + // When the user has scrolled to a new image + clearTimeout(resetPrefetchTimeout); + resetPrefetchTimeout = setTimeout(function () { + var element = e.target; // If playClip is enabled and the user loads a different series in the viewport + // An exception will be thrown because the element will not be enabled anymore + + try { + prefetch(element); + } catch (error) { + return; + } + }, resetPrefetchDelay); +} + +function enable(element) { + // Clear old prefetch data. Skipping this can cause problems when changing the series inside an element + var stackPrefetchDataArray = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolType); + stackPrefetchDataArray.data = []; // First check that there is stack data available + + var stackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, 'stack'); + + if (!stackData || !stackData.data || !stackData.data.length) { + return; + } + + var stack = stackData.data[0]; // Check if we are allowed to cache images in this stack + + if (stack.preventCache === true) { + logger.warn('A stack that should not be cached was given the stackPrefetch'); + return; + } // Use the currentImageIdIndex from the stack as the initalImageIdIndex + + + var stackPrefetchData = { + indicesToRequest: range(0, stack.imageIds.length - 1), + enabled: true, + direction: 1 + }; // Remove the currentImageIdIndex from the list to request + + var indexOfCurrentImage = stackPrefetchData.indicesToRequest.indexOf(stack.currentImageIdIndex); + stackPrefetchData.indicesToRequest.splice(indexOfCurrentImage, 1); + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["addToolState"])(element, toolType, stackPrefetchData); + prefetch(element); + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE, onImageUpdated); + element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE, onImageUpdated); + var promiseRemovedHandler = getPromiseRemovedHandler(element); + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.events.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED, promiseRemovedHandler); + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.events.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED, promiseRemovedHandler); +} + +function disable(element) { + clearTimeout(resetPrefetchTimeout); + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.NEW_IMAGE, onImageUpdated); + var promiseRemovedHandler = getPromiseRemovedHandler(element); + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.events.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED, promiseRemovedHandler); + var stackPrefetchData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, toolType); // If there is actually something to disable, disable it + + if (stackPrefetchData && stackPrefetchData.data.length) { + stackPrefetchData.data[0].enabled = false; // Clear current prefetch requests from the requestPool + + _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].clearRequestStack(requestType); + } +} + +function getConfiguration() { + return configuration; +} + +function setConfiguration(config) { + configuration = config; + + if (config.maxSimultaneousRequests) { + Object(_util_getMaxSimultaneousRequests_js__WEBPACK_IMPORTED_MODULE_4__["setMaxSimultaneousRequests"])(config.maxSimultaneousRequests); + } +} // Module/private exports + + +var stackPrefetch = { + enable: enable, + disable: disable, + getConfiguration: getConfiguration, + setConfiguration: setConfiguration +}; +/* harmony default export */ __webpack_exports__["default"] = (stackPrefetch); + +/***/ }), + +/***/ "./stackTools/stackRenderers.js": +/*!**************************************!*\ + !*** ./stackTools/stackRenderers.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _fusionRenderer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fusionRenderer.js */ "./stackTools/fusionRenderer.js"); + +var stackRenderers = {}; +stackRenderers.FusionRenderer = _fusionRenderer_js__WEBPACK_IMPORTED_MODULE_0__["default"]; +/* harmony default export */ __webpack_exports__["default"] = (stackRenderers); + +/***/ }), + +/***/ "./stateManagement/frameOfReferenceStateManager.js": +/*!*********************************************************!*\ + !*** ./stateManagement/frameOfReferenceStateManager.js ***! + \*********************************************************/ +/*! exports provided: newFrameOfReferenceSpecificToolStateManager, globalFrameOfReferenceSpecificToolStateManager */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "newFrameOfReferenceSpecificToolStateManager", function() { return newFrameOfReferenceSpecificToolStateManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "globalFrameOfReferenceSpecificToolStateManager", function() { return globalFrameOfReferenceSpecificToolStateManager; }); +/** + * Implements a frame-of-reference specific tool state management strategy. This means that + * Measurement data are tied to a specific frame of reference UID and only visible to objects using + * That frame-of-reference UID. + * @public + * @constructor newFrameOfReferenceSpecificToolStateManager + * @memberof StateManagement + * + * @returns {Object} A frameOfReferenceSpecificToolStateManager instance. + */ +function newFrameOfReferenceSpecificToolStateManager() { + var toolState = {}; // Here we add tool state, this is done by tools as well + // As modules that restore saved state + + function addFrameOfReferenceSpecificToolState(frameOfReference, toolType, data) { + // If we don't have any tool state for this frameOfReference, add an empty object + if (toolState.hasOwnProperty(frameOfReference) === false) { + toolState[frameOfReference] = {}; + } + + var frameOfReferenceToolState = toolState[frameOfReference]; // If we don't have tool state for this type of tool, add an empty object + + if (frameOfReferenceToolState.hasOwnProperty(toolType) === false) { + frameOfReferenceToolState[toolType] = { + data: [] + }; + } + + var toolData = frameOfReferenceToolState[toolType]; // Finally, add this new tool to the state + + toolData.data.push(data); + } // Here you can get state - used by tools as well as modules + // That save state persistently + + + function getFrameOfReferenceSpecificToolState(frameOfReference, toolType) { + // If we don't have any tool state for this frame of reference, return undefined + if (toolState.hasOwnProperty(frameOfReference) === false) { + return; + } + + var frameOfReferenceToolState = toolState[frameOfReference]; // If we don't have tool state for this type of tool, return undefined + + if (frameOfReferenceToolState.hasOwnProperty(toolType) === false) { + return; + } + + var toolData = frameOfReferenceToolState[toolType]; + return toolData; + } + + function removeFrameOfReferenceSpecificToolState(frameOfReference, toolType, data) { + // If we don't have any tool state for this frame of reference, return undefined + if (toolState.hasOwnProperty(frameOfReference) === false) { + return; + } + + var frameOfReferenceToolState = toolState[frameOfReference]; // If we don't have tool state for this type of tool, return undefined + + if (frameOfReferenceToolState.hasOwnProperty(toolType) === false) { + return; + } + + var toolData = frameOfReferenceToolState[toolType]; // Find this tool data + + var indexOfData = -1; + + for (var i = 0; i < toolData.data.length; i++) { + if (toolData.data[i] === data) { + indexOfData = i; + } + } + + if (indexOfData !== -1) { + toolData.data.splice(indexOfData, 1); + } + } + + return { + get: getFrameOfReferenceSpecificToolState, + add: addFrameOfReferenceSpecificToolState, + remove: removeFrameOfReferenceSpecificToolState + }; +} // A global frameOfReferenceSpecificToolStateManager - the most common case is to share 3d information +// Between stacks of images + + +var globalFrameOfReferenceSpecificToolStateManager = newFrameOfReferenceSpecificToolStateManager(); + + +/***/ }), + +/***/ "./stateManagement/imageIdSpecificStateManager.js": +/*!********************************************************!*\ + !*** ./stateManagement/imageIdSpecificStateManager.js ***! + \********************************************************/ +/*! exports provided: newImageIdSpecificToolStateManager, globalImageIdSpecificToolStateManager */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "newImageIdSpecificToolStateManager", function() { return newImageIdSpecificToolStateManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "globalImageIdSpecificToolStateManager", function() { return globalImageIdSpecificToolStateManager; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Implements an imageId specific tool state management strategy. This means that + * Measurements data is tied to a specific imageId and only visible for enabled elements + * That are displaying that imageId. + * @public + * @constructor newImageIdSpecificToolStateManager + * @memberof StateManagement + * + * @returns {Object} An imageIdSpecificToolStateManager instance. + */ + +function newImageIdSpecificToolStateManager() { + var toolState = {}; // Here we add tool state, this is done by tools as well + // As modules that restore saved state + + function saveImageIdToolState(imageId) { + return toolState[imageId]; + } + + function restoreImageIdToolState(imageId, imageIdToolState) { + toolState[imageId] = imageIdToolState; + } + + function saveToolState() { + return toolState; + } + + function restoreToolState(savedToolState) { + toolState = savedToolState; + } // Here we add tool state, this is done by tools as well + // As modules that restore saved state + + + function addElementToolState(element, toolType, data) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); // If we don't have an image for this element exit early + + if (!enabledElement.image) { + return; + } + + addImageIdToolState(enabledElement.image.imageId, toolType, data); + } + + function addImageIdToolState(imageId, toolType, data) { + // If we don't have any tool state for this imageId, add an empty object + if (toolState.hasOwnProperty(imageId) === false) { + toolState[imageId] = {}; + } + + var imageIdToolState = toolState[imageId]; // If we don't have tool state for this type of tool, add an empty object + + if (imageIdToolState.hasOwnProperty(toolType) === false) { + imageIdToolState[toolType] = { + data: [] + }; + } + + var toolData = imageIdToolState[toolType]; // Finally, add this new tool to the state + + toolData.data.push(data); + } + + function getElementToolState(element, toolType) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); // If the element does not have an image return undefined. + + if (!enabledElement.image) { + return; + } + + return getImageIdToolState(enabledElement.image.imageId, toolType); + } // Here you can get state - used by tools as well as modules + // That save state persistently + + + function getImageIdToolState(imageId, toolType) { + // If we don't have any tool state for this imageId, return undefined + if (toolState.hasOwnProperty(imageId) === false) { + return; + } + + var imageIdToolState = toolState[imageId]; // If we don't have tool state for this type of tool, return undefined + + if (imageIdToolState.hasOwnProperty(toolType) === false) { + return; + } + + return imageIdToolState[toolType]; + } // Clears all tool data from this toolStateManager. + + + function clearElementToolState(element) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return; + } + + clearImageIdToolState(enabledElement.image.imageId); + } + + function clearImageIdToolState(imageId) { + if (toolState.hasOwnProperty(imageId) === false) { + return; + } + + delete toolState[imageId]; + } + + return { + get: getElementToolState, + add: addElementToolState, + clear: clearElementToolState, + getImageIdToolState: getImageIdToolState, + addImageIdToolState: addImageIdToolState, + clearImageIdToolState: clearImageIdToolState, + saveImageIdToolState: saveImageIdToolState, + restoreImageIdToolState: restoreImageIdToolState, + saveToolState: saveToolState, + restoreToolState: restoreToolState, + toolState: toolState + }; +} // A global imageIdSpecificToolStateManager - the most common case is to share state between all +// Visible enabled images + + +var globalImageIdSpecificToolStateManager = newImageIdSpecificToolStateManager(); + + +/***/ }), + +/***/ "./stateManagement/loadHandlerManager.js": +/*!***********************************************!*\ + !*** ./stateManagement/loadHandlerManager.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +var _DEFAULT_LOAD_HANDLER = 'DEFAULT'; +var defaultStartLoadHandler = {}; +var defaultEndLoadHandler = {}; +var defaultErrorLoadingHandler = {}; + +function _getUUIDFromElement(element) { + if (!element) { + return _DEFAULT_LOAD_HANDLER; + } + + var uuid = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element).uuid; + + if (!uuid) { + throw new Error('Something went wrong when getting uuid from element'); + } + + return uuid; +} + +function setStartLoadHandler(handler) { + var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + if (!handler) { + throw new Error('The Handler function must be defined'); + } + + var uuid = _getUUIDFromElement(element); + + defaultStartLoadHandler[uuid] = handler; +} + +function getStartLoadHandler(element) { + var uuid = _getUUIDFromElement(element); + + return defaultStartLoadHandler[uuid] || defaultStartLoadHandler[_DEFAULT_LOAD_HANDLER]; +} + +function setEndLoadHandler(handler) { + var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + if (!handler) { + throw new Error('The Handler function must be defined'); + } + + var uuid = _getUUIDFromElement(element); + + defaultEndLoadHandler[uuid] = handler; +} + +function getEndLoadHandler(element) { + var uuid = _getUUIDFromElement(element); + + return defaultEndLoadHandler[uuid] || defaultEndLoadHandler[_DEFAULT_LOAD_HANDLER]; +} + +function setErrorLoadingHandler(handler) { + var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + + if (!handler) { + throw new Error('The Handler function must be defined'); + } + + var uuid = _getUUIDFromElement(element); + + defaultErrorLoadingHandler[uuid] = handler; +} + +function getErrorLoadingHandler(element) { + var uuid = _getUUIDFromElement(element); + + return defaultErrorLoadingHandler[uuid] || defaultErrorLoadingHandler[_DEFAULT_LOAD_HANDLER]; +} + +function removeHandlers(element) { + var uuid = _getUUIDFromElement(element); + + delete defaultStartLoadHandler[uuid]; + delete defaultEndLoadHandler[uuid]; + delete defaultErrorLoadingHandler[uuid]; +} + +var loadHandlerManager = { + setStartLoadHandler: setStartLoadHandler, + getStartLoadHandler: getStartLoadHandler, + setEndLoadHandler: setEndLoadHandler, + getEndLoadHandler: getEndLoadHandler, + setErrorLoadingHandler: setErrorLoadingHandler, + getErrorLoadingHandler: getErrorLoadingHandler, + removeHandlers: removeHandlers +}; +/* harmony default export */ __webpack_exports__["default"] = (loadHandlerManager); + +/***/ }), + +/***/ "./stateManagement/stackSpecificStateManager.js": +/*!******************************************************!*\ + !*** ./stateManagement/stackSpecificStateManager.js ***! + \******************************************************/ +/*! exports provided: stackSpecificStateManager, newStackSpecificToolStateManager, addStackStateManager */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stackSpecificStateManager", function() { return stackSpecificStateManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "newStackSpecificToolStateManager", function() { return newStackSpecificToolStateManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addStackStateManager", function() { return addStackStateManager; }); +/* harmony import */ var _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageIdSpecificStateManager.js */ "./stateManagement/imageIdSpecificStateManager.js"); +/* harmony import */ var _toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toolState.js */ "./stateManagement/toolState.js"); + + +/** + * Implements an Stack specific tool state management strategy. This means + * That tool data is shared between all imageIds in a given stack. + * @public + * @constructor newStackSpecificToolStateManager + * @memberof StateManagement + * + * @param {string[]} toolTypes The tool types to apply to the stack. + * @param {Object} oldStateManager The imageIdSpecificStateManager. + * @returns {Object} A stackSpecificToolStateManager instance. + */ + +function newStackSpecificToolStateManager(toolTypes, oldStateManager) { + var toolState = {}; + + function saveToolState() { + return toolState; + } + + function restoreToolState(stackToolState) { + toolState = stackToolState; + } // Here we add tool state, this is done by tools as well + // As modules that restore saved state + + + function addStackSpecificToolState(element, toolType, data) { + // If this is a tool type to apply to the stack, do so + if (toolTypes.indexOf(toolType) >= 0) { + // If we don't have tool state for this type of tool, add an empty object + if (toolState.hasOwnProperty(toolType) === false) { + toolState[toolType] = { + data: [] + }; + } + + var toolData = toolState[toolType]; // Finally, add this new tool to the state + + toolData.data.push(data); + } else { + // Call the imageId specific tool state manager + return oldStateManager.add(element, toolType, data); + } + } // Here you can get state - used by tools as well as modules + // That save state persistently + + + function getStackSpecificToolState(element, toolType) { + // If this is a tool type to apply to the stack, do so + if (toolTypes.indexOf(toolType) >= 0) { + // If we don't have tool state for this type of tool, add an empty object + if (toolState.hasOwnProperty(toolType) === false) { + toolState[toolType] = { + data: [] + }; + } + + return toolState[toolType]; + } // Call the imageId specific tool state manager + + + return oldStateManager.get(element, toolType); + } + + var stackSpecificToolStateManager = { + get: getStackSpecificToolState, + add: addStackSpecificToolState, + saveToolState: saveToolState, + restoreToolState: restoreToolState, + toolState: toolState + }; + return stackSpecificToolStateManager; +} + +var stackStateManagers = []; + +function addStackStateManager(element, otherTools) { + var oldStateManager = Object(_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getElementToolStateManager"])(element); + + if (!oldStateManager) { + oldStateManager = _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_0__["globalImageIdSpecificToolStateManager"]; + } + + var stackTools = ['stack', 'stackPrefetch', 'playClip', 'volume', 'slab', 'referenceLines', 'crosshairs', 'stackRenderer']; + + if (otherTools) { + stackTools = stackTools.concat(otherTools); + } + + var stackSpecificStateManager = newStackSpecificToolStateManager(stackTools, oldStateManager); + stackStateManagers.push(stackSpecificStateManager); + Object(_toolState_js__WEBPACK_IMPORTED_MODULE_1__["setElementToolStateManager"])(element, stackSpecificStateManager); +} + +var stackSpecificStateManager = { + newStackSpecificToolStateManager: newStackSpecificToolStateManager, + addStackStateManager: addStackStateManager +}; + + +/***/ }), + +/***/ "./stateManagement/textStyle.js": +/*!**************************************!*\ + !*** ./stateManagement/textStyle.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var defaultFontSize = 15, + defaultFont = "".concat(defaultFontSize, "px Arial"), + defaultBackgroundColor = 'transparent'; + +function setFont(font) { + defaultFont = font; +} + +function getFont() { + return defaultFont; +} + +function setFontSize(fontSize) { + defaultFontSize = fontSize; +} + +function getFontSize() { + return defaultFontSize; +} + +function setBackgroundColor(backgroundColor) { + defaultBackgroundColor = backgroundColor; +} + +function getBackgroundColor() { + return defaultBackgroundColor; +} + +var textStyle = { + setFont: setFont, + getFont: getFont, + setFontSize: setFontSize, + getFontSize: getFontSize, + setBackgroundColor: setBackgroundColor, + getBackgroundColor: getBackgroundColor +}; +/* harmony default export */ __webpack_exports__["default"] = (textStyle); + +/***/ }), + +/***/ "./stateManagement/toolColors.js": +/*!***************************************!*\ + !*** ./stateManagement/toolColors.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var defaultColor = 'white', + activeColor = 'greenyellow', + fillColor = 'transparent'; + +function setFillColor(color) { + fillColor = color; +} + +function getFillColor() { + return fillColor; +} + +function setToolColor(color) { + defaultColor = color; +} + +function getToolColor() { + return defaultColor; +} + +function setActiveColor(color) { + activeColor = color; +} + +function getActiveColor() { + return activeColor; +} + +function getColorIfActive(data) { + if (data.color) { + return data.color; + } + + return data.active ? activeColor : defaultColor; +} + +var toolColors = { + setFillColor: setFillColor, + getFillColor: getFillColor, + setToolColor: setToolColor, + getToolColor: getToolColor, + setActiveColor: setActiveColor, + getActiveColor: getActiveColor, + getColorIfActive: getColorIfActive +}; +/* harmony default export */ __webpack_exports__["default"] = (toolColors); + +/***/ }), + +/***/ "./stateManagement/toolCoordinates.js": +/*!********************************************!*\ + !*** ./stateManagement/toolCoordinates.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var coordsData; + +function setCoords(eventData) { + coordsData = eventData.currentPoints.canvas; +} + +function getCoords() { + return coordsData; +} + +var toolCoordinates = { + setCoords: setCoords, + getCoords: getCoords +}; +/* harmony default export */ __webpack_exports__["default"] = (toolCoordinates); + +/***/ }), + +/***/ "./stateManagement/toolState.js": +/*!**************************************!*\ + !*** ./stateManagement/toolState.js ***! + \**************************************/ +/*! exports provided: addToolState, getToolState, removeToolState, clearToolState, setElementToolStateManager, getElementToolStateManager */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToolState", function() { return addToolState; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getToolState", function() { return getToolState; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeToolState", function() { return removeToolState; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearToolState", function() { return clearToolState; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElementToolStateManager", function() { return setElementToolStateManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElementToolStateManager", function() { return getElementToolStateManager; }); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./imageIdSpecificStateManager.js */ "./stateManagement/imageIdSpecificStateManager.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); + + + + +/** + * Returns the toolstate for a specific element. + * @public + * @function getElementToolStateManager + * + * @param {HTMLElement} element The element. + * @returns {Object} The toolState. + */ + +function getElementToolStateManager(element) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); // If the enabledElement has no toolStateManager, create a default one for it + // NOTE: This makes state management element specific + + if (enabledElement.toolStateManager === undefined) { + enabledElement.toolStateManager = _imageIdSpecificStateManager_js__WEBPACK_IMPORTED_MODULE_2__["globalImageIdSpecificToolStateManager"]; + } + + return enabledElement.toolStateManager; +} +/** + * Adds tool state to the toolStateManager, this is done by tools as well + * as modules that restore saved state. + * @public + * @method addToolState + * + * @param {HTMLElement} element The element. + * @param {string} toolType The toolType of the state. + * @param {Object} measurementData The data to store in the state. + * @returns {undefined} + */ + + +function addToolState(element, toolType, measurementData) { + var toolStateManager = getElementToolStateManager(element); + toolStateManager.add(element, toolType, measurementData); + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_ADDED; + var eventData = { + toolType: toolType, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData); +} +/** + * Returns tool specific state of an element. Used by tools as well as modules + * that save state persistently + * @export + * @public + * @method + * @name getToolState + * + * @param {HTMLElement} element The element. + * @param {string} toolType The toolType of the state. + * @returns {Object} The element's state for the given toolType. + */ + + +function getToolState(element, toolType) { + var toolStateManager = getElementToolStateManager(element); + return toolStateManager.get(element, toolType); +} +/** + * Removes specific tool state from the toolStateManager. + * @public + * @method removeToolState + * + * @param {HTMLElement} element The element. + * @param {string} toolType The toolType of the state. + * @param {Object} data The data to remove from the toolStateManager. + * @returns {undefined} + */ + + +function removeToolState(element, toolType, data) { + var toolStateManager = getElementToolStateManager(element); + var toolData = toolStateManager.get(element, toolType); // Find this tool data + + var indexOfData = -1; + + for (var i = 0; i < toolData.data.length; i++) { + if (toolData.data[i] === data) { + indexOfData = i; + } + } + + if (indexOfData !== -1) { + toolData.data.splice(indexOfData, 1); + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].MEASUREMENT_REMOVED; + var eventData = { + toolType: toolType, + element: element, + measurementData: data + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element, eventType, eventData); + } +} +/** + * Removes all toolState from the toolStateManager corresponding to + * the toolType and element. + * @public + * @method clearToolState + * + * @param {HTMLElement} element The element. + * @param {string} toolType The toolType of the state. + * @returns {undefined} + */ + + +function clearToolState(element, toolType) { + var toolStateManager = getElementToolStateManager(element); + var toolData = toolStateManager.get(element, toolType); // If any toolData actually exists, clear it + + if (toolData !== undefined) { + toolData.data = []; + } +} +/** + * Sets the tool state manager for an element + * @public + * @method setElementToolStateManager + * + * @param {HTMLElement} element The element. + * @param {Object} toolStateManager The toolStateManager. + * @returns {undefined} + */ + + +function setElementToolStateManager(element, toolStateManager) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.getEnabledElement(element); + enabledElement.toolStateManager = toolStateManager; +} + + + +/***/ }), + +/***/ "./stateManagement/toolStyle.js": +/*!**************************************!*\ + !*** ./stateManagement/toolStyle.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var defaultWidth = 1, + activeWidth = 2; + +function setToolWidth(width) { + defaultWidth = width; +} + +function getToolWidth() { + return defaultWidth; +} + +function setActiveWidth(width) { + activeWidth = width; +} + +function getActiveWidth() { + return activeWidth; +} + +var toolStyle = { + setToolWidth: setToolWidth, + getToolWidth: getToolWidth, + setActiveWidth: setActiveWidth, + getActiveWidth: getActiveWidth +}; +/* harmony default export */ __webpack_exports__["default"] = (toolStyle); + +/***/ }), + +/***/ "./store/addTool.js": +/*!**************************!*\ + !*** ./store/addTool.js ***! + \**************************/ +/*! exports provided: addTool, addToolForElement */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addTool", function() { return addTool; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addToolForElement", function() { return addToolForElement; }); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); +/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getToolForElement.js */ "./store/getToolForElement.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('addTool'); +/** + * Adds a tool to an enabled element. + * + * @public + * @function addToolForElement + * @memberof CornerstoneTools + * + * @param {HTMLElement} element The element to add the tool to. + * @param {BaseTool} ApiTool The tool to add to the element. + * @param {Object} [props] Override the default tool props + * @returns {undefined} + */ + +var addToolForElement = function addToolForElement(element, ApiTool, props) { + // Instantiating the tool here makes it harder to accidentally add + // The same tool (by reference) for multiple elements (which would reassign the tool + // To a new element). + var tool = new ApiTool(props); + var toolAlreadyAddedToElement = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, tool.name); + + if (toolAlreadyAddedToElement) { + logger.warn('%s has already been added to the target element', tool.name); + return; + } + + tool.element = element; + _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.tools.push(tool); +}; +/** + * Adds a tool to all enabled element. + * + * @public + * @function addTool + * @memberof CornerstoneTools + * + * @param {BaseTool} ApiTool The tool to add to each element. + * @param {Object} [props] Override the default tool configuration + * @returns {undefined} + */ + + +var addTool = function addTool(ApiTool, props) { + _addToolGlobally(ApiTool, props); + + _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.enabledElements.forEach(function (element) { + addToolForElement(element, ApiTool, props); + }); +}; +/** + * Adds tool with matching name from globally registered tools. + * Requires `globalToolSyncEnabled` to be set to true + * + * @private + * @function addToolGlobally + * + * @param {BaseTool} ApiTool + * @param {Object} [props] Override the default tool configuration + * @returns {undefined} + */ + + +var _addToolGlobally = function _addToolGlobally(ApiTool, props) { + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('globalConfiguration'), + configuration = _getModule.configuration; + + if (!configuration.globalToolSyncEnabled) { + return; + } + + var tool = new ApiTool(props); + var toolAlreadyAddedGlobally = _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[tool.name] !== undefined; + + if (toolAlreadyAddedGlobally) { + logger.warn('%s has already been added globally', tool.name); + return; + } + + _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[tool.name] = { + tool: ApiTool, + props: props, + activeBindings: [] + }; +}; + + + +/***/ }), + +/***/ "./store/filterToolsUsableWithMultiPartTools.js": +/*!******************************************************!*\ + !*** ./store/filterToolsUsableWithMultiPartTools.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../tools/base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../tools/base/BaseBrushTool.js */ "./tools/base/BaseBrushTool.js"); + + +/** + * Filters an array of tools, returning only tools which are active or passive. + * @export + * @public + * @method + * @name filterToolsUseableWithMultiPartTools + * + * @param {Object[]} tools The input tool array. + * @returns {Object[]} The filtered array. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (tools) { + return tools.filter(function (tool) { + return !tool.isMultiPartTool && !(tool instanceof _tools_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]) && !(tool instanceof _tools_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]); + }); +}); + +/***/ }), + +/***/ "./store/getActiveToolsForElement.js": +/*!*******************************************!*\ + !*** ./store/getActiveToolsForElement.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Filters an array of tools, returning only tools which are active. + * @export + * @public + * @method + * @name getActiveToolsForElement + * + * @param {HTMLElement} element The element. + * @param {Object[]} tools The input tool array. + * @param {string} handlerType The input type being queried. + * @returns {Object[]} The filtered array. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (element, tools, handlerType) { + return tools.filter(function (tool) { + return tool.element === element && tool.mode === 'active' && (handlerType === undefined || tool.options["is".concat(handlerType, "Active")]); + }); +}); + +/***/ }), + +/***/ "./store/getInteractiveToolsForElement.js": +/*!************************************************!*\ + !*** ./store/getInteractiveToolsForElement.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Filters an array of tools, returning only tools which are active or passive. + * @export + * @public + * @method + * @name getInteractiveToolsForElement + * + * @param {HTMLElement} element The element. + * @param {Object[]} tools The input tool array. + * @returns {Object[]} The filtered array. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (element, tools) { + return tools.filter(function (tool) { + return tool.element === element && (tool.mode === 'active' || tool.mode === 'passive'); + }); +}); + +/***/ }), + +/***/ "./store/getToolForElement.js": +/*!************************************!*\ + !*** ./store/getToolForElement.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); + +/** + * Returns the tool instance attached to the element. + * @export + * @public + * @method + * @name getToolForElement + * + * @param {HTMLElement} element The element. + * @param {string} name The tool's name. + * @returns {Object} The tool instance. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, name) { + return _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].tools.find(function (tool) { + return tool.element === element && tool.name === name; + }); +}); + +/***/ }), + +/***/ "./store/getToolsWithDataForElement.js": +/*!*********************************************!*\ + !*** ./store/getToolsWithDataForElement.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../stateManagement/toolState.js */ "./stateManagement/toolState.js"); + +/** + * Filters an array of tools, returning only tools which have annotation data. + * @export + * @public + * @method + * @name getToolsWithDataForElement + * + * @param {HTMLElement} element The element. + * @param {Object[]} tools The input tool array. + * @returns {Object[]} The filtered array. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, tools) { + return tools.filter(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, tool.name); + return toolState && toolState.data.length > 0; + }); +}); + +/***/ }), + +/***/ "./store/getToolsWithMoveableHandles.js": +/*!**********************************************!*\ + !*** ./store/getToolsWithMoveableHandles.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); + + + +/** + * Filters an array of tools, returning only tools with moveable handles at the + * mouse location. + * + * @public + * @function getToolsWithMoveableHandles + * + * @param {HTMLElement} element The element + * @param {Object[]} tools The input tool array. + * @param {Object} coords The coordinates of the mouse position. + * @param {string} [interactionType=mouse] + * @returns {Object[]} The filtered array. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, tools, coords) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + var proximity = interactionType === 'mouse' ? _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].clickProximity : _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].touchProximity; + return tools.filter(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, tool.name); + + for (var i = 0; i < toolState.data.length; i++) { + if (Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, toolState.data[i].handles, coords, proximity) !== undefined) { + return true; + } + } + + return false; + }); +}); + +/***/ }), + +/***/ "./store/index.js": +/*!************************!*\ + !*** ./store/index.js ***! + \************************/ +/*! exports provided: state, getters, setters, modules, getModule, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "state", function() { return state; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getters", function() { return getters; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setters", function() { return setters; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "modules", function() { return modules; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getModule", function() { return getModule; }); +/* harmony import */ var _modules_segmentationModule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/segmentationModule */ "./store/modules/segmentationModule/index.js"); +/* harmony import */ var _modules_cursorModule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/cursorModule.js */ "./store/modules/cursorModule.js"); +/* harmony import */ var _modules_globalConfigurationModule_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/globalConfigurationModule.js */ "./store/modules/globalConfigurationModule.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); +// Modules + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:modules:storeLogger'); +var state = { + // Global + globalTools: {}, + globalToolChangeHistory: [], + // Tracking + enabledElements: [], + tools: [], + isToolLocked: false, + activeMultiPartTool: null, + mousePositionImage: {}, + // Settings + clickProximity: 6, + touchProximity: 10, + handleRadius: 6, + deleteIfHandleOutsideImage: true, + preventHandleOutsideImage: false, + // Cursor + svgCursorUrl: null +}; +var getters = { + mouseTools: function mouseTools() { + return state.tools.filter(function (tool) { + return tool.supportedInteractionTypes.includes('Mouse'); + }); + }, + touchTools: function touchTools() { + return state.tools.filter(function (tool) { + return tool.supportedInteractionTypes.includes('Touch'); + }); + }, + enabledElementByUID: function enabledElementByUID(enabledElementUID) { + return state.enabledElements.find(function (element) { + return _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.getEnabledElement(element).uuid === enabledElementUID; + }); + } +}; +var setters = {}; +var modules = { + segmentation: _modules_segmentationModule__WEBPACK_IMPORTED_MODULE_0__["default"], + cursor: _modules_cursorModule_js__WEBPACK_IMPORTED_MODULE_1__["default"], + globalConfiguration: _modules_globalConfigurationModule_js__WEBPACK_IMPORTED_MODULE_2__["default"] +}; +function getModule(moduleName) { + return modules[moduleName]; +} +/* harmony default export */ __webpack_exports__["default"] = ({ + modules: modules, + state: state, + getters: getters +}); + +/***/ }), + +/***/ "./store/internals/addEnabledElement.js": +/*!**********************************************!*\ + !*** ./store/internals/addEnabledElement.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../eventListeners/index.js */ "./eventListeners/index.js"); +/* harmony import */ var _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../eventDispatchers/index.js */ "./eventDispatchers/index.js"); +/* harmony import */ var _addTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../addTool.js */ "./store/addTool.js"); +/* harmony import */ var _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../setToolMode.js */ "./store/setToolMode.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../index.js */ "./store/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_5__["getLogger"])('internals:addEnabledElement'); +/** + * Element Enabled event. + * + * @event Cornerstone#ElementEnabled + * @type {Object} + * @property {string} type + * @property {Object} detail + * @property {HTMLElement} detail.element - The element being enabled. + */ + +/* TODO: It would be nice if this automatically added "all tools" + * To the enabledElement that already exist on all other tools. + * A half-measure might be a new method to "duplicate" the tool + * Configuration for an existing enabled element + * We may need to also save/store the original class/constructor per tool + * To accomplish this + */ + +/** + * Adds an enabledElement to our store. + * @export + * @private + * @method + * @name addEnabledElement + * @param {Cornerstone#ElementEnabled} elementEnabledEvt + * @listens Cornerstone#ElementEnabled + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (elementEnabledEvt) { + logger.log('EVENT:ELEMENT_ENABLED'); + var enabledElement = elementEnabledEvt.detail.element; // Dispatchers + + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["imageRenderedEventDispatcher"].enable(enabledElement); + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["newImageEventDispatcher"].enable(enabledElement); + + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_4__["getModule"])('globalConfiguration'), + configuration = _getModule.configuration; // Mouse + + + if (configuration.mouseEnabled) { + _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["mouseEventListeners"].enable(enabledElement); + _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["wheelEventListener"].enable(enabledElement); + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseToolEventDispatcher"].enable(enabledElement); + } // Touch + + + if (configuration.touchEnabled) { + _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["touchEventListeners"].enable(enabledElement); + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchToolEventDispatcher"].enable(enabledElement); + } // State + + + _addEnabledElement(enabledElement); +}); +/** + * Adds the enabled element to the store. + * @private + * @method + * @param {HTMLElement} enabledElement + * @returns {void} + */ + +var _addEnabledElement = function _addEnabledElement(enabledElement) { + _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.enabledElements.push(enabledElement); + + if (_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].modules) { + _initModulesOnElement(enabledElement); + } + + _addGlobalToolsToElement(enabledElement); + + _repeatGlobalToolHistory(enabledElement); +}; +/** + * Iterate over our store's modules. If the module has an `enabledElementCallback` + * call it and pass it a reference to our enabled element. + * @private + * @method + * @param {Object} enabledElement + * @returns {void} + */ + + +function _initModulesOnElement(enabledElement) { + var modules = _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].modules; + Object.keys(modules).forEach(function (key) { + if (typeof modules[key].enabledElementCallback === 'function') { + modules[key].enabledElementCallback(enabledElement); + } + }); +} +/** + * Iterate over our stores globalTools adding each one to `enabledElement` + * @private + * @method + * @param {HTMLElement} enabledElement + * @returns {void} + */ + + +function _addGlobalToolsToElement(enabledElement) { + var _getModule2 = Object(_index_js__WEBPACK_IMPORTED_MODULE_4__["getModule"])('globalConfiguration'), + configuration = _getModule2.configuration; + + if (!configuration.globalToolSyncEnabled) { + return; + } + + Object.keys(_index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.globalTools).forEach(function (key) { + var _store$state$globalTo = _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.globalTools[key], + tool = _store$state$globalTo.tool, + props = _store$state$globalTo.props; + Object(_addTool_js__WEBPACK_IMPORTED_MODULE_2__["addToolForElement"])(enabledElement, tool, props); + }); +} +/** + * Iterate over the globalToolChangeHistory and apply each `historyEvent` + * to the supplied `enabledElement`. + * @private + * @method + * @param {HTMLElement} enabledElement + * @returns {void} + */ + + +function _repeatGlobalToolHistory(enabledElement) { + var _getModule3 = Object(_index_js__WEBPACK_IMPORTED_MODULE_4__["getModule"])('globalConfiguration'), + configuration = _getModule3.configuration; + + if (!configuration.globalToolSyncEnabled) { + return; + } + + var setToolModeFns = { + active: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolActiveForElement"], + passive: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolPassiveForElement"], + enabled: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolEnabledForElement"], + disabled: _setToolMode_js__WEBPACK_IMPORTED_MODULE_3__["setToolDisabledForElement"] + }; + _index_js__WEBPACK_IMPORTED_MODULE_4__["default"].state.globalToolChangeHistory.forEach(function (historyEvent) { + var args = historyEvent.args.slice(0); + args.unshift(enabledElement); + setToolModeFns[historyEvent.mode].apply(null, args); + }); +} + +/***/ }), + +/***/ "./store/internals/removeEnabledElement.js": +/*!*************************************************!*\ + !*** ./store/internals/removeEnabledElement.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../eventListeners/index.js */ "./eventListeners/index.js"); +/* harmony import */ var _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../eventDispatchers/index.js */ "./eventDispatchers/index.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../index.js */ "./store/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('internals:removeEnabledElement'); +/** + * Element Disabled event. + * + * @event Cornerstone#ElementDisabled + * @type {Object} + * @property {string} type + * @property {Object} detail + * @property {HTMLElement} detail.element - The element being disabled. + */ + +/** + * Removes an enabledElement from our store, and all associated tools that were added to it. + * @export + * @private + * @method + * @name removeEnabledElement + * @param {Cornerstone#ElementDisabled} elementDisabledEvt + * @listens Cornerstone#ElementDisabled + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (elementDisabledEvt) { + logger.log('EVENT:ELEMENT_DISABLED'); + var enabledElement = elementDisabledEvt.detail.element; + + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_2__["getModule"])('globalConfiguration'), + configuration = _getModule.configuration; // Dispatchers + + + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["imageRenderedEventDispatcher"].disable(enabledElement); + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["newImageEventDispatcher"].disable(enabledElement); // Mouse + + if (configuration.mouseEnabled) { + _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["mouseEventListeners"].disable(enabledElement); + _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["wheelEventListener"].disable(enabledElement); + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["mouseToolEventDispatcher"].disable(enabledElement); + } // Touch + + + if (configuration.touchEnabled) { + _eventListeners_index_js__WEBPACK_IMPORTED_MODULE_0__["touchEventListeners"].disable(enabledElement); + _eventDispatchers_index_js__WEBPACK_IMPORTED_MODULE_1__["touchToolEventDispatcher"].disable(enabledElement); + } // State + + + _removeAllToolsForElement(enabledElement); + + _removeEnabledElement(enabledElement); + + _removeLoadHandlers(enabledElement); +}); +/** + * Remove all tools associated with enabled element. + * @private + * @method + * @param {HTMLElement} enabledElement + * @returns {void} + */ + +var _removeAllToolsForElement = function _removeAllToolsForElement(enabledElement) { + // Note: We may want to `setToolDisabled` before removing from store + // Or take other action to remove any lingering eventListeners/state + _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.tools = _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.tools.filter(function (tool) { + return tool.element !== enabledElement; + }); +}; +/** + * Remove the enabled element from the store if it exists. + * @private + * @method + * @param {HTMLElement} enabledElement + * @returns {void} + */ + + +var _removeEnabledElement = function _removeEnabledElement(enabledElement) { + if (_index_js__WEBPACK_IMPORTED_MODULE_2__["default"].modules) { + _cleanModulesOnElement(enabledElement); + } + + var foundElementIndex = _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.enabledElements.findIndex(function (element) { + return element === enabledElement; + }); + + if (foundElementIndex > -1) { + _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].state.enabledElements.splice(foundElementIndex, 1); + } else { + logger.warn('unable to remove element'); + } +}; +/** + * Remove load handler for the element + * @private + * @method + * @param {HTMLElement} element + * @returns {void} + */ + + +var _removeLoadHandlers = function _removeLoadHandlers(element) { + _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__["default"].removeHandlers(element); +}; +/** + * Iterate over our store's modules. If the module has a + * `removeEnabledElementCallback` call it and clean up unneeded metadata. + * @private + * @method + * @param {Object} enabledElement + * @returns {void} + */ + + +function _cleanModulesOnElement(enabledElement) { + var modules = _index_js__WEBPACK_IMPORTED_MODULE_2__["default"].modules; + Object.keys(modules).forEach(function (key) { + if (typeof modules[key].removeEnabledElementCallback === 'function') { + modules[key].removeEnabledElementCallback(enabledElement); + } + }); +} + +/***/ }), + +/***/ "./store/isToolActiveForElement.js": +/*!*****************************************!*\ + !*** ./store/isToolActiveForElement.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getToolForElement.js */ "./store/getToolForElement.js"); + +/** + * Queries if a tool is active on the specified element. + * @export + * @public + * @method + * @name isToolActiveForElement + * + * @param {HTMLElement} element The element being queried. + * @param {string} name The name of the tool. + * @returns {boolean} True if the tool is active. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, name) { + var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, name); + return tool.mode === 'active'; +}); + +/***/ }), + +/***/ "./store/modules/cursorModule.js": +/*!***************************************!*\ + !*** ./store/modules/cursorModule.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules */ "./externalModules.js"); + +var configuration = { + iconSize: 16, + viewBox: { + x: 16, + y: 16 + }, + mousePoint: { + x: 8, + y: 8 + }, + mousePointerGroupString: "\n \n \n " +}; +var setters = { + defaultOptions: function defaultOptions(newOptions) { + Object.assign(configuration, newOptions); + } +}; +var getters = { + defaultOptions: function defaultOptions() { + return configuration; + } +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + configuration: configuration, + getters: getters, + setters: setters +}); + +/***/ }), + +/***/ "./store/modules/globalConfigurationModule.js": +/*!****************************************************!*\ + !*** ./store/modules/globalConfigurationModule.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var configuration = { + mouseEnabled: true, + touchEnabled: true, + globalToolSyncEnabled: false, + showSVGCursors: false, + autoResizeViewports: true +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + configuration: configuration +}); + +/***/ }), + +/***/ "./store/modules/segmentationModule/activeLabelmapIndex.js": +/*!*****************************************************************!*\ + !*** ./store/modules/segmentationModule/activeLabelmapIndex.js ***! + \*****************************************************************/ +/*! exports provided: getActiveLabelmapIndex, setActiveLabelmapIndex */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveLabelmapIndex", function() { return getActiveLabelmapIndex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setActiveLabelmapIndex", function() { return setActiveLabelmapIndex; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _addLabelmap3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./addLabelmap3D */ "./store/modules/segmentationModule/addLabelmap3D.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../externalModules */ "./externalModules.js"); + + + + + +/** + * Returns the index of the active `Labelmap3D`. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone + * enabled element or its UUID. + * @returns {number} The index of the active `Labelmap3D`. + */ + +function getActiveLabelmapIndex(elementOrEnabledElementUID) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId]; + + if (!brushStackState) { + return; + } + + return brushStackState.activeLabelmapIndex; +} +/** + * Sets the active `labelmapIndex` for the `BrushStackState` displayed on this + * element. Creates the corresponding `Labelmap3D` if it doesn't exist. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} labelmapIndex = 0 The index of the labelmap. + * @returns {null} + */ + + +function setActiveLabelmapIndex(elementOrEnabledElementUID) { + var labelmapIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_4__["default"].cornerstone; + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var enabledElement = cornerstone.getEnabledElement(element); + var _enabledElement$image = enabledElement.image, + rows = _enabledElement$image.rows, + columns = _enabledElement$image.columns; + var numberOfFrames = stackData.imageIds.length; + var size = rows * columns * numberOfFrames; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId]; + + if (brushStackState) { + brushStackState.activeLabelmapIndex = labelmapIndex; + + if (!brushStackState.labelmaps3D[labelmapIndex]) { + Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_2__["default"])(brushStackState, labelmapIndex, size); + } + } else { + _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId] = { + activeLabelmapIndex: labelmapIndex, + labelmaps3D: [] + }; + brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId]; + Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_2__["default"])(brushStackState, labelmapIndex, size); + } + + cornerstone.updateImage(element); +} + + + +/***/ }), + +/***/ "./store/modules/segmentationModule/activeSegmentIndex.js": +/*!****************************************************************!*\ + !*** ./store/modules/segmentationModule/activeSegmentIndex.js ***! + \****************************************************************/ +/*! exports provided: getActiveSegmentIndex, setActiveSegmentIndex, incrementActiveSegmentIndex, decrementActiveSegmentIndex */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveSegmentIndex", function() { return getActiveSegmentIndex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setActiveSegmentIndex", function() { return setActiveSegmentIndex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "incrementActiveSegmentIndex", function() { return incrementActiveSegmentIndex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "decrementActiveSegmentIndex", function() { return decrementActiveSegmentIndex; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + + + + +/** + * Returns the `activeSegmentIndex` for the active `Labelmap3D` for the `BrushStackState` displayed on the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} [labelmapIndex] The labelmap index, defaults to the active labelmap index. + * @returns {number} The active segment index. + */ + +function getActiveSegmentIndex(elementOrEnabledElementUID, labelmapIndex) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (brushStackState) { + labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + + if (labelmap3D) { + return labelmap3D.activeSegmentIndex; + } + } + + return 1; +} +/** + * Sets the `activeSegmentIndex` for the active `Labelmap3D` on the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} segmentIndex The segmentIndex to set active. + * @returns {null} + */ + + +function setActiveSegmentIndex(elementOrEnabledElementUID, segmentIndex) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + return; + } + + var activeLabelmapIndex = brushStackState.activeLabelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex]; + + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + if (segmentIndex <= 0) { + segmentIndex = 1; + } else if (segmentIndex > configuration.segmentsPerLabelmap) { + segmentIndex = configuration.segmentsPerLabelmap; + } + + labelmap3D.activeSegmentIndex = segmentIndex; +} +/** + * Increment the `activeSegmentIndex` for the active `Labelmap3D` on the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @returns {null} + */ + + +function incrementActiveSegmentIndex(elementOrEnabledElementUID) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + _changeActiveSegmentIndex(element, 'increase'); +} +/** + * Decrement the `activeSegmentIndex` for the active `Labelmap3D` on the element. + * + * @param {HTMLElement} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @returns {null} + */ + + +function decrementActiveSegmentIndex(elementOrEnabledElementUID) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + _changeActiveSegmentIndex(element, 'decrease'); +} +/** + * Changes the `activeSegmentIndex` for the active `Labelmap3D` on the element. + * + * @param {HTMLElement} element The cornerstone enabled element. + * @param {string} increaseOrDecrease = Whether to increase/decrease the activeLabelmapIndex. + * @returns {null} + */ + + +function _changeActiveSegmentIndex(element) { + var increaseOrDecrease = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'increase'; + + var _getModule2 = Object(_index_js__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'), + configuration = _getModule2.configuration; + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + return; + } + + var activeLabelmapIndex = brushStackState.activeLabelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex]; + + switch (increaseOrDecrease) { + case 'increase': + labelmap3D.activeSegmentIndex++; + + if (labelmap3D.activeSegmentIndex > configuration.segmentsPerLabelmap) { + labelmap3D.activeSegmentIndex = 1; + } + + break; + + case 'decrease': + labelmap3D.activeSegmentIndex--; + + if (labelmap3D.activeSegmentIndex <= 0) { + labelmap3D.activeSegmentIndex = configuration.segmentsPerLabelmap; + } + + break; + } +} + + + +/***/ }), + +/***/ "./store/modules/segmentationModule/addLabelmap2D.js": +/*!***********************************************************!*\ + !*** ./store/modules/segmentationModule/addLabelmap2D.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return addLabelmap2D; }); +/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + + +var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].UINT_16_ARRAY, + FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].FLOAT_32_ARRAY; +/** + * Adds a `Labelmap2D` view of one frame of a `Labelmap3D`. + * + * @param {BrushStackState} brushStackState The `BrushStackState` for a particular `Series`. + * @param {number} labelmapIndex The labelmap index. + * @param {number} imageIdIndex The stack position of the image. + * @param {number} rows The number of rows in the image. + * @param {number} columns The number of columns in the image. + * @returns {null} + */ + +function addLabelmap2D(brushStackState, labelmapIndex, imageIdIndex, rows, columns) { + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + var sliceLength = rows * columns; + var elementOffset = sliceLength * imageIdIndex; + var pixelData; + + switch (configuration.arrayType) { + case UINT_16_ARRAY: + pixelData = new Uint16Array(brushStackState.labelmaps3D[labelmapIndex].buffer, elementOffset * 2, // 2 bytes/voxel + sliceLength); + break; + + case FLOAT_32_ARRAY: + pixelData = new Float32Array(brushStackState.labelmaps3D[labelmapIndex].buffer, elementOffset * 4, // 4 bytes/voxel + sliceLength); + break; + + default: + throw new Error("Unsupported Array Type ".concat(configuration.arrayType)); + } + + brushStackState.labelmaps3D[labelmapIndex].labelmaps2D[imageIdIndex] = { + pixelData: pixelData, + segmentsOnLabelmap: [] + }; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/addLabelmap3D.js": +/*!***********************************************************!*\ + !*** ./store/modules/segmentationModule/addLabelmap3D.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return addLabelmap3D; }); +/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + + +var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].UINT_16_ARRAY, + FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].FLOAT_32_ARRAY; +/** + * AddLabelmap3D - Adds a `Labelmap3D` object to the `BrushStackState` object. + * + * @param {BrushStackState} brushStackState The labelmap state for a particular stack. + * @param {number} labelmapIndex The labelmapIndex to set. + * @param {number} size The size of the ArrayBuffer in bytes/ 2. + * @returns {null} + */ + +function addLabelmap3D(brushStackState, labelmapIndex, size) { + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + var bytesPerVoxel; + + switch (configuration.arrayType) { + case UINT_16_ARRAY: + bytesPerVoxel = 2; + break; + + case FLOAT_32_ARRAY: + bytesPerVoxel = 4; + break; + + default: + throw new Error("Unsupported Array Type ".concat(configuration.arrayType)); + } // Buffer size is multiplied by bytesPerVoxel to allocate enough space. + + + brushStackState.labelmaps3D[labelmapIndex] = { + buffer: new ArrayBuffer(size * bytesPerVoxel), + labelmaps2D: [], + metadata: [], + activeSegmentIndex: 1, + colorLUTIndex: 0, + segmentsHidden: [], + undo: [], + redo: [] + }; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/arrayTypes.js": +/*!********************************************************!*\ + !*** ./store/modules/segmentationModule/arrayTypes.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var ARRAY_TYPES = { + UINT_16_ARRAY: 0, + FLOAT_32_ARRAY: 1 +}; +/* harmony default export */ __webpack_exports__["default"] = (ARRAY_TYPES); + +/***/ }), + +/***/ "./store/modules/segmentationModule/colorLUT.js": +/*!******************************************************!*\ + !*** ./store/modules/segmentationModule/colorLUT.js ***! + \******************************************************/ +/*! exports provided: default, setColorLUTIndexForLabelmap3D, getColorForSegmentIndexColorLUT, setColorForSegmentIndexOfColorLUT, getColorLUT */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return setColorLUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setColorLUTIndexForLabelmap3D", function() { return setColorLUTIndexForLabelmap3D; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColorForSegmentIndexColorLUT", function() { return getColorForSegmentIndexColorLUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setColorForSegmentIndexOfColorLUT", function() { return setColorForSegmentIndexOfColorLUT; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getColorLUT", function() { return getColorLUT; }); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('store:modules:segmentationModule:setColorLUT'); +/** + * SetColorLUT - Sets the labelmap to a specfic LUT, or generates a new LUT. + * + * @param {number} labelmapIndex The labelmap index to apply the color LUT to. + * @param {number[][]} [colorLUT] An array of The colorLUT to set. + * @returns {null} + */ + +function setColorLUT(colorLUTIndex) { + var colorLUT = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_3__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + var segmentsPerLabelmap = configuration.segmentsPerLabelmap; + + if (colorLUT) { + _checkColorLUTLength(colorLUT, segmentsPerLabelmap); + + if (colorLUT.length < segmentsPerLabelmap) { + colorLUT = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(colorLUT), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(_generateNewColorLUT(segmentsPerLabelmap - colorLUT.length))); + } + } else { + // Autogenerate colorLUT. + colorLUT = colorLUT || _generateNewColorLUT(segmentsPerLabelmap); + } // Apppend the "zero" (no label) color to the front of the LUT. + + + colorLUT.unshift([0, 0, 0, 0]); + _state__WEBPACK_IMPORTED_MODULE_2__["default"].colorLutTables[colorLUTIndex] = colorLUT; +} +function setColorLUTIndexForLabelmap3D(labelmap3D, colorLUTIndex) { + labelmap3D.colorLUTIndex = colorLUTIndex; +} +function getColorForSegmentIndexColorLUT(labelmap3DOrColorLUTIndex, segmentIndex) { + var colorLUT = getColorLUT(labelmap3DOrColorLUTIndex); + return colorLUT[segmentIndex]; +} +/** + * Sets a single color of a colorLUT. + * + * @param {Object|number} labelmap3DOrColorLUTIndex Either a `Labelmap3D` object (who's referenced colorLUT will be changed), or a colorLUTIndex. + * @param {number} segmentIndex The segmentIndex color to change. + * @param {[number,number,number,number]} colorArray The color values in RGBA array format. + */ + +function setColorForSegmentIndexOfColorLUT(labelmap3DOrColorLUTIndex, segmentIndex, colorArray) { + var colorLUT = getColorLUT(labelmap3DOrColorLUTIndex); + colorLUT[segmentIndex] = colorArray; +} +function getColorLUT(labelmap3DOrColorLUTIndex) { + if (typeof labelmap3DOrColorLUTIndex === 'number') { + return _state__WEBPACK_IMPORTED_MODULE_2__["default"].colorLutTables[labelmap3DOrColorLUTIndex]; + } + + return _state__WEBPACK_IMPORTED_MODULE_2__["default"].colorLutTables[labelmap3DOrColorLUTIndex.colorLUTIndex]; +} +/** + * Checks the length of `colorLUT` compared to `segmnetsPerLabelmap` and flags up any warnings. + * @param {number[][]} colorLUT + * @param {number} segmentsPerLabelmap + * @returns {boolean} Whether the length is valid. + */ + +function _checkColorLUTLength(colorLUT, segmentsPerLabelmap) { + if (colorLUT.length < segmentsPerLabelmap) { + logger.warn("The provided colorLUT only provides ".concat(colorLUT.length, " labels, whereas segmentsPerLabelmap is set to ").concat(segmentsPerLabelmap, ". Autogenerating the rest.")); + } else if (colorLUT.length > segmentsPerLabelmap) { + logger.warn("segmentsPerLabelmap is set to ".concat(segmentsPerLabelmap, ", and the provided colorLUT provides ").concat(colorLUT.length, ". Using the first ").concat(segmentsPerLabelmap, " colors from the LUT.")); + } +} +/** + * Generates a new color LUT (Look Up Table) of length `numberOfColors`, + * which returns an RGBA color for each segment index. + * + * @param {Number} numberOfColors = 255 The number of colors to generate + * @returns {Number[][]} The array of RGB values. + */ + + +function _generateNewColorLUT() { + var numberOfColors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 255; + var rgbArr = []; + + for (var i = 0; i < numberOfColors; i++) { + rgbArr.push(getRGBAfromHSLA(getNextHue(), getNextL())); + } + + return rgbArr; +} + +var goldenAngle = 137.5; +var hueValue = 222.5; + +function getNextHue() { + hueValue += goldenAngle; + + if (hueValue >= 360) { + hueValue -= 360; + } + + return hueValue; +} + +var l = 0.6; +var maxL = 0.82; +var minL = 0.3; +var incL = 0.07; + +function getNextL() { + l += incL; + + if (l > maxL) { + var diff = l - maxL; + l = minL + diff; + } + + return l; +} +/** + * GetRGBAfromHSL - Returns an RGBA color given H, S, L and A. + * + * @param {Number} hue The hue. + * @param {Number} s = 1 The saturation. + * @param {Number} l = 0.6 The lightness. + * @param {Number} alpha = 255 The alpha. + * @returns {Number[]} The RGBA formatted color. + */ + + +function getRGBAfromHSLA(hue) { + var s = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + var l = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.6; + var alpha = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 255; + var c = (1 - Math.abs(2 * l - 1)) * s; + var x = c * (1 - Math.abs(hue / 60 % 2 - 1)); + var m = l - c / 2; + var r, g, b; + + if (hue < 60) { + r = c; + g = x; + b = 0; + } else if (hue < 120) { + r = x; + g = c; + b = 0; + } else if (hue < 180) { + r = 0; + g = c; + b = x; + } else if (hue < 240) { + r = 0; + g = x; + b = c; + } else if (hue < 300) { + r = x; + g = 0; + b = c; + } else if (hue < 360) { + r = c; + g = 0; + b = x; + } + + return [(r + m) * 255, (g + m) * 255, (b + m) * 255, alpha]; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/defaultConfiguration.js": +/*!******************************************************************!*\ + !*** ./store/modules/segmentationModule/defaultConfiguration.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js"); + +var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_0__["default"].UINT_16_ARRAY; // Segmentation module configuration. + +var defaultConfiguration = { + renderOutline: true, + renderFill: true, + shouldRenderInactiveLabelmaps: true, + radius: 10, + minRadius: 1, + maxRadius: 50, + fillAlpha: 0.2, + fillAlphaInactive: 0.1, + outlineAlpha: 0.7, + outlineAlphaInactive: 0.35, + outlineWidth: 3, + storeHistory: true, + segmentsPerLabelmap: 65535, + // Max is 65535 due to using 16-bit Unsigned ints. + arrayType: UINT_16_ARRAY +}; +/* harmony default export */ __webpack_exports__["default"] = (defaultConfiguration); + +/***/ }), + +/***/ "./store/modules/segmentationModule/deleteSegment.js": +/*!***********************************************************!*\ + !*** ./store/modules/segmentationModule/deleteSegment.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return deleteSegment; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../externalModules */ "./externalModules.js"); + + + + +/** + * Deletes the segment and any associated metadata from the `Labelmap3D`. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled element or its UUID. + * @param {number} segmentIndex The segment Index + * @param {number} [labelmapIndex] The labelmap index. Defaults to the active labelmap index. + * + * @returns {null} + */ + +function deleteSegment(elementOrEnabledElementUID, segmentIndex, labelmapIndex) { + if (!segmentIndex) { + return; + } + + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + return; + } + + labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + + if (!labelmap3D) { + return; + } // Delete metadata if present. + + + delete labelmap3D.metadata[segmentIndex]; + var labelmaps2D = labelmap3D.labelmaps2D; // Clear segment's voxels. + + for (var i = 0; i < labelmaps2D.length; i++) { + var labelmap2D = labelmaps2D[i]; // If the labelmap2D has data, and it contains the segment, delete it. + + if (labelmap2D && labelmap2D.segmentsOnLabelmap.includes(segmentIndex)) { + var pixelData = labelmap2D.pixelData; // Remove this segment from the list. + + var indexOfSegment = labelmap2D.segmentsOnLabelmap.indexOf(segmentIndex); + labelmap2D.segmentsOnLabelmap.splice(indexOfSegment, 1); // Delete the label for this segment. + + for (var p = 0; p < pixelData.length; p++) { + if (pixelData[p] === segmentIndex) { + pixelData[p] = 0; + } + } + } + } + + _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.updateImage(element); +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getBrushColor.js": +/*!***********************************************************!*\ + !*** ./store/modules/segmentationModule/getBrushColor.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getBrushColor; }); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:getBrushColor'); +/** + * Returns the brush color as a rgba CSS color for the active segment of the active + * `Labelmap3D` for the `BrushStackState` displayed on the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {boolean} drawing = false Whether the user is drawing or not. + * @returns {string} An rgba value as a string. + */ + +function getBrushColor(elementOrEnabledElementUID) { + var drawing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_2__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, 'stack'); + + if (!stackState) { + logger.error('Consumers must define stacks in their application if using segmentations in cornerstoneTools.'); + return; + } + + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_1__["default"].series[firstImageId]; + var color; + + if (brushStackState) { + var activeLabelmapIndex = brushStackState.activeLabelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex]; + var activeSegmentIndex = labelmap3D.activeSegmentIndex; + color = _state__WEBPACK_IMPORTED_MODULE_1__["default"].colorLutTables[labelmap3D.colorLUTIndex][activeSegmentIndex]; + } else { + // No data yet, make brush the default color of colormap 0. + color = _state__WEBPACK_IMPORTED_MODULE_1__["default"].colorLutTables[0][1]; + } + + return drawing ? "rgba(".concat(color[0], ", ").concat(color[1], ", ").concat(color[2], ", 1.0 )") : "rgba(".concat(color[0], ", ").concat(color[1], ", ").concat(color[2], ", 0.8 )"); +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getElement.js": +/*!********************************************************!*\ + !*** ./store/modules/segmentationModule/getElement.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _getElement; }); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + +/** + * Returns the cornerstone enabled element given either the element or its enabledElement UUID. + * + * @param {string|HTMLElement} elementOrEnabledElementUID The enabledElement + * or its UUID. + * @returns {HTMLElement} + */ + +function _getElement(elementOrEnabledElementUID) { + if (elementOrEnabledElementUID instanceof HTMLElement) { + return elementOrEnabledElementUID; + } + + return _index_js__WEBPACK_IMPORTED_MODULE_0__["getters"].enabledElementByUID(elementOrEnabledElementUID); +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getLabelmap2D.js": +/*!***********************************************************!*\ + !*** ./store/modules/segmentationModule/getLabelmap2D.js ***! + \***********************************************************/ +/*! exports provided: default, getLabelmap2DByImageIdIndex */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getLabelmap2D; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLabelmap2DByImageIdIndex", function() { return getLabelmap2DByImageIdIndex; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getSegmentsOnPixeldata */ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js"); +/* harmony import */ var _addLabelmap3D__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./addLabelmap3D */ "./store/modules/segmentationModule/addLabelmap3D.js"); +/* harmony import */ var _addLabelmap2D__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addLabelmap2D */ "./store/modules/segmentationModule/addLabelmap2D.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../externalModules */ "./externalModules.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + + + + + + + +var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_7__["default"].UINT_16_ARRAY, + FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_7__["default"].FLOAT_32_ARRAY; +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('store:modules:segmentationModule:getLabelmap2D'); +/** + * Returns the active `labelmap3D` and the `currentImageIdIndex`. If a labelmap does + * not get exist, creates a new one. Generates a `labelmap2D` for the `currentImageIndex` + * if it does not yet exist. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @returns {Object} The `Labelmap2D`, `Labelmap3D`, `activeLabelmapIndex` and `currentImageIdIndex`. + */ + +function getLabelmap2D(elementOrEnabledElementUID) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone; + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + + if (!stackState) { + logger.error('Consumers must define stacks in their application if using segmentations in cornerstoneTools.'); + return; + } + + var stackData = stackState.data[0]; + var enabledElement = cornerstone.getEnabledElement(element); + var currentImageIdIndex = stackData.currentImageIdIndex; + var _enabledElement$image = enabledElement.image, + rows = _enabledElement$image.rows, + columns = _enabledElement$image.columns; + var numberOfFrames = stackData.imageIds.length; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_6__["default"].series[firstImageId]; + var activeLabelmapIndex; + + if (brushStackState) { + activeLabelmapIndex = brushStackState.activeLabelmapIndex; + + if (!brushStackState.labelmaps3D[activeLabelmapIndex]) { + var size = rows * columns * numberOfFrames; + Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_3__["default"])(brushStackState, activeLabelmapIndex, size); + } + + if (!brushStackState.labelmaps3D[activeLabelmapIndex].labelmaps2D[currentImageIdIndex]) { + Object(_addLabelmap2D__WEBPACK_IMPORTED_MODULE_4__["default"])(brushStackState, activeLabelmapIndex, currentImageIdIndex, rows, columns); + } + } else { + activeLabelmapIndex = 0; + _state__WEBPACK_IMPORTED_MODULE_6__["default"].series[firstImageId] = { + activeLabelmapIndex: activeLabelmapIndex, + labelmaps3D: [] + }; + brushStackState = _state__WEBPACK_IMPORTED_MODULE_6__["default"].series[firstImageId]; + + var _size = rows * columns * numberOfFrames; + + Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_3__["default"])(brushStackState, activeLabelmapIndex, _size); + Object(_addLabelmap2D__WEBPACK_IMPORTED_MODULE_4__["default"])(brushStackState, activeLabelmapIndex, currentImageIdIndex, rows, columns); + } + + var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex]; + return { + labelmap2D: labelmap3D.labelmaps2D[currentImageIdIndex], + labelmap3D: labelmap3D, + currentImageIdIndex: currentImageIdIndex, + activeLabelmapIndex: activeLabelmapIndex + }; +} +/** + * Returns a `Labelmap2D` view of a `Labelmap3D` for the given `imageIdIndex`. + * Creates and caches it if it doesn't yet exist. + * + * @param {Labelmap3D} labelmap3D The `Labelmap3D` object. + * @param {number} imageIdIndex The imageId Index. + * @param {number} rows The number of rows. + * @param {number} columns The number of columns. + * @returns {null} + */ + +function getLabelmap2DByImageIdIndex(labelmap3D, imageIdIndex, rows, columns) { + if (!labelmap3D.labelmaps2D[imageIdIndex]) { + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_8__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + var sliceLength = rows * columns; + var elementOffset = sliceLength * imageIdIndex; + var pixelData; + + switch (configuration.arrayType) { + case UINT_16_ARRAY: + pixelData = new Uint16Array(labelmap3D.buffer, elementOffset * 2, // 2 bytes/voxel + sliceLength); + break; + + case FLOAT_32_ARRAY: + pixelData = new Float32Array(labelmap3D.buffer, elementOffset * 4, // 4 bytes/voxel + sliceLength); + break; + + default: + throw new Error("Unsupported Array Type ".concat(configuration.arrayType)); + } + + labelmap3D.labelmaps2D[imageIdIndex] = { + pixelData: pixelData, + segmentsOnLabelmap: Object(_getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_2__["default"])(pixelData) + }; + } + + return labelmap3D.labelmaps2D[imageIdIndex]; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getLabelmapBuffers.js": +/*!****************************************************************!*\ + !*** ./store/modules/segmentationModule/getLabelmapBuffers.js ***! + \****************************************************************/ +/*! exports provided: getLabelmapBuffers, getActiveLabelmapBuffer */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLabelmapBuffers", function() { return getLabelmapBuffers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getActiveLabelmapBuffer", function() { return getActiveLabelmapBuffer; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getLabelmaps3D */ "./store/modules/segmentationModule/getLabelmaps3D.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + + + + + + +var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_4__["default"].UINT_16_ARRAY, + FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_4__["default"].FLOAT_32_ARRAY; +/** + * GetLabelmapBuffers - Returns the `buffer` of each `Labelmap3D` associated + * with the `BrushStackState` displayed on the element, or a specific + * one if `labelmapIndex` is defined. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {type} [labelmapIndex] Optional filtering to only return one labelmap. + * @returns {Object|Object[]} An array of objects containing the `labelmapIndex`, and the corresponding buffer and `colorLUT`. + * Only one object if `labelmapIndex` was specified. + * + */ + +function getLabelmapBuffers(elementOrEnabledElementUID, labelmapIndex) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var _getLabelmaps3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_2__["default"])(element), + labelmaps3D = _getLabelmaps3D.labelmaps3D; + + if (!labelmaps3D) { + return []; + } + + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_5__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + var type; + var bytesPerVoxel; + + switch (configuration.arrayType) { + case UINT_16_ARRAY: + type = 'Uint16Array'; + bytesPerVoxel = '2'; + break; + + case FLOAT_32_ARRAY: + type = 'Float32Array'; + bytesPerVoxel = '4'; + break; + + default: + throw new Error("Unsupported Array Type ".concat(configuration.arrayType)); + } + + var colorLutTables = _state__WEBPACK_IMPORTED_MODULE_3__["default"].colorLutTables; + + if (labelmapIndex !== undefined) { + var labelmap3D = labelmaps3D[labelmapIndex]; + + if (labelmap3D) { + return { + labelmapIndex: labelmapIndex, + bytesPerVoxel: bytesPerVoxel, + type: type, + buffer: labelmap3D.buffer, + colorLUT: colorLutTables[labelmap3D.colorLUTIndex] + }; + } + + return; + } + + var labelmapBuffers = []; + + for (var i = 0; i < labelmaps3D.length; i++) { + var _labelmap3D = labelmaps3D[i]; + + if (_labelmap3D) { + labelmapBuffers.push({ + labelmapIndex: i, + bytesPerVoxel: 2, + buffer: _labelmap3D.buffer, + colorLUT: colorLutTables[_labelmap3D.colorLUTIndex] + }); + } + } + + return labelmapBuffers; +} +/** + * Returns the `buffer` corresponding to the active `Labelmap3D` associated with the + * `BrushStackState` displayed onv the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @returns {Object} An object containing the `labelmapIndex` and + * corresponding `buffer`. + */ + + +function getActiveLabelmapBuffer(elementOrEnabledElementUID) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var imageIds = stackState.data[0].imageIds; + var firstImageId = imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_3__["default"].series[firstImageId]; + + if (!brushStackState) { + return; + } + + var activeLabelmapIndex = brushStackState.activeLabelmapIndex; + return getLabelmapBuffers(element, activeLabelmapIndex); +} + + + +/***/ }), + +/***/ "./store/modules/segmentationModule/getLabelmapStats.js": +/*!**************************************************************!*\ + !*** ./store/modules/segmentationModule/getLabelmapStats.js ***! + \**************************************************************/ +/*! exports provided: default, _calculateLabelmapStats */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getLabelmapStats; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_calculateLabelmapStats", function() { return _calculateLabelmapStats; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../externalModules */ "./externalModules.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:modules:segmentationModule:getLabelmapStats'); +/** + * Returns the maximum pixel value, mean and standard deviation of the segment + * given by the `segmentIndex` and `labelmapIndex`. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} segmentIndex The segment index to query. + * @param {number} labelmapIndex The `labelmapIndex` of the `Labelmap3D` to query. + * Defaults to the activeLabelmapIndex if not given. + * @returns {Promise|null} A promise that resolves to an object containing + * the maximum pixel value, the mean and the standard deviation. + * Returns null if no cornerstone element is found. + */ + +function getLabelmapStats(elementOrEnabledElementUID, segmentIndex, labelmapIndex) { + var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone; + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return null; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var imageIds = stackState.data[0].imageIds; + var firstImageId = imageIds[0]; + return new Promise(function (resolve) { + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + resolve(null); + } + + var _getImagePlanes2 = _getImagePlanes(imageIds), + sufficientMetadata = _getImagePlanes2.sufficientMetadata, + imagePlanes = _getImagePlanes2.imagePlanes; + + if (!sufficientMetadata) { + logger.warn('Insufficient imagePlaneModule information to calculate volume statistics.'); + resolve(null); + } + + labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + var imagePromises = []; + + for (var i = 0; i < imageIds.length; i++) { + imagePromises.push(cornerstone.loadAndCacheImage(imageIds[i])); + } + + Promise.all(imagePromises).then(function (images) { + var stats = _calculateLabelmapStats(labelmap3D, images, imagePlanes, segmentIndex); + + resolve(stats); + }); + }); +} +/** + * + * @param {string[]} imageIds An array of cornerstone imageIds. + * @returns {Object} An object containing an array of per-frame imagePlane metadata, + * and a flag indicating if the metadata was present. + */ + +function _getImagePlanes(imageIds) { + var imagePlanes = []; + var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone; + var metadataProvider = cornerstone.metaData; + var sufficientMetadata = true; + + for (var i = 0; i < imageIds.length; i++) { + var imagePlaneModule = metadataProvider.get('imagePlaneModule', imageIds[i]); + + if (!imagePlaneModule) { + sufficientMetadata = false; + break; + } + + imagePlanes.push(imagePlaneModule); + } + + return { + sufficientMetadata: sufficientMetadata, + imagePlanes: imagePlanes + }; +} +/** + * + * @param {Labelmap3D} labelmap3D The labelmap3D object. + * @param {Object[]} images An array of cornerstone images. + * @param {Object[]} imagePlanes An array of the per-frame imagePlane metadata. + * @param {number} segmentIndex + * + * @returns {Object} Statistics object containing the volume in mm^3; and the + * min, max, mean and stdev of the segmented voxels. + */ + + +function _calculateLabelmapStats(labelmap3D, images, imagePlanes, segmentIndex) { + var voxelsPerFrame = _getVoxelsPerFrameForSegment(labelmap3D, images, imagePlanes, segmentIndex); + + var volumeWeightedMean = 0; + var max = voxelsPerFrame[0].values[0]; + var min = max; + var volume = 0; // Calculate Min, Max, volume and mean. + + for (var i = 0; i < voxelsPerFrame.length; i++) { + var _voxelsPerFrame$i = voxelsPerFrame[i], + values = _voxelsPerFrame$i.values, + voxelInMM3 = _voxelsPerFrame$i.voxelInMM3; + volume += voxelInMM3 * values.length; + var sum = 0; + values.forEach(function (value) { + if (value > max) { + max = value; + } else if (value < min) { + min = value; + } + + sum += value; + }); + volumeWeightedMean += sum * voxelInMM3; + } + + volumeWeightedMean /= volume; + var volumeWeightedStDev = 0; // Calculate the volume weigthed standard deviation. + + for (var _i = 0; _i < voxelsPerFrame.length; _i++) { + var _voxelsPerFrame$_i = voxelsPerFrame[_i], + values = _voxelsPerFrame$_i.values, + voxelInMM3 = _voxelsPerFrame$_i.voxelInMM3; + var stdDevSum = 0; + values.forEach(function (value) { + stdDevSum += Math.pow(value - volumeWeightedMean, 2); + }); + volumeWeightedStDev += stdDevSum * voxelInMM3; + } + + volumeWeightedStDev /= volume; + volumeWeightedStDev = Math.sqrt(volumeWeightedStDev); + return { + volume: volume, + mean: volumeWeightedMean, + stdDev: volumeWeightedStDev, + max: max, + min: min + }; +} +/** + * Returns an array of voxel values masked by the segment for each frame, + * as well as the real world volume of a voxel on that frame. + * + * @param {Labelmap3D} labelmap3D The `Labelmap3D` object. + * @param {Object[]} images An array of cornerstone images. + * @param {Object[]} imagePlanes An array of the per-frame imagePlane metadata. + * @param {number} segmentIndex The index of the segment to check. + * + * @returns {Object[]} An array of voxel values and voxel volumes per frame. + */ + +function _getVoxelsPerFrameForSegment(labelmap3D, images, imagePlanes, segmentIndex) { + var _images$ = images[0], + rowPixelSpacing = _images$.rowPixelSpacing, + columnPixelSpacing = _images$.columnPixelSpacing; + var labelmaps2D = labelmap3D.labelmaps2D; + var voxelsPerFrame = []; + + for (var i = 0; i < labelmaps2D.length; i++) { + var labelmap2D = labelmaps2D[i]; + + if (labelmap2D && labelmap2D.segmentsOnLabelmap.includes(segmentIndex)) { + var sliceThickness = _getSliceThickness(images, imagePlanes, i); + + var voxelInMM3 = sliceThickness * rowPixelSpacing * columnPixelSpacing; + var segmentationPixelData = labelmap2D.pixelData; + var imagePixelData = images[i].getPixelData(); + var values = []; // Iterate over segmentationPixelData and count voxels. + + for (var p = 0; p < segmentationPixelData.length; p++) { + if (segmentationPixelData[p] === segmentIndex) { + values.push(imagePixelData[p]); + } + } + + voxelsPerFrame.push({ + voxelInMM3: voxelInMM3, + values: values + }); + } + } + + return voxelsPerFrame; +} +/** + * Estimates the slice thickness given the image position patient of adjacent frames. + * For the edges the slice thickness is assumed to be the perpendicular distance to the closest frame. + * For all other frames the slice thickness is taken to be the sum of half of the distance to the frame above and below. + * + * Voxels on the first or last frame are assumed to be full occupied. + * + * @param {Object[]} images An array of cornerstone images. + * @param {Object[]} imagePlanes An array of the per-frame imagePlane metadata. + * @param {number} frameIndex The index of the frame to get the slice thickness for. + * + * @returns {number} + */ + + +function _getSliceThickness(images, imagePlanes, frameIndex) { + var numberOfSlices = images.length; + var ipp = imagePlanes[frameIndex].imagePositionPatient; // Special cases: Edge of volume - Assume thickness is the distance + // between the current slice and the closest slice as this is all the information we have. + + if (frameIndex === 0) { + var _ippAbove = imagePlanes[frameIndex + 1].imagePositionPatient; + return distanceBetweenSlices(ipp, _ippAbove); + } else if (frameIndex === numberOfSlices - 1) { + var _ippBelow = imagePlanes[frameIndex - 1].imagePositionPatient; + return distanceBetweenSlices(ipp, _ippBelow); + } // Estimate slice thickness from the two adjacent slices. + + + var ippBelow = imagePlanes[frameIndex - 1].imagePositionPatient; + var ippAbove = imagePlanes[frameIndex + 1].imagePositionPatient; + return (distanceBetweenSlices(ipp, ippBelow) + distanceBetweenSlices(ipp, ippAbove)) / 2; +} +/** + * Returns the ditance between two imagePostionPatient coordinates. + * + * @param {number[]} ipp1 The first image position patient array. + * @param {number[]} ipp2 The second image position patient array. + */ + + +function distanceBetweenSlices(ipp1, ipp2) { + return Math.sqrt(Math.pow(ipp1[0] - ipp2[0], 2) + Math.pow(ipp1[1] - ipp2[1], 2) + Math.pow(ipp1[2] - ipp2[2], 2)); +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getLabelmaps3D.js": +/*!************************************************************!*\ + !*** ./store/modules/segmentationModule/getLabelmaps3D.js ***! + \************************************************************/ +/*! exports provided: default, getLabelmap3D */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getLabelmaps3D; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLabelmap3D", function() { return getLabelmap3D; }); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:getLabelmaps3D'); +/** + * Returns the `Labelmap3D` objects associated with the series displayed + * in the element, the `activeLabelmapIndex` and the `currentImageIdIndex`. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @returns {Object} An object containing `Labelmap3D` objects, + * the `activeLabelmapIndex` amd the `currentImageIdIndex`. + */ + +function getLabelmaps3D(elementOrEnabledElementUID) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_1__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, 'stack'); + + if (!stackState) { + logger.error('Consumers must define stacks in their application if using segmentations in cornerstoneTools.'); + return; + } + + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + var labelmaps3D; + var activeLabelmapIndex; + + if (brushStackState) { + labelmaps3D = brushStackState.labelmaps3D; + activeLabelmapIndex = brushStackState.activeLabelmapIndex; + } + + return { + labelmaps3D: labelmaps3D, + activeLabelmapIndex: activeLabelmapIndex, + currentImageIdIndex: stackData.currentImageIdIndex + }; +} +/** + * Returns a single `Labelmap3D` object associated with the series displayed + * in the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} [labelmapIndex] The index of the `Labelmap3D` to retrieve. Defaults to + * the `activeLabelmapIndex`. + * @returns {Object} A `Labelmap3D` object. + */ + +function getLabelmap3D(elementOrEnabledElementUID, labelmapIndex) { + var _getLabelmaps3D = getLabelmaps3D(elementOrEnabledElementUID), + labelmaps3D = _getLabelmaps3D.labelmaps3D, + activeLabelmapIndex = _getLabelmaps3D.activeLabelmapIndex; + + labelmapIndex = labelmapIndex !== undefined ? labelmapIndex : activeLabelmapIndex; + return labelmaps3D[labelmapIndex]; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getSegmentOfActiveLabelmapAtEvent.js": +/*!*******************************************************************************!*\ + !*** ./store/modules/segmentationModule/getSegmentOfActiveLabelmapAtEvent.js ***! + \*******************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getSegmentOfActiveLabelmapAtEvent; }); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _util_isPointInImage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/isPointInImage */ "./util/isPointInImage.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:getSegmentOfActiveLabelmapAtEvent'); +/** + * Returns the segmentIndex at the event position and its corresponding metadata. + * @param {Object} evt A cornerstone event with a currentPoints property. + * + * @returns {Object} An `Object` with the `segmentIndex` and its `metadata`. + */ + +function getSegmentOfActiveLabelmapAtEvent(evt) { + var eventData = evt.detail; + var element = eventData.element, + image = eventData.image, + currentPoints = eventData.currentPoints; + + if (!currentPoints) { + logger.warn('Not a cornerstone input event.'); + return; + } + + var cols = image.width; + var rows = image.height; + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_0__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var currentImageIdIndex = stackData.currentImageIdIndex; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_1__["default"].series[firstImageId]; + var activeLabelmapIndex = brushStackState.activeLabelmapIndex; + var labelmap3D = brushStackState.labelmaps3D[activeLabelmapIndex]; + + if (!labelmap3D) { + // No labelmap3D === no segment here. + return; + } + + var labelmap2D = labelmap3D.labelmaps2D[currentImageIdIndex]; + + if (!labelmap2D) { + // No labelmap on this imageId === no segment here. + return; + } + + var pixelData = labelmap2D.pixelData; + var _currentPoints$image = currentPoints.image, + x = _currentPoints$image.x, + y = _currentPoints$image.y; + x = Math.floor(x); + y = Math.floor(y); + + if (Object(_util_isPointInImage__WEBPACK_IMPORTED_MODULE_2__["default"])({ + x: x, + y: y + }, rows, cols)) { + var segmentIndex = pixelData[y * cols + x]; + + if (segmentIndex === 0) { + return; + } + + return { + segmentIndex: segmentIndex, + metadata: labelmap3D.metadata[segmentIndex] + }; + } // Outside image === no segment here. + + + return; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js": +/*!********************************************************************!*\ + !*** ./store/modules/segmentationModule/getSegmentsOnPixeldata.js ***! + \********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getSegmentsOnPixelData; }); +/** + * Returns an array of the segment indicies present on the `pixelData`. + * @param {UInt16Array|Float32Array} pixelData The pixel data array. + */ +function getSegmentsOnPixelData(pixelData) { + var segmentSet = new Set(pixelData); + var iterator = segmentSet.values(); + var segmentsOnLabelmap = []; + var done = false; + + while (!done) { + var next = iterator.next(); + done = next.done; + + if (!done) { + segmentsOnLabelmap.push(next.value); + } + } + + return segmentsOnLabelmap; +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/history.js": +/*!*****************************************************!*\ + !*** ./store/modules/segmentationModule/history.js ***! + \*****************************************************/ +/*! exports provided: pushState, undo, redo */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pushState", function() { return pushState; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "undo", function() { return undo; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "redo", function() { return redo; }); +/* harmony import */ var _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getLabelmaps3D */ "./store/modules/segmentationModule/getLabelmaps3D.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../externalModules */ "./externalModules.js"); + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('util:segmentation:labelmap3DHistory'); + +function pushState(element, operations, labelmapIndex) { + var labelmap3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__["getLabelmap3D"])(element, labelmapIndex); + labelmap3D.undo.push(operations); + labelmap3D.redo = []; +} + +function undo(element, labelmapIndex) { + var labelmap3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__["getLabelmap3D"])(element, labelmapIndex); + var undo = labelmap3D.undo, + redo = labelmap3D.redo; + + if (!undo.length) { + logger.warn('No undos left.'); + return; + } // Pop last set of operations from undo. + + + var operations = undo.pop(); // Undo operations. + + applyState(labelmap3D, operations, 1); // Push set of operations to redo. + + redo.push(operations); + _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.updateImage(element); +} + +function redo(element, labelmapIndex) { + var labelmap3D = Object(_getLabelmaps3D__WEBPACK_IMPORTED_MODULE_0__["getLabelmap3D"])(element, labelmapIndex); + var undo = labelmap3D.undo, + redo = labelmap3D.redo; + + if (!redo.length) { + logger.warn('No redos left.'); + return; + } // Pop last set of operations from redo. + + + var operations = redo.pop(); // Redo operations. + + applyState(labelmap3D, operations, 2); // Push set of operations to undo. + + undo.push(operations); + _externalModules__WEBPACK_IMPORTED_MODULE_2__["default"].cornerstone.updateImage(element); +} + + + +function applyState(labelmap3D, operations, replaceIndex) { + var labelmaps2D = labelmap3D.labelmaps2D; + operations.forEach(function (operation) { + var imageIdIndex = operation.imageIdIndex, + diff = operation.diff; + var labelmap2D = labelmaps2D[imageIdIndex]; + var pixelData = labelmap2D.pixelData; + + for (var i = 0; i < diff.length; i++) { + var diffI = diff[i]; + pixelData[diffI[0]] = diffI[replaceIndex]; + } + }); +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/index.js": +/*!***************************************************!*\ + !*** ./store/modules/segmentationModule/index.js ***! + \***************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metadata */ "./store/modules/segmentationModule/metadata.js"); +/* harmony import */ var _activeLabelmapIndex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./activeLabelmapIndex */ "./store/modules/segmentationModule/activeLabelmapIndex.js"); +/* harmony import */ var _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./activeSegmentIndex */ "./store/modules/segmentationModule/activeSegmentIndex.js"); +/* harmony import */ var _segmentVisibility_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./segmentVisibility.js */ "./store/modules/segmentationModule/segmentVisibility.js"); +/* harmony import */ var _getLabelmapBuffers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getLabelmapBuffers */ "./store/modules/segmentationModule/getLabelmapBuffers.js"); +/* harmony import */ var _setLabelmap3D_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./setLabelmap3D.js */ "./store/modules/segmentationModule/setLabelmap3D.js"); +/* harmony import */ var _getLabelmapStats__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getLabelmapStats */ "./store/modules/segmentationModule/getLabelmapStats.js"); +/* harmony import */ var _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getLabelmaps3D */ "./store/modules/segmentationModule/getLabelmaps3D.js"); +/* harmony import */ var _getLabelmap2D__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getLabelmap2D */ "./store/modules/segmentationModule/getLabelmap2D.js"); +/* harmony import */ var _getSegmentOfActiveLabelmapAtEvent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getSegmentOfActiveLabelmapAtEvent */ "./store/modules/segmentationModule/getSegmentOfActiveLabelmapAtEvent.js"); +/* harmony import */ var _colorLUT__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./colorLUT */ "./store/modules/segmentationModule/colorLUT.js"); +/* harmony import */ var _getBrushColor__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./getBrushColor */ "./store/modules/segmentationModule/getBrushColor.js"); +/* harmony import */ var _getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getSegmentsOnPixeldata */ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js"); +/* harmony import */ var _deleteSegment__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./deleteSegment */ "./store/modules/segmentationModule/deleteSegment.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _defaultConfiguration__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./defaultConfiguration */ "./store/modules/segmentationModule/defaultConfiguration.js"); +/* harmony import */ var _history__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./history */ "./store/modules/segmentationModule/history.js"); +/* harmony import */ var _setRadius__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./setRadius */ "./store/modules/segmentationModule/setRadius.js"); + + + + + + + + + + + + + + + + + + +/** + * A map of `firstImageId` to associated `BrushStackState`, where + * `firstImageId` is the `imageId` of the first image in a stack. + * + * @typedef {Object} Series + */ + +/** + * @typedef {Object} BrushStackState An object defining a set of 3D labelmaps + * associated with a specific cornerstone stack. + * @property {number} activeLabelmapIndex The index of the active `Labelmap3D`. + * @property {Labelmap3D[]} labelmaps3D An array of `Labelmap3D` objects. + */ + +/** + * A 3D labelmap object which stores the labelmap data for an entire stack of cornerstone images. + * + * @typedef {Object} Labelmap3D An object defining a 3D labelmap. + * @property {ArrayBuffer} buffer An array buffer to store the pixel data of the `Labelmap3D` (2 bytes/voxel for Uint16 and 4 bytes/voxel for Float32). + * @property {Labelmap2D[]} labelmaps2D array of `labelmap2D` views on the `buffer`, indexed by in-stack + * image positions. + * @property {Object[]} metadata An array of metadata per segment. Metadata is optional and its form is + * application specific. + * @property {number} activeSegmentIndex The index of the active segment for this `Labelmap3D`. + * @property {number} colorLUTIndex The index of the color LUT to use when displaying this `Labelmap3D`. + * @property {boolean[]} segmentsHidden The visibility of segments on this labelmap. + * If an element is `true`, the element is hidden. If it `false|undefined`, the segment is visible. + * @property {Object[]} undo A history of operations that can be reversed. + * @property {Object[]} redo A history of reverted operations, so that an undo can be reversed. + * Is cleared when changes are made to the labelmap. + */ + +/** + * A 2D labelmap object which accesses only one frame's worth of data from its parent `Labelmap3D`. + * + * @typedef {Object} Labelmap2D An object defining a 2D view on a section of a `Labelmap3D`'s `buffer`. + * @property {Uint16Array|Float32Array} pixelData A 2D view on a section of the parent `Labelmap3D`'s `buffer`. + * @property {number[]} segmentsOnLabelmap An array of segments present in the `pixelData`. + */ + +/** + * OnRegisterCallback - Initialise a single default colorLUT when cornerstoneTools is initialised. + * + * @returns {null} + */ + +function onRegisterCallback() { + Object(_colorLUT__WEBPACK_IMPORTED_MODULE_10__["default"])(0); +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + state: _state__WEBPACK_IMPORTED_MODULE_14__["default"], + configuration: _defaultConfiguration__WEBPACK_IMPORTED_MODULE_15__["default"], + onRegisterCallback: onRegisterCallback, + getters: { + metadata: _metadata__WEBPACK_IMPORTED_MODULE_0__["getMetadata"], + labelmap3D: _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_7__["getLabelmap3D"], + labelmaps3D: _getLabelmaps3D__WEBPACK_IMPORTED_MODULE_7__["default"], + activeLabelmapIndex: _activeLabelmapIndex__WEBPACK_IMPORTED_MODULE_1__["getActiveLabelmapIndex"], + activeSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["getActiveSegmentIndex"], + isSegmentVisible: _segmentVisibility_js__WEBPACK_IMPORTED_MODULE_3__["isSegmentVisible"], + labelmap2D: _getLabelmap2D__WEBPACK_IMPORTED_MODULE_8__["default"], + labelmap2DByImageIdIndex: _getLabelmap2D__WEBPACK_IMPORTED_MODULE_8__["getLabelmap2DByImageIdIndex"], + labelmapStats: _getLabelmapStats__WEBPACK_IMPORTED_MODULE_6__["default"], + segmentOfActiveLabelmapAtEvent: _getSegmentOfActiveLabelmapAtEvent__WEBPACK_IMPORTED_MODULE_9__["default"], + brushColor: _getBrushColor__WEBPACK_IMPORTED_MODULE_11__["default"], + labelmapBuffers: _getLabelmapBuffers__WEBPACK_IMPORTED_MODULE_4__["getLabelmapBuffers"], + activeLabelmapBuffer: _getLabelmapBuffers__WEBPACK_IMPORTED_MODULE_4__["getActiveLabelmapBuffer"], + colorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["getColorLUT"], + colorForSegmentIndexColorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["getColorForSegmentIndexColorLUT"] + }, + setters: { + metadata: _metadata__WEBPACK_IMPORTED_MODULE_0__["setMetadata"], + labelmap3DForElement: _setLabelmap3D_js__WEBPACK_IMPORTED_MODULE_5__["setLabelmap3DForElement"], + labelmap3DByFirstImageId: _setLabelmap3D_js__WEBPACK_IMPORTED_MODULE_5__["setLabelmap3DByFirstImageId"], + incrementActiveSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["incrementActiveSegmentIndex"], + decrementActiveSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["decrementActiveSegmentIndex"], + activeSegmentIndex: _activeSegmentIndex__WEBPACK_IMPORTED_MODULE_2__["setActiveSegmentIndex"], + toggleSegmentVisibility: _segmentVisibility_js__WEBPACK_IMPORTED_MODULE_3__["toggleSegmentVisibility"], + updateSegmentsOnLabelmap2D: function updateSegmentsOnLabelmap2D(labelmap2D) { + labelmap2D.segmentsOnLabelmap = Object(_getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_12__["default"])(labelmap2D.pixelData); + }, + deleteSegment: _deleteSegment__WEBPACK_IMPORTED_MODULE_13__["default"], + colorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["default"], + colorLUTIndexForLabelmap3D: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["setColorLUTIndexForLabelmap3D"], + colorForSegmentIndexOfColorLUT: _colorLUT__WEBPACK_IMPORTED_MODULE_10__["setColorForSegmentIndexOfColorLUT"], + activeLabelmapIndex: _activeLabelmapIndex__WEBPACK_IMPORTED_MODULE_1__["setActiveLabelmapIndex"], + radius: _setRadius__WEBPACK_IMPORTED_MODULE_17__["default"], + pushState: _history__WEBPACK_IMPORTED_MODULE_16__["pushState"], + undo: _history__WEBPACK_IMPORTED_MODULE_16__["undo"], + redo: _history__WEBPACK_IMPORTED_MODULE_16__["redo"] + } +}); + +/***/ }), + +/***/ "./store/modules/segmentationModule/metadata.js": +/*!******************************************************!*\ + !*** ./store/modules/segmentationModule/metadata.js ***! + \******************************************************/ +/*! exports provided: getMetadata, setMetadata */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMetadata", function() { return getMetadata; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMetadata", function() { return setMetadata; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _addLabelmap3D__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./addLabelmap3D */ "./store/modules/segmentationModule/addLabelmap3D.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../externalModules */ "./externalModules.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); + + + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:modules:segmentationModule:metadata'); +/** + * GetMetadata - Returns the metadata object for a particular segment if + * segmentIndex is specified, otherwise returns an array of all segment metadata + * for the labelmap. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} [labelmapIndex] If undefined, defaults to the active + * labelmap index. + * @param {number} [segmentIndex] The segment index. + * @returns {Object|Object[]} A metadata object or an array of + * metadata objects. + */ + +function getMetadata(elementOrEnabledElementUID, labelmapIndex, segmentIndex) { + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId]; + + if (!brushStackState) { + logger.warn("brushStackState is undefined"); + return; + } + + labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex; + + if (!brushStackState.labelmaps3D[labelmapIndex]) { + logger.warn("No labelmap3D of labelmap index ".concat(labelmapIndex, " on stack.")); + return; + } + + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + + if (segmentIndex === undefined) { + return labelmap3D.metadata; + } + + return labelmap3D.metadata[segmentIndex]; +} +/** + * SetMetadata - Sets the metadata object for a particular segment of a + * `Labelmap3D`. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} labelmapIndex = 0 The labelmap index. + * @param {number} segmentIndex The segment index. + * @param {Object} metadata The metadata object to set. + * @returns {null} + */ + + +function setMetadata(elementOrEnabledElementUID) { + var labelmapIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var segmentIndex = arguments.length > 2 ? arguments[2] : undefined; + var metadata = arguments.length > 3 ? arguments[3] : undefined; + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone; + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId]; + + if (!brushStackState) { + _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId] = { + labelmapIndex: labelmapIndex, + labelmaps3D: [] + }; + brushStackState = _state__WEBPACK_IMPORTED_MODULE_5__["default"].series[firstImageId]; + } + + if (!brushStackState.labelmaps3D[labelmapIndex]) { + var enabledElement = cornerstone.getEnabledElement(element); + var _enabledElement$image = enabledElement.image, + rows = _enabledElement$image.rows, + columns = _enabledElement$image.columns; + var numberOfFrames = stackData.imageIds.length; + var size = rows * columns * numberOfFrames; + Object(_addLabelmap3D__WEBPACK_IMPORTED_MODULE_1__["default"])(brushStackState, labelmapIndex, size); + } + + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + labelmap3D.metadata[segmentIndex] = metadata; +} + + + +/***/ }), + +/***/ "./store/modules/segmentationModule/segmentVisibility.js": +/*!***************************************************************!*\ + !*** ./store/modules/segmentationModule/segmentVisibility.js ***! + \***************************************************************/ +/*! exports provided: isSegmentVisible, toggleSegmentVisibility */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSegmentVisible", function() { return isSegmentVisible; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toggleSegmentVisibility", function() { return toggleSegmentVisibility; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('store:modules:segmentationModule:segmentVisibility'); +/** + * Returns if a segment is visible. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} segmentIndex The segment index. + * @param {number} [labelmapIndex] If undefined, defaults to the active + * labelmap index. + * @returns {boolean} True if the segment is visible. + */ + +function isSegmentVisible(elementOrEnabledElementUID, segmentIndex, labelmapIndex) { + if (!segmentIndex) { + return; + } + + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + logger.warn("brushStackState is undefined"); + return; + } + + labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex; + + if (!brushStackState.labelmaps3D[labelmapIndex]) { + logger.warn("No labelmap3D of labelmap index ".concat(labelmapIndex, " on stack.")); + return; + } + + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + var visible = !labelmap3D.segmentsHidden[segmentIndex]; + return visible; +} +/** + * Toggles the visability of a segment. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone enabled + * element or its UUID. + * @param {number} segmentIndex The segment index. + * @param {number} [labelmapIndex] If undefined, defaults to the active + * labelmap index. + * @returns {boolean} True if the segment is now visible. + */ + + +function toggleSegmentVisibility(elementOrEnabledElementUID, segmentIndex, labelmapIndex) { + if (!segmentIndex) { + return; + } + + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var firstImageId = stackData.imageIds[0]; + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + logger.warn("brushStackState is undefined"); + return; + } + + labelmapIndex = labelmapIndex === undefined ? brushStackState.activeLabelmapIndex : labelmapIndex; + + if (!brushStackState.labelmaps3D[labelmapIndex]) { + logger.warn("No labelmap3D of labelmap index ".concat(labelmapIndex, " on stack.")); + return; + } + + var labelmap3D = brushStackState.labelmaps3D[labelmapIndex]; + var segmentsHidden = labelmap3D.segmentsHidden; + segmentsHidden[segmentIndex] = !segmentsHidden[segmentIndex]; + return !segmentsHidden[segmentIndex]; +} + + + +/***/ }), + +/***/ "./store/modules/segmentationModule/setLabelmap3D.js": +/*!***********************************************************!*\ + !*** ./store/modules/segmentationModule/setLabelmap3D.js ***! + \***********************************************************/ +/*! exports provided: setLabelmap3DByFirstImageId, setLabelmap3DForElement */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLabelmap3DByFirstImageId", function() { return setLabelmap3DByFirstImageId; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setLabelmap3DForElement", function() { return setLabelmap3DForElement; }); +/* harmony import */ var _getElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getElement */ "./store/modules/segmentationModule/getElement.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./state */ "./store/modules/segmentationModule/state.js"); +/* harmony import */ var _getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getSegmentsOnPixeldata */ "./store/modules/segmentationModule/getSegmentsOnPixeldata.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _arrayTypes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./arrayTypes */ "./store/modules/segmentationModule/arrayTypes.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../index.js */ "./store/index.js"); + + + + + + + +var UINT_16_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_5__["default"].UINT_16_ARRAY, + FLOAT_32_ARRAY = _arrayTypes__WEBPACK_IMPORTED_MODULE_5__["default"].FLOAT_32_ARRAY; +/** + * Takes a 16-bit encoded `ArrayBuffer` and stores it as a `Labelmap3D` for the + * `BrushStackState` associated with the element. + * + * @param {HTMLElement|string} elementOrEnabledElementUID The cornerstone + * enabled element or its UUID. + * @param {ArrayBuffer} buffer + * @param {number} labelmapIndex The index to store the labelmap under. + * @param {Object[]} metadata = [] Any metadata about the segments. + * @param {number[][]} [segmentsOnLabelmapArray] An array of array of segments on each imageIdIndex. + * If not present, is calculated. + * @param {colorLUTIndex} [colorLUTIndex = 0] The index of the colorLUT to use to render the segmentation. + * @returns {null} + */ + +function setLabelmap3DForElement(elementOrEnabledElementUID, buffer, labelmapIndex) { + var metadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var segmentsOnLabelmapArray = arguments.length > 4 ? arguments[4] : undefined; + var colorLUTIndex = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; + var element = Object(_getElement__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrEnabledElementUID); + + if (!element) { + return; + } + + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + var numberOfFrames = stackState.data[0].imageIds.length; + var firstImageId = stackState.data[0].imageIds[0]; + setLabelmap3DByFirstImageId(firstImageId, buffer, labelmapIndex, metadata, numberOfFrames, segmentsOnLabelmapArray, colorLUTIndex); + Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_4__["triggerLabelmapModifiedEvent"])(element, labelmapIndex); +} +/** + * Takes an 16-bit encoded `ArrayBuffer` and stores it as a `Labelmap3D` for + * the `BrushStackState` associated with the firstImageId. + * + * @param {HTMLElement|string} firstImageId The firstImageId of the series to + * store the segmentation on. + * @param {ArrayBuffer} buffer + * @param {number} labelmapIndex The index to store the labelmap under. + * @param {Object[]} metadata = [] Any metadata about the segments. + * @param {number} numberOfFrames The number of frames, required to set up the + * relevant labelmap2D views. + * @param {number[][]} [segmentsOnLabelmapArray] An array of array of segments on each imageIdIndex. + * If not present, is calculated. + * @param {colorLUTIndex} [colorLUTIndex = 0] The index of the colorLUT to use to render the segmentation. + * @returns {null} + */ + + +function setLabelmap3DByFirstImageId(firstImageId, buffer, labelmapIndex) { + var metadata = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var numberOfFrames = arguments.length > 4 ? arguments[4] : undefined; + var segmentsOnLabelmapArray = arguments.length > 5 ? arguments[5] : undefined; + var colorLUTIndex = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0; + + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_6__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + var brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + + if (!brushStackState) { + _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId] = { + activeLabelmapIndex: labelmapIndex, + labelmaps3D: [] + }; + brushStackState = _state__WEBPACK_IMPORTED_MODULE_2__["default"].series[firstImageId]; + } + + brushStackState.labelmaps3D[labelmapIndex] = { + buffer: buffer, + labelmaps2D: [], + metadata: metadata, + activeSegmentIndex: 1, + colorLUTIndex: 0, + segmentsHidden: [], + undo: [], + redo: [] + }; + var labelmaps2D = brushStackState.labelmaps3D[labelmapIndex].labelmaps2D; + var slicelengthInBytes = buffer.byteLength / numberOfFrames; + + for (var i = 0; i < numberOfFrames; i++) { + var pixelData = void 0; + + switch (configuration.arrayType) { + case UINT_16_ARRAY: + pixelData = new Uint16Array(buffer, slicelengthInBytes * i, // 2 bytes/voxel + slicelengthInBytes / 2); + break; + + case FLOAT_32_ARRAY: + pixelData = new Float32Array(buffer, slicelengthInBytes * i, slicelengthInBytes / 4); + break; + + default: + throw new Error("Unsupported Array Type ".concat(configuration.arrayType)); + } + + var segmentsOnLabelmap = segmentsOnLabelmapArray ? segmentsOnLabelmapArray[i] : Object(_getSegmentsOnPixeldata__WEBPACK_IMPORTED_MODULE_3__["default"])(pixelData); + + if (segmentsOnLabelmap && segmentsOnLabelmap.some(function (segment) { + return segment; + })) { + labelmaps2D[i] = { + pixelData: pixelData, + segmentsOnLabelmap: segmentsOnLabelmap + }; + } + } +} + + + +/***/ }), + +/***/ "./store/modules/segmentationModule/setRadius.js": +/*!*******************************************************!*\ + !*** ./store/modules/segmentationModule/setRadius.js ***! + \*******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return setRadius; }); +/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../index */ "./store/index.js"); + +function setRadius(newRadius) { + var _getModule = Object(_index__WEBPACK_IMPORTED_MODULE_0__["getModule"])('segmentation'), + configuration = _getModule.configuration; + + configuration.radius = Math.min(Math.max(newRadius, configuration.minRadius), configuration.maxRadius); +} + +/***/ }), + +/***/ "./store/modules/segmentationModule/state.js": +/*!***************************************************!*\ + !*** ./store/modules/segmentationModule/state.js ***! + \***************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +// Internal state of the brush module. +var state = { + series: {}, + colorLutTables: [] +}; +/* harmony default export */ __webpack_exports__["default"] = (state); + +/***/ }), + +/***/ "./store/removeTool.js": +/*!*****************************!*\ + !*** ./store/removeTool.js ***! + \*****************************/ +/*! exports provided: removeTool, removeToolForElement */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeTool", function() { return removeTool; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeToolForElement", function() { return removeToolForElement; }); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); + +/** + * Deactivates and removes the tool from the target element with the provided name + * + * @export + * @public + * @method + * @name removeToolForElement + * @param {HTMLElement} element The element. + * @param {string} toolName The name of the tool. + * @returns {void} + */ + +var removeToolForElement = function removeToolForElement(element, toolName) { + var toolIndex = _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.tools.findIndex(function (tool) { + return tool.element === element && tool.name === toolName; + }); + + if (toolIndex >= 0) { + _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.tools.splice(toolIndex, 1); + } +}; +/** + * Removes all tools from all enabled elements with the provided name. + * + * @export + * @public + * @method + * @name removeTool + * @param {string} toolName The name of the tool. + * @returns {void} + */ + + +var removeTool = function removeTool(toolName) { + _removeToolGlobally(toolName); + + _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.enabledElements.forEach(function (element) { + removeToolForElement(element, toolName); + }); +}; +/** + * Removes tool with matching name from globally registered tools. + * Requires `globalToolSyncEnabled` to be set to true + * + * @private + * @method + * @name removeToolGlobally + * @param {string} toolName The name of the tool to remove. + * @returns {void} + */ + + +var _removeToolGlobally = function _removeToolGlobally(toolName) { + var _getModule = Object(_index_js__WEBPACK_IMPORTED_MODULE_0__["getModule"])('globalConfiguration'), + configuration = _getModule.configuration; + + if (!configuration.globalToolSyncEnabled) { + return; + } + + if (_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[toolName]) { + delete _index_js__WEBPACK_IMPORTED_MODULE_0__["default"].state.globalTools[toolName]; + } +}; + + + +/***/ }), + +/***/ "./store/setToolCursor.js": +/*!********************************!*\ + !*** ./store/setToolCursor.js ***! + \********************************/ +/*! exports provided: setToolCursor, resetToolCursor, hideToolCursor */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolCursor", function() { return setToolCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetToolCursor", function() { return resetToolCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hideToolCursor", function() { return hideToolCursor; }); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); + + +var globalConfiguration = _index_js__WEBPACK_IMPORTED_MODULE_0__["modules"].globalConfiguration; +/** + * Creates an SVG Cursor for the target element + * + * @param {HTMLElement} element - The DOM Element to draw on + * @param {MouseCursor} svgCursor - The cursor. + * @returns {void} + */ + +function setToolCursor(element, svgCursor) { + if (!globalConfiguration.configuration.showSVGCursors) { + return; + } // TODO: (state vs options) Exit if cursor wasn't updated + // TODO: Exit if invalid options to create cursor + // Note: Max size of an SVG cursor is 128x128, default is 32x32. + + + var cursorBlob = svgCursor.getIconWithPointerSVG(); + var mousePoint = svgCursor.mousePoint; + var svgCursorUrl = window.URL.createObjectURL(cursorBlob); + element.style.cursor = "url('".concat(svgCursorUrl, "') ").concat(mousePoint, ", auto"); + _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl = svgCursorUrl; +} + +function resetToolCursor(element) { + _clearStateAndSetCursor(element, 'initial'); +} + +function hideToolCursor(element) { + if (!globalConfiguration.configuration.showSVGCursors) { + return; + } + + _clearStateAndSetCursor(element, 'none'); +} + +function _clearStateAndSetCursor(element, cursorSeting) { + if (_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl) { + window.URL.revokeObjectURL(_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl); + } + + _index_js__WEBPACK_IMPORTED_MODULE_0__["state"].svgCursorUrl = null; + element.style.cursor = cursorSeting; +} + +/***/ }), + +/***/ "./store/setToolMode.js": +/*!******************************!*\ + !*** ./store/setToolMode.js ***! + \******************************/ +/*! exports provided: setToolActive, setToolActiveForElement, setToolDisabled, setToolDisabledForElement, setToolEnabled, setToolEnabledForElement, setToolPassive, setToolPassiveForElement, setToolMode, setToolModeForElement, _getNormalizedOptions, _mergeMouseButtonMask */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolActive", function() { return setToolActive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolActiveForElement", function() { return setToolActiveForElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolDisabled", function() { return setToolDisabled; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolDisabledForElement", function() { return setToolDisabledForElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolEnabled", function() { return setToolEnabled; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolEnabledForElement", function() { return setToolEnabledForElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolPassive", function() { return setToolPassive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolPassiveForElement", function() { return setToolPassiveForElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolMode", function() { return setToolMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolModeForElement", function() { return setToolModeForElement; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_getNormalizedOptions", function() { return _getNormalizedOptions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "_mergeMouseButtonMask", function() { return _mergeMouseButtonMask; }); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../events.js */ "./events.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getToolForElement.js */ "./store/getToolForElement.js"); +/* harmony import */ var _setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./setToolCursor.js */ "./store/setToolCursor.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); + + + + + + +var globalConfiguration = Object(_index_js__WEBPACK_IMPORTED_MODULE_5__["getModule"])('globalConfiguration'); +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('store:setToolMode'); +/** + * Sets a tool's state, with the provided toolName and element, to 'active'. Active tools are rendered, + * respond to user input, and can create new data. + * + * @public + * @function setToolActiveForElement + * @memberof CornerstoneTools + * + * @example Setting a tool 'active' for a specific interaction type. + * // Sets length tool to Active + * setToolActiveForElement(element, 'Length', { + * mouseButtonMask: 1 + * }, ['Mouse']) + * @example Setting a tool 'active' for all interaction types. + * // Sets length tool to Active + * setToolActiveForElement(element, 'Length', { + * mouseButtonMask: 1 + * }) + * @param {HTMLElement} element + * @param {string} toolName + * @param {(Object|string[]|number)} options + * @param {(string[])} interactionTypes + * @returns {undefined} + */ + +var setToolActiveForElement = function setToolActiveForElement(element, toolName, options, interactionTypes) { + // If interactionTypes was passed in via options + if (interactionTypes === undefined && Array.isArray(options)) { + interactionTypes = options; + options = null; + } + + var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, toolName); + + if (tool) { + _resolveInputConflicts(element, tool, options, interactionTypes); // Iterate over specific interaction types and set active + // This is used as a secondary check on active tools to find the active "parts" of the tool + + + tool.supportedInteractionTypes.forEach(function (interactionType) { + if (interactionTypes === undefined || interactionTypes.includes(interactionType)) { + options["is".concat(interactionType, "Active")] = true; + } else { + options["is".concat(interactionType, "Active")] = false; + } + }); + + if (globalConfiguration.configuration.showSVGCursors && tool.supportedInteractionTypes.includes('Mouse')) { + _setToolCursorIfPrimary(element, options, tool); + } + } // Resume normal behavior + + + setToolModeForElement('active', null, element, toolName, options); +}; + +function _setToolCursorIfPrimary(element, options, tool) { + var mouseButtonMask; + + if (typeof options === 'number') { + mouseButtonMask = [options]; + } else { + mouseButtonMask = options.mouseButtonMask; + } + + if (mouseButtonMask.includes(1)) { + if (tool.svgCursor) { + Object(_setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__["setToolCursor"])(tool.element, tool.svgCursor); + } else if (tool.hideDefaultCursor) { + Object(_setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__["hideToolCursor"])(element); + } else { + Object(_setToolCursor_js__WEBPACK_IMPORTED_MODULE_3__["resetToolCursor"])(element); + } + } +} +/** + * Sets all tool's state, with the provided toolName, to 'active'. Active tools are rendered, + * respond to user input, and can create new data. + * @public + * @function setToolActive + * @memberof CornerstoneTools + * + * @param {string} toolName + * @param {(Object|string[]|number)} options + * @param {(string[])} interactionTypes + * @returns {undefined} + */ + + +var setToolActive = function setToolActive(toolName, options, interactionTypes) { + _trackGlobalToolModeChange('active', toolName, options, interactionTypes); + + _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.enabledElements.forEach(function (element) { + setToolActiveForElement(element, toolName, options, interactionTypes); + }); +}; +/** + * Sets a tool's state, with the provided toolName and element, to 'disabled'. Disabled tools are not rendered, + * and do not respond to user input + * @public + * @function setToolDisabledForElement + * @memberof CornerstoneTools + * + * @param {HTMLElement} element + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + + +var setToolDisabledForElement = setToolModeForElement.bind(null, 'disabled', null); +/** + * Sets all tool's state, with the provided toolName, to 'disabled'. Disabled tools are not rendered, + * and do not respond to user input + * @public + * @function setToolDisabled + * @memberof CornerstoneTools + * + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + +var setToolDisabled = setToolMode.bind(null, 'disabled', null); +/** + * Sets a tool's state, with the provided toolName and element, to 'enabled'. Enabled tools are rendered, + * but do not respond to user input + * @public + * @function setToolEnabledForElement + * @memberof CornerstoneTools + * + * @param {HTMLElement} element + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + +var setToolEnabledForElement = setToolModeForElement.bind(null, 'enabled', null); +/** + * Sets all tool's state, with the provided toolName, to 'enabled'. Enabled tools are rendered, + * but do not respond to user input + * @public + * @function setToolEnabled + * @memberof CornerstoneTools + * + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + +var setToolEnabled = setToolMode.bind(null, 'enabled', null); +/** + * Sets a tool's state, with the provided toolName and element, to 'passive'. Passive tools are rendered and respond to user input, + * but do not create new measurements or annotations. + * @public + * @function setToolPassiveForElement + * @memberof CornerstoneTools + * + * @param {HTMLElement} element + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + +var setToolPassiveForElement = setToolModeForElement.bind(null, 'passive', _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOOL_DEACTIVATED); +/** + * Sets all tool's state, with the provided toolName, to 'passive'. Passive tools are rendered and respond to user input, + * but do not create new measurements or annotations. + * @public + * @function setToolPassive + * @memberof CornerstoneTools + * + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + +var setToolPassive = setToolMode.bind(null, 'passive', _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].TOOL_DEACTIVATED); +/** + * An internal method that helps make sure we change tool mode in a consistent + * way + * @private + * @function setToolModeForElement + * + * @param {string} mode + * @param {string} changeEvent + * @param {HTMLElement} element + * @param {string} toolName + * @param {(Object|number[]|number)} options + * @returns {undefined} + */ + +function setToolModeForElement(mode, changeEvent, element, toolName, options) { + var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, toolName); + + if (!tool) { + logger.warn('Unable to find tool "%s" for enabledElement', toolName); + return; + } + + options = _getNormalizedOptions(options); // Keep the same if not an array (undefined) + // Reset if empty array + // Merge if array contains any bindings + + if (Array.isArray(options.mouseButtonMask) && options.mouseButtonMask.length !== 0 && Array.isArray(tool.options.mouseButtonMask)) { + options.mouseButtonMask = _mergeMouseButtonMask(options.mouseButtonMask, tool.options.mouseButtonMask); + } // Set mode & options + + + tool.mode = mode; + tool.mergeOptions(options); // Call tool's hook for this event, if one exists + + if (tool["".concat(mode, "Callback")]) { + tool["".concat(mode, "Callback")](element, options); + } // Emit event indicating tool state change + + + if (changeEvent) { + var statusChangeEventData = { + options: options, + toolName: toolName, + type: changeEvent + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, changeEvent, statusChangeEventData); + } // Trigger Update + // Todo: don't error out if image hasn't been loaded... + // Cornerstone.updateImage(element); + +} +/** + * A helper/quick way to set a tool's mode for all canvases + * + * @private + * @function setToolMode + * + * @param {string} mode + * @param {string} changeEvent + * @param {string} toolName + * @param {(Object|number)} options + * @returns {undefined} + */ + + +function setToolMode(mode, changeEvent, toolName, options) { + _trackGlobalToolModeChange(mode, toolName, options); + + _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.enabledElements.forEach(function (element) { + setToolModeForElement(mode, changeEvent, element, toolName, options); + }); +} +/** + * Find tool's that conflict with the incoming tool's mouse/touch bindings and + * resolve those conflicts. + * + * @private + * @function _resolveInputConflicts + * + * @param {HTMLElement} element + * @param {Object} tool + * @param {(Object|number)} options + * @param {(Array)} interactionTypes + * @returns {undefined} + */ + + +function _resolveInputConflicts(element, tool, options, interactionTypes) { + // Iterate over the interaction types our tool supports. + // For each one we intend to activate, check for potential conflicts + // And resolve them + tool.supportedInteractionTypes.forEach(function (interactionType) { + if (interactionTypes === undefined || interactionTypes.includes(interactionType)) { + var inputResolver = _inputResolvers[interactionType]; + + if (inputResolver) { + inputResolver(tool, element, options); + } else { + logger.warn('Unable to resolve input conflicts for type %s', interactionType); + } + } + }); + var activeToolsForElement = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.filter(function (t) { + return t.element === element && t.mode === 'active' && t.supportedInteractionTypes.length > 0; + }); + activeToolsForElement.forEach(function (t) { + var toolHasAnyActiveInteractionType = false; + t.supportedInteractionTypes.forEach(function (interactionType) { + if (t.options["is".concat(interactionType, "Active")]) { + toolHasAnyActiveInteractionType = true; + } + }); + + if (!toolHasAnyActiveInteractionType) { + logger.log("Setting tool %s's to PASSIVE", t.name); + setToolPassiveForElement(element, t.name); + } + }); +} +/** + * Resolves conflicting active tools when activating a tool for mouse interaction + * @private + * @function _resolveMouseInputConflicts + * + * @param {Object} tool + * @param {HTMLElement} element + * @param {(Object|number)} options + * @returns {undefined} + */ + + +function _resolveMouseInputConflicts(tool, element, options) { + var mouseButtonMask = _getNormalizedOptions(options).mouseButtonMask; + + var hasMouseButtonMask = Array.isArray(mouseButtonMask) && mouseButtonMask.length > 0; + + if (!hasMouseButtonMask) { + return; + } + + var activeToolWithMatchingMouseButtonMask = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) { + return t.element === element && t.mode === 'active' && t.options.isMouseActive === true && Array.isArray(t.options.mouseButtonMask) && t.options.mouseButtonMask.some(function (v) { + return mouseButtonMask.includes(v); + }); + }); + + if (activeToolWithMatchingMouseButtonMask) { + // Remove collissions + activeToolWithMatchingMouseButtonMask.options.mouseButtonMask = activeToolWithMatchingMouseButtonMask.options.mouseButtonMask.filter(function (mask) { + return !mouseButtonMask.includes(mask); + }); // If no remaining bindings, set inactive + + if (activeToolWithMatchingMouseButtonMask.options.mouseButtonMask.length === 0) { + activeToolWithMatchingMouseButtonMask.options.isMouseActive = false; + } + } +} +/** + * Resolves conflicting active tools when activating a tool for touch interaction + * @private + * @function _resolveTouchInputConflicts + * + * @param {Object} tool + * @param {HTMLElement} element + * @returns {undefined} + */ + + +function _resolveTouchInputConflicts(tool, element) { + var activeTouchTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) { + return t.element === element && t.mode === 'active' && t.options.isTouchActive === true; + }); + var activeMultiTouchToolWithOneTouchPointer = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) { + return t.element === element && t.mode === 'active' && t.options.isMultiTouchActive === true && t.configuration.touchPointers === 1; + }); + + if (activeTouchTool) { + logger.log("Setting tool %s's isTouchActive to false", activeTouchTool.name); + activeTouchTool.options.isTouchActive = false; + } + + if (activeMultiTouchToolWithOneTouchPointer) { + logger.log("Setting tool %s's isTouchActive to false", activeMultiTouchToolWithOneTouchPointer.name); + activeMultiTouchToolWithOneTouchPointer.options.isMultiTouchActive = false; + } +} +/** + * Resolves conflicting active tools when activating a tool for MultiTouch interaction + * @private + * @function _resolveMultiTouchInputConflicts + * + * @param {Object} tool + * @param {HTMLElement} element + * @returns {undefined} + */ + + +function _resolveMultiTouchInputConflicts(tool, element) { + var activeMultiTouchTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) { + return t.element === element && t.mode === 'active' && t.options.isMultiTouchActive === true && t.configuration.touchPointers === tool.configuration.touchPointers; + }); + var activeTouchTool; + + if (tool.configuration.touchPointers === 1) { + activeTouchTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) { + return t.element === element && t.mode === 'active' && t.options.isTouchActive === true; + }); + } + + if (activeMultiTouchTool) { + logger.log("Setting tool %s's isMultiTouchActive to false", activeMultiTouchTool.name); + activeMultiTouchTool.options.isMultiTouchActive = false; + } + + if (activeTouchTool) { + logger.log("Setting tool %s's isTouchActive to false", activeTouchTool.name); + activeTouchTool.options.isTouchActive = false; + } +} +/** + * If the incoming tool isTouchActive, find any conflicting tools + * and set their isTouchActive to false to avoid conflicts. + * + * @private + * @function _resolveGenericInputConflicts + * + * @param {string} interactionType + * @param {Object} tool + * @param {HTMLElement} element + * @param {(Object|number)} options + * @returns {undefined} + */ + + +function _resolveGenericInputConflicts(interactionType, tool, element) { + var interactionTypeFlag = "is".concat(interactionType, "Active"); + var activeToolWithActiveInteractionType = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.tools.find(function (t) { + return t.element === element && t.mode === 'active' && t.options[interactionTypeFlag] === true; + }); + + if (activeToolWithActiveInteractionType) { + logger.log("Setting tool %s's %s to false", activeToolWithActiveInteractionType.name, interactionTypeFlag); + activeToolWithActiveInteractionType.options[interactionTypeFlag] = false; + } +} + +function _trackGlobalToolModeChange(mode, toolName, options, interactionTypes) { + if (!globalConfiguration.configuration.globalToolSyncEnabled) { + return; + } // Update Tool History + + + var historyEvent = { + mode: mode, + args: [toolName, options] + }; + + if (interactionTypes) { + historyEvent.push(interactionTypes); + } + + _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalToolChangeHistory.push(historyEvent); + var arbitraryChangeHistoryLimit = 50; + + if (_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalToolChangeHistory.length > arbitraryChangeHistoryLimit) { + _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalToolChangeHistory.shift(); + } // Update ActiveBindings Array + + + var globalTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools[toolName]; + + if (!globalTool) { + logger.warn("setToolMode call for tool not available globally: ".concat(toolName)); + return; + } + + if (mode === 'active') { + var stringBindings = _determineStringBindings(toolName, options, interactionTypes); // Remove the incoming bindings from all global tools + + + Object.keys(_index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools).forEach(function (key) { + var tool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools[key]; + tool.activeBindings = tool.activeBindings.filter(function (binding) { + return !stringBindings.includes(binding); + }); + }); // @HACK: Clear mouse bindings + + if (stringBindings.some(function (binding) { + return binding.includes('Mouse-DELETE'); + })) { + globalTool.activeBindings = globalTool.activeBindings.filter(function (binding) { + return !binding.includes('Mouse'); + }); + stringBindings = stringBindings.filter(function (binding) { + return !binding.includes('Mouse'); + }); + } + + globalTool.activeBindings = globalTool.activeBindings.concat(stringBindings); + } else { + globalTool.activeBindings = []; + } +} + +function _determineStringBindings(toolName, options, interactionTypes) { + if (interactionTypes === undefined && Array.isArray(options)) { + interactionTypes = options; + options = null; + } + + var stringBindings = []; + var globalTool = _index_js__WEBPACK_IMPORTED_MODULE_5__["default"].state.globalTools[toolName]; + + if (globalTool) { + // eslint-disable-next-line new-cap + var tool = new globalTool.tool(globalTool.props); + tool.supportedInteractionTypes.forEach(function (interactionType) { + if (interactionTypes === undefined || interactionTypes.includes(interactionType)) { + if (interactionType === 'Mouse') { + var mouseButtonMasks = _getNormalizedOptions(options).mouseButtonMask; // Add or delete + + + if (Array.isArray(mouseButtonMasks) && mouseButtonMasks.length > 0) { + mouseButtonMasks.forEach(function (mask) { + return stringBindings.push("".concat(interactionType, "-").concat(mask)); + }); + } else if (Array.isArray(mouseButtonMasks) && mouseButtonMasks.length === 0) { + stringBindings.push("".concat(interactionType, "-DELETE")); + } + } else if (interactionType === 'MultiTouch') { + stringBindings.push("".concat(interactionType, "-").concat(tool.configuration.touchPointers)); + } else { + stringBindings.push(interactionType); + } + } + }); + } + + return stringBindings; +} + +var _inputResolvers = { + Mouse: _resolveMouseInputConflicts, + MouseWheel: _resolveGenericInputConflicts.bind(undefined, 'MouseWheel'), + Touch: _resolveTouchInputConflicts, + TouchPinch: _resolveGenericInputConflicts.bind(undefined, 'TouchPinch'), + TouchRotate: _resolveGenericInputConflicts.bind(undefined, 'TouchRotate'), + DoubleTap: _resolveGenericInputConflicts.bind(undefined, 'DoubleTap'), + MultiTouch: _resolveMultiTouchInputConflicts +}; + +function _getNormalizedOptions(options) { + if (Array.isArray(options)) { + // If options is an array assume the array is the mouseButtonMask array + options = { + mouseButtonMask: options + }; + } else if (options !== Object(options)) { + // And if it's something other than an object, assume options is + // a single mouseButtonMask + options = { + mouseButtonMask: [options] + }; + } // If there is still no 'mouseButtonMask' default it to an empty array + + + if (!options.hasOwnProperty('mouseButtonMask')) { + options.mouseButtonMask = []; + } + + if (!Array.isArray(options.mouseButtonMask)) { + options.mouseButtonMask = [options.mouseButtonMask]; + } // Now filter out anything that is not an number or is the number 0 + + + options.mouseButtonMask = options.mouseButtonMask.filter(function (o) { + return typeof o === 'number' && o !== 0; + }); + return options; +} + +function _mergeMouseButtonMask(newMask, oldMask) { + // Merges and removes duplicates + return newMask.concat(oldMask).reduce(function (acc, m) { + if (acc.indexOf(m) === -1) { + acc.push(m); + } + + return acc; + }, []); +} + + + +/***/ }), + +/***/ "./store/setToolOptions.js": +/*!*********************************!*\ + !*** ./store/setToolOptions.js ***! + \*********************************/ +/*! exports provided: setToolOptions, setToolOptionsForElement */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolOptions", function() { return setToolOptions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolOptionsForElement", function() { return setToolOptionsForElement; }); +/* harmony import */ var _getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getToolForElement.js */ "./store/getToolForElement.js"); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ "./store/index.js"); + + +/** + * Sets the options of a tool on a specific element. + * @export + * @public + * @method + * @name setToolOptionsForElement + * + * @param {HTMLElement} element The element. + * @param {string} toolName The name of the tool. + * @param {Object} options The options to set. + * @returns {void} + */ + +var setToolOptionsForElement = function setToolOptionsForElement(element, toolName, options) { + var tool = Object(_getToolForElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, toolName); + + if (tool) { + tool.mergeOptions(options); + } +}; +/** + * Sets the options of a tool for all elements. + * @export + * @public + * @method + * @name setToolOptions + * + * @param {string} toolName + * @param {Object} options + * @returns {void} + */ + + +var setToolOptions = function setToolOptions(toolName, options) { + _index_js__WEBPACK_IMPORTED_MODULE_1__["state"].enabledElements.forEach(function (element) { + setToolOptionsForElement(element, toolName, options); + }); +}; + + + +/***/ }), + +/***/ "./synchronization/Synchronizer.js": +/*!*****************************************!*\ + !*** ./synchronization/Synchronizer.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js"); +/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../toolOptions.js */ "./toolOptions.js"); + + + +/** + * Return an array filtered to only its unique members + * + * @private + * @param {Array} array - The array to filter + * @returns {Array} + */ + +function unique(array) { + return array.filter(function (value, index, self) { + return self.indexOf(value) === index; + }); +} +/** + * Synchronize target and source elements when an event fires on the source element + * @export @public constructor + * @name Synchronizer + * + * @param {String} event - The event(s) that will trigger synchronization. Separate multiple events by a space + * @param {Function} handler - The function that will make the necessary changes to the target element in order to synchronize it with the source element + * @returns {void} + */ + + +function Synchronizer(event, handler) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var that = this; + var sourceElements = []; // Source elements fire the events we want to synchronize to + + var targetElements = []; // Target elements we want to synchronize to source elements + + var ignoreFiredEvents = false; + var initialData = {}; + var eventHandler = handler; + this.enabled = true; + /** + * Update the event handler to perform synchronization + * @param {Function} handler - The event handler function + * @returns {void} + */ + + this.setHandler = function (handler) { + eventHandler = handler; + }; + /** + * Return a reference to the event handler function + * @returns {Function} + */ + + + this.getHandler = function () { + return eventHandler; + }; + /** + * Calculate the initial distances between the source image and each + * of the target images + * @returns {void} + */ + + + this.getDistances = function () { + if (!sourceElements.length || !targetElements.length) { + return; + } + + initialData.distances = {}; + initialData.imageIds = { + sourceElements: [], + targetElements: [] + }; + sourceElements.forEach(function (sourceElement) { + var sourceEnabledElement = cornerstone.getEnabledElement(sourceElement); + + if (!sourceEnabledElement || !sourceEnabledElement.image) { + return; + } + + var sourceImageId = sourceEnabledElement.image.imageId; + var sourceImagePlane = cornerstone.metaData.get('imagePlaneModule', sourceImageId); + + if (!sourceImagePlane || !sourceImagePlane.imagePositionPatient) { + return; + } + + var sourceImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(sourceImagePlane.imagePositionPatient); + + if (initialData.hasOwnProperty(sourceEnabledElement)) { + return; + } + + initialData.distances[sourceImageId] = {}; + initialData.imageIds.sourceElements.push(sourceImageId); + targetElements.forEach(function (targetElement) { + var targetEnabledElement = cornerstone.getEnabledElement(targetElement); + + if (!targetEnabledElement || !targetEnabledElement.image) { + return; + } + + var targetImageId = targetEnabledElement.image.imageId; + initialData.imageIds.targetElements.push(targetImageId); + + if (sourceElement === targetElement) { + return; + } + + if (sourceImageId === targetImageId) { + return; + } + + if (initialData.distances[sourceImageId].hasOwnProperty(targetImageId)) { + return; + } + + var targetImagePlane = cornerstone.metaData.get('imagePlaneModule', targetImageId); + + if (!targetImagePlane || !targetImagePlane.imagePositionPatient) { + return; + } + + var targetImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.imagePositionPatient); + initialData.distances[sourceImageId][targetImageId] = targetImagePosition.clone().sub(sourceImagePosition); + }); + + if (!Object.keys(initialData.distances[sourceImageId]).length) { + delete initialData.distances[sourceImageId]; + } + }); + }; + /** + * Gather necessary event data and call synchronization handler + * + * @private + * @param {HTMLElement} sourceElement - The source element for the event + * @param {Object} eventData - The data object for the source event + * @returns {void} + */ + + + function fireEvent(sourceElement, eventData) { + var isDisabled = !that.enabled; + var noElements = !sourceElements.length || !targetElements.length; + + if (isDisabled || noElements) { + return; + } + + ignoreFiredEvents = true; + targetElements.forEach(function (targetElement) { + var targetIndex = targetElements.indexOf(targetElement); + + if (targetIndex === -1) { + return; + } + + var targetImageId = initialData.imageIds.targetElements[targetIndex]; + var sourceIndex = sourceElements.indexOf(sourceElement); + + if (sourceIndex === -1) { + return; + } + + var sourceImageId = initialData.imageIds.sourceElements[sourceIndex]; + var positionDifference; + + if (sourceImageId === targetImageId) { + positionDifference = 0; + } else if (initialData.distances[sourceImageId] !== undefined) { + positionDifference = initialData.distances[sourceImageId][targetImageId]; + } + + eventHandler(that, sourceElement, targetElement, eventData, positionDifference); + }); + ignoreFiredEvents = false; + } + /** + * Call fireEvent if not ignoring events, and pass along event data + * + * @private + * @param {Event} e - The source event object + * @returns {void} + */ + + + function onEvent(e) { + var eventData = e.detail; + + if (ignoreFiredEvents === true) { + return; + } + + fireEvent(e.currentTarget, eventData); + } + /** + * Add a source element to this synchronizer + * + * @param {HTMLElement} element - The new source element + * @returns {void} + */ + + + this.addSource = function (element) { + // Return if this element was previously added + var index = sourceElements.indexOf(element); + + if (index !== -1) { + return; + } // Add to our list of enabled elements + + + sourceElements.push(element); // Subscribe to the event + + event.split(' ').forEach(function (oneEvent) { + element.addEventListener(oneEvent, onEvent); + }); // Update the initial distances between elements + + that.getDistances(); + that.updateDisableHandlers(); + }; + /** + * Add a target element to this synchronizer + * + * @param {HTMLElement} element - The new target element to be synchronized + * @returns {void} + */ + + + this.addTarget = function (element) { + // Return if this element was previously added + var index = targetElements.indexOf(element); + + if (index !== -1) { + return; + } // Add to our list of enabled elements + + + targetElements.push(element); // Update the initial distances between elements + + that.getDistances(); // Invoke the handler for this new target element + + eventHandler(that, element, element, 0); + that.updateDisableHandlers(); + }; + /** + * Add an element to this synchronizer as both a source and a target + * + * @param {HTMLElement} element - The new element + * @returns {void} + */ + + + this.add = function (element) { + that.addSource(element); + that.addTarget(element); + }; + /** + * Remove a source element from this synchronizer + * + * @param {HTMLElement} element - The element to be removed + * @returns {void} + */ + + + this.removeSource = function (element) { + // Find the index of this element + var index = sourceElements.indexOf(element); + + if (index === -1) { + return; + } // Remove this element from the array + + + sourceElements.splice(index, 1); // Stop listening for the event + + event.split(' ').forEach(function (oneEvent) { + element.removeEventListener(oneEvent, onEvent); + }); // Update the initial distances between elements + + that.getDistances(); // Update everyone listening for events + + fireEvent(element); + that.updateDisableHandlers(); + }; + /** + * Remove a target element from this synchronizer + * + * @param {HTMLElement} element - The element to be removed + * @returns {void} + */ + + + this.removeTarget = function (element) { + // Find the index of this element + var index = targetElements.indexOf(element); + + if (index === -1) { + return; + } // Remove this element from the array + + + targetElements.splice(index, 1); // Update the initial distances between elements + + that.getDistances(); // Invoke the handler for the removed target + + eventHandler(that, element, element, 0); + that.updateDisableHandlers(); + }; + /** + * Remove an element from this synchronizer as both a target and source + * + * @param {HTMLElement} element - The element to be removed + * @returns {void} + */ + + + this.remove = function (element) { + that.removeTarget(element); + that.removeSource(element); + }; + /** + * Get the array of source elements + * + * @returns {HTMLElement[]} + */ + + + this.getSourceElements = function () { + return sourceElements; + }; + /** + * Get the array of target elements + * + * @returns {HTMLElement[]} + */ + + + this.getTargetElements = function () { + return targetElements; + }; + /** + * Display an image while halting synchronization + * + * @param {HTMLElement} element - The element containing the image + * @param {Object} image - The cornerstone image object + * @param {Object} viewport - The cornerstone viewport object + * @returns {void} + */ + + + this.displayImage = function (element, image, viewport) { + ignoreFiredEvents = true; + cornerstone.displayImage(element, image, viewport); + ignoreFiredEvents = false; + }; + /** + * Update a viewport while halting synchronization + * + * @param {HTMLElement} element - The target element + * @param {Object} viewport - The new cornerstone viewport object + * @returns {void} + */ + + + this.setViewport = function (element, viewport) { + ignoreFiredEvents = true; + cornerstone.setViewport(element, viewport); + ignoreFiredEvents = false; + }; + /** + * Remove an element from the synchronizer based on an event from that element + * + * @private + * @param {Event} e - The event whose element will be removed + * @returns {void} + */ + + + function disableHandler(e) { + var element = e.detail.element; + that.remove(element); + Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_2__["clearToolOptionsByElement"])(element); + } + /** + * Add an event listener to each element that can remove it from the synchronizer + * @returns {void} + */ + + + this.updateDisableHandlers = function () { + var elements = unique(sourceElements.concat(targetElements)); + elements.forEach(function (element) { + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.ELEMENT_DISABLED, disableHandler); + element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.ELEMENT_DISABLED, disableHandler); + }); + }; + /** + * Remove all elements from this synchronizer + * @returns {void} + */ + + + this.destroy = function () { + var elements = unique(sourceElements.concat(targetElements)); + elements.forEach(function (element) { + that.remove(element); + }); + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (Synchronizer); + +/***/ }), + +/***/ "./synchronization/panZoomSynchronizer.js": +/*!************************************************!*\ + !*** ./synchronization/panZoomSynchronizer.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Synchronize the target zoom and pan to match the source + * @export + * @public + * @method + * @name panZoomSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element for the zoom and pan values + * @param {HTMLElement} targetElement - The target element + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) { + // Ignore the case where the source and target are the same enabled element + if (targetElement === sourceElement) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Get the source and target viewports + + var sourceViewport = cornerstone.getViewport(sourceElement); + var targetViewport = cornerstone.getViewport(targetElement); // Do nothing if the scale and translation are the same + + if (targetViewport.scale === sourceViewport.scale && targetViewport.translation.x === sourceViewport.translation.x && targetViewport.translation.y === sourceViewport.translation.y) { + return; + } // Scale and/or translation are different, sync them + + + targetViewport.scale = sourceViewport.scale; + targetViewport.translation.x = sourceViewport.translation.x; + targetViewport.translation.y = sourceViewport.translation.y; + synchronizer.setViewport(targetElement, targetViewport); +}); + +/***/ }), + +/***/ "./synchronization/stackImageIndexSynchronizer.js": +/*!********************************************************!*\ + !*** ./synchronization/stackImageIndexSynchronizer.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); + + + + +/** + * Synchronize the target stack to the index closest to the source stack's index + * @export + * @public + * @method + * @name stackImageIndexSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element for the index value + * @param {HTMLElement} targetElement - The target element + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) { + // Ignore the case where the source and target are the same enabled element + if (targetElement === sourceElement) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var sourceStackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(sourceElement, 'stack'); + var sourceStackData = sourceStackToolDataSource.data[0]; + var targetStackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack'); + var targetStackData = targetStackToolDataSource.data[0]; + var newImageIdIndex = sourceStackData.currentImageIdIndex; // Clamp the index + + newImageIdIndex = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_3__["default"])(newImageIdIndex, 0, targetStackData.imageIds.length - 1); // Do nothing if the index has not changed + + if (newImageIdIndex === targetStackData.currentImageIdIndex) { + return; + } + + var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement); + var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement); + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement); + + if (startLoadingHandler) { + startLoadingHandler(targetElement); + } + + var loader; + + if (targetStackData.preventCache === true) { + loader = cornerstone.loadImage(targetStackData.imageIds[newImageIdIndex]); + } else { + loader = cornerstone.loadAndCacheImage(targetStackData.imageIds[newImageIdIndex]); + } + + loader.then(function (image) { + var viewport = cornerstone.getViewport(targetElement); + targetStackData.currentImageIdIndex = newImageIdIndex; + synchronizer.displayImage(targetElement, image, viewport); + + if (endLoadingHandler) { + endLoadingHandler(targetElement, image); + } + }, function (error) { + var imageId = targetStackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(targetElement, imageId, error); + } + }); +}); + +/***/ }), + +/***/ "./synchronization/stackImagePositionOffsetSynchronizer.js": +/*!*****************************************************************!*\ + !*** ./synchronization/stackImagePositionOffsetSynchronizer.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js"); + + + + // In the future we will want to have a way to manually register links sets of the same orientation (e.g. an axial link set from a prior with an axial link set of a current). The user could do this by scrolling the two stacks to a similar location and then doing a user action (e.g. right click link) at which point the system will capture the delta between the image position (patient) of both stacks and use that to sync them. This offset will need to be adjustable. + +/** + * Calculate a position in space that is offset from the source image's position, + * and synchronize the target stack to the image that is closest to that position. + * @export + * @public + * @method + * @name stackImagePositionOffsetSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element + * @param {HTMLElement} targetElement - The target element + * @param {Object} eventData - The data object from the triggering event + * @param {Object} positionDifference - An object with { x, y, z } values that will be + * added to the source image's coordinates + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement, eventData, positionDifference) { + // Ignore the case where the source and target are the same enabled element + if (targetElement === sourceElement) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var sourceStackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(sourceElement, 'stack').data[0]; + var sourceImageId = sourceStackData.imageIds[sourceStackData.currentImageIdIndex]; + var sourceImagePlane = cornerstone.metaData.get('imagePlaneModule', sourceImageId); + + if (sourceImagePlane === undefined || sourceImagePlane.imagePositionPatient === undefined) { + return; + } + + var sourceImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(sourceImagePlane.imagePositionPatient); + var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack'); + var stackData = stackToolDataSource.data[0]; + var minDistance = Number.MAX_VALUE; + var newImageIdIndex = -1; + + if (!positionDifference) { + return; + } + + var finalPosition = sourceImagePosition.clone().add(positionDifference); + stackData.imageIds.forEach(function (imageId, index) { + var imagePlane = cornerstone.metaData.get('imagePlaneModule', imageId); + + if (imagePlane === undefined || imagePlane.imagePositionPatient === undefined) { + return; + } + + var imagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imagePlane.imagePositionPatient); + var distance = finalPosition.distanceToSquared(imagePosition); + + if (distance < minDistance) { + minDistance = distance; + newImageIdIndex = index; + } + }); + + if (newImageIdIndex === stackData.currentImageIdIndex || newImageIdIndex === -1) { + return; + } + + var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement); + var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement); + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement); + stackData.currentImageIdIndex = newImageIdIndex; + var newImageId = stackData.imageIds[newImageIdIndex]; + + if (startLoadingHandler) { + startLoadingHandler(targetElement); + } + + var loader; + + if (stackData.preventCache === true) { + loader = cornerstone.loadImage(newImageId); + } else { + loader = cornerstone.loadAndCacheImage(newImageId); + } + + loader.then(function (image) { + var viewport = cornerstone.getViewport(targetElement); + + if (stackData.currentImageIdIndex !== newImageIdIndex) { + return; + } + + synchronizer.displayImage(targetElement, image, viewport); + + if (endLoadingHandler) { + endLoadingHandler(targetElement, image); + } + }, function (error) { + var imageId = stackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(targetElement, imageId, error); + } + }); +}); + +/***/ }), + +/***/ "./synchronization/stackImagePositionSynchronizer.js": +/*!***********************************************************!*\ + !*** ./synchronization/stackImagePositionSynchronizer.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js"); + + + + +/** + * Synchronize the target stack to the image closest to the source image's position + * @export + * @public + * @method + * @name stackImagePositionSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element for the image position + * @param {HTMLElement} targetElement - The target element + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) { + // Ignore the case where the source and target are the same enabled element + if (targetElement === sourceElement) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var sourceStackData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(sourceElement, 'stack').data[0]; + var sourceImageId = sourceStackData.imageIds[sourceStackData.currentImageIdIndex]; + var sourceImagePlane = cornerstone.metaData.get('imagePlaneModule', sourceImageId); + + if (sourceImagePlane === undefined || sourceImagePlane.imagePositionPatient === undefined) { + // Console.log('No position found for image ' + sourceImage.imageId); + return; + } + + var sourceImagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(sourceImagePlane.imagePositionPatient); + var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack'); + var stackData = stackToolDataSource.data[0]; + var minDistance = Number.MAX_VALUE; + var newImageIdIndex = -1; + stackData.imageIds.forEach(function (imageId, index) { + var imagePlane = cornerstone.metaData.get('imagePlaneModule', imageId); + + if (imagePlane === undefined || imagePlane.imagePositionPatient === undefined) { + // Console.log('No position found for image ' + imageId); + return; + } + + var imagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imagePlane.imagePositionPatient); + var distance = imagePosition.distanceToSquared(sourceImagePosition); // Console.log(index + '=' + distance); + + if (distance < minDistance) { + minDistance = distance; + newImageIdIndex = index; + } + }); + + if (newImageIdIndex === stackData.currentImageIdIndex) { + return; + } + + var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement); + var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement); + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement); + stackData.currentImageIdIndex = newImageIdIndex; + var newImageId = stackData.imageIds[newImageIdIndex]; + + if (startLoadingHandler) { + startLoadingHandler(targetElement); + } + + if (newImageIdIndex !== -1) { + var loader; + + if (stackData.preventCache === true) { + loader = cornerstone.loadImage(newImageId); + } else { + loader = cornerstone.loadAndCacheImage(newImageId); + } + + loader.then(function (image) { + var viewport = cornerstone.getViewport(targetElement); + + if (stackData.currentImageIdIndex !== newImageIdIndex) { + return; + } + + synchronizer.displayImage(targetElement, image, viewport); + + if (endLoadingHandler) { + endLoadingHandler(targetElement, image); + } + }, function (error) { + var imageId = stackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(targetElement, imageId, error); + } + }); + } +}); + +/***/ }), + +/***/ "./synchronization/stackScrollSynchronizer.js": +/*!****************************************************!*\ + !*** ./synchronization/stackScrollSynchronizer.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); + + + + +/** + * Propogate scrolling actions from the source element to the target element. + * @export + * @public + * @method + * @name stackScrollSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element for the scroll event + * @param {HTMLElement} targetElement - The target element + * @param {Object} eventData - The data object from the triggering event + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement, eventData) { + // If the target and source are the same, stop + if (sourceElement === targetElement) { + return; + } // If there is no event, or direction is 0, stop + + + if (!eventData || !eventData.direction) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Get the stack of the target viewport + + var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(targetElement, 'stack'); + var stackData = stackToolDataSource.data[0]; // Get the new index for the stack + + var newImageIdIndex = stackData.currentImageIdIndex + eventData.direction; // Ensure the index does not exceed the bounds of the stack + + newImageIdIndex = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_3__["default"])(newImageIdIndex, 0, stackData.imageIds.length - 1); // If the index has not changed, stop here + + if (stackData.currentImageIdIndex === newImageIdIndex) { + return; + } + + var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getStartLoadHandler(targetElement); + var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getEndLoadHandler(targetElement); + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].getErrorLoadingHandler(targetElement); + stackData.currentImageIdIndex = newImageIdIndex; + var newImageId = stackData.imageIds[newImageIdIndex]; + + if (startLoadingHandler) { + startLoadingHandler(targetElement); + } + + var loader; + + if (stackData.preventCache === true) { + loader = cornerstone.loadImage(newImageId); + } else { + loader = cornerstone.loadAndCacheImage(newImageId); + } + + loader.then(function (image) { + var viewport = cornerstone.getViewport(targetElement); + + if (stackData.currentImageIdIndex !== newImageIdIndex) { + return; + } + + synchronizer.displayImage(targetElement, image, viewport); + + if (endLoadingHandler) { + endLoadingHandler(targetElement, image); + } + }, function (error) { + var imageId = stackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(targetElement, imageId, error); + } + }); +}); + +/***/ }), + +/***/ "./synchronization/updateImageSynchronizer.js": +/*!****************************************************!*\ + !*** ./synchronization/updateImageSynchronizer.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Redraw target image immediately any time handler is called from source element. + * @export + * @public + * @method + * @name updateImageSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element + * @param {HTMLElement} targetElement - The target element + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) { + // Ignore the case where the source and target are the same enabled element + if (targetElement === sourceElement) { + return; + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(targetElement); +}); + +/***/ }), + +/***/ "./synchronization/wwwcSynchronizer.js": +/*!*********************************************!*\ + !*** ./synchronization/wwwcSynchronizer.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Synchronize the target viewport ww/wc to match the source element. + * @export + * @public + * @method + * @name wwwcSynchronizer + * + * @param {Object} synchronizer - The Synchronizer instance that attaches this + * handler to an event + * @param {HTMLElement} sourceElement - The source element for the ww/wc values + * @param {HTMLElement} targetElement - The target element + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (synchronizer, sourceElement, targetElement) { + // Ignore the case where the source and target are the same enabled element + if (targetElement === sourceElement) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // Get the source and target viewports + + var sourceViewport = cornerstone.getViewport(sourceElement); + var targetViewport = cornerstone.getViewport(targetElement); // Do nothing if the ww/wc already match + + if (targetViewport.voi.windowWidth === sourceViewport.voi.windowWidth && targetViewport.voi.windowCenter === sourceViewport.voi.windowCenter && targetViewport.invert === sourceViewport.invert) { + return; + } // Www/wc are different, sync them + + + targetViewport.voi.windowWidth = sourceViewport.voi.windowWidth; + targetViewport.voi.windowCenter = sourceViewport.voi.windowCenter; + targetViewport.invert = sourceViewport.invert; + synchronizer.setViewport(targetElement, targetViewport); +}); + +/***/ }), + +/***/ "./thirdParty/register.js": +/*!********************************!*\ + !*** ./thirdParty/register.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _registerModule_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registerModule.js */ "./thirdParty/registerModule.js"); +/* harmony import */ var _registerMixin_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./registerMixin.js */ "./thirdParty/registerMixin.js"); +/* harmony import */ var _registerItem_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./registerItem.js */ "./thirdParty/registerItem.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('thirdParty:register'); +/** + * Register an item or module to cornerstoneTools. + * @export + * @public + * @method + * @name register + * + * @param {string} type The type of the item/module. + * @param {string} name The name of the item/module. + * @param {Object|function} item The item/module itself. + * @param {boolean} [overwrite=false] Whether an item/module should be + * overwritten, should it have the same name. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (type, name, item) { + var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + + if (!isValidInput(type, name, item)) { + return; + } + + switch (type) { + case 'module': + Object(_registerModule_js__WEBPACK_IMPORTED_MODULE_1__["default"])(name, item, overwrite); + break; + + case 'mixin': + Object(_registerMixin_js__WEBPACK_IMPORTED_MODULE_2__["default"])(name, item, overwrite); + break; + + default: + Object(_registerItem_js__WEBPACK_IMPORTED_MODULE_3__["default"])(type, name, item, overwrite); + } +}); +/** + * Returns true if the item is valid, this avoids + * clogging up the library with invalid data. + * @private + * @method + * @name isValidInput + * + * @param {string} type The type of the item/module. + * @param {string} name The name of the item/module. + * @param {Object|function} item The item/module itself. + * @returns {boolean} Whether the input is valid. + */ + +function isValidInput(type, name, item) { + if (!type) { + logger.warn('The type must be given in order to register.'); + return false; + } + + if (!name) { + logger.warn("The %s must have a name in order to register.", type); + return false; + } + + if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(item) !== 'object' && typeof item !== 'function') { + logger.warn("The %s is a %s, it should be an Object or a function.", item, _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(item)); + return false; + } + + return true; +} + +/***/ }), + +/***/ "./thirdParty/registerItem.js": +/*!************************************!*\ + !*** ./thirdParty/registerItem.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _lib_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib.js */ "./lib.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('thirdParty:registerType'); +/** + * Register an item to cornerstoneTools. + * @export + * @private + * @method + * @name registerItem + * + * @param {string} type The type of the item. + * @param {string} name The name of the item. + * @param {Object|function} item The item itself. + * @param {boolean} [overwrite=false] Whether an item should be overwritten, + * should it have the same name. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (type, name, item) { + var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + var itemKey = "".concat(type, "/").concat(name); + var alreadyRegistered = isItemNameRegistered(itemKey); + + if (alreadyRegistered && !overwrite) { + logger.warn('%s is already registered', itemKey); + return; + } + + if (alreadyRegistered) { + logger.warn('Overwriting %s', itemKey); + } + + _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"][itemKey] = item; +}); + +function isItemNameRegistered(itemKey) { + return _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"][itemKey] !== undefined; +} + +/***/ }), + +/***/ "./thirdParty/registerMixin.js": +/*!*************************************!*\ + !*** ./thirdParty/registerMixin.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _lib_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib.js */ "./lib.js"); +/* harmony import */ var _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mixins/index.js */ "./mixins/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('thirdParty:registerMixin'); +/** + * Register an mixin to cornerstoneTools. + * @export + * @private + * @method + * @name registerMixin + * + * @param {string} name The name of the mixin. + * @param {Object} mixin The mixin itself. + * @param {boolean} [overwrite=false] Whether an mixin should be overwritten, + * should it have the same name. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (name, mixin) { + var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var alreadyRegistered = isMixinRegistered(name); + + if (alreadyRegistered && !overwrite) { + logger.warn('mixins/%s is already registered', name); + return; + } + + if (alreadyRegistered) { + logger.warn('Overwriting mixins/%s', name); + } // Register to the mixins object + + + _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__["default"][name] = mixin; // Reference the mixin from the library so it can be exported externally. + + _lib_js__WEBPACK_IMPORTED_MODULE_0__["lib"]["mixins/".concat(name)] = _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__["default"][name]; +}); + +function isMixinRegistered(name) { + return _mixins_index_js__WEBPACK_IMPORTED_MODULE_1__["default"][name] !== undefined; +} + +/***/ }), + +/***/ "./thirdParty/registerModule.js": +/*!**************************************!*\ + !*** ./thirdParty/registerModule.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('thirdParty:registerModule'); +/** + * Register a module. + * @export + * @private + * @method + * @name registerModule + * + * @param {string} name The name of the module. + * @param {Object} newModule The module to register. + * @param {boolean} [overwrite] Whether a module should be overwritten, + * should it have the same name. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (name, newModule) { + var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var alreadyRegistered = isModuleNameRegistered(name); + + if (alreadyRegistered && !overwrite) { + logger.warn('A module with the name %s is already registered', name); + return; + } + + if (alreadyRegistered) { + logger.warn('Overwriting module %s', name); + } + + _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name] = newModule; + + if (typeof _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name].onRegisterCallback === 'function') { + _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name].onRegisterCallback(); + } +}); + +function isModuleNameRegistered(name) { + return _store_index_js__WEBPACK_IMPORTED_MODULE_0__["modules"][name] !== undefined; +} + +/***/ }), + +/***/ "./thirdParty/registerSome.js": +/*!************************************!*\ + !*** ./thirdParty/registerSome.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _register_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./register.js */ "./thirdParty/register.js"); + +/** + * Register an array of items and/or modules to cornerstoneTools. + * @export + * @public + * @method + * @name registerSome + * + * @param {Object[]} items An array of items/modules to register. + * @param {boolean} [overwrite=false] Whether an item/module should be + * overwritten, should it have the same name. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (items) { + var overwrite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + items.forEach(function (_ref) { + var type = _ref.type, + name = _ref.name, + item = _ref.item; + Object(_register_js__WEBPACK_IMPORTED_MODULE_0__["default"])(type, name, item, overwrite); + }); +}); + +/***/ }), + +/***/ "./toolOptions.js": +/*!************************!*\ + !*** ./toolOptions.js ***! + \************************/ +/*! exports provided: getToolOptions, setToolOptions, clearToolOptions, clearToolOptionsByToolType, clearToolOptionsByElement */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getToolOptions", function() { return getToolOptions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setToolOptions", function() { return setToolOptions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearToolOptions", function() { return clearToolOptions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearToolOptionsByToolType", function() { return clearToolOptionsByToolType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clearToolOptionsByElement", function() { return clearToolOptionsByElement; }); +var elementToolOptions = {}; +/** + * Retrieve the options object associated with a particular toolType and element + * @export + * @public + * @method + * @name getToolOptions + * + * @param {string} toolType Tool type identifier of the target options object + * @param {HTMLElement} element Element of the target options object + * + * @returns {Object} Target options object (empty if not yet set) + */ + +function getToolOptions(toolType, element) { + if (!elementToolOptions[toolType]) { + return {}; + } + + var toolOptions = elementToolOptions[toolType]; + var optionsObject = toolOptions.find(function (toolOptionObject) { + return toolOptionObject.element === element; + }); + + if (!optionsObject) { + return {}; + } + + return optionsObject.options; +} +/** + * Set the options object associated with a particular toolType and element. + * @export + * @public + * @method + * @name setToolOptions + * + * @param {string} toolType Tool type identifier of the target options object. + * @param {HTMLElement} element Element of the target options object. + * @param {Object} options Options object to store at target. + * @returns {void} + */ + + +function setToolOptions(toolType, element, options) { + if (!elementToolOptions[toolType]) { + elementToolOptions[toolType] = [{ + element: element, + options: options + }]; + return; + } + + var toolOptions = elementToolOptions[toolType]; + var index = toolOptions.findIndex(function (toolOptionObject) { + return toolOptionObject.element === element; + }); + + if (index === -1) { + elementToolOptions[toolType].push({ + element: element, + options: options + }); + } else { + var elementOptions = elementToolOptions[toolType][index].options || {}; + elementToolOptions[toolType][index].options = Object.assign(elementOptions, options); + } +} +/** + * Clear the options object associated with a particular toolType and element. + * @export + * @public + * @method + * @name clearToolOptions + * + * @param {string} toolType Tool type identifier of the target options object. + * @param {HTMLElement} element Element of the target options object. + * @returns {void} + */ + + +function clearToolOptions(toolType, element) { + var toolOptions = elementToolOptions[toolType]; + + if (toolOptions) { + elementToolOptions[toolType] = toolOptions.filter(function (toolOptionObject) { + return toolOptionObject.element !== element; + }); + } +} +/** + * Clear the options objects associated with a particular toolType. + * @export + * @public + * @method + * @name clearToolOptionsByToolType + * + * @param {string} toolType Tool type identifier of the target options objects. + * @returns {void} + */ + + +function clearToolOptionsByToolType(toolType) { + delete elementToolOptions[toolType]; +} +/** + * Clear the options objects associated with a particular element. + * @export + * @public + * @method + * @name clearToolOptionsByElement + * + * @param {HTMLElement} element Element of the target options objects. + * @returns {void} + */ + + +function clearToolOptionsByElement(element) { + for (var toolType in elementToolOptions) { + elementToolOptions[toolType] = elementToolOptions[toolType].filter(function (toolOptionObject) { + return toolOptionObject.element !== element; + }); + } +} + + + +/***/ }), + +/***/ "./tools/CrosshairsTool.js": +/*!*********************************!*\ + !*** ./tools/CrosshairsTool.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CrosshairsTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/pointProjector.js */ "./util/pointProjector.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js"); +/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../toolOptions.js */ "./toolOptions.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + + + + + +/** + * @public + * @class CrosshairsTool + * @memberof Tools + * + * @classdesc Tool for finding the slice in another element corresponding to the + * image position in a synchronized image series. + * @extends Tools.Base.BaseTool + */ + +var CrosshairsTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(CrosshairsTool, _BaseTool); + + function CrosshairsTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CrosshairsTool); + + var defaultProps = { + name: 'Crosshairs', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__["crosshairsCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CrosshairsTool).call(this, props, defaultProps)); + _this.mouseDownCallback = _this._chooseLocation.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.mouseDragCallback = _this._chooseLocation.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.touchDragCallback = _this._chooseLocation.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CrosshairsTool, [{ + key: "_chooseLocation", + value: function _chooseLocation(evt) { + var eventData = evt.detail; + var element = eventData.element; // Prevent CornerstoneToolsTouchStartActive from killing any press events + + evt.stopImmediatePropagation(); // If we have no toolData for this element, return immediately as there is nothing to do + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(element, this.name); + + if (!toolData) { + return; + } // Get current element target information + + + var sourceElement = element; + var sourceEnabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getEnabledElement(sourceElement); + var sourceImageId = sourceEnabledElement.image.imageId; + var sourceImagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.metaData.get('imagePlaneModule', sourceImageId); + + if (!sourceImagePlane) { + return; + } // Get currentPoints from mouse cursor on selected element + + + var sourceImagePoint = eventData.currentPoints.image; // Transfer this to a patientPoint given imagePlane metadata + + var patientPoint = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_10__["imagePointToPatientPoint"])(sourceImagePoint, sourceImagePlane); // Get the enabled elements associated with this synchronization context + + var syncContext = toolData.data[0].synchronizationContext; + var enabledElements = syncContext.getSourceElements(); // Iterate over each synchronized element + + enabledElements.forEach(function (targetElement) { + // Don't do anything if the target is the same as the source + if (targetElement === sourceElement) { + return; + } + + var minDistance = Number.MAX_VALUE; + var newImageIdIndex = -1; + var stackToolDataSource = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["getToolState"])(targetElement, 'stack'); + + if (stackToolDataSource === undefined) { + return; + } + + var stackData = stackToolDataSource.data[0]; // Find within the element's stack the closest image plane to selected location + + stackData.imageIds.forEach(function (imageId, index) { + var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.metaData.get('imagePlaneModule', imageId); // Skip if the image plane is not ready + + if (!imagePlane || !imagePlane.imagePositionPatient || !imagePlane.rowCosines || !imagePlane.columnCosines) { + return; + } + + var imagePosition = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__["default"])(imagePlane.imagePositionPatient); + var row = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__["default"])(imagePlane.rowCosines); + var column = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_11__["default"])(imagePlane.columnCosines); + var normal = column.clone().cross(row.clone()); + var distance = Math.abs(normal.clone().dot(imagePosition) - normal.clone().dot(patientPoint)); + + if (distance < minDistance) { + minDistance = distance; + newImageIdIndex = index; + } + }); + + if (newImageIdIndex === stackData.currentImageIdIndex) { + return; + } // Switch the loaded image to the required image + + + if (newImageIdIndex !== -1 && stackData.imageIds[newImageIdIndex] !== undefined) { + var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__["default"].getStartLoadHandler(targetElement); + var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__["default"].getEndLoadHandler(targetElement); + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_8__["default"].getErrorLoadingHandler(targetElement); + + if (startLoadingHandler) { + startLoadingHandler(targetElement); + } + + var loader; + + if (stackData.preventCache === true) { + loader = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.loadImage(stackData.imageIds[newImageIdIndex]); + } else { + loader = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.loadAndCacheImage(stackData.imageIds[newImageIdIndex]); + } + + loader.then(function (image) { + var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getViewport(targetElement); + stackData.currentImageIdIndex = newImageIdIndex; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.displayImage(targetElement, image, viewport); + + if (endLoadingHandler) { + endLoadingHandler(targetElement, image); + } + }, function (error) { + var imageId = stackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(targetElement, imageId, error); + } + }); + } + }); + } + }, { + key: "activeCallback", + value: function activeCallback(element, _ref) { + var mouseButtonMask = _ref.mouseButtonMask, + synchronizationContext = _ref.synchronizationContext; + Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_12__["setToolOptions"])(this.name, element, { + mouseButtonMask: mouseButtonMask + }); // Clear any currently existing toolData + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["clearToolState"])(element, this.name); + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_9__["addToolState"])(element, this.name, { + synchronizationContext: synchronizationContext + }); + } + }]); + + return CrosshairsTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/DoubleTapFitToWindowTool.js": +/*!*******************************************!*\ + !*** ./tools/DoubleTapFitToWindowTool.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DoubleTapFitToWindowTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); + + + + + + + +/** + * @public + * @class DoubleTapFitToWindowTool + * @memberof Tools + * + * @classdesc Tool which calls the external cornerstone.fitToWindow() function + * on double tap. + * @extends Tools.Base.BaseTool + */ + +var DoubleTapFitToWindowTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(DoubleTapFitToWindowTool, _BaseTool); + + function DoubleTapFitToWindowTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DoubleTapFitToWindowTool); + + var defaultProps = { + name: 'DoubleTapFitToWindow', + supportedInteractionTypes: ['DoubleTap'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(DoubleTapFitToWindowTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DoubleTapFitToWindowTool, [{ + key: "doubleTapCallback", + value: function doubleTapCallback(evt) { + var eventData = evt.detail; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.fitToWindow(eventData.element); + } + }]); + + return DoubleTapFitToWindowTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/DragProbeTool.js": +/*!********************************!*\ + !*** ./tools/DragProbeTool.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return DragProbeTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/getRGBPixels.js */ "./util/getRGBPixels.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + + + + + + +/** + * @public + * @class DragProbeTool + * @memberof Tools + * + * @classdesc Tool which provides a probe of the image data at the + * input position on drag. + * @extends Tools.Base.BaseTool + */ + +var DragProbeTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(DragProbeTool, _BaseTool); + + function DragProbeTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, DragProbeTool); + + var defaultProps = { + name: 'DragProbe', + strategies: { + default: defaultStrategy, + minimal: minimalStrategy + }, + defaultStrategy: 'default', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_14__["probeCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(DragProbeTool).call(this, props, defaultProps)); + _this.touchDragCallback = _this._movingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.touchEndCallback = _this._endMovingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.mouseDragCallback = _this._movingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.mouseUpCallback = _this._endMovingEventCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.dragEventData = {}; + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(DragProbeTool, [{ + key: "_movingEventCallback", + value: function _movingEventCallback(evt) { + var eventData = evt.detail; + var element = eventData.element; + this.dragEventData = eventData; + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element); + } + }, { + key: "_endMovingEventCallback", + value: function _endMovingEventCallback(evt) { + var eventData = evt.detail; + var element = eventData.element; + this.dragEventData = {}; + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element); + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + if (!this.dragEventData.currentPoints) { + return; + } + + if (evt && evt.detail && Boolean(Object.keys(this.dragEventData.currentPoints).length)) { + evt.detail.currentPoints = this.dragEventData.currentPoints; + this.applyActiveStrategy(evt); + } + } + }]); + + return DragProbeTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]); +/** + * Default strategy will pick the exactly point of mouse/touch interact and display the probe data. + * + * @param {Object} evt Image rendered event + * @returns {void} + */ + + + + +function defaultStrategy(evt) { + var config = this.configuration; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone; + var eventData = evt.detail; + var element = eventData.element, + image = eventData.image, + currentPoints = eventData.currentPoints, + canvasContext = eventData.canvasContext; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["getNewContext"])(canvasContext.canvas); + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getActiveColor(); + var fontHeight = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize(); + var x = Math.round(currentPoints.image.x); + var y = Math.round(currentPoints.image.y); + + if (x < 0 || y < 0 || x >= image.columns || y >= image.rows) { + return; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["setShadow"])(context, config); + var text = "".concat(x, ", ").concat(y); + var storedPixels; + var str; + + if (image.color) { + storedPixels = Object(_util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element, x, y, 1, 1); + str = "R: ".concat(storedPixels[0], " G: ").concat(storedPixels[1], " B: ").concat(storedPixels[2], " A: ").concat(storedPixels[3]); + } else { + storedPixels = cornerstone.getStoredPixels(element, x, y, 1, 1); + var sp = storedPixels[0]; + var mo = sp * image.slope + image.intercept; + var suv = Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, sp); // Draw text + + str = "SP: ".concat(sp, " MO: ").concat(parseFloat(mo.toFixed(3))); + + if (suv) { + str += " SUV: ".concat(parseFloat(suv.toFixed(3))); + } + } // Draw text 5px away from cursor + + + var textCoords = { + x: currentPoints.canvas.x + 5, + y: currentPoints.canvas.y - 5 + }; + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, str, textCoords.x, textCoords.y + fontHeight + 5, color); + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, text, textCoords.x, textCoords.y, color); + }); +} +/** + * Minimal strategy will position a circle and use the center of the circle to calculate and display probe data. + * + * @param {Object} evt Image rendered event + * @returns {void} + */ + + +function minimalStrategy(evt) { + var config = this.configuration; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone; + var eventData = evt.detail; + var element = eventData.element, + image = eventData.image, + currentPoints = eventData.currentPoints, + canvasContext = eventData.canvasContext, + isTouchEvent = eventData.isTouchEvent; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["getNewContext"])(canvasContext.canvas); + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getActiveColor(); + var pageCoordY = currentPoints.page.y - _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() / 2; + + if (isTouchEvent) { + pageCoordY = currentPoints.page.y - _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() * 4; + } + + var toolCoords = cornerstone.pageToPixel(element, currentPoints.page.x, pageCoordY); + + if (toolCoords.x < 0 || toolCoords.y < 0 || toolCoords.x >= image.columns || toolCoords.y >= image.rows) { + return; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["setShadow"])(context, config); + var seriesModule = cornerstone.metaData.get('generalSeriesModule', image.imageId); + var modality = seriesModule && seriesModule.modality; + var storedPixels; + var text = ''; + + if (image.color) { + storedPixels = Object(_util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element, toolCoords.x, toolCoords.y, 1, 1); + text = "R: ".concat(storedPixels[0], " G: ").concat(storedPixels[1], " B: ").concat(storedPixels[2]); + } else { + storedPixels = cornerstone.getStoredPixels(element, toolCoords.x, toolCoords.y, 1, 1); + var sp = storedPixels[0]; + var mo = sp * image.slope + image.intercept; + var modalityPixelValueText = parseFloat(mo.toFixed(2)); + + if (modality === 'CT') { + text += "HU: ".concat(modalityPixelValueText); + } else if (modality === 'PT') { + text += modalityPixelValueText; + var suv = Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, sp); + + if (suv) { + text += " SUV: ".concat(parseFloat(suv.toFixed(2))); + } + } else { + text += modalityPixelValueText; + } + } // Prepare text + + + var textCoords = cornerstone.pixelToCanvas(element, toolCoords); // Translate the x/y away from the cursor + + var translation = { + x: 12, + y: -(_stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() + 10) / 2 + }; + var handleRadius = 6; + var padding = 5; + var width = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["textBoxWidth"])(context, text, padding); + + if (isTouchEvent) { + translation = { + x: -width / 2, + y: -_stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize() - 10 - 2 * handleRadius + }; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["drawCircle"])(context, element, textCoords, handleRadius, { + color: color + }, 'canvas'); + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, text, textCoords.x + translation.x, textCoords.y + translation.y, color); + }); +} + +/***/ }), + +/***/ "./tools/EraserTool.js": +/*!*****************************!*\ + !*** ./tools/EraserTool.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EraserTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../store/index.js */ "./store/index.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + + +/** + * @public + * @class EraserTool + * @memberof Tools + * + * @classdesc Tool for deleting the data of other Annotation Tools. + * @extends Tools.Base.BaseTool + */ + +var EraserTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(EraserTool, _BaseTool); + + function EraserTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, EraserTool); + + var defaultProps = { + name: 'Eraser', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__["eraserCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(EraserTool).call(this, props, defaultProps)); + _this.preMouseDownCallback = _this._deleteAllNearbyTools.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.preTouchStartCallback = _this._deleteAllNearbyTools.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(EraserTool, [{ + key: "_deleteAllNearbyTools", + value: function _deleteAllNearbyTools(evt) { + var coords = evt.detail.currentPoints.canvas; + var element = evt.detail.element; + _store_index_js__WEBPACK_IMPORTED_MODULE_9__["state"].tools.forEach(function (tool) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, tool.name); + + if (toolState) { + // Modifying in a foreach? Probably not ideal + toolState.data.forEach(function (data) { + if (typeof tool.pointNearTool === 'function' && tool.pointNearTool(element, data, coords)) { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["removeToolState"])(element, tool.name, data); + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element); + } + }); + } + }); + var consumeEvent = true; + return consumeEvent; + } + }]); + + return EraserTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]); + + + +/***/ }), + +/***/ "./tools/FreehandRoiSculptorTool.js": +/*!******************************************!*\ + !*** ./tools/FreehandRoiSculptorTool.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FreehandRoiSculptorTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../store/index.js */ "./store/index.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../store/getToolForElement.js */ "./store/getToolForElement.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../store/setToolCursor.js */ "./store/setToolCursor.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../util/freehand/index.js */ "./util/freehand/index.js"); + + + + + + + + + + + + + + + + + + +var FreehandHandleData = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_17__["default"].FreehandHandleData; +/** + * @public + * @class FreehandRoiSculptorTool + * @memberof Tools + * + * @classdesc Tool for easily sculpting annotations drawn with + * the FreehandRoiTool. + * @extends Tools.Base.BaseTool + */ + +var FreehandRoiSculptorTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(FreehandRoiSculptorTool, _BaseTool); + + function FreehandRoiSculptorTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandRoiSculptorTool); + + var defaultProps = { + name: 'FreehandRoiSculptor', + referencedToolName: 'FreehandRoi', + supportedInteractionTypes: ['Mouse', 'Touch', 'DoubleTap'], + mixins: ['activeOrDisabledBinaryTool'], + configuration: getDefaultFreehandRoiSculptorToolConfiguration(), + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_16__["freehandRoiSculptorCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(FreehandRoiSculptorTool).call(this, props, defaultProps)); + _this.updateOnMouseMove = true; + _this.isMultiPartTool = true; + _this.referencedToolName = _this.initialConfiguration.referencedToolName; + _this._active = false; // Create bound functions for private event loop. + + _this.activeMouseUpCallback = _this.activeMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.activeTouchEndCallback = _this.activeTouchEndCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.activeMouseDragCallback = _this.activeMouseDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FreehandRoiSculptorTool, [{ + key: "renderToolData", + value: function renderToolData(evt) { + var eventData = evt.detail; + + if (this.configuration.currentTool === null) { + return false; + } + + var element = eventData.element; + var config = this.configuration; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + var data = toolState.data[config.currentTool]; + + if (!data) { + return false; + } + + if (this._active) { + var context = eventData.canvasContext.canvas.getContext('2d'); + var options = { + color: this.configuration.dragColor, + fill: null, + handleRadius: this._toolSizeCanvas + }; + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_9__["default"])(context, eventData, this.configuration.mouseLocation.handles, options); + } else if (this.configuration.showCursorOnHover && !this._recentTouchEnd) { + this._renderHoverCursor(evt); + } + } + }, { + key: "doubleClickCallback", + value: function doubleClickCallback(evt) { + var eventData = evt.detail; + + this._selectFreehandTool(eventData); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element); + } + }, { + key: "doubleTapCallback", + value: function doubleTapCallback(evt) { + var eventData = evt.detail; + + this._selectFreehandTool(eventData); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element); + } + }, { + key: "preTouchStartCallback", + value: function preTouchStartCallback(evt) { + this._initialiseSculpting(evt); + + return true; + } + /** + * Event handler for MOUSE_DOWN. + * + * @param {Object} evt - The event. + * @returns {boolean} + */ + + }, { + key: "preMouseDownCallback", + value: function preMouseDownCallback(evt) { + if (!this.options.mouseButtonMask.includes(evt.detail.buttons)) { + return; + } + + this._initialiseSculpting(evt); + + return true; + } + /** + * Event handler for MOUSE_DRAG during the active loop. + * + * @event + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "activeMouseDragCallback", + value: function activeMouseDragCallback(evt) { + var config = this.configuration; + + if (!this._active) { + return; + } + + var eventData = evt.detail; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(eventData.element, this.referencedToolName); + + if (!toolState) { + return; + } + + var points = toolState.data[config.currentTool].handles.points; // Set the mouseLocation handle + + this._getMouseLocation(eventData); + + this._sculpt(eventData, points); // Update the image + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element); + } + /** + * Event handler for MOUSE_UP during the active loop. + * + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "activeMouseUpCallback", + value: function activeMouseUpCallback(evt) { + this._activeEnd(evt); + } + /** + * Event handler for TOUCH_END during the active loop. + * + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "activeTouchEndCallback", + value: function activeTouchEndCallback(evt) { + this._activeEnd(evt); + + this._deselectAllTools(evt); + + this._recentTouchEnd = true; + } + }, { + key: "_activeEnd", + value: function _activeEnd(evt) { + var eventData = evt.detail; + var element = eventData.element; + var config = this.configuration; + this._active = false; + _store_index_js__WEBPACK_IMPORTED_MODULE_10__["state"].isMultiPartToolActive = false; + + this._getMouseLocation(eventData); + + this._invalidateToolData(eventData); + + config.mouseUpRender = true; + + this._deactivateSculpt(element); // Update the image + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element); + preventPropagation(evt); + } + /** + * Renders the cursor + * + * @private + * @param {type} evt description + * @returns {void} + */ + + }, { + key: "_renderHoverCursor", + value: function _renderHoverCursor(evt) { + var eventData = evt.detail; + var element = eventData.element; + var context = eventData.canvasContext.canvas.getContext('2d'); + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + var data = toolState.data[this.configuration.currentTool]; + this._recentTouchEnd = false; + var coords; + + if (this.configuration.mouseUpRender) { + coords = this.configuration.mouseLocation.handles.start; + this.configuration.mouseUpRender = false; + } else { + coords = _store_index_js__WEBPACK_IMPORTED_MODULE_10__["state"].mousePositionImage; + } + + var freehandRoiTool = Object(_store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, this.referencedToolName); + var radiusCanvas = freehandRoiTool.distanceFromPointCanvas(element, data, coords); + this.configuration.mouseLocation.handles.start.x = coords.x; + this.configuration.mouseLocation.handles.start.y = coords.y; + + if (this.configuration.limitRadiusOutsideRegion) { + var unlimitedRadius = radiusCanvas; + radiusCanvas = this._limitCursorRadiusCanvas(eventData, radiusCanvas); // Fade if distant + + if (unlimitedRadius > this.configuration.hoverCursorFadeDistance * radiusCanvas) { + context.globalAlpha = this.configuration.hoverCursorFadeAlpha; + } + } + + var options = { + fill: null, + color: this.configuration.hoverColor, + handleRadius: radiusCanvas + }; + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_9__["default"])(context, eventData, this.configuration.mouseLocation.handles, options); + + if (this.configuration.limitRadiusOutsideRegion) { + context.globalAlpha = 1.0; // Reset drawing alpha for other draw calls. + } + } + /** + * Event handler for NEW_IMAGE event. + * + * @public + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "newImageCallback", + value: function newImageCallback(evt) { + this._deselectAllTools(evt); + } + /** + * Event handler for switching mode to enabled. + * + * @public + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "enabledCallback", + value: function enabledCallback(evt) { + this._deselectAllTools(evt); + } + /** + * Event handler for switching mode to passive. + * + * @public + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "passiveCallback", + value: function passiveCallback(evt) { + this._deselectAllTools(evt); + } + /** + * Event handler for switching mode to disabled. + * + * @public + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "disabledCallback", + value: function disabledCallback(evt) { + this._deselectAllTools(evt); + } + /** + * Select the freehand tool to be edited. + * + * @private + * @param {Object} eventData - Data object associated with the event. + * @returns {void} + */ + + }, { + key: "_selectFreehandTool", + value: function _selectFreehandTool(eventData) { + var config = this.configuration; + var element = eventData.element; + + var closestToolIndex = this._getClosestFreehandToolOnElement(element, eventData); + + if (closestToolIndex === undefined) { + return; + } + + config.currentTool = closestToolIndex; + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_15__["hideToolCursor"])(element); + } + /** + * Activate the selected freehand tool and deactivate others. + * + * @private + * @param {Object} element - The parent element of the freehand tool. + * @param {Number} toolIndex - The ID of the freehand tool. + * @returns {void} + */ + + }, { + key: "_activateFreehandTool", + value: function _activateFreehandTool(element, toolIndex) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + var data = toolState.data; + var config = this.configuration; + config.currentTool = toolIndex; + + for (var i = 0; i < data.length; i++) { + if (i === toolIndex) { + data[i].active = true; + } else { + data[i].active = false; + } + } + } + /** + * Choose the tool radius from the mouse position relative to the active freehand + * tool, and begin sculpting. + * + * @private + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "_initialiseSculpting", + value: function _initialiseSculpting(evt) { + var eventData = evt.detail; + var config = this.configuration; + var element = eventData.element; + + if (config.currentTool === null) { + this._selectFreehandTool(eventData); + + if (config.currentTool === null) { + return; + } + } + + this._active = true; // Interupt event dispatcher + + _store_index_js__WEBPACK_IMPORTED_MODULE_10__["state"].isMultiPartToolActive = true; + + this._configureToolSize(eventData); + + this._getMouseLocation(eventData); + + this._activateFreehandTool(element, config.currentTool); + + this._activateSculpt(element); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(eventData.element); + } + /** + * Sculpts the freehand ROI with the circular freehandSculpter tool, moving, + * adding and removing handles as necessary. + * + * @private + * @param {Object} eventData - Data object associated with the event. + * @param {Object} points - Array of points. + * @returns {void} + */ + + }, { + key: "_sculpt", + value: function _sculpt(eventData, points) { + var config = this.configuration; + this._sculptData = { + element: eventData.element, + image: eventData.image, + mousePoint: eventData.currentPoints.image, + points: points, + toolSize: this._toolSizeImage, + minSpacing: config.minSpacing, + maxSpacing: Math.max(this._toolSizeImage, config.minSpacing * 2) + }; // Push existing handles radially away from tool. + + var pushedHandles = this._pushHandles(); // Insert new handles in sparsely populated areas of the + // Pushed part of the contour. + + + if (pushedHandles.first !== undefined) { + this._insertNewHandles(pushedHandles); // If any handles have been pushed very close together or even overlap, + // Combine these into a single handle. + + + this._consolidateHandles(); + } + } + /** + * _pushHandles -Pushes the points radially away from the mouse if they are + * contained within the circle defined by the freehandSculpter's toolSize and + * the mouse position. + * + * @returns {Object} The first and last pushedHandles. + */ + + }, { + key: "_pushHandles", + value: function _pushHandles() { + var _this$_sculptData = this._sculptData, + points = _this$_sculptData.points, + mousePoint = _this$_sculptData.mousePoint, + toolSize = _this$_sculptData.toolSize; + var pushedHandles = {}; + + for (var i = 0; i < points.length; i++) { + var distanceToHandle = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(points[i], mousePoint); + + if (distanceToHandle > toolSize) { + continue; + } // Push point if inside circle, to edge of circle. + + + this._pushOneHandle(i, distanceToHandle); + + if (pushedHandles.first === undefined) { + pushedHandles.first = i; + pushedHandles.last = i; + } else { + pushedHandles.last = i; + } + } + + return pushedHandles; + } + /** + * Pushes one handle. + * + * @private + * @param {number} i - The index of the handle to push. + * @param {number} distanceToHandle - The distance between the mouse cursor and the handle. + * @returns {void} + */ + + }, { + key: "_pushOneHandle", + value: function _pushOneHandle(i, distanceToHandle) { + var _this$_sculptData2 = this._sculptData, + points = _this$_sculptData2.points, + mousePoint = _this$_sculptData2.mousePoint, + toolSize = _this$_sculptData2.toolSize, + image = _this$_sculptData2.image; + var handle = points[i]; + var directionUnitVector = { + x: (handle.x - mousePoint.x) / distanceToHandle, + y: (handle.y - mousePoint.y) / distanceToHandle + }; + var position = { + x: mousePoint.x + toolSize * directionUnitVector.x, + y: mousePoint.y + toolSize * directionUnitVector.y + }; + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(position, image); + handle.x = position.x; + handle.y = position.y; // Push lines + + var lastHandleIndex = this.constructor._getPreviousHandleIndex(i, points.length); + + points[lastHandleIndex].lines.pop(); + points[lastHandleIndex].lines.push(handle); + } + /** + * Inserts additional handles in sparsely sampled regions of the contour. The + * new handles are placed on the circle defined by the the freehandSculpter's + * toolSize and the mouse position. + * @private + * @param {Array} pushedHandles + * @returns {void} + */ + + }, { + key: "_insertNewHandles", + value: function _insertNewHandles(pushedHandles) { + var indiciesToInsertAfter = this._findNewHandleIndicies(pushedHandles); + + var newIndexModifier = 0; + + for (var i = 0; i < indiciesToInsertAfter.length; i++) { + var insertIndex = indiciesToInsertAfter[i] + 1 + newIndexModifier; + + this._insertHandleRadially(insertIndex); + + newIndexModifier++; + } + } + /** + * Returns an array of indicies that describe where new handles should be + * inserted (where the distance between subsequent handles is > + * config.maxSpacing). + * + * @private + * @param {Object} pushedHandles - The first and last handles that were pushed. + * @returns {Object} An array of indicies that describe where new handles should be inserted. + */ + + }, { + key: "_findNewHandleIndicies", + value: function _findNewHandleIndicies(pushedHandles) { + var _this$_sculptData3 = this._sculptData, + points = _this$_sculptData3.points, + maxSpacing = _this$_sculptData3.maxSpacing; + var indiciesToInsertAfter = []; + + for (var i = pushedHandles.first; i <= pushedHandles.last; i++) { + this._checkSpacing(i, points, indiciesToInsertAfter, maxSpacing); + } + + var pointAfterLast = this.constructor._getNextHandleIndex(pushedHandles.last, points.length); // Check points before and after those pushed. + + + if (pointAfterLast !== pushedHandles.first) { + this._checkSpacing(pointAfterLast, points, indiciesToInsertAfter, maxSpacing); + + var pointBeforeFirst = this.constructor._getPreviousHandleIndex(pushedHandles.first, points.length); + + if (pointBeforeFirst !== pointAfterLast) { + this._checkSpacing(pointBeforeFirst, points, indiciesToInsertAfter, maxSpacing); + } + } + + return indiciesToInsertAfter; + } + /** + * _checkSpacing - description + *@modifies indiciesToInsertAfter + * + * @param {number} i - The index to check. + * @param {Object} points - The points. + * @param {Array} indiciesToInsertAfter - The working list of indicies to insert new points after. + * @param {number} maxSpacing + * @returns {void} + */ + + }, { + key: "_checkSpacing", + value: function _checkSpacing(i, points, indiciesToInsertAfter, maxSpacing) { + var nextHandleIndex = this.constructor._getNextHandleIndex(i, points.length); + + var distanceToNextHandle = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(points[i], points[nextHandleIndex]); + + if (distanceToNextHandle > maxSpacing) { + indiciesToInsertAfter.push(i); + } + } + /** + * Inserts a handle on the surface of the circle defined by toolSize and the + * mousePoint. + * + * @private + * @param {number} insertIndex - The index to insert the new handle. + * @returns {void} + */ + + }, { + key: "_insertHandleRadially", + value: function _insertHandleRadially(insertIndex) { + var points = this._sculptData.points; + var previousIndex = insertIndex - 1; + + var nextIndex = this.constructor._getNextHandleIndexBeforeInsert(insertIndex, points.length); + + var insertPosition = this._getInsertPosition(insertIndex, previousIndex, nextIndex); + + var handleData = new FreehandHandleData(insertPosition); + points.splice(insertIndex, 0, handleData); // Add the line from the previous handle to the inserted handle (note the tool is now one increment longer) + + points[previousIndex].lines.pop(); + points[previousIndex].lines.push(points[insertIndex]); + _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_17__["default"].addLine(points, insertIndex); + } + /** + * Checks for any close points and consolidates these to a + * single point. + * + * @private + * @returns {void} + */ + + }, { + key: "_consolidateHandles", + value: function _consolidateHandles() { + var points = this._sculptData.points; // Don't merge handles if it would destroy the polygon. + + if (points.length <= 3) { + return; + } + + var closePairs = this._findCloseHandlePairs(); + + this._mergeCloseHandles(closePairs); + } + /** + * Finds pairs of close handles with seperations < config.minSpacing. No handle + * is included in more than one pair, to avoid spurious deletion of densely + * populated regions of the contour (see mergeCloseHandles). + * + * @private + * @returns {Array} An array of close pairs in points. + */ + + }, { + key: "_findCloseHandlePairs", + value: function _findCloseHandlePairs() { + var _this$_sculptData4 = this._sculptData, + points = _this$_sculptData4.points, + minSpacing = _this$_sculptData4.minSpacing; + var closePairs = []; + var length = points.length; + + for (var i = 0; i < length; i++) { + var nextHandleIndex = this.constructor._getNextHandleIndex(i, points.length); + + var distanceToNextHandle = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(points[i], points[nextHandleIndex]); + + if (distanceToNextHandle < minSpacing) { + var pair = [i, nextHandleIndex]; + closePairs.push(pair); // Don't check last node if first in pair to avoid double counting. + + if (i === 0) { + length -= 1; + } // Don't double count pairs in order to prevent your polygon collapsing to a singularity. + + + i++; + } + } + + return closePairs; + } + /** + * Merges points given a list of close pairs. The points are merged in an + * iterative fashion to prevent generating a singularity in some edge cases. + * + * @private + * @param {Array} closePairs - An array of pairs of handle indicies. + * @returns {void} + */ + + }, { + key: "_mergeCloseHandles", + value: function _mergeCloseHandles(closePairs) { + var removedIndexModifier = 0; + + for (var i = 0; i < closePairs.length; i++) { + var pair = this.constructor._getCorrectedPair(closePairs[i], removedIndexModifier); + + this._combineHandles(pair); + + removedIndexModifier++; + } // Recursively remove problem childs + + + var newClosePairs = this._findCloseHandlePairs(); + + if (newClosePairs.length) { + this._mergeCloseHandles(newClosePairs); + } + } + /** + * Combines two handles defined by the indicies in handlePairs. + * + * @private + * @param {Object} handlePair - A pair of handle indicies. + * @returns {void} + */ + + }, { + key: "_combineHandles", + value: function _combineHandles(handlePair) { + var _this$_sculptData5 = this._sculptData, + points = _this$_sculptData5.points, + image = _this$_sculptData5.image; // Calculate combine position: half way between the handles. + + var midPoint = { + x: (points[handlePair[0]].x + points[handlePair[1]].x) / 2.0, + y: (points[handlePair[0]].y + points[handlePair[1]].y) / 2.0 + }; + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(midPoint, image); // Move first point to midpoint + + points[handlePair[0]].x = midPoint.x; + points[handlePair[0]].y = midPoint.y; // Link first point to handle that second point links to. + + var handleAfterPairIndex = this.constructor._getNextHandleIndex(handlePair[1], points.length); + + points[handlePair[0]].lines.pop(); + points[handlePair[0]].lines.push(points[handleAfterPairIndex]); // Remove the latter handle + + points.splice(handlePair[1], 1); + } + /** + * Calculates the distance to the closest handle in the tool, and stores the + * result in this._toolSizeImage and this._toolSizeCanvas. + * + * @private + * @param {Object} eventData - Data object associated with the event. + * @returns {void} + */ + + }, { + key: "_configureToolSize", + value: function _configureToolSize(eventData) { + var element = eventData.element; + var config = this.configuration; + var toolIndex = config.currentTool; + var coords = eventData.currentPoints.image; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + var data = toolState.data[toolIndex]; + var freehandRoiTool = Object(_store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, this.referencedToolName); + var radiusImage = freehandRoiTool.distanceFromPoint(element, data, coords); + var radiusCanvas = freehandRoiTool.distanceFromPointCanvas(element, data, coords); // Check if should limit maximum size. + + if (config.limitRadiusOutsideRegion) { + radiusImage = this._limitCursorRadiusImage(eventData, radiusImage); + radiusCanvas = this._limitCursorRadiusCanvas(eventData, radiusCanvas); + } + + this._toolSizeImage = radiusImage; + this._toolSizeCanvas = radiusCanvas; + } + /** + * Gets the current mouse location and stores it in the configuration object. + * + * @private + * @param {Object} eventData - The data assoicated with the event. + * @returns {void} + */ + + }, { + key: "_getMouseLocation", + value: function _getMouseLocation(eventData) { + var config = this.configuration; + config.mouseLocation.handles.start.x = eventData.currentPoints.image.x; + config.mouseLocation.handles.start.y = eventData.currentPoints.image.y; + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(config.mouseLocation.handles.start, eventData.image); + } + /** + * Attaches event listeners to the element such that is is visible, modifiable, and new data can be created. + * + * @private + * @param {Object} element - The viewport element to attach event listeners to. + * @modifies {element} + * @returns {void} + */ + + }, { + key: "_activateSculpt", + value: function _activateSculpt(element) { + this._deactivateSculpt(element); // Begin activeMouseDragCallback loop - call activeMouseUpCallback at end of drag or straight away if just a click. + + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this.activeMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_CLICK, this.activeMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this.activeMouseDragCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this.activeTouchEndCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_TAP, this.activeTouchEndCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this.activeMouseDragCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element); + } + /** + * Removes event listeners from the element. + * + * @private + * @param {Object} element - The viewport element to remove event listeners from. + * @modifies {element} + * @returns {void} + */ + + }, { + key: "_deactivateSculpt", + value: function _deactivateSculpt(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_UP, this.activeMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_CLICK, this.activeMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].MOUSE_DRAG, this.activeMouseDragCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_END, this.activeTouchEndCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_TAP, this.activeTouchEndCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_6__["default"].TOUCH_DRAG, this.activeMouseDragCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element); + } + /** + * Invalidate the freehand tool data, tirggering re-calculation of statistics. + * + * @private + * @param {Object} eventData - Data object associated with the event. + * @returns {void} + */ + + }, { + key: "_invalidateToolData", + value: function _invalidateToolData(eventData) { + var config = this.configuration; + var element = eventData.element; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + var data = toolData.data[config.currentTool]; + data.invalidated = true; + } + /** + * Deactivates all freehand ROIs and change currentTool to null + * + * @private + * @param {Object} evt - The event. + * @returns {void} + */ + // eslint-disable-next-line no-unused-vars + + }, { + key: "_deselectAllTools", + value: function _deselectAllTools(evt) { + var config = this.configuration; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(this.element, this.referencedToolName); + config.currentTool = null; + + if (toolData) { + for (var i = 0; i < toolData.data.length; i++) { + toolData.data[i].active = false; + } + } + + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_15__["setToolCursor"])(this.element, this.svgCursor); + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element); + } + /** + * Given a pair of indicies, and the number of points already removed, + * convert to the correct live indicies. + * + * @private + * @static + * @param {Object} pair A pairs of handle indicies. + * @param {Number} removedIndexModifier The number of handles already removed. + * @returns {Object} The corrected pair of handle indicies. + */ + + }, { + key: "_limitCursorRadiusCanvas", + + /** + * Limits the cursor radius so that it its maximum area is the same as the + * ROI being sculpted (in canvas coordinates). + * + * @private + * @param {Object} eventData Data object associated with the event. + * @param {Number} radiusCanvas The distance from the mouse to the ROI + * in canvas coordinates. + * @returns {Number} The limited radius in canvas coordinates. + */ + value: function _limitCursorRadiusCanvas(eventData, radiusCanvas) { + return this._limitCursorRadius(eventData, radiusCanvas, true); + } + /** + * Limits the cursor radius so that it its maximum area is the same as the + * ROI being sculpted (in image coordinates). + * + * @private + * @param {Object} eventData Data object associated with the event. + * @param {Number} radiusImage The distance from the mouse to the ROI + * in image coordinates. + * @returns {Number} The limited radius in image coordinates. + */ + + }, { + key: "_limitCursorRadiusImage", + value: function _limitCursorRadiusImage(eventData, radiusImage) { + return this._limitCursorRadius(eventData, radiusImage, false); + } + /** + * Limits the cursor radius so that it its maximum area is the same as the + * ROI being sculpted. + * + * @private + * @param {Object} eventData Data object associated with the event. + * @param {Number} radius The distance from the mouse to the ROI. + * @param {Boolean} canvasCoords Whether the calculation should be performed + * In canvas coordinates. + * @returns {Number} The limited radius. + */ + + }, { + key: "_limitCursorRadius", + value: function _limitCursorRadius(eventData, radius) { + var canvasCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var element = eventData.element; + var image = eventData.image; + var config = this.configuration; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + var data = toolState.data[config.currentTool]; + var areaModifier = 1.0; + + if (canvasCoords) { + var topLeft = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, { + x: 0, + y: 0 + }); + var bottomRight = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(element, { + x: image.width, + y: image.height + }); + var canvasArea = (bottomRight.x - topLeft.x) * (bottomRight.y - topLeft.y); + areaModifier = canvasArea / (image.width * image.height); + } + + var area = data.area * areaModifier; + var maxRadius = Math.pow(area / Math.PI, 0.5); + return Math.min(radius, maxRadius); + } + /** + * Finds the nearest handle to the mouse cursor for all freehand + * data on the element. + * + * @private + * @param {Object} element - The element. + * @param {Object} eventData - Data object associated with the event. + * @returns {Number} The tool index of the closest freehand tool. + */ + + }, { + key: "_getClosestFreehandToolOnElement", + value: function _getClosestFreehandToolOnElement(element, eventData) { + var freehand = Object(_store_getToolForElement_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, this.referencedToolName); + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_11__["getToolState"])(element, this.referencedToolName); + + if (!toolState) { + return; + } + + var data = toolState.data; + var pixelCoords = eventData.currentPoints.image; + var closest = { + distance: Infinity, + toolIndex: null + }; + + for (var i = 0; i < data.length; i++) { + var distanceFromToolI = freehand.distanceFromPoint(element, data[i], pixelCoords); + + if (distanceFromToolI === -1) { + continue; + } + + if (distanceFromToolI < closest.distance) { + closest.distance = distanceFromToolI; + closest.toolIndex = i; + } + } + + return closest.toolIndex; + } + /** + * Returns the next handle index. + * + * @private + * @static + * @param {Number} i - The handle index. + * @param {Number} length - The length of the polygon. + * @returns {Number} The next handle index. + */ + + }, { + key: "_getInsertPosition", + + /** + * Calculates the position that a new handle should be inserted. + * + * @private + * @static + * @param {Number} insertIndex - The index to insert the new handle. + * @param {Number} previousIndex - The previous index. + * @param {Number} nextIndex - The next index. + * @returns {Object} The position the handle should be inserted. + */ + value: function _getInsertPosition(insertIndex, previousIndex, nextIndex) { + var _this$_sculptData6 = this._sculptData, + points = _this$_sculptData6.points, + toolSize = _this$_sculptData6.toolSize, + mousePoint = _this$_sculptData6.mousePoint, + image = _this$_sculptData6.image; // Calculate insert position: half way between the handles, then pushed out + // Radially to the edge of the freehandSculpter. + + var midPoint = { + x: (points[previousIndex].x + points[nextIndex].x) / 2.0, + y: (points[previousIndex].y + points[nextIndex].y) / 2.0 + }; + var distanceToMidPoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.distance(mousePoint, midPoint); + var insertPosition; + + if (distanceToMidPoint < toolSize) { + var directionUnitVector = { + x: (midPoint.x - mousePoint.x) / distanceToMidPoint, + y: (midPoint.y - mousePoint.y) / distanceToMidPoint + }; + insertPosition = { + x: mousePoint.x + toolSize * directionUnitVector.x, + y: mousePoint.y + toolSize * directionUnitVector.y + }; + } else { + insertPosition = midPoint; + } + + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_12__["clipToBox"])(insertPosition, image); + return insertPosition; + } // =================================================================== + // Public Configuration API. . + // =================================================================== + + }, { + key: "minSpacing", + get: function get() { + return this.configuration.minSpacing; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehandSculpter minSpacing to a value other than a number.'); + } + + this.configuration.minSpacing = value; + } + }, { + key: "maxSpacing", + get: function get() { + return this.configuration.maxSpacing; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehandSculpter maxSpacing to a value other than a number.'); + } + + this.configuration.maxSpacing = value; + } + }, { + key: "showCursorOnHover", + get: function get() { + return this.configuration.showCursorOnHover; + }, + set: function set(value) { + if (typeof value !== 'boolean') { + throw new Error('Attempting to set freehandSculpter showCursorOnHover to a value other than a boolean.'); + } + + this.configuration.showCursorOnHover = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "limitRadiusOutsideRegion", + get: function get() { + return this.configuration.limitRadiusOutsideRegion; + }, + set: function set(value) { + if (typeof value !== 'boolean') { + throw new Error('Attempting to set freehandSculpter limitRadiusOutsideRegion to a value other than a boolean.'); + } + + this.configuration.limitRadiusOutsideRegion = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "hoverCursorFadeAlpha", + get: function get() { + return this.configuration.hoverCursorFadeAlpha; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehandSculpter hoverCursorFadeAlpha to a value other than a number.'); + } // Clamp the value from 0 to 1. + + + value = Math.max(Math.min(value, 1.0), 0.0); + this.configuration.hoverCursorFadeAlpha = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "hoverCursorFadeDistance", + get: function get() { + return this.configuration.hoverCursorFadeDistance; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehandSculpter hoverCursorFadeDistance to a value other than a number.'); + } // Don't allow to fade a distances smaller than the tool's radius. + + + value = Math.max(value, 1.0); + this.configuration.hoverCursorFadeDistance = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(this.element); + } + }], [{ + key: "_getCorrectedPair", + value: function _getCorrectedPair(pair, removedIndexModifier) { + var correctedPair = [pair[0] - removedIndexModifier, pair[1] - removedIndexModifier]; // Deal with edge case of last node + first node. + + if (correctedPair[1] < 0) { + correctedPair[1] = 0; + } + + return correctedPair; + } + }, { + key: "_getNextHandleIndex", + value: function _getNextHandleIndex(i, length) { + if (i === length - 1) { + return 0; + } + + return i + 1; + } + /** + * Returns the previous handle index. + * + * @private + * @static + * @param {Number} i - The handle index. + * @param {Number} length - The length of the polygon. + * @returns {Number} The previous handle index. + */ + + }, { + key: "_getPreviousHandleIndex", + value: function _getPreviousHandleIndex(i, length) { + if (i === 0) { + return length - 1; + } + + return i - 1; + } + /** + * Returns the next handle index, with a correction considering a handle is + * about to be inserted. + * + * @private + * @static + * @param {Number} insertIndex - The index in which the handle is being inserted. + * @param {Number} length - The length of the polygon. + * @returns {Number} The next handle index. + */ + + }, { + key: "_getNextHandleIndexBeforeInsert", + value: function _getNextHandleIndexBeforeInsert(insertIndex, length) { + if (insertIndex === length) { + return 0; + } // Index correction here: The line bellow is correct, as we haven't inserted our handle yet! + + + return insertIndex; + } + }]); + + return FreehandRoiSculptorTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_14__["default"]); +/** + * Returns the default freehandRoiSculptorTool configuration. + * + * @returns {Object} The default configuration object. + */ + + + + +function getDefaultFreehandRoiSculptorToolConfiguration() { + return { + mouseLocation: { + handles: { + start: { + highlight: true, + active: true + } + } + }, + minSpacing: 1, + currentTool: null, + dragColor: _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__["default"].getActiveColor(), + hoverColor: _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolColor(), + + /* --- Hover options --- + showCursorOnHover: Shows a preview of the sculpting radius on hover. + limitRadiusOutsideRegion: Limit max toolsize outside the subject ROI based + on subject ROI area. + hoverCursorFadeAlpha: Alpha to fade to when tool very distant from + subject ROI. + hoverCursorFadeDistance: Distance from ROI in which to fade the hoverCursor + (in units of radii). + */ + showCursorOnHover: true, + limitRadiusOutsideRegion: true, + hoverCursorFadeAlpha: 0.5, + hoverCursorFadeDistance: 1.2 + }; +} + +function preventPropagation(evt) { + evt.stopImmediatePropagation(); + evt.stopPropagation(); + evt.preventDefault(); +} + +/***/ }), + +/***/ "./tools/MagnifyTool.js": +/*!******************************!*\ + !*** ./tools/MagnifyTool.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MagnifyTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../store/setToolCursor.js */ "./store/setToolCursor.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + + +/** + * @public + * @class MagnifyTool + * @memberof Tools + * + * @classdesc Tool for inspecting a region at increased magnification. + * @extends Tools.Base.BaseTool + */ + +var MagnifyTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(MagnifyTool, _BaseTool); + + function MagnifyTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MagnifyTool); + + var defaultProps = { + name: 'Magnify', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + magnifySize: 300, + magnificationLevel: 2 + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__["magnifyCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(MagnifyTool).call(this, props, defaultProps)); + _this.zoomCanvas = undefined; + _this.zoomElement = undefined; // Mode Callbacks: (element, options) + + _this.activeCallback = _this._createMagnificationCanvas.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.enabledCallback = _this._createMagnificationCanvas.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.disabledCallback = _this._destroyMagnificationCanvas.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Touch + + _this.postTouchStartCallback = _this._addMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.touchDragCallback = _this._updateMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.touchEndCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.touchDragEndCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Mouse + + _this.postMouseDownCallback = _this._addMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.mouseDragCallback = _this._updateMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.mouseUpCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // On quick clicks, mouseUp does not fire, but this does + + _this.mouseClickCallback = _this._removeMagnifyingGlass.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Misc + + _this.newImageCallback = _this._drawMagnificationTool.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MagnifyTool, [{ + key: "_addMagnifyingGlass", + value: function _addMagnifyingGlass(evt) { + var _this2 = this; + + // Ignore until next event + this._removeZoomElement(); + + this._drawZoomedElement(evt); // On next frame + + + window.requestAnimationFrame(function () { + return _this2._drawMagnificationTool(evt); + }); + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__["hideToolCursor"])(evt.detail.element); + evt.preventDefault(); + evt.stopPropagation(); + } + }, { + key: "_updateMagnifyingGlass", + value: function _updateMagnifyingGlass(evt) { + this._drawMagnificationTool(evt); + + evt.preventDefault(); + evt.stopPropagation(); + } + }, { + key: "_removeMagnifyingGlass", + value: function _removeMagnifyingGlass(evt) { + var element = evt.detail.element; // Re-enable the mouse cursor + + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_9__["setToolCursor"])(this.element, this.svgCursor); + element.querySelector('.magnifyTool').style.display = 'none'; + + this._removeZoomElement(); + } + }, { + key: "_drawMagnificationTool", + value: function _drawMagnificationTool(evt) { + var element = evt.detail.element; + var magnifyCanvas = element.querySelector('.magnifyTool'); + + if (!magnifyCanvas) { + this._createMagnificationCanvas(element); + } + + if (this.zoomCanvas === undefined) { + return; + } // The 'not' magnifyTool class here is necessary because cornerstone places + // No classes of it's own on the canvas we want to select + + + var canvas = element.querySelector('canvas:not(.magnifyTool)'); + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"])(magnifyCanvas); // Calculate the on-canvas location of the mouse pointer / touch + + var canvasLocation = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.pixelToCanvas(evt.detail.element, evt.detail.currentPoints.image); // Shrink magnifier to smallest canvas dimension if smaller than desired magnifier size + + var magnifySize = Math.min(this.configuration.magnifySize, canvas.width, canvas.height); + var magnificationLevel = this.configuration.magnificationLevel; + magnifyCanvas.width = magnifySize; + magnifyCanvas.height = magnifySize; // Constrain drag movement to zoomed image boundaries + + canvasLocation.x = Math.max(canvasLocation.x, 0.5 * magnifySize / magnificationLevel); + canvasLocation.x = Math.min(canvasLocation.x, canvas.width - 0.5 * magnifySize / magnificationLevel); + canvasLocation.y = Math.max(canvasLocation.y, 0.5 * magnifySize / magnificationLevel); + canvasLocation.y = Math.min(canvasLocation.y, canvas.height - 0.5 * magnifySize / magnificationLevel); + var copyFrom = { + x: canvasLocation.x * magnificationLevel - 0.5 * magnifySize, + y: canvasLocation.y * magnificationLevel - 0.5 * magnifySize + }; + copyFrom.x = Math.max(copyFrom.x, 0); + copyFrom.y = Math.max(copyFrom.y, 0); + context.drawImage(this.zoomCanvas, copyFrom.x, copyFrom.y, magnifySize, magnifySize, 0, 0, magnifySize, magnifySize); // Place the magnification tool at the same location as the pointer + + var touchOffset = evt.detail.isTouchEvent ? 120 : 0; + var magnifyPosition = { + top: Math.max(canvasLocation.y - 0.5 * magnifySize - touchOffset, 0), + left: Math.max(canvasLocation.x - 0.5 * magnifySize, 0) + }; // Get full magnifier dimensions with borders + + var magnifierBox = magnifyCanvas.getBoundingClientRect(); // Constrain magnifier to canvas boundaries + + magnifyPosition.top = Math.min(magnifyPosition.top, canvas.height - magnifierBox.height); + magnifyPosition.left = Math.min(magnifyPosition.left, canvas.width - magnifierBox.width); + magnifyCanvas.style.top = "".concat(magnifyPosition.top, "px"); + magnifyCanvas.style.left = "".concat(magnifyPosition.left, "px"); + magnifyCanvas.style.display = 'block'; + } + /** + * Creates a cornerstone enabled element, and renders the target image at the + * desired magnification level using it. + * + * @private + * @param {*} evt + * @returns {void} + */ + + }, { + key: "_drawZoomedElement", + value: function _drawZoomedElement(evt) { + var element = evt.detail.element; + var enabledElement = evt.detail.enabledElement; + + if (enabledElement === undefined) { + enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getEnabledElement(element); + } + + var magnificationLevel = this.configuration.magnificationLevel; + var origCanvas = enabledElement.canvas; + var image = enabledElement.image; // Create a new cornerstone enabledElement + + if (!this.zoomElement) { + this.zoomElement = document.createElement('div'); + this.zoomElement.width = origCanvas.width * magnificationLevel; + this.zoomElement.height = origCanvas.height * magnificationLevel; + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.enable(this.zoomElement, enabledElement.options); + } + + var zoomEnabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getEnabledElement(this.zoomElement); + var viewport = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.getViewport(enabledElement.element); + this.zoomCanvas = zoomEnabledElement.canvas; + this.zoomCanvas.width = origCanvas.width * magnificationLevel; + this.zoomCanvas.height = origCanvas.height * magnificationLevel; + zoomEnabledElement.viewport = Object.assign({}, viewport); // Update it's viewport to render at desired magnification level + + viewport.scale *= magnificationLevel; + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.displayImage(this.zoomElement, image); + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(this.zoomElement, viewport); // To do enable annotation tools for zoomElement + } + /** + * Removes the canvas and associated enabled element that's + * used to render the zoomed image. + * @returns {void} + */ + + }, { + key: "_removeZoomElement", + value: function _removeZoomElement() { + if (this.zoomElement !== undefined) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.disable(this.zoomCanvas); + this.zoomElement = undefined; + this.zoomCanvas = undefined; + } + } + /** + * The canvas used to render the zoomed image. + * It will be displayed and clipped inside the magnifying glass frame/element. + * + * @private + * + * @param {*} element + * @returns {void} + */ + + }, { + key: "_createMagnificationCanvas", + value: function _createMagnificationCanvas(element) { + // If the magnifying glass canvas doesn't already exist + if (element.querySelector('.magnifyTool') === null) { + // Create a canvas and append it as a child to the element + var magnifyCanvas = document.createElement('canvas'); // The magnifyTool class is used to find the canvas later on + // Make sure position is absolute so the canvas can follow the mouse / touch + + magnifyCanvas.classList.add('magnifyTool'); + magnifyCanvas.width = this.configuration.magnifySize; + magnifyCanvas.height = this.configuration.magnifySize; + magnifyCanvas.style.position = 'absolute'; + magnifyCanvas.style.display = 'none'; + element.appendChild(magnifyCanvas); + } + } + /** + * + * + * @param {*} element + * @returns {void} + */ + + }, { + key: "_destroyMagnificationCanvas", + value: function _destroyMagnificationCanvas(element) { + var magnifyCanvas = element.querySelector('.magnifyTool'); + + if (magnifyCanvas) { + element.removeChild(magnifyCanvas); + } + } + }]); + + return MagnifyTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]); + + + +/***/ }), + +/***/ "./tools/OrientationMarkersTool.js": +/*!*****************************************!*\ + !*** ./tools/OrientationMarkersTool.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return OrientationMarkersTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../orientation/index.js */ "./orientation/index.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); + + + + + + + + // Drawing + + + + +/** + * @public + * @class OrientationMarkersTool + * @memberof Tools + * + * @classdesc Tool for displaying orientation markers on the image. + * @extends Tools.Base.BaseTool + */ + +var OrientationMarkersTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(OrientationMarkersTool, _BaseTool); + + function OrientationMarkersTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, OrientationMarkersTool); + + var defaultProps = { + name: 'OrientationMarkers', + configuration: { + drawAllMarkers: true + }, + mixins: ['enabledOrDisabledBinaryTool'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(OrientationMarkersTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(OrientationMarkersTool, [{ + key: "enabledCallback", + value: function enabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "disabledCallback", + value: function disabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "forceImageUpdate", + value: function forceImageUpdate(element) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone; + var enabledElement = cornerstone.getEnabledElement(element); + + if (enabledElement.image) { + cornerstone.updateImage(element); + } + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var eventData = evt.detail; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["getNewContext"])(eventData.canvasContext.canvas); + var element = eventData.element; + var markers = getOrientationMarkers(element); + + if (!markers) { + return; + } + + var coords = getOrientationMarkerPositions(element, markers); + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getToolColor(); + var textWidths = { + top: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.top, 0), + left: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.left, 0), + right: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.right, 0), + bottom: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, markers.bottom, 0), + height: Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["textBoxWidth"])(context, 'M', 0) // Trick to get an approximation of the height of the text + + }; + drawTopLeftText(context, markers, coords, textWidths, color); + + if (this.configuration.drawAllMarkers) { + drawBottomRightText(context, markers, coords, textWidths, color); + } + } + }]); + + return OrientationMarkersTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +var drawTopLeftText = function drawTopLeftText(context, markers, coords, textWidths, color) { + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.top, coords.top.x - textWidths.top / 2, coords.top.y, color); + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.left, coords.left.x - textWidths.left / 2, coords.left.y, color); +}; + +var drawBottomRightText = function drawBottomRightText(context, markers, coords, textWidths, color) { + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.right, coords.right.x - textWidths.right, coords.right.y, color); + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, markers.bottom, coords.bottom.x - textWidths.bottom / 2, coords.bottom.y - textWidths.height, color); +}; + +var getOrientationMarkers = function getOrientationMarkers(element) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone; + var enabledElement = cornerstone.getEnabledElement(element); + var imagePlane = cornerstone.metaData.get('imagePlaneModule', enabledElement.image.imageId); + + if (!imagePlane || !imagePlane.rowCosines || !imagePlane.columnCosines) { + return; + } + + var row = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getOrientationString(imagePlane.rowCosines); + var column = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].getOrientationString(imagePlane.columnCosines); + var oppositeRow = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].invertOrientationString(row); + var oppositeColumn = _orientation_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].invertOrientationString(column); + return { + top: oppositeColumn, + bottom: column, + left: oppositeRow, + right: row + }; +}; + +var getOrientationMarkerPositions = function getOrientationMarkerPositions(element) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element); + var top = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, { + x: enabledElement.image.width / 2, + y: 5 + }); + var bottom = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, { + x: enabledElement.image.width / 2, + y: enabledElement.image.height - 15 + }); + var left = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, { + x: 5, + y: enabledElement.image.height / 2 + }); + var right = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, { + x: enabledElement.image.width - 10, + y: enabledElement.image.height / 2 + }); + return { + top: top, + bottom: bottom, + left: left, + right: right + }; +}; + +/***/ }), + +/***/ "./tools/OverlayTool.js": +/*!******************************!*\ + !*** ./tools/OverlayTool.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return OverlayTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); + + + + + + + +/** + * + * http://dicom.nema.org/dicom/2013/output/chtml/part03/sect_C.9.html + * + * @public + * @class Overlay + * @memberof Tools + * + * @classdesc Tool for displaying a scale overlay on the image. + * @extends Tools.Base.BaseTool + */ + +var OverlayTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(OverlayTool, _BaseTool); + + function OverlayTool() { + var _this; + + var configuration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, OverlayTool); + + var defaultConfig = { + name: 'Overlay', + configuration: {}, + mixins: ['enabledOrDisabledBinaryTool'] + }; + var initialConfiguration = Object.assign(defaultConfig, configuration); + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(OverlayTool).call(this, initialConfiguration)); + _this.initialConfiguration = initialConfiguration; + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(OverlayTool, [{ + key: "enabledCallback", + value: function enabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "disabledCallback", + value: function disabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "forceImageUpdate", + value: function forceImageUpdate(element) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element); + + if (enabledElement.image) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + } + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var eventData = evt.detail; + var enabledElement = eventData.enabledElement, + image = eventData.image, + viewport = eventData.viewport, + canvasContext = eventData.canvasContext; + + if (!eventData || !enabledElement || !image) { + return; + } + + var overlayPlaneMetadata = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('overlayPlaneModule', image.imageId); + + if (!overlayPlaneMetadata || !overlayPlaneMetadata.overlays || !overlayPlaneMetadata.overlays.length) { + return; + } + + var viewportPixelSpacing = { + column: viewport.displayedArea.columnPixelSpacing || 1, + row: viewport.displayedArea.rowPixelSpacing || 1 + }; + var imageWidth = Math.abs(viewport.displayedArea.brhc.x - viewport.displayedArea.tlhc.x) * viewportPixelSpacing.column; + var imageHeight = Math.abs(viewport.displayedArea.brhc.y - viewport.displayedArea.tlhc.y) * viewportPixelSpacing.row; + overlayPlaneMetadata.overlays.forEach(function (overlay) { + if (overlay.visible === false) { + return; + } + + var layerCanvas = document.createElement('canvas'); + layerCanvas.width = imageWidth; + layerCanvas.height = imageHeight; + var layerContext = layerCanvas.getContext('2d'); + layerContext.fillStyle = overlay.fillStyle || 'white'; + + if (overlay.type === 'R') { + layerContext.fillRect(0, 0, layerCanvas.width, layerCanvas.height); + layerContext.globalCompositeOperation = 'xor'; + } + + var i = 0; + + for (var y = 0; y < overlay.rows; y++) { + for (var x = 0; x < overlay.columns; x++) { + if (overlay.pixelData[i++] > 0) { + layerContext.fillRect(x, y, 1, 1); + } + } + } // Draw the overlay layer onto the canvas + + + canvasContext.drawImage(layerCanvas, 0, 0); + }); + } + }]); + + return OverlayTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/PanMultiTouchTool.js": +/*!************************************!*\ + !*** ./tools/PanMultiTouchTool.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PanMultiTouchTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); + + + + + + + + +/** + * @public + * @class PanMultiTouchTool + * @memberof Tools + * + * @classdesc Tool for panning the image using multi-touch. + * @extends Tools.Base.BaseTool + */ + +var PanMultiTouchTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(PanMultiTouchTool, _BaseTool); + + function PanMultiTouchTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, PanMultiTouchTool); + + var defaultProps = { + name: 'PanMultiTouch', + supportedInteractionTypes: ['MultiTouch'], + configuration: { + touchPointers: 2 + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(PanMultiTouchTool).call(this, props, defaultProps)); // Touch + + _this.multiTouchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(PanMultiTouchTool, [{ + key: "_dragCallback", + value: function _dragCallback(evt) { + var eventData = evt.detail; + var element = eventData.element, + viewport = eventData.viewport; + + if (eventData.numPointers === this.configuration.touchPointers) { + var translation = this._getTranslation(eventData); + + this._applyTranslation(viewport, translation); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(element, viewport); + } + } + }, { + key: "_getTranslation", + value: function _getTranslation(eventData) { + var viewport = eventData.viewport, + image = eventData.image, + deltaPoints = eventData.deltaPoints; + var widthScale = viewport.scale; + var heightScale = viewport.scale; + + if (image.rowPixelSpacing < image.columnPixelSpacing) { + widthScale *= image.columnPixelSpacing / image.rowPixelSpacing; + } else if (image.columnPixelSpacing < image.rowPixelSpacing) { + heightScale *= image.rowPixelSpacing / image.columnPixelSpacing; + } + + return { + x: deltaPoints.page.x / widthScale, + y: deltaPoints.page.y / heightScale + }; + } + }, { + key: "_applyTranslation", + value: function _applyTranslation(viewport, translation) { + viewport.translation.x += translation.x; + viewport.translation.y += translation.y; + } + }]); + + return PanMultiTouchTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]); + + + +/***/ }), + +/***/ "./tools/PanTool.js": +/*!**************************!*\ + !*** ./tools/PanTool.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return PanTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + +/** + * @public + * @class PanTool + * @memberof Tools + * + * @classdesc Tool for panning the image. + * @extends Tools.Base.BaseTool + */ + +var PanTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(PanTool, _BaseTool); + + function PanTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, PanTool); + + var defaultProps = { + name: 'Pan', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__["panCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(PanTool).call(this, props, defaultProps)); // Touch + + _this.touchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // Mouse + + _this.mouseDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(PanTool, [{ + key: "_dragCallback", + value: function _dragCallback(evt) { + var eventData = evt.detail; + var element = eventData.element, + viewport = eventData.viewport; + + var translation = this._getTranslation(eventData); + + this._applyTranslation(viewport, translation); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(element, viewport); + } + }, { + key: "_getTranslation", + value: function _getTranslation(eventData) { + var viewport = eventData.viewport, + image = eventData.image, + deltaPoints = eventData.deltaPoints; + var widthScale = viewport.scale; + var heightScale = viewport.scale; + + if (image.rowPixelSpacing < image.columnPixelSpacing) { + widthScale *= image.columnPixelSpacing / image.rowPixelSpacing; + } else if (image.columnPixelSpacing < image.rowPixelSpacing) { + heightScale *= image.rowPixelSpacing / image.columnPixelSpacing; + } + + return { + x: deltaPoints.page.x / widthScale, + y: deltaPoints.page.y / heightScale + }; + } + }, { + key: "_applyTranslation", + value: function _applyTranslation(viewport, translation) { + viewport.translation.x += translation.x; + viewport.translation.y += translation.y; + } + }]); + + return PanTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]); + + + +/***/ }), + +/***/ "./tools/ReferenceLinesTool.js": +/*!*************************************!*\ + !*** ./tools/ReferenceLinesTool.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ReferenceLinesTool; }); +/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "../node_modules/@babel/runtime/regenerator/index.js"); +/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "../node_modules/@babel/runtime/helpers/asyncToGenerator.js"); +/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _referenceLines_renderActiveReferenceLine_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./referenceLines/renderActiveReferenceLine.js */ "./tools/referenceLines/renderActiveReferenceLine.js"); +/* harmony import */ var _util_wait_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../util/wait.js */ "./util/wait.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_12__["getLogger"])('tools:ReferenceLinesTool'); +/** + * When enabled, this tool will display references lines for each source + * enabledElement in the provided synchronizer. This tool can also be configured + * to use a custom renderer for alternative reference line rendering behavior + * + * TODO: Need to watch for configuration changes to update ToolState + * TODO: + * + * @export @public @class + * @name ReferenceLinesTool + * @classdesc Tool for displaying reference lines of other enabledElements + * @extends Tools.Base.BaseTool + */ + +var ReferenceLinesTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(ReferenceLinesTool, _BaseTool); + + function ReferenceLinesTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ReferenceLinesTool); + + var defaultProps = { + name: 'ReferenceLines', + mixins: ['enabledOrDisabledBinaryTool'], + configuration: { + renderer: _referenceLines_renderActiveReferenceLine_js__WEBPACK_IMPORTED_MODULE_10__["default"] + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(ReferenceLinesTool).call(this, props, defaultProps)); + _this.renderer = null; + _this.synchronizationContext = null; + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(ReferenceLinesTool, [{ + key: "enabledCallback", + value: function () { + var _enabledCallback = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( + /*#__PURE__*/ + _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(element) { + var _ref, + synchronizationContext, + renderer, + enabledElement, + _args = arguments; + + return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _ref = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}, synchronizationContext = _ref.synchronizationContext; + renderer = this.configuration.renderer; + _context.next = 4; + return Object(_util_wait_js__WEBPACK_IMPORTED_MODULE_11__["waitForEnabledElementImageToLoad"])(element); + + case 4: + enabledElement = _context.sent; + + if (!(!enabledElement || !renderer || !synchronizationContext)) { + _context.next = 8; + break; + } + + // TODO: Unable to add tool state, image never loaded. + // Should we `setToolDisabledForElement` here? + logger.warn("Unable to enable ".concat(this.name, ". Exiting enable callback. Tool will be enabled, but will not render.")); + return _context.abrupt("return"); + + case 8: + this.renderer = renderer; + this.synchronizationContext = synchronizationContext; + this.forceImageUpdate(element); + + case 11: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function enabledCallback(_x) { + return _enabledCallback.apply(this, arguments); + } + + return enabledCallback; + }() + }, { + key: "disabledCallback", + value: function disabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "forceImageUpdate", + value: function forceImageUpdate(element) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.getEnabledElement(element); + + if (enabledElement.image) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element); + } + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; // No renderer or synch context? Adios + + if (!this.renderer || !this.synchronizationContext) { + return; + } // Get the enabled elements associated with this synchronization context and draw them + + + var enabledElements = this.synchronizationContext.getSourceElements(); + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["getNewContext"])(eventData.canvasContext.canvas); + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.setToPixelCoordinateSystem(eventData.enabledElement, context); + enabledElements.forEach(function (referenceEnabledElement) { + // Don't draw ourselves + if (referenceEnabledElement === evt.currentTarget) { + return; + } // Render it + + + _this2.renderer(context, eventData, evt.currentTarget, referenceEnabledElement); + }); + } + }]); + + return ReferenceLinesTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]); + + + +/***/ }), + +/***/ "./tools/RotateTool.js": +/*!*****************************!*\ + !*** ./tools/RotateTool.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RotateTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/angleBetweenPoints.js */ "./util/angleBetweenPoints.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + +/** + * @public + * @class RotateTool + * @memberof Tools + * + * @classdesc Tool for rotating the image. + * @extends Tools.Base.BaseTool + */ + +var RotateTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(RotateTool, _BaseTool); + + function RotateTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RotateTool); + + var defaultProps = { + name: 'Rotate', + strategies: { + default: defaultStrategy, + horizontal: horizontalStrategy, + vertical: verticalStrategy + }, + defaultStrategy: 'default', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_8__["rotateCursor"] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(RotateTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(RotateTool, [{ + key: "touchDragCallback", + value: function touchDragCallback(evt) { + this.dragCallback(evt); + } + }, { + key: "mouseDragCallback", + value: function mouseDragCallback(evt) { + this.dragCallback(evt); + } + }, { + key: "postMouseDownCallback", + value: function postMouseDownCallback(evt) { + this.initialRotation = evt.detail.viewport.rotation; + } + }, { + key: "dragCallback", + value: function dragCallback(evt) { + evt.detail.viewport.initialRotation = this.initialRotation; + this.applyActiveStrategy(evt); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport); + } + }]); + + return RotateTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +function defaultStrategy(evt) { + var eventData = evt.detail; + var element = eventData.element, + viewport = eventData.viewport; + var initialRotation = viewport.initialRotation; // Calculate the center of the image + + var rect = element.getBoundingClientRect(element); + var width = element.clientWidth, + height = element.clientHeight; + var initialPoints = { + x: eventData.startPoints.client.x, + y: eventData.startPoints.client.y + }; + var scale = viewport.scale, + translation = viewport.translation; + var centerPoints = { + x: rect.left + width / 2 + translation.x * scale, + y: rect.top + height / 2 + translation.y * scale + }; + var currentPoints = { + x: eventData.currentPoints.client.x, + y: eventData.currentPoints.client.y + }; + var angleInfo = Object(_util_angleBetweenPoints_js__WEBPACK_IMPORTED_MODULE_7__["default"])(centerPoints, initialPoints, currentPoints); + + if (angleInfo.direction < 0) { + angleInfo.angle = -angleInfo.angle; + } + + viewport.rotation = initialRotation + angleInfo.angle; +} + +var horizontalStrategy = function horizontalStrategy(evt) { + var eventData = evt.detail; + var viewport = eventData.viewport, + deltaPoints = eventData.deltaPoints; + viewport.rotation += deltaPoints.page.x / viewport.scale; +}; + +var verticalStrategy = function verticalStrategy(evt) { + var eventData = evt.detail; + var viewport = eventData.viewport, + deltaPoints = eventData.deltaPoints; + viewport.rotation += deltaPoints.page.y / viewport.scale; +}; + +/***/ }), + +/***/ "./tools/RotateTouchTool.js": +/*!**********************************!*\ + !*** ./tools/RotateTouchTool.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RotateTouchTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); + + + + + + + +/** + * @public + * @class RotateTouchTool + * @memberof Tools + * + * @classdesc Tool for rotating the image using touch. + * @extends Tools.Base.BaseTool + */ + +var RotateTouchTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(RotateTouchTool, _BaseTool); + + function RotateTouchTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RotateTouchTool); + + var defaultProps = { + name: 'RotateTouch', + supportedInteractionTypes: ['TouchRotate'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(RotateTouchTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(RotateTouchTool, [{ + key: "touchRotateCallback", + value: function touchRotateCallback(evt) { + var eventData = evt.detail; + var element = eventData.element, + viewport = eventData.viewport, + rotation = eventData.rotation; + viewport.rotation += rotation; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, viewport); + } + }]); + + return RotateTouchTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/ScaleOverlayTool.js": +/*!***********************************!*\ + !*** ./tools/ScaleOverlayTool.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ScaleOverlayTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/logger.js */ "./util/logger.js"); + + + + + + + // Drawing + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_10__["getLogger"])('tools:ScaleOverlayTool'); +/** + * @public + * @class ScaleOverlayTool + * @memberof Tools + * + * @classdesc Tool for displaying a scale overlay on the image. + * @extends Tools.Base.BaseTool + */ + +var ScaleOverlayTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ScaleOverlayTool, _BaseTool); + + function ScaleOverlayTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ScaleOverlayTool); + + var defaultProps = { + name: 'ScaleOverlay', + configuration: { + minorTickLength: 12.5, + majorTickLength: 25 + }, + mixins: ['enabledOrDisabledBinaryTool'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ScaleOverlayTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ScaleOverlayTool, [{ + key: "enabledCallback", + value: function enabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "disabledCallback", + value: function disabledCallback(element) { + this.forceImageUpdate(element); + } + }, { + key: "forceImageUpdate", + value: function forceImageUpdate(element) { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element); + + if (enabledElement.image) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + } + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var eventData = evt.detail; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["getNewContext"])(eventData.canvasContext.canvas); + var image = eventData.image, + viewport = eventData.viewport, + element = eventData.element; + var rowPixelSpacing = image.rowPixelSpacing; + var colPixelSpacing = image.columnPixelSpacing; + var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('imagePlaneModule', image.imageId); + + if (imagePlane) { + rowPixelSpacing = imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing; + colPixelSpacing = imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing; + } // Check whether pixel spacing is defined + + + if (!rowPixelSpacing || !colPixelSpacing) { + logger.warn("unable to define rowPixelSpacing or colPixelSpacing from data on ".concat(this.name, "'s renderToolData")); + return; + } + + var canvasSize = { + width: context.canvas.width, + height: context.canvas.height + }; // Distance between intervals is 10mm + + var verticalIntervalScale = 10.0 / rowPixelSpacing * viewport.scale; + var horizontalIntervalScale = 10.0 / colPixelSpacing * viewport.scale; // 0.1 and 0.05 gives margin to horizontal and vertical lines + + var hscaleBounds = computeScaleBounds(canvasSize, 0.25, 0.05); + var vscaleBounds = computeScaleBounds(canvasSize, 0.05, 0.15); + + if (!canvasSize.width || !canvasSize.height || !hscaleBounds || !vscaleBounds) { + return; + } + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getToolColor(); + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth(); + var imageAttributes = Object.assign({}, { + hscaleBounds: hscaleBounds, + vscaleBounds: vscaleBounds, + verticalMinorTick: verticalIntervalScale, + horizontalMinorTick: horizontalIntervalScale, + verticalLine: { + start: { + x: vscaleBounds.bottomRight.x, + y: vscaleBounds.topLeft.y + }, + end: { + x: vscaleBounds.bottomRight.x, + y: vscaleBounds.bottomRight.y + } + }, + horizontalLine: { + start: { + x: hscaleBounds.topLeft.x, + y: hscaleBounds.bottomRight.y + }, + end: { + x: hscaleBounds.bottomRight.x, + y: hscaleBounds.bottomRight.y + } + }, + color: color, + lineWidth: lineWidth + }, this.configuration); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["setShadow"])(context, imageAttributes); // Draw vertical line + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, imageAttributes.verticalLine.start, imageAttributes.verticalLine.end, { + color: imageAttributes.color, + lineWidth: imageAttributes.lineWidth + }, 'canvas'); + drawVerticalScalebarIntervals(context, element, imageAttributes); // Draw horizontal line + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, imageAttributes.horizontalLine.start, imageAttributes.horizontalLine.end, { + color: imageAttributes.color, + lineWidth: imageAttributes.lineWidth + }, 'canvas'); + drawHorizontalScalebarIntervals(context, element, imageAttributes); + }); + } + }]); + + return ScaleOverlayTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); +/** + * Computes the max bound for scales on the image + * @param {{width: number, height: number}} canvasSize + * @param {number} horizontalReduction + * @param {number} verticalReduction + * @returns {Object.} + */ + + + + +var computeScaleBounds = function computeScaleBounds(canvasSize, horizontalReduction, verticalReduction) { + var hReduction = horizontalReduction * Math.min(1000, canvasSize.width); + var vReduction = verticalReduction * Math.min(1000, canvasSize.height); + var canvasBounds = { + left: hReduction, + top: vReduction, + width: canvasSize.width - 2 * hReduction, + height: canvasSize.height - 2 * vReduction + }; + return { + topLeft: { + x: canvasBounds.left, + y: canvasBounds.top + }, + bottomRight: { + x: canvasBounds.left + canvasBounds.width, + y: canvasBounds.top + canvasBounds.height + } + }; +}; +/** + * @param {CanvasRenderingContext2D} context + * @param {HTMLElement} element + * @param {Object} imageAttributes + * @returns {void} + */ + + +var drawVerticalScalebarIntervals = function drawVerticalScalebarIntervals(context, element, imageAttributes) { + var i = 0; + + while (imageAttributes.verticalLine.start.y + i * imageAttributes.verticalMinorTick <= imageAttributes.vscaleBounds.bottomRight.y) { + var color = imageAttributes.color, + lineWidth = imageAttributes.lineWidth; + var startPoint = { + x: imageAttributes.verticalLine.start.x, + y: imageAttributes.verticalLine.start.y + i * imageAttributes.verticalMinorTick + }; + var endPoint = { + x: 0, + y: imageAttributes.verticalLine.start.y + i * imageAttributes.verticalMinorTick + }; + + if (i % 5 === 0) { + endPoint.x = imageAttributes.verticalLine.start.x - imageAttributes.majorTickLength; + } else { + endPoint.x = imageAttributes.verticalLine.start.x - imageAttributes.minorTickLength; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, startPoint, endPoint, { + color: color, + lineWidth: lineWidth + }, 'canvas'); + i++; + } +}; +/** + * @param {CanvasRenderingContext2D} context + * @param {HTMLElement} element + * @param {Object} imageAttributes + * @returns {void} + */ + + +var drawHorizontalScalebarIntervals = function drawHorizontalScalebarIntervals(context, element, imageAttributes) { + var i = 0; + + while (imageAttributes.horizontalLine.start.x + i * imageAttributes.horizontalMinorTick <= imageAttributes.hscaleBounds.bottomRight.x) { + var color = imageAttributes.color, + lineWidth = imageAttributes.lineWidth; + var startPoint = { + x: imageAttributes.horizontalLine.start.x + i * imageAttributes.horizontalMinorTick, + y: imageAttributes.horizontalLine.start.y + }; + var endPoint = { + x: imageAttributes.horizontalLine.start.x + i * imageAttributes.horizontalMinorTick, + y: 0 + }; + + if (i % 5 === 0) { + endPoint.y = imageAttributes.horizontalLine.start.y - imageAttributes.majorTickLength; + } else { + endPoint.y = imageAttributes.horizontalLine.start.y - imageAttributes.minorTickLength; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_7__["drawLine"])(context, element, startPoint, endPoint, { + color: color, + lineWidth: lineWidth + }, 'canvas'); + i++; + } +}; + +/***/ }), + +/***/ "./tools/StackScrollMouseWheelTool.js": +/*!********************************************!*\ + !*** ./tools/StackScrollMouseWheelTool.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StackScrollMouseWheelTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/scroll.js */ "./util/scroll.js"); + + + + + + + +/** + * @public + * @class StackScrollMouseWheelTool + * @memberof Tools + * + * @classdesc Tool for scrolling through a series using the mouse wheel. + * @extends Tools.Base.BaseTool + */ + +var StackScrollMouseWheelTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(StackScrollMouseWheelTool, _BaseTool); + + function StackScrollMouseWheelTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, StackScrollMouseWheelTool); + + var defaultProps = { + name: 'StackScrollMouseWheel', + supportedInteractionTypes: ['MouseWheel'], + configuration: { + loop: false, + allowSkipping: true, + invert: false + } + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(StackScrollMouseWheelTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(StackScrollMouseWheelTool, [{ + key: "mouseWheelCallback", + value: function mouseWheelCallback(evt) { + var _evt$detail = evt.detail, + images = _evt$detail.direction, + element = _evt$detail.element; + var _this$configuration = this.configuration, + loop = _this$configuration.loop, + allowSkipping = _this$configuration.allowSkipping, + invert = _this$configuration.invert; + var direction = invert ? -images : images; + Object(_util_scroll_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element, direction, loop, allowSkipping); + } + }]); + + return StackScrollMouseWheelTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]); + + + +/***/ }), + +/***/ "./tools/StackScrollMultiTouchTool.js": +/*!********************************************!*\ + !*** ./tools/StackScrollMultiTouchTool.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StackScrollMultiTouchTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/scroll.js */ "./util/scroll.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../toolOptions.js */ "./toolOptions.js"); + + + + + + + + + + +/** + * @public + * @class StackScrollMultiTouchTool + * @memberof Tools + * + * @classdesc Tool for scrolling through a series using multi-touch. + * @extends Tools.Base.BaseTool + */ + +var StackScrollMultiTouchTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(StackScrollMultiTouchTool, _BaseTool); + + function StackScrollMultiTouchTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, StackScrollMultiTouchTool); + + var defaultProps = { + name: 'StackScrollMultiTouch', + supportedInteractionTypes: ['MultiTouch'], + configuration: { + loop: false, + allowSkipping: true, + touchPointers: 3 + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(StackScrollMultiTouchTool).call(this, props, defaultProps)); + _this.multiTouchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(StackScrollMultiTouchTool, [{ + key: "_dragCallback", + value: function _dragCallback(evt) { + var eventData = evt.detail; + + if (eventData.numPointers === this.configuration.touchPointers) { + var element = eventData.element, + deltaPoints = eventData.deltaPoints; + var _this$configuration = this.configuration, + loop = _this$configuration.loop, + allowSkipping = _this$configuration.allowSkipping; + var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element); + + var pixelsPerImage = this._getPixelPerImage(element); + + var deltaY = this._getDeltaY(element, deltaPoints.page.y); + + if (!pixelsPerImage) { + return; + } + + if (Math.abs(deltaY) >= pixelsPerImage) { + var imageIdIndexOffset = Math.round(deltaY / pixelsPerImage); + Object(_util_scroll_js__WEBPACK_IMPORTED_MODULE_7__["default"])(element, imageIdIndexOffset, loop, allowSkipping); + options.deltaY = deltaY % pixelsPerImage; + } else { + options.deltaY = deltaY; + } + + Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["setToolOptions"])(this.name, element, options); + } + } + }, { + key: "_getDeltaY", + value: function _getDeltaY(element, deltaPointsY) { + var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element); + var deltaY = options.deltaY || 0; + return deltaY + deltaPointsY; + } + }, { + key: "_getPixelPerImage", + value: function _getPixelPerImage(element) { + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, 'stack'); + + if (!toolData || !toolData.data || !toolData.data.length) { + return; + } + + var stackData = toolData.data[0]; + var stackScrollSpeed = this.configuration.stackScrollSpeed; // The Math.max here makes it easier to mouseDrag-scroll small or really large image stacks + + return stackScrollSpeed || Math.max(2, element.offsetHeight / Math.max(stackData.imageIds.length, 8)); + } + }]); + + return StackScrollMultiTouchTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/StackScrollTool.js": +/*!**********************************!*\ + !*** ./tools/StackScrollTool.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return StackScrollTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_scroll_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/scroll.js */ "./util/scroll.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _toolOptions_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../toolOptions.js */ "./toolOptions.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + + +/** + * @public + * @class StackScrollTool + * @memberof Tools + * + * @classdesc Tool for scrolling through a series. + * @extends Tools.Base.BaseTool + */ + +var StackScrollTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(StackScrollTool, _BaseTool); + + function StackScrollTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, StackScrollTool); + + var defaultProps = { + name: 'StackScroll', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + loop: false, + allowSkipping: true + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_10__["stackScrollCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(StackScrollTool).call(this, props, defaultProps)); + _this.mouseDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.touchDragCallback = _this._dragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(StackScrollTool, [{ + key: "_dragCallback", + value: function _dragCallback(evt) { + var eventData = evt.detail; + var element = eventData.element, + deltaPoints = eventData.deltaPoints; + var _this$configuration = this.configuration, + loop = _this$configuration.loop, + allowSkipping = _this$configuration.allowSkipping; + var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element); + + var pixelsPerImage = this._getPixelPerImage(element); + + var deltaY = this._getDeltaY(element, deltaPoints.page.y); + + if (!pixelsPerImage) { + return; + } + + if (Math.abs(deltaY) >= pixelsPerImage) { + var imageIdIndexOffset = Math.round(deltaY / pixelsPerImage); + Object(_util_scroll_js__WEBPACK_IMPORTED_MODULE_7__["default"])(element, imageIdIndexOffset, loop, allowSkipping); + options.deltaY = deltaY % pixelsPerImage; + } else { + options.deltaY = deltaY; + } + + Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["setToolOptions"])(this.name, element, options); + } + }, { + key: "_getDeltaY", + value: function _getDeltaY(element, deltaPointsY) { + var options = Object(_toolOptions_js__WEBPACK_IMPORTED_MODULE_9__["getToolOptions"])(this.name, element); + var deltaY = options.deltaY || 0; + return deltaY + deltaPointsY; + } + }, { + key: "_getPixelPerImage", + value: function _getPixelPerImage(element) { + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, 'stack'); + + if (!toolData || !toolData.data || !toolData.data.length) { + return; + } + + var stackData = toolData.data[0]; + var stackScrollSpeed = this.configuration.stackScrollSpeed; // The Math.max here makes it easier to mouseDrag-scroll small or really large image stacks + + return stackScrollSpeed || Math.max(2, element.offsetHeight / Math.max(stackData.imageIds.length, 8)); + } + }]); + + return StackScrollTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/WwwcRegionTool.js": +/*!*********************************!*\ + !*** ./tools/WwwcRegionTool.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WwwcRegionTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _util_getLuminance_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../util/getLuminance.js */ "./util/getLuminance.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + // Drawing + + + + + + +/** + * @public + * @class WwwcRegionTool + * @memberof Tools + * + * @classdesc Tool for setting wwwc based on a rectangular region. + * @extends Tools.Base.BaseTool + */ + +var WwwcRegionTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(WwwcRegionTool, _BaseTool); + + /** @inheritdoc */ + function WwwcRegionTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, WwwcRegionTool); + + var defaultProps = { + name: 'WwwcRegion', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + minWindowWidth: 10 + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_12__["wwwcRegionCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(WwwcRegionTool).call(this, props, defaultProps)); + + _this._resetHandles(); // + // Touch + // + + /** @inheritdoc */ + + + _this.postTouchStartCallback = _this._startOutliningRegion.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + /** @inheritdoc */ + + _this.touchDragCallback = _this._setHandlesAndUpdate.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + /** @inheritdoc */ + + _this.touchEndCallback = _this._applyStrategy.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); // + // MOUSE + // + + /** @inheritdoc */ + + _this.postMouseDownCallback = _this._startOutliningRegion.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + /** @inheritdoc */ + + _this.mouseClickCallback = _this._startOutliningRegion.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + /** @inheritdoc */ + + _this.mouseDragCallback = _this._setHandlesAndUpdate.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + /** @inheritdoc */ + + _this.mouseMoveCallback = _this._setHandlesAndUpdate.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + /** @inheritdoc */ + + _this.mouseUpCallback = _this._applyStrategy.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + /** + * Render hook: draws the WWWCRegion's "box" when selecting + * + * @param {Cornerstone.event#cornerstoneimagerendered} evt cornerstoneimagerendered event + * @memberof Tools.WwwcRegionTool + * @returns {void} + */ + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(WwwcRegionTool, [{ + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; + var element = eventData.element; + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_11__["default"].getColorIfActive({ + active: true + }); + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["getNewContext"])(eventData.canvasContext.canvas); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_8__["drawRect"])(context, element, _this2.handles.start, _this2.handles.end, { + color: color + }); + }); + } + /** + * Sets the start handle point and claims the eventDispatcher event + * + * @private + * @param {*} evt // mousedown, touchstart, click + * @returns {Boolean} True + */ + + }, { + key: "_startOutliningRegion", + value: function _startOutliningRegion(evt) { + var consumeEvent = true; + var element = evt.detail.element; + var image = evt.detail.currentPoints.image; + + if (_isEmptyObject(this.handles.start)) { + this.handles.start = image; + } else { + this.handles.end = image; + + this._applyStrategy(evt); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element); + return consumeEvent; + } + /** + * This function will update the handles and updateImage to force re-draw + * + * @private + * @method _setHandlesAndUpdate + * @param {(CornerstoneTools.event#TOUCH_DRAG|CornerstoneTools.event#MOUSE_DRAG|CornerstoneTools.event#MOUSE_MOVE)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + }, { + key: "_setHandlesAndUpdate", + value: function _setHandlesAndUpdate(evt) { + var element = evt.detail.element; + var image = evt.detail.currentPoints.image; + this.handles.end = image; + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element); + } + /** + * Event handler for MOUSE_UP/TOUCH_END during handle drag event loop. + * + * @private + * @method _applyStrategy + * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement + * @returns {void} + */ + + }, { + key: "_applyStrategy", + value: function _applyStrategy(evt) { + if (_isEmptyObject(this.handles.start) || _isEmptyObject(this.handles.end)) { + return; + } + + evt.detail.handles = this.handles; + + _applyWWWCRegion(evt, this.configuration); + + this._resetHandles(); + } + /** + * Sets the start and end handle points to empty objects + * + * @private + * @method _resetHandles + * @returns {undefined} + */ + + }, { + key: "_resetHandles", + value: function _resetHandles() { + this.handles = { + start: {}, + end: {} + }; + } + }]); + + return WwwcRegionTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]); +/** + * Helper to determine if an object has no keys and is the correct type (is empty) + * + * @private + * @function _isEmptyObject + * @param {Object} obj The object to check + * @returns {Boolean} true if the object is empty + */ + + + + +var _isEmptyObject = function _isEmptyObject(obj) { + return Object.keys(obj).length === 0 && obj.constructor === Object; +}; +/** + * Calculates the minimum and maximum value in the given pixel array + * and updates the viewport of the element in the event. + * + * @private + * @method _applyWWWCRegion + * @param {(CornerstoneTools.event#MOUSE_UP|CornerstoneTools.event#TOUCH_END)} evt Interaction event emitted by an enabledElement + * @param {Object} config The tool's configuration object + * @returns {void} + */ + + +var _applyWWWCRegion = function _applyWWWCRegion(evt, config) { + var eventData = evt.detail; + var image = eventData.image, + element = eventData.element; + var _evt$detail$handles = evt.detail.handles, + startPoint = _evt$detail$handles.start, + endPoint = _evt$detail$handles.end; // Get the rectangular region defined by the handles + + var left = Math.min(startPoint.x, endPoint.x); + var top = Math.min(startPoint.y, endPoint.y); + var width = Math.abs(startPoint.x - endPoint.x); + var height = Math.abs(startPoint.y - endPoint.y); // Bound the rectangle so we don't get undefined pixels + + left = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_9__["default"])(left, 0, image.width); + top = Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_9__["default"])(top, 0, image.height); + width = Math.floor(Math.min(width, Math.abs(image.width - left))); + height = Math.floor(Math.min(height, Math.abs(image.height - top))); // Get the pixel data in the rectangular region + + var pixelLuminanceData = Object(_util_getLuminance_js__WEBPACK_IMPORTED_MODULE_10__["default"])(element, left, top, width, height); // Calculate the minimum and maximum pixel values + + var minMaxMean = _calculateMinMaxMean(pixelLuminanceData, image.minPixelValue, image.maxPixelValue); // Adjust the viewport window width and center based on the calculated values + + + var viewport = eventData.viewport; + + if (config.minWindowWidth === undefined) { + config.minWindowWidth = 10; + } + + viewport.voi.windowWidth = Math.max(Math.abs(minMaxMean.max - minMaxMean.min), config.minWindowWidth); + viewport.voi.windowCenter = minMaxMean.mean; + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.setViewport(element, viewport); + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(element); +}; +/** + * Calculates the minimum, maximum, and mean value in the given pixel array + * + * @private + * @method _calculateMinMaxMean + * @param {number[]} pixelLuminance array of pixel luminance values + * @param {number} globalMin starting "min" valie + * @param {bumber} globalMax starting "max" value + * @returns {Object} {min: number, max: number, mean: number } + */ + + +var _calculateMinMaxMean = function _calculateMinMaxMean(pixelLuminance, globalMin, globalMax) { + var numPixels = pixelLuminance.length; + var min = globalMax; + var max = globalMin; + var sum = 0; + + if (numPixels < 2) { + return { + min: min, + max: max, + mean: (globalMin + globalMax) / 2 + }; + } + + for (var index = 0; index < numPixels; index++) { + var spv = pixelLuminance[index]; + min = Math.min(min, spv); + max = Math.max(max, spv); + sum += spv; + } + + return { + min: min, + max: max, + mean: sum / numPixels + }; +}; + +/***/ }), + +/***/ "./tools/WwwcTool.js": +/*!***************************!*\ + !*** ./tools/WwwcTool.js ***! + \***************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WwwcTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + +/** + * @public + * @class WwwcTool + * @memberof Tools + * + * @classdesc Tool for setting wwwc by dragging with mouse/touch. + * @extends Tools.Base.BaseTool + */ + +var WwwcTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(WwwcTool, _BaseTool); + + function WwwcTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, WwwcTool); + + var defaultProps = { + name: 'Wwwc', + strategies: { + basicLevelingStrategy: basicLevelingStrategy + }, + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + orientation: 0 + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_7__["wwwcCursor"] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(WwwcTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(WwwcTool, [{ + key: "mouseDragCallback", + value: function mouseDragCallback(evt) { + this.applyActiveStrategy(evt); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport); + } + }, { + key: "touchDragCallback", + value: function touchDragCallback(evt) { + // Prevent CornerstoneToolsTouchStartActive from killing any press events + evt.stopImmediatePropagation(); + this.applyActiveStrategy(evt); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport); + } + }]); + + return WwwcTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); +/** + * Here we normalize the ww/wc adjustments so the same number of on screen pixels + * adjusts the same percentage of the dynamic range of the image. This is needed to + * provide consistency for the ww/wc tool regardless of the dynamic range (e.g. an 8 bit + * image will feel the same as a 16 bit image would) + * + * @param {Object} evt + * @param {Object} { orienttion } + * @returns {void} + */ + + + + +function basicLevelingStrategy(evt) { + var orientation = this.configuration.orientation; + var eventData = evt.detail; + var maxVOI = eventData.image.maxPixelValue * eventData.image.slope + eventData.image.intercept; + var minVOI = eventData.image.minPixelValue * eventData.image.slope + eventData.image.intercept; + var imageDynamicRange = maxVOI - minVOI; + var multiplier = imageDynamicRange / 1024; + var deltaX = eventData.deltaPoints.page.x * multiplier; + var deltaY = eventData.deltaPoints.page.y * multiplier; + + if (orientation === 0) { + eventData.viewport.voi.windowWidth += deltaX; + eventData.viewport.voi.windowCenter += deltaY; + } else { + eventData.viewport.voi.windowWidth += deltaY; + eventData.viewport.voi.windowCenter += deltaX; + } +} + +/***/ }), + +/***/ "./tools/ZoomMouseWheelTool.js": +/*!*************************************!*\ + !*** ./tools/ZoomMouseWheelTool.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ZoomMouseWheelTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/zoom/index.js */ "./util/zoom/index.js"); + + + + + + + + +/** + * @public + * @class ZoomMouseWheelTool + * @memberof Tools + * + * @classdesc Tool for changing magnification with the mouse wheel. + * @extends Tools.Base.BaseTool + */ + +var ZoomMouseWheelTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ZoomMouseWheelTool, _BaseTool); + + function ZoomMouseWheelTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ZoomMouseWheelTool); + + var defaultProps = { + name: 'ZoomMouseWheel', + supportedInteractionTypes: ['MouseWheel'], + configuration: { + minScale: 0.25, + maxScale: 20.0, + invert: false + } + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ZoomMouseWheelTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ZoomMouseWheelTool, [{ + key: "mouseWheelCallback", + value: function mouseWheelCallback(evt) { + var _evt$detail = evt.detail, + element = _evt$detail.element, + viewport = _evt$detail.viewport, + spinY = _evt$detail.spinY; + var _this$configuration = this.configuration, + invert = _this$configuration.invert, + maxScale = _this$configuration.maxScale, + minScale = _this$configuration.minScale; + var ticks = invert ? spinY / 4 : -spinY / 4; + var updatedViewport = Object(_util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__["changeViewportScale"])(viewport, ticks, { + maxScale: maxScale, + minScale: minScale + }); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, updatedViewport); + } + }]); + + return ZoomMouseWheelTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/ZoomTool.js": +/*!***************************!*\ + !*** ./tools/ZoomTool.js ***! + \***************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ZoomTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util/zoom/index.js */ "./util/zoom/index.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + +var correctShift = _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_8__["default"].correctShift, + changeViewportScale = _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_8__["default"].changeViewportScale; +/** + * @public + * @class ZoomTool + * @memberof Tools + * + * @classdesc Tool for changing magnification. + * @extends Tools.Base.BaseTool + */ + +var ZoomTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ZoomTool, _BaseTool); + + function ZoomTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ZoomTool); + + var defaultProps = { + name: 'Zoom', + strategies: { + default: defaultStrategy, + translate: translateStrategy, + zoomToCenter: zoomToCenterStrategy + }, + defaultStrategy: 'default', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + invert: false, + preventZoomOutsideImage: false, + minScale: 0.25, + maxScale: 20.0 + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_9__["zoomCursor"] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ZoomTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ZoomTool, [{ + key: "touchDragCallback", + value: function touchDragCallback(evt) { + dragCallback.call(this, evt); + } + }, { + key: "mouseDragCallback", + value: function mouseDragCallback(evt) { + dragCallback.call(this, evt); + } + }]); + + return ZoomTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +var dragCallback = function dragCallback(evt) { + var deltaY = evt.detail.deltaPoints.page.y; + + if (!deltaY) { + return false; + } + + this.applyActiveStrategy(evt, this.configuration); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(evt.detail.element, evt.detail.viewport); +}; +/** + * The default strategy keeps the target location fixed on the page + * as we zoom in/out. + * + * @param {*} evt + * @param {*} { invert, maxScale, minScale } + * @returns {void} + */ + + +function defaultStrategy(evt) { + var _this$configuration = this.configuration, + invert = _this$configuration.invert, + maxScale = _this$configuration.maxScale, + minScale = _this$configuration.minScale; + var deltaY = evt.detail.deltaPoints.page.y; + var ticks = invert ? -deltaY / 100 : deltaY / 100; + var _evt$detail = evt.detail, + element = _evt$detail.element, + viewport = _evt$detail.viewport; + var _ref = [evt.detail.startPoints.page.x, evt.detail.startPoints.page.y, evt.detail.startPoints.image.x, evt.detail.startPoints.image.y], + startX = _ref[0], + startY = _ref[1], + imageX = _ref[2], + imageY = _ref[3]; // Calculate the new scale factor based on how far the mouse has changed + + var updatedViewport = changeViewportScale(viewport, ticks, { + maxScale: maxScale, + minScale: minScale + }); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, updatedViewport); // Now that the scale has been updated, determine the offset we need to apply to the center so we can + // Keep the original start location in the same position + + var newCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pageToPixel(element, startX, startY); // The shift we will use is the difference between the original image coordinates of the point we've selected + // And the image coordinates of the same point on the page after the viewport scaling above has been performed + // This shift is in image coordinates, and is designed to keep the target location fixed on the page. + + var shift = { + x: imageX - newCoords.x, + y: imageY - newCoords.y + }; // Correct the required shift using the viewport rotation and flip parameters + + shift = correctShift(shift, updatedViewport); // Apply the shift to the Viewport's translation setting + + viewport.translation.x -= shift.x; + viewport.translation.y -= shift.y; +} + +function translateStrategy(evt) { + var _this$configuration2 = this.configuration, + invert = _this$configuration2.invert, + preventZoomOutsideImage = _this$configuration2.preventZoomOutsideImage, + maxScale = _this$configuration2.maxScale, + minScale = _this$configuration2.minScale; + var deltaY = evt.detail.deltaPoints.page.y; + var ticks = invert ? -deltaY / 100 : deltaY / 100; + var image = evt.detail.image; + var viewport = evt.detail.viewport; + var _ref2 = [evt.detail.startPoints.image.x, evt.detail.startPoints.image.y], + startX = _ref2[0], + startY = _ref2[1]; // Calculate the new scale factor based on how far the mouse has changed + // Note that in this case we don't need to update the viewport after the initial + // Zoom step since we aren't don't intend to keep the target position static on + // The page + + var updatedViewport = changeViewportScale(viewport, ticks, { + maxScale: maxScale, + minScale: minScale + }); // Define the default shift to take place during this zoom step + + var shift = { + x: 0, + y: 0 + }; // Define the parameters for the translate strategy + + var translateSpeed = 8; + var outwardsMinScaleToTranslate = 3; + var minTranslation = 0.01; + + if (ticks < 0) { + // Zoom outwards from the image center + if (updatedViewport.scale < outwardsMinScaleToTranslate) { + // If the current translation is smaller than the minimum desired translation, + // Set the translation to zero + if (Math.abs(updatedViewport.translation.x) < minTranslation) { + updatedViewport.translation.x = 0; + } else { + shift.x = updatedViewport.translation.x / translateSpeed; + } // If the current translation is smaller than the minimum desired translation, + // Set the translation to zero + + + if (Math.abs(updatedViewport.translation.y) < minTranslation) { + updatedViewport.translation.y = 0; + } else { + shift.y = updatedViewport.translation.y / translateSpeed; + } + } + } else { + // Zoom inwards to the current image point + // Identify the coordinates of the point the user is trying to zoom into + // If we are not allowed to zoom outside the image, bound the user-selected position to + // A point inside the image + if (preventZoomOutsideImage) { + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_7__["clipToBox"])(evt.detail.startPoints.image, image); + } // Calculate the translation value that would place the desired image point in the center + // Of the viewport + + + var desiredTranslation = { + x: image.width / 2 - startX, + y: image.height / 2 - startY + }; // Correct the target location using the viewport rotation and flip parameters + + desiredTranslation = correctShift(desiredTranslation, updatedViewport); // Calculate the difference between the current viewport translation value and the + // Final desired translation values + + var distanceToDesired = { + x: updatedViewport.translation.x - desiredTranslation.x, + y: updatedViewport.translation.y - desiredTranslation.y + }; // If the current translation is smaller than the minimum desired translation, + // Stop translating in the x-direction + + if (Math.abs(distanceToDesired.x) < minTranslation) { + updatedViewport.translation.x = desiredTranslation.x; + } else { + // Otherwise, shift the viewport by one step + shift.x = distanceToDesired.x / translateSpeed; + } // If the current translation is smaller than the minimum desired translation, + // Stop translating in the y-direction + + + if (Math.abs(distanceToDesired.y) < minTranslation) { + updatedViewport.translation.y = desiredTranslation.y; + } else { + // Otherwise, shift the viewport by one step + shift.y = distanceToDesired.y / translateSpeed; + } + } // Apply the shift to the Viewport's translation setting + + + updatedViewport.translation.x -= shift.x; + updatedViewport.translation.y -= shift.y; +} + +function zoomToCenterStrategy(evt) { + var _this$configuration3 = this.configuration, + invert = _this$configuration3.invert, + maxScale = _this$configuration3.maxScale, + minScale = _this$configuration3.minScale; + var deltaY = evt.detail.deltaPoints.page.y; + var ticks = invert ? -deltaY / 100 : deltaY / 100; + var viewport = evt.detail.viewport; // Calculate the new scale factor based on how far the mouse has changed + + changeViewportScale(viewport, ticks, { + maxScale: maxScale, + minScale: minScale + }); +} + +/***/ }), + +/***/ "./tools/ZoomTouchPinchTool.js": +/*!*************************************!*\ + !*** ./tools/ZoomTouchPinchTool.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ZoomTouchPinchTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./base/BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/zoom/index.js */ "./util/zoom/index.js"); + + + + + + + + +var correctShift = _util_zoom_index_js__WEBPACK_IMPORTED_MODULE_7__["default"].correctShift; +/** + * + * + * @public + * @class ZoomTouchPinchTool + * @memberof Tools + * + * @extends {BaseTool} + */ + +var ZoomTouchPinchTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ZoomTouchPinchTool, _BaseTool); + + function ZoomTouchPinchTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ZoomTouchPinchTool); + + var defaultProps = { + name: 'ZoomTouchPinch', + // TODO: Do we need a better way to specify touchPinch? + supportedInteractionTypes: ['TouchPinch'], + configuration: { + minScale: 0.25, + maxScale: 20.0 + } + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ZoomTouchPinchTool).call(this, props, defaultProps)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ZoomTouchPinchTool, [{ + key: "touchPinchCallback", + value: function touchPinchCallback(evt) { + var _evt$detail = evt.detail, + element = _evt$detail.element, + viewport = _evt$detail.viewport, + scaleChange = _evt$detail.scaleChange; + var _ref = [evt.detail.startPoints.page.x, evt.detail.startPoints.page.y, evt.detail.startPoints.image.x, evt.detail.startPoints.image.y], + pageStartX = _ref[0], + pageStartY = _ref[1], + imageStartX = _ref[2], + imageStartY = _ref[3]; + var _this$configuration = this.configuration, + maxScale = _this$configuration.maxScale, + minScale = _this$configuration.minScale; // Change the scale based on the pinch gesture's scale change + + viewport.scale += scaleChange * viewport.scale; + + if (maxScale && viewport.scale > maxScale) { + viewport.scale = maxScale; + } else if (minScale && viewport.scale < minScale) { + viewport.scale = minScale; + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, viewport); // Now that the scale has been updated, determine the offset we need to apply to the center so we can + // Keep the original start location in the same position + + var newCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pageToPixel(element, pageStartX, pageStartY); + var shift = { + x: imageStartX - newCoords.x, + y: imageStartY - newCoords.y + }; + shift = correctShift(shift, viewport); + viewport.translation.x -= shift.x; + viewport.translation.y -= shift.y; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.setViewport(element, viewport); + } + }]); + + return ZoomTouchPinchTool; +}(_base_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/annotation/AngleTool.js": +/*!***************************************!*\ + !*** ./tools/annotation/AngleTool.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AngleTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js"); +/* harmony import */ var _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./../../util/roundToDecimal.js */ "./util/roundToDecimal.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../events.js */ "./events.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../util/throttle */ "./util/throttle.js"); + + + + + + + // State + + + + // Manipulators + + // Drawing + + + + + + + + + + + + +/** + * @public + * @class AngleTool + * @memberof Tools.Annotation + * @classdesc Create and position an angle by placing three consecutive points. + * @extends Tools.Base.BaseAnnotationTool + * @hideconstructor + * + * @param {ToolConfiguration} [props={}] + */ + +var AngleTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(AngleTool, _BaseAnnotationTool); + + function AngleTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, AngleTool); + + var defaultProps = { + name: 'Angle', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_17__["angleCursor"], + configuration: { + drawHandles: true + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(AngleTool).call(this, props, defaultProps)); + _this.preventNewMeasurement = false; + _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_21__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(AngleTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + // Create the measurement data for this tool with the end handle activated + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + handles: { + start: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false + }, + middle: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true + }, + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false + }, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + if (data.visible === false) { + return false; + } + + return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.start, data.handles.middle, coords) < 25 || Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.middle, data.handles.end, coords) < 25; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_20__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; + + var sideA = { + x: (data.handles.middle.x - data.handles.start.x) * colPixelSpacing, + y: (data.handles.middle.y - data.handles.start.y) * rowPixelSpacing + }; + var sideB = { + x: (data.handles.end.x - data.handles.middle.x) * colPixelSpacing, + y: (data.handles.end.y - data.handles.middle.y) * rowPixelSpacing + }; + var sideC = { + x: (data.handles.end.x - data.handles.start.x) * colPixelSpacing, + y: (data.handles.end.y - data.handles.start.y) * rowPixelSpacing + }; + var sideALength = length(sideA); + var sideBLength = length(sideB); + var sideCLength = length(sideC); // Cosine law + + var angle = Math.acos((Math.pow(sideALength, 2) + Math.pow(sideBLength, 2) - Math.pow(sideCLength, 2)) / (2 * sideALength * sideBLength)); + angle *= 180 / Math.PI; + data.rAngle = Object(_util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__["default"])(angle, 2); + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; + var enabledElement = eventData.enabledElement; + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; // If we have no toolData for this element, return immediately as there is nothing to do + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["getNewContext"])(eventData.canvasContext.canvas); + var image = eventData.image, + element = eventData.element; + + var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_20__["default"])(image), + rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing2.colPixelSpacing; + + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth(); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["setShadow"])(context, _this2.configuration); // Differentiate the color of activation tool + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data); + var handleStartCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(eventData.element, data.handles.start); + var handleMiddleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(eventData.element, data.handles.middle); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_11__["drawJoinedLines"])(context, eventData.element, data.handles.start, [data.handles.middle, data.handles.end], { + color: color + }); // Draw the handles + + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_14__["default"])(context, eventData, data.handles, handleOptions); + } // Update textbox stats + + + if (data.invalidated === true) { + if (data.rAngle) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } + + if (data.rAngle) { + var text = textBoxText(data, rowPixelSpacing, colPixelSpacing); + var distance = 15; + var textCoords; + + if (!data.handles.textBox.hasMoved) { + textCoords = { + x: handleMiddleCanvas.x, + y: handleMiddleCanvas.y + }; + var padding = 5; + var textWidth = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_13__["textBoxWidth"])(context, text, padding); + + if (handleMiddleCanvas.x < handleStartCanvas.x) { + textCoords.x -= distance + textWidth + 10; + } else { + textCoords.x += distance; + } + + var transform = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.internal.getTransform(enabledElement); + transform.invert(); + var coords = transform.transformPoint(textCoords.x, textCoords.y); + data.handles.textBox.x = coords.x; + data.handles.textBox.y = coords.y; + } + + Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_12__["default"])(context, eventData.element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, 0, true); + } + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + + function textBoxText(data, rowPixelSpacing, colPixelSpacing) { + var suffix = !rowPixelSpacing || !colPixelSpacing ? ' (isotropic)' : ''; + var str = '00B0'; // Degrees symbol + + return data.rAngle.toString() + String.fromCharCode(parseInt(str, 16)) + suffix; + } + + function textBoxAnchorPoints(handles) { + return [handles.start, handles.middle, handles.end]; + } + } + }, { + key: "addNewMeasurement", + value: function addNewMeasurement(evt, interactionType) { + var _this3 = this; + + if (this.preventNewMeasurement) { + return; + } + + this.preventNewMeasurement = true; + evt.preventDefault(); + evt.stopPropagation(); + var eventData = evt.detail; + var measurementData = this.createNewMeasurement(eventData); + var element = evt.detail.element; // Associate this data with this imageId so we can render it and manipulate it + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["addToolState"])(element, this.name, measurementData); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); // Step 1, create start and second middle. + + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_10__["moveNewHandle"])(eventData, this.name, measurementData, measurementData.handles.middle, this.options, interactionType, function () { + measurementData.active = false; + measurementData.handles.end.active = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); // Step 2, create end. + + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_10__["moveNewHandle"])(eventData, _this3.name, measurementData, measurementData.handles.end, _this3.options, interactionType, function () { + measurementData.active = false; + _this3.preventNewMeasurement = false; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + }); + }); + } + }]); + + return AngleTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +function length(vector) { + return Math.sqrt(Math.pow(vector.x, 2) + Math.pow(vector.y, 2)); +} + +/***/ }), + +/***/ "./tools/annotation/ArrowAnnotateTool.js": +/*!***********************************************!*\ + !*** ./tools/annotation/ArrowAnnotateTool.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ArrowAnnotateTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../events.js */ "./events.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js"); +/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./../../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./../../drawing/drawArrow.js */ "./drawing/drawArrow.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); + + + + + + +/* eslint no-alert: 0 */ + + + + + + + + + + + + + + + + + +/** + * @public + * @class ArrowAnnotateTool + * @memberof Tools.Annotation + * @classdesc Create and position an arrow and label + * @extends Tools.Base.BaseAnnotationTool + */ + +var ArrowAnnotateTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ArrowAnnotateTool, _BaseAnnotationTool); + + function ArrowAnnotateTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ArrowAnnotateTool); + + var defaultProps = { + name: 'ArrowAnnotate', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + getTextCallback: getTextCallback, + changeTextCallback: changeTextCallback, + drawHandles: false, + drawHandlesOnHover: true, + arrowFirst: true + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_21__["arrowAnnotateCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ArrowAnnotateTool).call(this, props, defaultProps)); + _this.preventNewMeasurement = false; + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ArrowAnnotateTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(evt) { + // Create the measurement data for this tool with the end handle activated + return { + visible: true, + active: true, + color: undefined, + handles: { + start: { + x: evt.detail.currentPoints.image.x, + y: evt.detail.currentPoints.image.y, + highlight: true, + active: false + }, + end: { + x: evt.detail.currentPoints.image.x, + y: evt.detail.currentPoints.image.y, + highlight: true, + active: false + }, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + if (data.visible === false) { + return false; + } + + return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, data.handles.start, data.handles.end, coords) < 25; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats() {// Implementing to satisfy BaseAnnotationTool + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var _evt$detail = evt.detail, + element = _evt$detail.element, + enabledElement = _evt$detail.enabledElement; + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; // If we have no toolData for this element, return immediately as there is nothing to do + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["getToolState"])(element, this.name); + + if (!toolData) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var canvas = evt.detail.canvasContext.canvas; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_17__["getNewContext"])(canvas); + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth(); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_17__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_17__["setShadow"])(context, _this2.configuration); + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__["default"].getColorIfActive(data); // Draw the arrow + + var handleStartCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start); + var handleEndCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); // Config.arrowFirst = false; + + if (_this2.configuration.arrowFirst) { + Object(_drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_18__["default"])(context, handleEndCanvas, handleStartCanvas, color, lineWidth); + } else { + Object(_drawing_drawArrow_js__WEBPACK_IMPORTED_MODULE_18__["default"])(context, handleStartCanvas, handleEndCanvas, color, lineWidth); + } + + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_19__["default"])(context, evt.detail, data.handles, handleOptions); + } + + var text = textBoxText(data); // Draw the text + + if (text && text !== '') { + // Calculate the text coordinates. + var padding = 5; + var textWidth = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_20__["textBoxWidth"])(context, text, padding); + var textHeight = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"].getFontSize() + 10; + var distance = Math.max(textWidth, textHeight) / 2 + 5; + + if (handleEndCanvas.x < handleStartCanvas.x) { + distance = -distance; + } + + if (!data.handles.textBox.hasMoved) { + var textCoords; + + if (_this2.configuration.arrowFirst) { + textCoords = { + x: handleEndCanvas.x - textWidth / 2 + distance, + y: handleEndCanvas.y - textHeight / 2 + }; + } else { + // If the arrow is at the End position, the text should + // Be placed near the Start position + textCoords = { + x: handleStartCanvas.x - textWidth / 2 - distance, + y: handleStartCanvas.y - textHeight / 2 + }; + } + + var transform = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.internal.getTransform(enabledElement); + transform.invert(); + var coords = transform.transformPoint(textCoords.x, textCoords.y); + data.handles.textBox.x = coords.x; + data.handles.textBox.y = coords.y; + } + + Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_16__["default"])(context, element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, 0, false); + } + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + + function textBoxText(data) { + return data.text; + } + + function textBoxAnchorPoints(handles) { + var midpoint = { + x: (handles.start.x + handles.end.x) / 2, + y: (handles.start.y + handles.end.y) / 2 + }; + return [handles.start, midpoint, handles.end]; + } + } + }, { + key: "addNewMeasurement", + value: function addNewMeasurement(evt, interactionType) { + var _this3 = this; + + var element = evt.detail.element; + var measurementData = this.createNewMeasurement(evt); // Associate this data with this imageId so we can render it and manipulate it + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["addToolState"])(element, this.name, measurementData); + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__["moveNewHandle"])(evt.detail, this.name, measurementData, measurementData.handles.end, this.options, interactionType, function () { + if (measurementData.text === undefined) { + _this3.configuration.getTextCallback(function (text) { + if (text) { + measurementData.text = text; + } else { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["removeToolState"])(element, _this3.name, measurementData); + } + + measurementData.active = false; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MEASUREMENT_MODIFIED, { + toolType: _this3.name, + element: element, + measurementData: measurementData + }); + }, evt.detail); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + }); + } + }, { + key: "doubleClickCallback", + value: function doubleClickCallback(evt) { + return this._updateTextForNearbyAnnotation(evt); + } + }, { + key: "touchPressCallback", + value: function touchPressCallback(evt) { + return this._updateTextForNearbyAnnotation(evt); + } + }, { + key: "_updateTextForNearbyAnnotation", + value: function _updateTextForNearbyAnnotation(evt) { + var element = evt.detail.element; + var coords = evt.detail.currentPoints.canvas; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["getToolState"])(element, this.name); + + if (!toolState) { + return false; + } + + for (var i = 0; i < toolState.data.length; i++) { + var data = toolState.data[i]; + + if (this.pointNearTool(element, data, coords) || Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_12__["default"])(data.handles.textBox, coords)) { + data.active = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); // Allow relabelling via a callback + + this.configuration.changeTextCallback(data, evt.detail, this._doneChangingTextCallback.bind(this, element, data)); + evt.stopImmediatePropagation(); + evt.preventDefault(); + evt.stopPropagation(); + return true; + } + } + } + }, { + key: "_doneChangingTextCallback", + value: function _doneChangingTextCallback(element, measurementData, updatedText, deleteTool) { + if (deleteTool === true) { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_15__["removeToolState"])(element, this.name, measurementData); + } else { + measurementData.text = updatedText; + } + + measurementData.active = false; + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MEASUREMENT_MODIFIED, { + toolType: this.name, + element: element, + measurementData: measurementData + }); + } + }]); + + return ArrowAnnotateTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +function getTextCallback(doneChangingTextCallback) { + doneChangingTextCallback(prompt('Enter your annotation:')); +} + +function changeTextCallback(data, eventData, doneChangingTextCallback) { + doneChangingTextCallback(prompt('Change your annotation:')); +} + +/***/ }), + +/***/ "./tools/annotation/BidirectionalTool.js": +/*!***********************************************!*\ + !*** ./tools/annotation/BidirectionalTool.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BidirectionalTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _bidirectionalTool_createNewMeasurement_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bidirectionalTool/createNewMeasurement.js */ "./tools/annotation/bidirectionalTool/createNewMeasurement.js"); +/* harmony import */ var _bidirectionalTool_pointNearTool_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./bidirectionalTool/pointNearTool.js */ "./tools/annotation/bidirectionalTool/pointNearTool.js"); +/* harmony import */ var _bidirectionalTool_renderToolData_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./bidirectionalTool/renderToolData.js */ "./tools/annotation/bidirectionalTool/renderToolData.js"); +/* harmony import */ var _bidirectionalTool_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./bidirectionalTool/addNewMeasurement.js */ "./tools/annotation/bidirectionalTool/addNewMeasurement.js"); +/* harmony import */ var _bidirectionalTool_mouseMoveCallback_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./bidirectionalTool/mouseMoveCallback.js */ "./tools/annotation/bidirectionalTool/mouseMoveCallback.js"); +/* harmony import */ var _bidirectionalTool_handleSelectedCallback_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./bidirectionalTool/handleSelectedCallback.js */ "./tools/annotation/bidirectionalTool/handleSelectedCallback.js"); +/* harmony import */ var _bidirectionalTool_handleSelectedMouseCallback_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./bidirectionalTool/handleSelectedMouseCallback.js */ "./tools/annotation/bidirectionalTool/handleSelectedMouseCallback.js"); +/* harmony import */ var _bidirectionalTool_handleSelectedTouchCallback_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./bidirectionalTool/handleSelectedTouchCallback.js */ "./tools/annotation/bidirectionalTool/handleSelectedTouchCallback.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/throttle */ "./util/throttle.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); +/* harmony import */ var _bidirectionalTool_utils_calculateLongestAndShortestDiameters__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./bidirectionalTool/utils/calculateLongestAndShortestDiameters */ "./tools/annotation/bidirectionalTool/utils/calculateLongestAndShortestDiameters.js"); + + + + + + + + + + + + + + + + + + + + +var emptyLocationCallback = function emptyLocationCallback(measurementData, eventData, doneCallback) { + return doneCallback(); +}; +/** + * @public + * @class BidirectionalTool + * @memberof Tools.Annotation + * @classdesc Create and position an annotation that measures the + * length and width of a region. + * @extends Tools.Base.BaseAnnotationTool + */ + + +var BidirectionalTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BidirectionalTool, _BaseAnnotationTool); + + function BidirectionalTool(props) { + var _this; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BidirectionalTool); + + var defaultProps = { + name: 'Bidirectional', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + changeMeasurementLocationCallback: emptyLocationCallback, + getMeasurementLocationCallback: emptyLocationCallback, + textBox: '', + shadow: '', + drawHandles: true, + drawHandlesOnHover: true, + additionalData: [] + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__["bidirectionalCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BidirectionalTool).call(this, props, defaultProps)); + _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_16__["default"])(_this.updateCachedStats, 110); + _this.createNewMeasurement = _bidirectionalTool_createNewMeasurement_js__WEBPACK_IMPORTED_MODULE_7__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.pointNearTool = _bidirectionalTool_pointNearTool_js__WEBPACK_IMPORTED_MODULE_8__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.renderToolData = _bidirectionalTool_renderToolData_js__WEBPACK_IMPORTED_MODULE_9__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.addNewMeasurement = _bidirectionalTool_addNewMeasurement_js__WEBPACK_IMPORTED_MODULE_10__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this._moveCallback = _bidirectionalTool_mouseMoveCallback_js__WEBPACK_IMPORTED_MODULE_11__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.handleSelectedCallback = _bidirectionalTool_handleSelectedCallback_js__WEBPACK_IMPORTED_MODULE_12__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.handleSelectedMouseCallback = _bidirectionalTool_handleSelectedMouseCallback_js__WEBPACK_IMPORTED_MODULE_13__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.handleSelectedTouchCallback = _bidirectionalTool_handleSelectedTouchCallback_js__WEBPACK_IMPORTED_MODULE_14__["default"].bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BidirectionalTool, [{ + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image); + + var _calculateLongestAndS = Object(_bidirectionalTool_utils_calculateLongestAndShortestDiameters__WEBPACK_IMPORTED_MODULE_18__["default"])(data, pixelSpacing), + longestDiameter = _calculateLongestAndS.longestDiameter, + shortestDiameter = _calculateLongestAndS.shortestDiameter; // Set measurement text to show lesion table + + + data.longestDiameter = longestDiameter; + data.shortestDiameter = shortestDiameter; + data.invalidated = false; + } + }]); + + return BidirectionalTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/annotation/CircleRoiTool.js": +/*!*******************************************!*\ + !*** ./tools/annotation/CircleRoiTool.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CircleRoiTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../util/ellipse/index.js */ "./util/ellipse/index.js"); +/* harmony import */ var _util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/getROITextBoxCoords.js */ "./util/getROITextBoxCoords.js"); +/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js"); +/* harmony import */ var _util_throttle_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./../../util/throttle.js */ "./util/throttle.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_getCircleCoords__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../util/getCircleCoords */ "./util/getCircleCoords.js"); + + + + + + + // State + + + + // Drawing + + // Util + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_16__["getLogger"])('tools:annotation:CircleRoiTool'); +/** + * @public + * @class CircleRoiTool + * @memberof Tools.Annotation + * @classdesc Tool for drawing circular regions of interest, and measuring + * the statistics of the enclosed pixels. + * @extends Tools.Base.BaseAnnotationTool + */ + +var CircleRoiTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(CircleRoiTool, _BaseAnnotationTool); + + function CircleRoiTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CircleRoiTool); + + var defaultProps = { + name: 'CircleRoi', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_18__["circleRoiCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CircleRoiTool).call(this, props, defaultProps)); + _this.throttledUpdateCachedStats = Object(_util_throttle_js__WEBPACK_IMPORTED_MODULE_15__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CircleRoiTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image; + + if (!goodEventData) { + logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement")); + return; + } + + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + handles: { + start: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false + }, + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true + }, + initialRotation: eventData.viewport.rotation, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords, interactionType) { + var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end; + var getDistance = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.point.distance; + + if (!hasStartAndEndHandles) { + logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool")); + } + + if (!hasStartAndEndHandles || data.visible === false) { + return false; + } + + var distance = interactionType === 'mouse' ? 15 : 25; + var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start); + var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); // StartCanvas is the center of the circle + + var distanceFromCenter = getDistance(startCanvas, coords); // Getting radius of circle annotation in canvas + + var radius = getDistance(startCanvas, endCanvas); // Checking if point is near the tool by comparing its distance from the center of the circle + + return distanceFromCenter > radius - distance / 2 && distanceFromCenter < radius + distance / 2; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; + var modality = seriesModule.modality; + var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image); + + var stats = _calculateStats(image, element, data.handles, modality, pixelSpacing); + + data.cachedStats = stats; + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } + + var getDistance = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.point.distance; + var eventData = evt.detail; + var image = eventData.image, + element = eventData.element, + canvasContext = eventData.canvasContext; + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth(); + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; + var newContext = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(canvasContext.canvas); + + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Meta + + + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; // Pixel Spacing + + var modality = seriesModule.modality; + var hasPixelSpacing = rowPixelSpacing && colPixelSpacing; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(newContext, function (context) { + // If we have tool data for this element, iterate over each set and draw it + for (var i = 0; i < toolData.data.length; i++) { + var data = toolData.data[i]; + + if (data.visible === false) { + continue; + } // Configure + + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data); + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["setShadow"])(context, _this2.configuration); + var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start); + var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); // Calculating the radius where startCanvas is the center of the circle to be drawn + + var radius = getDistance(startCanvas, endCanvas); // Draw Circle + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawCircle"])(context, element, data.handles.start, radius, { + color: color + }, 'pixel'); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawHandles"])(context, eventData, data.handles, handleOptions); // Update textbox stats + + if (data.invalidated === true) { + if (data.cachedStats) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } // Default to textbox on right side of ROI + + + if (!data.handles.textBox.hasMoved) { + var defaultCoords = Object(_util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_13__["default"])(eventData.viewport, data.handles); + Object.assign(data.handles.textBox, defaultCoords); + } + + var textBoxAnchorPoints = function textBoxAnchorPoints(handles) { + return _findTextBoxAnchorPoints(handles.start, handles.end); + }; + + var textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, _this2.configuration); + + data.unit = _getUnit(modality, _this2.configuration.showHounsfieldUnits); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawLinkedTextBox"])(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true); + } + }); + } + }]); + + return CircleRoiTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); +/** + * + * + * @param {*} startHandle + * @param {*} endHandle + * @returns {Array.<{x: number, y: number}>} + */ + + + + +function _findTextBoxAnchorPoints(startHandle, endHandle) { + var _getCircleCoords = Object(_util_getCircleCoords__WEBPACK_IMPORTED_MODULE_19__["default"])(startHandle, endHandle), + left = _getCircleCoords.left, + top = _getCircleCoords.top, + width = _getCircleCoords.width, + height = _getCircleCoords.height; + + return [{ + // Top middle point of ellipse + x: left + width / 2, + y: top + }, { + // Left middle point of ellipse + x: left, + y: top + height / 2 + }, { + // Bottom middle point of ellipse + x: left + width / 2, + y: top + height + }, { + // Right middle point of ellipse + x: left + width, + y: top + height / 2 + }]; +} + +function _getUnit(modality, showHounsfieldUnits) { + return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : ''; +} +/** + * + * + * @param {*} context + * @param {*} isColorImage + * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV } + * @param {*} modality + * @param {*} hasPixelSpacing + * @param {*} [options={}] - { showMinMax, showHounsfieldUnits } + * @returns {string[]} + */ + + +function _createTextBoxContent(context, isColorImage) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + area = _ref.area, + mean = _ref.mean, + stdDev = _ref.stdDev, + min = _ref.min, + max = _ref.max, + meanStdDevSUV = _ref.meanStdDevSUV; + + var modality = arguments.length > 3 ? arguments[3] : undefined; + var hasPixelSpacing = arguments.length > 4 ? arguments[4] : undefined; + var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; + var showMinMax = options.showMinMax || false; + var textLines = []; // Don't display mean/standardDev for color images + + var otherLines = []; + + if (!isColorImage) { + var hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0; + + var unit = _getUnit(modality, options.showHounsfieldUnits); + + var meanString = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(mean.toFixed(2)), " ").concat(unit); + var stdDevString = "Std Dev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(stdDev.toFixed(2)), " ").concat(unit); // If this image has SUV values to display, concatenate them to the text line + + if (hasStandardUptakeValues) { + var SUVtext = ' SUV: '; + var meanSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(meanStdDevSUV.mean.toFixed(2))); + var stdDevSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(meanStdDevSUV.stdDev.toFixed(2))); + var targetStringLength = Math.floor(context.measureText("".concat(stdDevString, " ")).width); + + while (context.measureText(meanString).width < targetStringLength) { + meanString += ' '; + } + + otherLines.push("".concat(meanString).concat(meanSuvString)); + otherLines.push("".concat(stdDevString, " ").concat(stdDevSuvString)); + } else { + otherLines.push("".concat(meanString, " ").concat(stdDevString)); + } + + if (showMinMax) { + var minString = "Min: ".concat(min, " ").concat(unit); + var maxString = "Max: ".concat(max, " ").concat(unit); + + var _targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText("".concat(stdDevString, " ")).width) : Math.floor(context.measureText("".concat(meanString, " ")).width); + + while (context.measureText(minString).width < _targetStringLength) { + minString += ' '; + } + + otherLines.push("".concat(minString).concat(maxString)); + } + } + + textLines.push(_formatArea(area, hasPixelSpacing)); + otherLines.forEach(function (x) { + return textLines.push(x); + }); + return textLines; +} +/** + * + * + * @param {*} area + * @param {*} hasPixelSpacing + * @returns {string} The formatted label for showing area + */ + + +function _formatArea(area, hasPixelSpacing) { + // This uses Char code 178 for a superscript 2 + var suffix = hasPixelSpacing ? " mm".concat(String.fromCharCode(178)) : " px".concat(String.fromCharCode(178)); + return "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(area.toFixed(2))).concat(suffix); +} +/** + * + * + * @param {*} image + * @param {*} element + * @param {*} handles + * @param {*} modality + * @param {*} pixelSpacing + * @returns {Object} The Stats object + */ + + +function _calculateStats(image, element, handles, modality, pixelSpacing) { + // Retrieve the bounds of the ellipse in image coordinates + var circleCoordinates = Object(_util_getCircleCoords__WEBPACK_IMPORTED_MODULE_19__["default"])(handles.start, handles.end); // Retrieve the array of pixels that the ellipse bounds cover + + var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getPixels(element, circleCoordinates.left, circleCoordinates.top, circleCoordinates.width, circleCoordinates.height); // Calculate the mean & standard deviation from the pixels and the ellipse details. + + var ellipseMeanStdDev = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_12__["calculateEllipseStatistics"])(pixels, circleCoordinates); + var meanStdDevSUV; + + if (modality === 'PT') { + meanStdDevSUV = { + mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, ellipseMeanStdDev.mean, true) || 0, + stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, ellipseMeanStdDev.stdDev, true) || 0 + }; + } + + var area = Math.PI * (circleCoordinates.width * (pixelSpacing.colPixelSpacing || 1) / 2) * (circleCoordinates.height * (pixelSpacing.rowPixelSpacing || 1) / 2); + return { + area: area || 0, + count: ellipseMeanStdDev.count || 0, + mean: ellipseMeanStdDev.mean || 0, + variance: ellipseMeanStdDev.variance || 0, + stdDev: ellipseMeanStdDev.stdDev || 0, + min: ellipseMeanStdDev.min || 0, + max: ellipseMeanStdDev.max || 0, + meanStdDevSUV: meanStdDevSUV + }; +} + +/***/ }), + +/***/ "./tools/annotation/CobbAngleTool.js": +/*!*******************************************!*\ + !*** ./tools/annotation/CobbAngleTool.js ***! + \*******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CobbAngleTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js"); +/* harmony import */ var _util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./../../util/roundToDecimal.js */ "./util/roundToDecimal.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./../../events.js */ "./events.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../util/throttle */ "./util/throttle.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); + + + + + + + // State + + + + + // Manipulators + + // Drawing + + + + + + + + + + + +/** + * @public + * @class CobbAngleTool + * @memberof Tools.Annotation + * @classdesc Tool for measuring the angle between two straight lines. + * @extends Tools.Base.BaseAnnotationTool + */ + +var CobbAngleTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(CobbAngleTool, _BaseAnnotationTool); + + function CobbAngleTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CobbAngleTool); + + var defaultProps = { + name: 'CobbAngle', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_18__["cobbAngleCursor"], + configuration: { + drawHandles: true + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CobbAngleTool).call(this, props, defaultProps)); + _this.hasIncomplete = false; + _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_20__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CobbAngleTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + // Create the measurement data for this tool with the end handle activated + this.hasIncomplete = true; + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + complete: false, + value: '', + handles: { + start: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false + }, + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true + }, + start2: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false, + drawnIndependently: true + }, + end2: { + x: eventData.currentPoints.image.x + 1, + y: eventData.currentPoints.image.y, + highlight: true, + active: false, + drawnIndependently: true + }, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + /** + * + * + * @param {*} element + * @param {*} data + * @param {*} coords + * @returns {Boolean} + */ + + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + if (data.visible === false) { + return false; + } + + if (this.hasIncomplete) { + return false; + } + + return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.start, data.handles.end, coords) < 25 || Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_15__["default"])(element, data.handles.start2, data.handles.end2, coords) < 25; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; + + var dx1 = (Math.ceil(data.handles.start.x) - Math.ceil(data.handles.end.x)) * colPixelSpacing; + var dy1 = (Math.ceil(data.handles.start.y) - Math.ceil(data.handles.end.y)) * rowPixelSpacing; + var dx2 = (Math.ceil(data.handles.start2.x) - Math.ceil(data.handles.end2.x)) * colPixelSpacing; + var dy2 = (Math.ceil(data.handles.start2.y) - Math.ceil(data.handles.end2.y)) * rowPixelSpacing; + var angle = Math.acos(Math.abs((dx1 * dx2 + dy1 * dy2) / (Math.sqrt(dx1 * dx1 + dy1 * dy1) * Math.sqrt(dx2 * dx2 + dy2 * dy2)))); + angle *= 180 / Math.PI; + data.rAngle = Object(_util_roundToDecimal_js__WEBPACK_IMPORTED_MODULE_16__["default"])(angle, 2); + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; // If we have no toolData for this element, return immediately as there is nothing to do + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["getNewContext"])(eventData.canvasContext.canvas); + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_9__["default"].getToolWidth(); + var font = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_7__["default"].getFont(); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["setShadow"])(context, _this2.configuration); // Differentiate the color of activation tool + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_10__["default"].getColorIfActive(data); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["drawLine"])(context, eventData.element, data.handles.start, data.handles.end, { + color: color + }); + + if (data.complete) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_12__["drawLine"])(context, eventData.element, data.handles.start2, data.handles.end2, { + color: color + }); + } // Draw the handles + + + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_13__["default"])(context, eventData, data.handles, handleOptions); + } // Draw the text + + + context.fillStyle = color; + var text = data.value; + + if (!data.handles.textBox.hasMoved) { + var textCoords = { + x: (data.handles.start.x + data.handles.end.x) / 2, + y: (data.handles.start.y + data.handles.end.y) / 2 - 10 + }; + context.font = font; + data.handles.textBox.x = textCoords.x; + data.handles.textBox.y = textCoords.y; + } + + Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_14__["default"])(context, eventData.element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, 0, true); + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + + function textBoxAnchorPoints(handles) { + return [handles.start, handles.start2, handles.end, handles.end2]; + } + } + }, { + key: "getIncomplete", + value: function getIncomplete(element) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["getToolState"])(element, this.name); + + if (toolState && Array.isArray(toolState.data)) { + return toolState.data.find(function (_ref) { + var complete = _ref.complete; + return complete === false; + }); + } + } + }, { + key: "addNewMeasurement", + value: function addNewMeasurement(evt, interactionType) { + var _this3 = this; + + evt.preventDefault(); + evt.stopPropagation(); + var eventData = evt.detail; + var measurementData; + var toMoveHandle; + var doneMovingCallback; // Search for incomplete measurements + + var element = evt.detail.element; + var pendingMeasurement = this.getIncomplete(element); + + if (pendingMeasurement) { + measurementData = pendingMeasurement; + measurementData.complete = true; + measurementData.handles.start2 = { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + drawnIndependently: false, + highlight: true, + active: false + }; + measurementData.handles.end2 = { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + drawnIndependently: false, + highlight: true, + active: true + }; + toMoveHandle = measurementData.handles.end2; + this.hasIncomplete = false; + + doneMovingCallback = function doneMovingCallback() { + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_COMPLETED; + var eventData = { + toolType: _this3.name, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_19__["default"])(element, eventType, eventData); + }; + } else { + measurementData = this.createNewMeasurement(eventData); + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_8__["addToolState"])(element, this.name, measurementData); + toMoveHandle = measurementData.handles.end; + } // Associate this data with this imageId so we can render it and manipulate it + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.updateImage(element); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_11__["moveNewHandle"])(eventData, this.name, measurementData, toMoveHandle, this.options, interactionType, doneMovingCallback); + } + }, { + key: "onMeasureModified", + value: function onMeasureModified(ev) { + var element = ev.detail.element; + var image = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getEnabledElement(element).image; + + var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_21__["default"])(image), + rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing2.colPixelSpacing; + + if (ev.detail.toolName !== this.name) { + return; + } + + var data = ev.detail.measurementData; // Update textbox stats + + if (data.invalidated === true) { + if (data.rAngle) { + this.throttledUpdateCachedStats(image, element, data); + } else { + this.updateCachedStats(image, element, data); + } + } + + var rAngle = data.rAngle; + data.value = ''; + + if (!Number.isNaN(rAngle)) { + data.value = textBoxText(rAngle, rowPixelSpacing, colPixelSpacing); + } + + function textBoxText(rAngle, rowPixelSpacing, colPixelSpacing) { + var suffix = !rowPixelSpacing || !colPixelSpacing ? ' (isotropic)' : ''; + var str = '00B0'; // Degrees symbol + + return rAngle.toString() + String.fromCharCode(parseInt(str, 16)) + suffix; + } + } + }, { + key: "activeCallback", + value: function activeCallback(element) { + this.onMeasureModified = this.onMeasureModified.bind(this); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified); + } + }, { + key: "passiveCallback", + value: function passiveCallback(element) { + this.onMeasureModified = this.onMeasureModified.bind(this); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified); + } + }, { + key: "enabledCallback", + value: function enabledCallback(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified); + } + }, { + key: "disabledCallback", + value: function disabledCallback(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_17__["default"].MEASUREMENT_MODIFIED, this.onMeasureModified); + } + }]); + + return CobbAngleTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/annotation/EllipticalRoiTool.js": +/*!***********************************************!*\ + !*** ./tools/annotation/EllipticalRoiTool.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EllipticalRoiTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../util/ellipse/index.js */ "./util/ellipse/index.js"); +/* harmony import */ var _util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/getROITextBoxCoords.js */ "./util/getROITextBoxCoords.js"); +/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js"); +/* harmony import */ var _util_throttle_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./../../util/throttle.js */ "./util/throttle.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); + + + + + + + // State + + + + // Drawing + + // Util + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_17__["getLogger"])('tools:annotation:EllipticalRoiTool'); +/** + * @public + * @class EllipticalRoiTool + * @memberof Tools.Annotation + * @classdesc Tool for drawing elliptical regions of interest, and measuring + * the statistics of the enclosed pixels. + * @extends Tools.Base.BaseAnnotationTool + */ + +var EllipticalRoiTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(EllipticalRoiTool, _BaseAnnotationTool); + + function EllipticalRoiTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, EllipticalRoiTool); + + var defaultProps = { + name: 'EllipticalRoi', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: {// showMinMax: false, + // showHounsfieldUnits: true, + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_16__["ellipticalRoiCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(EllipticalRoiTool).call(this, props, defaultProps)); + _this.throttledUpdateCachedStats = Object(_util_throttle_js__WEBPACK_IMPORTED_MODULE_15__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(EllipticalRoiTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image; + + if (!goodEventData) { + logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement")); + return; + } + + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + handles: { + start: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false + }, + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true + }, + initialRotation: eventData.viewport.rotation, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords, interactionType) { + var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end; + var validParameters = hasStartAndEndHandles; + + if (!validParameters) { + logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool")); + } + + if (!validParameters || data.visible === false) { + return false; + } + + var distance = interactionType === 'mouse' ? 15 : 25; + var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start); + var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); + var minorEllipse = { + left: Math.min(startCanvas.x, endCanvas.x) + distance / 2, + top: Math.min(startCanvas.y, endCanvas.y) + distance / 2, + width: Math.abs(startCanvas.x - endCanvas.x) - distance, + height: Math.abs(startCanvas.y - endCanvas.y) - distance + }; + var majorEllipse = { + left: Math.min(startCanvas.x, endCanvas.x) - distance / 2, + top: Math.min(startCanvas.y, endCanvas.y) - distance / 2, + width: Math.abs(startCanvas.x - endCanvas.x) + distance, + height: Math.abs(startCanvas.y - endCanvas.y) + distance + }; + var pointInMinorEllipse = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_12__["pointInEllipse"])(minorEllipse, coords); + var pointInMajorEllipse = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_12__["pointInEllipse"])(majorEllipse, coords); + + if (pointInMajorEllipse && !pointInMinorEllipse) { + return true; + } + + return false; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; + var modality = seriesModule.modality; + var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__["default"])(image); + + var stats = _calculateStats(image, element, data.handles, modality, pixelSpacing); + + data.cachedStats = stats; + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } + + var eventData = evt.detail; + var image = eventData.image, + element = eventData.element; + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth(); + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas); + + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_18__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Meta + + + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; // Pixel Spacing + + var modality = seriesModule.modality; + var hasPixelSpacing = rowPixelSpacing && colPixelSpacing; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) { + // If we have tool data for this element - iterate over each set and draw it + for (var i = 0; i < toolData.data.length; i++) { + var data = toolData.data[i]; + + if (data.visible === false) { + continue; + } // Configure + + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data); + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["setShadow"])(context, _this2.configuration); // Draw + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawEllipse"])(context, element, data.handles.start, data.handles.end, { + color: color + }, 'pixel', data.handles.initialRotation); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawHandles"])(context, eventData, data.handles, handleOptions); // Update textbox stats + + if (data.invalidated === true) { + if (data.cachedStats) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } // Default to textbox on right side of ROI + + + if (!data.handles.textBox.hasMoved) { + var defaultCoords = Object(_util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_13__["default"])(eventData.viewport, data.handles); + Object.assign(data.handles.textBox, defaultCoords); + } + + var textBoxAnchorPoints = function textBoxAnchorPoints(handles) { + return _findTextBoxAnchorPoints(handles.start, handles.end); + }; + + var textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, _this2.configuration); + + data.unit = _getUnit(modality, _this2.configuration.showHounsfieldUnits); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawLinkedTextBox"])(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true); + } + }); + } + }]); + + return EllipticalRoiTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); +/** + * + * + * @param {*} startHandle + * @param {*} endHandle + * @returns {Array.<{x: number, y: number}>} + */ + + + + +function _findTextBoxAnchorPoints(startHandle, endHandle) { + var _getEllipseImageCoord = _getEllipseImageCoordinates(startHandle, endHandle), + left = _getEllipseImageCoord.left, + top = _getEllipseImageCoord.top, + width = _getEllipseImageCoord.width, + height = _getEllipseImageCoord.height; + + return [{ + // Top middle point of ellipse + x: left + width / 2, + y: top + }, { + // Left middle point of ellipse + x: left, + y: top + height / 2 + }, { + // Bottom middle point of ellipse + x: left + width / 2, + y: top + height + }, { + // Right middle point of ellipse + x: left + width, + y: top + height / 2 + }]; +} + +function _getUnit(modality, showHounsfieldUnits) { + return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : ''; +} +/** + * + * + * @param {*} context + * @param {*} isColorImage + * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV } + * @param {*} modality + * @param {*} hasPixelSpacing + * @param {*} [options={}] - { showMinMax, showHounsfieldUnits } + * @returns {string[]} + */ + + +function _createTextBoxContent(context, isColorImage) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + area = _ref.area, + mean = _ref.mean, + stdDev = _ref.stdDev, + min = _ref.min, + max = _ref.max, + meanStdDevSUV = _ref.meanStdDevSUV; + + var modality = arguments.length > 3 ? arguments[3] : undefined; + var hasPixelSpacing = arguments.length > 4 ? arguments[4] : undefined; + var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; + var showMinMax = options.showMinMax || false; + var textLines = []; // Don't display mean/standardDev for color images + + var otherLines = []; + + if (!isColorImage) { + var hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0; + + var unit = _getUnit(modality, options.showHounsfieldUnits); + + var meanString = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(mean.toFixed(2)), " ").concat(unit); + var stdDevString = "Std Dev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(stdDev.toFixed(2)), " ").concat(unit); // If this image has SUV values to display, concatenate them to the text line + + if (hasStandardUptakeValues) { + var SUVtext = ' SUV: '; + var meanSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(meanStdDevSUV.mean.toFixed(2))); + var stdDevSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(meanStdDevSUV.stdDev.toFixed(2))); + var targetStringLength = Math.floor(context.measureText("".concat(stdDevString, " ")).width); + + while (context.measureText(meanString).width < targetStringLength) { + meanString += ' '; + } + + otherLines.push("".concat(meanString).concat(meanSuvString)); + otherLines.push("".concat(stdDevString, " ").concat(stdDevSuvString)); + } else { + otherLines.push("".concat(meanString, " ").concat(stdDevString)); + } + + if (showMinMax) { + var minString = "Min: ".concat(min, " ").concat(unit); + var maxString = "Max: ".concat(max, " ").concat(unit); + + var _targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText("".concat(stdDevString, " ")).width) : Math.floor(context.measureText("".concat(meanString, " ")).width); + + while (context.measureText(minString).width < _targetStringLength) { + minString += ' '; + } + + otherLines.push("".concat(minString).concat(maxString)); + } + } + + textLines.push(_formatArea(area, hasPixelSpacing)); + otherLines.forEach(function (x) { + return textLines.push(x); + }); + return textLines; +} +/** + * + * + * @param {*} area + * @param {*} hasPixelSpacing + * @returns {string} The formatted label for showing area + */ + + +function _formatArea(area, hasPixelSpacing) { + // This uses Char code 178 for a superscript 2 + var suffix = hasPixelSpacing ? " mm".concat(String.fromCharCode(178)) : " px".concat(String.fromCharCode(178)); + return "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_14__["default"])(area.toFixed(2))).concat(suffix); +} +/** + * + * + * @param {*} image + * @param {*} element + * @param {*} handles + * @param {*} modality + * @param {*} pixelSpacing + * @returns {Object} The Stats object + */ + + +function _calculateStats(image, element, handles, modality, pixelSpacing) { + // Retrieve the bounds of the ellipse in image coordinates + var ellipseCoordinates = _getEllipseImageCoordinates(handles.start, handles.end); // Retrieve the array of pixels that the ellipse bounds cover + + + var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getPixels(element, ellipseCoordinates.left, ellipseCoordinates.top, ellipseCoordinates.width, ellipseCoordinates.height); // Calculate the mean & standard deviation from the pixels and the ellipse details. + + var ellipseMeanStdDev = Object(_util_ellipse_index_js__WEBPACK_IMPORTED_MODULE_12__["calculateEllipseStatistics"])(pixels, ellipseCoordinates); + var meanStdDevSUV; + + if (modality === 'PT') { + meanStdDevSUV = { + mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, ellipseMeanStdDev.mean, true) || 0, + stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, ellipseMeanStdDev.stdDev, true) || 0 + }; + } // Calculate the image area from the ellipse dimensions and pixel spacing + + + var area = Math.PI * (ellipseCoordinates.width * (pixelSpacing.colPixelSpacing || 1) / 2) * (ellipseCoordinates.height * (pixelSpacing.rowPixelSpacing || 1) / 2); + return { + area: area || 0, + count: ellipseMeanStdDev.count || 0, + mean: ellipseMeanStdDev.mean || 0, + variance: ellipseMeanStdDev.variance || 0, + stdDev: ellipseMeanStdDev.stdDev || 0, + min: ellipseMeanStdDev.min || 0, + max: ellipseMeanStdDev.max || 0, + meanStdDevSUV: meanStdDevSUV + }; +} +/** + * Retrieve the bounds of the ellipse in image coordinates + * + * @param {*} startHandle + * @param {*} endHandle + * @returns {{ left: number, top: number, width: number, height: number }} + */ + + +function _getEllipseImageCoordinates(startHandle, endHandle) { + return { + left: Math.round(Math.min(startHandle.x, endHandle.x)), + top: Math.round(Math.min(startHandle.y, endHandle.y)), + width: Math.round(Math.abs(startHandle.x - endHandle.x)), + height: Math.round(Math.abs(startHandle.y - endHandle.y)) + }; +} + +/***/ }), + +/***/ "./tools/annotation/FreehandRoiTool.js": +/*!*********************************************!*\ + !*** ./tools/annotation/FreehandRoiTool.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FreehandRoiTool; }); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js"); +/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _util_clip_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../util/clip.js */ "./util/clip.js"); +/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../store/setToolCursor.js */ "./store/setToolCursor.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../util/freehand/index.js */ "./util/freehand/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../util/throttle */ "./util/throttle.js"); + + + + + + + + + + // State + + + + + + // Manipulators + + // Implementation Logic + + + + // Drawing + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_26__["getLogger"])('tools:annotation:FreehandRoiTool'); +var insertOrDelete = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].insertOrDelete, + freehandArea = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].freehandArea, + calculateFreehandStatistics = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].calculateFreehandStatistics, + freehandIntersect = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].freehandIntersect, + FreehandHandleData = _util_freehand_index_js__WEBPACK_IMPORTED_MODULE_25__["default"].FreehandHandleData; +/** + * @public + * @class FreehandRoiTool + * @memberof Tools.Annotation + * @classdesc Tool for drawing arbitrary polygonal regions of interest, and + * measuring the statistics of the enclosed pixels. + * @extends Tools.Base.BaseAnnotationTool + */ + +var FreehandRoiTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(FreehandRoiTool, _BaseAnnotationTool); + + function FreehandRoiTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, FreehandRoiTool); + + var defaultProps = { + name: 'FreehandRoi', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: defaultFreehandConfiguration(), + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_24__["freehandRoiCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_4___default()(FreehandRoiTool).call(this, props, defaultProps)); + _this.isMultiPartTool = true; + _this._drawing = false; + _this._dragging = false; + _this._modifying = false; // Create bound callback functions for private event loops + + _this._drawingMouseDownCallback = _this._drawingMouseDownCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingMouseMoveCallback = _this._drawingMouseMoveCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingMouseDragCallback = _this._drawingMouseDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingMouseUpCallback = _this._drawingMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingMouseDoubleClickCallback = _this._drawingMouseDoubleClickCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._editMouseUpCallback = _this._editMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._editMouseDragCallback = _this._editMouseDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingTouchStartCallback = _this._drawingTouchStartCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingTouchDragCallback = _this._drawingTouchDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._drawingDoubleTapClickCallback = _this._drawingDoubleTapClickCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this._editTouchDragCallback = _this._editTouchDragCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_5___default()(_this)); + _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_27__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(FreehandRoiTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image; + + if (!goodEventData) { + logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement")); + return; + } + + var measurementData = { + visible: true, + active: true, + invalidated: true, + color: undefined, + handles: { + points: [] + } + }; + measurementData.handles.textBox = { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + }; + return measurementData; + } + /** + * + * + * @param {*} element element + * @param {*} data data + * @param {*} coords coords + * @returns {Boolean} + */ + + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + var validParameters = data && data.handles && data.handles.points; + + if (!validParameters) { + throw new Error("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool")); + } + + if (!validParameters || data.visible === false) { + return false; + } + + var isPointNearTool = this._pointNearHandle(element, data, coords); + + if (isPointNearTool !== undefined) { + return true; + } + + return false; + } + /** + * @param {*} element + * @param {*} data + * @param {*} coords + * @returns {number} the distance in px from the provided coordinates to the + * closest rendered portion of the annotation. -1 if the distance cannot be + * calculated. + */ + + }, { + key: "distanceFromPoint", + value: function distanceFromPoint(element, data, coords) { + var distance = Infinity; + + for (var i = 0; i < data.handles.points.length; i++) { + var distanceI = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstoneMath.point.distance(data.handles.points[i], coords); + distance = Math.min(distance, distanceI); + } // If an error caused distance not to be calculated, return -1. + + + if (distance === Infinity) { + return -1; + } + + return distance; + } + /** + * @param {*} element + * @param {*} data + * @param {*} coords + * @returns {number} the distance in canvas units from the provided coordinates to the + * closest rendered portion of the annotation. -1 if the distance cannot be + * calculated. + */ + + }, { + key: "distanceFromPointCanvas", + value: function distanceFromPointCanvas(element, data, coords) { + var distance = Infinity; + + if (!data) { + return -1; + } + + var canvasCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.pixelToCanvas(element, coords); + var points = data.handles.points; + + for (var i = 0; i < points.length; i++) { + var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.pixelToCanvas(element, points[i]); + var distanceI = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstoneMath.point.distance(handleCanvas, canvasCoords); + distance = Math.min(distance, distanceI); + } // If an error caused distance not to be calculated, return -1. + + + if (distance === Infinity) { + return -1; + } + + return distance; + } + /** + * + * + * + * @param {Object} image image + * @param {Object} element element + * @param {Object} data data + * + * @returns {void} void + */ + + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + // Define variables for the area and mean/standard deviation + var meanStdDev, meanStdDevSUV; + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId); + var modality = seriesModule ? seriesModule.modality : null; + var points = data.handles.points; // If the data has been invalidated, and the tool is not currently active, + // We need to calculate it again. + // Retrieve the bounds of the ROI in image coordinates + + var bounds = { + left: points[0].x, + right: points[0].x, + bottom: points[0].y, + top: points[0].x + }; + + for (var i = 0; i < points.length; i++) { + bounds.left = Math.min(bounds.left, points[i].x); + bounds.right = Math.max(bounds.right, points[i].x); + bounds.bottom = Math.min(bounds.bottom, points[i].y); + bounds.top = Math.max(bounds.top, points[i].y); + } + + var polyBoundingBox = { + left: bounds.left, + top: bounds.bottom, + width: Math.abs(bounds.right - bounds.left), + height: Math.abs(bounds.top - bounds.bottom) + }; // Store the bounding box information for the text box + + data.polyBoundingBox = polyBoundingBox; // First, make sure this is not a color image, since no mean / standard + // Deviation will be calculated for color images. + + if (!image.color) { + // Retrieve the array of pixels that the ROI bounds cover + var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.getPixels(element, polyBoundingBox.left, polyBoundingBox.top, polyBoundingBox.width, polyBoundingBox.height); // Calculate the mean & standard deviation from the pixels and the object shape + + meanStdDev = calculateFreehandStatistics.call(this, pixels, polyBoundingBox, data.handles.points); + + if (modality === 'PT') { + // If the image is from a PET scan, use the DICOM tags to + // Calculate the SUV from the mean and standard deviation. + // Note that because we are using modality pixel values from getPixels, and + // The calculateSUV routine also rescales to modality pixel values, we are first + // Returning the values to storedPixel values before calcuating SUV with them. + // TODO: Clean this up? Should we add an option to not scale in calculateSUV? + meanStdDevSUV = { + mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_17__["default"])(image, (meanStdDev.mean - image.intercept) / image.slope), + stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_17__["default"])(image, (meanStdDev.stdDev - image.intercept) / image.slope) + }; + } // If the mean and standard deviation values are sane, store them for later retrieval + + + if (meanStdDev && !isNaN(meanStdDev.mean)) { + data.meanStdDev = meanStdDev; + data.meanStdDevSUV = meanStdDevSUV; + } + } // Retrieve the pixel spacing values, and if they are not + // Real non-zero values, set them to 1 + + + var columnPixelSpacing = image.columnPixelSpacing || 1; + var rowPixelSpacing = image.rowPixelSpacing || 1; + var scaling = columnPixelSpacing * rowPixelSpacing; + var area = freehandArea(data.handles.points, scaling); // If the area value is sane, store it for later retrieval + + if (!isNaN(area)) { + data.area = area; + } // Set the invalidated flag to false so that this data won't automatically be recalculated + + + data.invalidated = false; + } + /** + * + * + * @param {*} evt + * @returns {undefined} + */ + + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; // If we have no toolState for this element, return immediately as there is nothing to do + + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(evt.currentTarget, this.name); + + if (!toolState) { + return; + } + + var image = eventData.image, + element = eventData.element; + var config = this.configuration; + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId); + var modality = seriesModule ? seriesModule.modality : null; // We have tool data for this element - iterate over each one and draw it + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["getNewContext"])(eventData.canvasContext.canvas); + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_11__["default"].getToolWidth(); + + var _loop = function _loop(i) { + var data = toolState.data[i]; + + if (data.visible === false) { + return "continue"; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["draw"])(context, function (context) { + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_12__["default"].getColorIfActive(data); + var fillColor; + + if (data.active) { + if (data.handles.invalidHandlePlacement) { + color = config.invalidColor; + fillColor = config.invalidColor; + } else { + color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_12__["default"].getColorIfActive(data); + fillColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_12__["default"].getFillColor(); + } + } else { + fillColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_12__["default"].getToolColor(); + } + + if (data.handles.points.length) { + for (var j = 0; j < data.handles.points.length; j++) { + var lines = _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(data.handles.points[j].lines); + + var points = data.handles.points; + + if (j === points.length - 1 && !data.polyBoundingBox) { + // If it's still being actively drawn, keep the last line to + // The mouse location + lines.push(config.mouseLocation.handles.start); + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_19__["drawJoinedLines"])(context, element, data.handles.points[j], lines, { + color: color + }); + } + } // Draw handles + + + var options = { + color: color, + fill: fillColor + }; + + if (config.alwaysShowHandles || data.active && data.polyBoundingBox) { + // Render all handles + options.handleRadius = config.activeHandleRadius; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, data.handles.points, options); + } + } + + if (data.canComplete) { + // Draw large handle at the origin if can complete drawing + options.handleRadius = config.completeHandleRadius; + var handle = data.handles.points[0]; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, [handle], options); + } + } + + if (data.active && !data.polyBoundingBox) { + // Draw handle at origin and at mouse if actively drawing + options.handleRadius = config.activeHandleRadius; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, config.mouseLocation.handles, options); + } + + var firstHandle = data.handles.points[0]; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_21__["default"])(context, eventData, [firstHandle], options); + } + } // Update textbox stats + + + if (data.invalidated === true && !data.active) { + if (data.meanStdDev && data.meanStdDevSUV && data.area) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } // Only render text if polygon ROI has been completed and freehand 'shiftKey' mode was not used: + + + if (data.polyBoundingBox && !data.handles.textBox.freehand) { + // If the textbox has not been moved by the user, it should be displayed on the right-most + // Side of the tool. + if (!data.handles.textBox.hasMoved) { + // Find the rightmost side of the polyBoundingBox at its vertical center, and place the textbox here + // Note that this calculates it in image coordinates + data.handles.textBox.x = data.polyBoundingBox.left + data.polyBoundingBox.width; + data.handles.textBox.y = data.polyBoundingBox.top + data.polyBoundingBox.height / 2; + } + + var text = textBoxText.call(_this2, data); + Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_20__["default"])(context, element, data.handles.textBox, text, data.handles.points, textBoxAnchorPoints, color, lineWidth, 0, true); + } + }); + }; + + for (var i = 0; i < toolState.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + + function textBoxText(data) { + var meanStdDev = data.meanStdDev, + meanStdDevSUV = data.meanStdDevSUV, + area = data.area; // Define an array to store the rows of text for the textbox + + var textLines = []; // If the mean and standard deviation values are present, display them + + if (meanStdDev && meanStdDev.mean !== undefined) { + // If the modality is CT, add HU to denote Hounsfield Units + var moSuffix = ''; + + if (modality === 'CT') { + moSuffix = 'HU'; + } + + data.unit = moSuffix; // Create a line of text to display the mean and any units that were specified (i.e. HU) + + var meanText = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_18__["default"])(meanStdDev.mean.toFixed(2)), " ").concat(moSuffix); // Create a line of text to display the standard deviation and any units that were specified (i.e. HU) + + var stdDevText = "StdDev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_18__["default"])(meanStdDev.stdDev.toFixed(2)), " ").concat(moSuffix); // If this image has SUV values to display, concatenate them to the text line + + if (meanStdDevSUV && meanStdDevSUV.mean !== undefined) { + var SUVtext = ' SUV: '; + meanText += SUVtext + Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_18__["default"])(meanStdDevSUV.mean.toFixed(2)); + stdDevText += SUVtext + Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_18__["default"])(meanStdDevSUV.stdDev.toFixed(2)); + } // Add these text lines to the array to be displayed in the textbox + + + textLines.push(meanText); + textLines.push(stdDevText); + } // If the area is a sane value, display it + + + if (area) { + // Determine the area suffix based on the pixel spacing in the image. + // If pixel spacing is present, use millimeters. Otherwise, use pixels. + // This uses Char code 178 for a superscript 2 + var suffix = " mm".concat(String.fromCharCode(178)); + + if (!image.rowPixelSpacing || !image.columnPixelSpacing) { + suffix = " pixels".concat(String.fromCharCode(178)); + } // Create a line of text to display the area and its units + + + var areaText = "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_18__["default"])(area.toFixed(2))).concat(suffix); // Add this text line to the array to be displayed in the textbox + + textLines.push(areaText); + } + + return textLines; + } + + function textBoxAnchorPoints(handles) { + return handles; + } + } + }, { + key: "addNewMeasurement", + value: function addNewMeasurement(evt) { + var eventData = evt.detail; + + this._startDrawing(evt); + + this._addPoint(eventData); + + preventPropagation(evt); + } + }, { + key: "preMouseDownCallback", + value: function preMouseDownCallback(evt) { + var eventData = evt.detail; + + var nearby = this._pointNearHandleAllTools(eventData); + + if (eventData.event.ctrlKey) { + if (nearby !== undefined && nearby.handleNearby.hasBoundingBox) {// Ctrl + clicked textBox, do nothing but still consume event. + } else { + insertOrDelete.call(this, evt, nearby); + } + + preventPropagation(evt); + return true; + } + + return false; + } + }, { + key: "handleSelectedCallback", + value: function handleSelectedCallback(evt, toolData, handle) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + var element = evt.detail.element; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + + if (handle.hasBoundingBox) { + // Use default move handler. + Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_15__["moveHandleNearImagePoint"])(evt, this, toolData, handle, interactionType); + return; + } + + var config = this.configuration; + config.dragOrigin = { + x: handle.x, + y: handle.y + }; // Iterating over handles of all toolData instances to find the indices of the selected handle + + for (var toolIndex = 0; toolIndex < toolState.data.length; toolIndex++) { + var points = toolState.data[toolIndex].handles.points; + + for (var p = 0; p < points.length; p++) { + if (points[p] === handle) { + config.currentHandle = p; + config.currentTool = toolIndex; + } + } + } + + this._modifying = true; + + this._activateModify(element); // Interupt eventDispatchers + + + preventPropagation(evt); + } + /** + * Event handler for MOUSE_MOVE during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingMouseMoveCallback", + value: function _drawingMouseMoveCallback(evt) { + var eventData = evt.detail; + var currentPoints = eventData.currentPoints, + element = eventData.element; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var currentTool = config.currentTool; + var data = toolState.data[currentTool]; + var coords = currentPoints.canvas; // Set the mouseLocation handle + + this._getMouseLocation(eventData); + + this._checkInvalidHandleLocation(data, eventData); // Mouse move -> Polygon Mode + + + var handleNearby = this._pointNearHandle(element, data, coords); + + var points = data.handles.points; // If there is a handle nearby to snap to + // (and it's not the actual mouse handle) + + if (handleNearby !== undefined && !handleNearby.hasBoundingBox && handleNearby < points.length - 1) { + config.mouseLocation.handles.start.x = points[handleNearby].x; + config.mouseLocation.handles.start.y = points[handleNearby].y; + } // Force onImageRendered + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Event handler for MOUSE_DRAG during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingMouseDragCallback", + value: function _drawingMouseDragCallback(evt) { + if (!this.options.mouseButtonMask.includes(evt.detail.buttons)) { + return; + } + + this._drawingDrag(evt); + } + /** + * Event handler for TOUCH_DRAG during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingTouchDragCallback", + value: function _drawingTouchDragCallback(evt) { + this._drawingDrag(evt); + } + }, { + key: "_drawingDrag", + value: function _drawingDrag(evt) { + var eventData = evt.detail; + var element = eventData.element; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var currentTool = config.currentTool; + var data = toolState.data[currentTool]; // Set the mouseLocation handle + + this._getMouseLocation(eventData); + + this._checkInvalidHandleLocation(data, eventData); + + this._addPointPencilMode(eventData, data.handles.points); + + this._dragging = true; // Force onImageRendered + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Event handler for MOUSE_UP during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingMouseUpCallback", + value: function _drawingMouseUpCallback(evt) { + var element = evt.detail.element; + + if (!this._dragging) { + return; + } + + this._dragging = false; + var config = this.configuration; + var currentTool = config.currentTool; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var data = toolState.data[currentTool]; + + if (!freehandIntersect.end(data.handles.points) && data.canComplete) { + var lastHandlePlaced = config.currentHandle; + + this._endDrawing(element, lastHandlePlaced); + } + + preventPropagation(evt); + return; + } + /** + * Event handler for MOUSE_DOWN during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingMouseDownCallback", + value: function _drawingMouseDownCallback(evt) { + var eventData = evt.detail; + var buttons = eventData.buttons, + currentPoints = eventData.currentPoints, + element = eventData.element; + + if (!this.options.mouseButtonMask.includes(buttons)) { + return; + } + + var coords = currentPoints.canvas; + var config = this.configuration; + var currentTool = config.currentTool; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var data = toolState.data[currentTool]; + + var handleNearby = this._pointNearHandle(element, data, coords); + + if (!freehandIntersect.end(data.handles.points) && data.canComplete) { + var lastHandlePlaced = config.currentHandle; + + this._endDrawing(element, lastHandlePlaced); + } else if (handleNearby === undefined) { + this._addPoint(eventData); + } + + preventPropagation(evt); + return; + } + /** + * Event handler for TOUCH_START during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingTouchStartCallback", + value: function _drawingTouchStartCallback(evt) { + var eventData = evt.detail; + var currentPoints = eventData.currentPoints, + element = eventData.element; + var coords = currentPoints.canvas; + var config = this.configuration; + var currentTool = config.currentTool; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var data = toolState.data[currentTool]; + + var handleNearby = this._pointNearHandle(element, data, coords); + + if (!freehandIntersect.end(data.handles.points) && data.canComplete) { + var lastHandlePlaced = config.currentHandle; + + this._endDrawing(element, lastHandlePlaced); + } else if (handleNearby === undefined) { + this._addPoint(eventData); + } + + preventPropagation(evt); + return; + } + /** Ends the active drawing loop and completes the polygon. + * + * @public + * @param {Object} element - The element on which the roi is being drawn. + * @returns {null} + */ + + }, { + key: "completeDrawing", + value: function completeDrawing(element) { + if (!this._drawing) { + return; + } + + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var data = toolState.data[config.currentTool]; + + if (!freehandIntersect.end(data.handles.points) && data.handles.points.length >= 2) { + var lastHandlePlaced = config.currentHandle; + data.polyBoundingBox = {}; + + this._endDrawing(element, lastHandlePlaced); + } + } + /** + * Event handler for MOUSE_DOUBLE_CLICK during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingMouseDoubleClickCallback", + value: function _drawingMouseDoubleClickCallback(evt) { + var element = evt.detail.element; + this.completeDrawing(element); + preventPropagation(evt); + } + /** + * Event handler for DOUBLE_TAP during drawing event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_drawingDoubleTapClickCallback", + value: function _drawingDoubleTapClickCallback(evt) { + var element = evt.detail.element; + this.completeDrawing(element); + preventPropagation(evt); + } + /** + * Event handler for MOUSE_DRAG during handle drag event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_editMouseDragCallback", + value: function _editMouseDragCallback(evt) { + var eventData = evt.detail; + var element = eventData.element, + buttons = eventData.buttons; + + if (!this.options.mouseButtonMask.includes(buttons)) { + return; + } + + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var data = toolState.data[config.currentTool]; + var currentHandle = config.currentHandle; + var points = data.handles.points; + var handleIndex = -1; // Set the mouseLocation handle + + this._getMouseLocation(eventData); + + data.handles.invalidHandlePlacement = freehandIntersect.modify(points, currentHandle); + data.active = true; + data.highlight = true; + points[currentHandle].x = config.mouseLocation.handles.start.x; + points[currentHandle].y = config.mouseLocation.handles.start.y; + handleIndex = this._getPrevHandleIndex(currentHandle, points); + + if (currentHandle >= 0) { + var lastLineIndex = points[handleIndex].lines.length - 1; + var lastLine = points[handleIndex].lines[lastLineIndex]; + lastLine.x = config.mouseLocation.handles.start.x; + lastLine.y = config.mouseLocation.handles.start.y; + } // Update the image + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Event handler for TOUCH_DRAG during handle drag event loop. + * + * @event + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "_editTouchDragCallback", + value: function _editTouchDragCallback(evt) { + var eventData = evt.detail; + var element = eventData.element; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var data = toolState.data[config.currentTool]; + var currentHandle = config.currentHandle; + var points = data.handles.points; + var handleIndex = -1; // Set the mouseLocation handle + + this._getMouseLocation(eventData); + + data.handles.invalidHandlePlacement = freehandIntersect.modify(points, currentHandle); + data.active = true; + data.highlight = true; + points[currentHandle].x = config.mouseLocation.handles.start.x; + points[currentHandle].y = config.mouseLocation.handles.start.y; + handleIndex = this._getPrevHandleIndex(currentHandle, points); + + if (currentHandle >= 0) { + var lastLineIndex = points[handleIndex].lines.length - 1; + var lastLine = points[handleIndex].lines[lastLineIndex]; + lastLine.x = config.mouseLocation.handles.start.x; + lastLine.y = config.mouseLocation.handles.start.y; + } // Update the image + + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Returns the previous handle to the current one. + * @param {Number} currentHandle - the current handle index + * @param {Array} points - the handles Array of the freehand data + * @returns {Number} - The index of the previos handle + */ + + }, { + key: "_getPrevHandleIndex", + value: function _getPrevHandleIndex(currentHandle, points) { + if (currentHandle === 0) { + return points.length - 1; + } + + return currentHandle - 1; + } + /** + * Event handler for MOUSE_UP during handle drag event loop. + * + * @private + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_editMouseUpCallback", + value: function _editMouseUpCallback(evt) { + var eventData = evt.detail; + var element = eventData.element; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + + this._deactivateModify(element); + + this._dropHandle(eventData, toolState); + + this._endDrawing(element); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Places a handle of the freehand tool if the new location is valid. + * If the new location is invalid the handle snaps back to its previous position. + * + * @private + * @param {Object} eventData - Data object associated with the event. + * @param {Object} toolState - The data associated with the freehand tool. + * @modifies {toolState} + * @returns {undefined} + */ + + }, { + key: "_dropHandle", + value: function _dropHandle(eventData, toolState) { + var config = this.configuration; + var currentTool = config.currentTool; + var handles = toolState.data[currentTool].handles; + var points = handles.points; // Don't allow the line being modified to intersect other lines + + if (handles.invalidHandlePlacement) { + var currentHandle = config.currentHandle; + var currentHandleData = points[currentHandle]; + var previousHandleData; + + if (currentHandle === 0) { + var lastHandleID = points.length - 1; + previousHandleData = points[lastHandleID]; + } else { + previousHandleData = points[currentHandle - 1]; + } // Snap back to previous position + + + currentHandleData.x = config.dragOrigin.x; + currentHandleData.y = config.dragOrigin.y; + previousHandleData.lines[0] = currentHandleData; + handles.invalidHandlePlacement = false; + } + } + /** + * Begining of drawing loop when tool is active and a click event happens far + * from existing handles. + * + * @private + * @param {Object} evt - The event. + * @returns {undefined} + */ + + }, { + key: "_startDrawing", + value: function _startDrawing(evt) { + var eventData = evt.detail; + var measurementData = this.createNewMeasurement(eventData); + var element = eventData.element; + var config = this.configuration; + var interactionType; + + if (evt.type === _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DOWN_ACTIVATE) { + interactionType = 'Mouse'; + } else if (evt.type === _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_START_ACTIVE) { + interactionType = 'Touch'; + } + + this._activateDraw(element, interactionType); + + this._getMouseLocation(eventData); + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["addToolState"])(element, this.name, measurementData); + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + config.currentTool = toolState.data.length - 1; + this._activeDrawingToolReference = toolState.data[config.currentTool]; + } + /** + * Adds a point on mouse click in polygon mode. + * + * @private + * @param {Object} eventData - data object associated with an event. + * @returns {undefined} + */ + + }, { + key: "_addPoint", + value: function _addPoint(eventData) { + var currentPoints = eventData.currentPoints, + element = eventData.element; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); // Get the toolState from the last-drawn polygon + + var config = this.configuration; + var data = toolState.data[config.currentTool]; + + if (data.handles.invalidHandlePlacement) { + return; + } + + var newHandleData = new FreehandHandleData(currentPoints.image); // If this is not the first handle + + if (data.handles.points.length) { + // Add the line from the current handle to the new handle + data.handles.points[config.currentHandle - 1].lines.push(currentPoints.image); + } // Add the new handle + + + data.handles.points.push(newHandleData); // Increment the current handle value + + config.currentHandle += 1; // Force onImageRendered to fire + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + this.fireModifiedEvent(element, data); + } + /** + * If in pencilMode, check the mouse position is farther than the minimum + * distance between points, then add a point. + * + * @private + * @param {Object} eventData - Data object associated with an event. + * @param {Object} points - Data object associated with the tool. + * @returns {undefined} + */ + + }, { + key: "_addPointPencilMode", + value: function _addPointPencilMode(eventData, points) { + var _this3 = this; + + var config = this.configuration; + var element = eventData.element; + var mousePoint = config.mouseLocation.handles.start; + + var handleFurtherThanMinimumSpacing = function handleFurtherThanMinimumSpacing(handle) { + return _this3._isDistanceLargerThanSpacing(element, handle, mousePoint); + }; + + if (points.every(handleFurtherThanMinimumSpacing)) { + this._addPoint(eventData); + } + } + /** + * Ends the active drawing loop and completes the polygon. + * + * @private + * @param {Object} element - The element on which the roi is being drawn. + * @param {Object} handleNearby - the handle nearest to the mouse cursor. + * @returns {undefined} + */ + + }, { + key: "_endDrawing", + value: function _endDrawing(element, handleNearby) { + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var data = toolState.data[config.currentTool]; + data.active = false; + data.highlight = false; + data.handles.invalidHandlePlacement = false; // Connect the end handle to the origin handle + + if (handleNearby !== undefined) { + var points = data.handles.points; + points[config.currentHandle - 1].lines.push(points[0]); + } + + if (this._modifying) { + this._modifying = false; + data.invalidated = true; + } // Reset the current handle + + + config.currentHandle = 0; + config.currentTool = -1; + data.canComplete = false; + + if (this._drawing) { + this._deactivateDraw(element); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + this.fireModifiedEvent(element, data); + this.fireCompletedEvent(element, data); + } + /** + * Returns a handle of a particular tool if it is close to the mouse cursor + * + * @private + * @param {Object} element - The element on which the roi is being drawn. + * @param {Object} data Data object associated with the tool. + * @param {*} coords + * @returns {Number|Object|Boolean} + */ + + }, { + key: "_pointNearHandle", + value: function _pointNearHandle(element, data, coords) { + if (data.handles === undefined || data.handles.points === undefined) { + return; + } + + if (data.visible === false) { + return; + } + + for (var i = 0; i < data.handles.points.length; i++) { + var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.pixelToCanvas(element, data.handles.points[i]); + + if (_externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstoneMath.point.distance(handleCanvas, coords) < 6) { + return i; + } + } // Check to see if mouse in bounding box of textbox + + + if (data.handles.textBox) { + if (Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_16__["default"])(data.handles.textBox, coords)) { + return data.handles.textBox; + } + } + } + /** + * Returns a handle if it is close to the mouse cursor (all tools) + * + * @private + * @param {Object} eventData - data object associated with an event. + * @returns {Object} + */ + + }, { + key: "_pointNearHandleAllTools", + value: function _pointNearHandleAllTools(eventData) { + var currentPoints = eventData.currentPoints, + element = eventData.element; + var coords = currentPoints.canvas; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + + if (!toolState) { + return; + } + + var handleNearby; + + for (var toolIndex = 0; toolIndex < toolState.data.length; toolIndex++) { + handleNearby = this._pointNearHandle(element, toolState.data[toolIndex], coords); + + if (handleNearby !== undefined) { + return { + handleNearby: handleNearby, + toolIndex: toolIndex + }; + } + } + } + /** + * Gets the current mouse location and stores it in the configuration object. + * + * @private + * @param {Object} eventData The data assoicated with the event. + * @returns {undefined} + */ + + }, { + key: "_getMouseLocation", + value: function _getMouseLocation(eventData) { + var currentPoints = eventData.currentPoints, + image = eventData.image; // Set the mouseLocation handle + + var config = this.configuration; + config.mouseLocation.handles.start.x = currentPoints.image.x; + config.mouseLocation.handles.start.y = currentPoints.image.y; + Object(_util_clip_js__WEBPACK_IMPORTED_MODULE_22__["clipToBox"])(config.mouseLocation.handles.start, image); + } + /** + * Returns true if the proposed location of a new handle is invalid. + * + * @private + * @param {Object} data Data object associated with the tool. + * @param {Object} eventData The data assoicated with the event. + * @returns {Boolean} + */ + + }, { + key: "_checkInvalidHandleLocation", + value: function _checkInvalidHandleLocation(data, eventData) { + if (data.handles.points.length < 2) { + return true; + } + + var invalidHandlePlacement; + + if (this._dragging) { + invalidHandlePlacement = this._checkHandlesPencilMode(data, eventData); + } else { + invalidHandlePlacement = this._checkHandlesPolygonMode(data, eventData); + } + + data.handles.invalidHandlePlacement = invalidHandlePlacement; + } + /** + * Returns true if the proposed location of a new handle is invalid (in polygon mode). + * + * @private + * + * @param {Object} data - data object associated with the tool. + * @param {Object} eventData The data assoicated with the event. + * @returns {Boolean} + */ + + }, { + key: "_checkHandlesPolygonMode", + value: function _checkHandlesPolygonMode(data, eventData) { + var config = this.configuration; + var element = eventData.element; + var mousePoint = config.mouseLocation.handles.start; + var points = data.handles.points; + var invalidHandlePlacement = false; + data.canComplete = false; + + var mouseAtOriginHandle = this._isDistanceSmallerThanCompleteSpacingCanvas(element, points[0], mousePoint); + + if (mouseAtOriginHandle && !freehandIntersect.end(points) && points.length > 2) { + data.canComplete = true; + invalidHandlePlacement = false; + } else { + invalidHandlePlacement = freehandIntersect.newHandle(mousePoint, points); + } + + return invalidHandlePlacement; + } + /** + * Returns true if the proposed location of a new handle is invalid (in pencilMode). + * + * @private + * @param {Object} data - data object associated with the tool. + * @param {Object} eventData The data associated with the event. + * @returns {Boolean} + */ + + }, { + key: "_checkHandlesPencilMode", + value: function _checkHandlesPencilMode(data, eventData) { + var config = this.configuration; + var mousePoint = config.mouseLocation.handles.start; + var points = data.handles.points; + var invalidHandlePlacement = freehandIntersect.newHandle(mousePoint, points); + + if (invalidHandlePlacement === false) { + invalidHandlePlacement = this._invalidHandlePencilMode(data, eventData); + } + + return invalidHandlePlacement; + } + /** + * Returns true if the mouse position is far enough from previous points (in pencilMode). + * + * @private + * @param {Object} data - data object associated with the tool. + * @param {Object} eventData The data associated with the event. + * @returns {Boolean} + */ + + }, { + key: "_invalidHandlePencilMode", + value: function _invalidHandlePencilMode(data, eventData) { + var config = this.configuration; + var element = eventData.element; + var mousePoint = config.mouseLocation.handles.start; + var points = data.handles.points; + + var mouseAtOriginHandle = this._isDistanceSmallerThanCompleteSpacingCanvas(element, points[0], mousePoint); + + if (mouseAtOriginHandle) { + data.canComplete = true; + return false; + } + + data.canComplete = false; // Compare with all other handles appart from the last one + + for (var i = 1; i < points.length - 1; i++) { + if (this._isDistanceSmallerThanSpacing(element, points[i], mousePoint)) { + return true; + } + } + + return false; + } + /** + * Returns true if two points are closer than this.configuration.spacing. + * + * @private + * @param {Object} element The element on which the roi is being drawn. + * @param {Object} p1 The first point, in pixel space. + * @param {Object} p2 The second point, in pixel space. + * @returns {boolean} True if the distance is smaller than the + * allowed canvas spacing. + */ + + }, { + key: "_isDistanceSmallerThanCompleteSpacingCanvas", + value: function _isDistanceSmallerThanCompleteSpacingCanvas(element, p1, p2) { + var p1Canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.pixelToCanvas(element, p1); + var p2Canvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.pixelToCanvas(element, p2); + var completeHandleRadius; + + if (this._drawingInteractionType === 'Mouse') { + completeHandleRadius = this.configuration.completeHandleRadius; + } else if (this._drawingInteractionType === 'Touch') { + completeHandleRadius = this.configuration.completeHandleRadiusTouch; + } + + return this._compareDistanceToSpacing(element, p1Canvas, p2Canvas, '<', completeHandleRadius); + } + /** + * Returns true if two points are closer than this.configuration.spacing. + * + * @private + * @param {Object} element The element on which the roi is being drawn. + * @param {Object} p1 The first point, in pixel space. + * @param {Object} p2 The second point, in pixel space. + * @returns {boolean} True if the distance is smaller than the + * allowed canvas spacing. + */ + + }, { + key: "_isDistanceSmallerThanSpacing", + value: function _isDistanceSmallerThanSpacing(element, p1, p2) { + return this._compareDistanceToSpacing(element, p1, p2, '<'); + } + /** + * Returns true if two points are farther than this.configuration.spacing. + * + * @private + * @param {Object} element The element on which the roi is being drawn. + * @param {Object} p1 The first point, in pixel space. + * @param {Object} p2 The second point, in pixel space. + * @returns {boolean} True if the distance is smaller than the + * allowed canvas spacing. + */ + + }, { + key: "_isDistanceLargerThanSpacing", + value: function _isDistanceLargerThanSpacing(element, p1, p2) { + return this._compareDistanceToSpacing(element, p1, p2, '>'); + } + /** + * Compares the distance between two points to this.configuration.spacing. + * + * @private + * @param {Object} element The element on which the roi is being drawn. + * @param {Object} p1 The first point, in pixel space. + * @param {Object} p2 The second point, in pixel space. + * @param {string} comparison The comparison to make. + * @param {number} spacing The allowed canvas spacing + * @returns {boolean} True if the distance is smaller than the + * allowed canvas spacing. + */ + + }, { + key: "_compareDistanceToSpacing", + value: function _compareDistanceToSpacing(element, p1, p2) { + var comparison = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '>'; + var spacing = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.configuration.spacing; + + if (comparison === '>') { + return _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstoneMath.point.distance(p1, p2) > spacing; + } + + return _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstoneMath.point.distance(p1, p2) < spacing; + } + /** + * Adds drawing loop event listeners. + * + * @private + * @param {Object} element - The viewport element to add event listeners to. + * @param {string} interactionType - The interactionType used for the loop. + * @modifies {element} + * @returns {undefined} + */ + + }, { + key: "_activateDraw", + value: function _activateDraw(element) { + var interactionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Mouse'; + this._drawing = true; + this._drawingInteractionType = interactionType; + _store_index_js__WEBPACK_IMPORTED_MODULE_13__["state"].isMultiPartToolActive = true; + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_23__["hideToolCursor"])(this.element); // Polygonal Mode + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DOWN, this._drawingMouseDownCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_MOVE, this._drawingMouseMoveCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DOUBLE_CLICK, this._drawingMouseDoubleClickCallback); // Drag/Pencil Mode + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DRAG, this._drawingMouseDragCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback); // Touch + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_START, this._drawingMouseMoveCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_START, this._drawingTouchStartCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_DRAG, this._drawingTouchDragCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_END, this._drawingMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].DOUBLE_TAP, this._drawingDoubleTapClickCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Removes drawing loop event listeners. + * + * @private + * @param {Object} element - The viewport element to add event listeners to. + * @modifies {element} + * @returns {undefined} + */ + + }, { + key: "_deactivateDraw", + value: function _deactivateDraw(element) { + this._drawing = false; + _store_index_js__WEBPACK_IMPORTED_MODULE_13__["state"].isMultiPartToolActive = false; + this._activeDrawingToolReference = null; + this._drawingInteractionType = null; + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_23__["setToolCursor"])(this.element, this.svgCursor); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DOWN, this._drawingMouseDownCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_MOVE, this._drawingMouseMoveCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DOUBLE_CLICK, this._drawingMouseDoubleClickCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DRAG, this._drawingMouseDragCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback); // Touch + + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_START, this._drawingTouchStartCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_DRAG, this._drawingTouchDragCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_START, this._drawingMouseMoveCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_END, this._drawingMouseUpCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Adds modify loop event listeners. + * + * @private + * @param {Object} element - The viewport element to add event listeners to. + * @modifies {element} + * @returns {undefined} + */ + + }, { + key: "_activateModify", + value: function _activateModify(element) { + _store_index_js__WEBPACK_IMPORTED_MODULE_13__["state"].isToolLocked = true; + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._editMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DRAG, this._editMouseDragCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._editMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_END, this._editMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_DRAG, this._editTouchDragCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Removes modify loop event listeners. + * + * @private + * @param {Object} element - The viewport element to add event listeners to. + * @modifies {element} + * @returns {undefined} + */ + + }, { + key: "_deactivateModify", + value: function _deactivateModify(element) { + _store_index_js__WEBPACK_IMPORTED_MODULE_13__["state"].isToolLocked = false; + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._editMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_DRAG, this._editMouseDragCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._editMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_END, this._editMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].TOUCH_DRAG, this._editTouchDragCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + }, { + key: "passiveCallback", + value: function passiveCallback(element) { + this._closeToolIfDrawing(element); + } + }, { + key: "enabledCallback", + value: function enabledCallback(element) { + this._closeToolIfDrawing(element); + } + }, { + key: "disabledCallback", + value: function disabledCallback(element) { + this._closeToolIfDrawing(element); + } + }, { + key: "_closeToolIfDrawing", + value: function _closeToolIfDrawing(element) { + if (this._drawing) { + // Actively drawing but changed mode. + var config = this.configuration; + var lastHandlePlaced = config.currentHandle; + + this._endDrawing(element, lastHandlePlaced); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + } + /** + * Fire MEASUREMENT_MODIFIED event on provided element + * @param {any} element which freehand data has been modified + * @param {any} measurementData the measurment data + * @returns {void} + */ + + }, { + key: "fireModifiedEvent", + value: function fireModifiedEvent(element, measurementData) { + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MEASUREMENT_MODIFIED; + var eventData = { + toolName: this.name, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__["default"])(element, eventType, eventData); + } + }, { + key: "fireCompletedEvent", + value: function fireCompletedEvent(element, measurementData) { + var eventType = _events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MEASUREMENT_COMPLETED; + var eventData = { + toolName: this.name, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_14__["default"])(element, eventType, eventData); + } // =================================================================== + // Public Configuration API. . + // =================================================================== + + }, { + key: "cancelDrawing", + + /** + * Ends the active drawing loop and removes the polygon. + * + * @public + * @param {Object} element - The element on which the roi is being drawn. + * @returns {null} + */ + value: function cancelDrawing(element) { + if (!this._drawing) { + return; + } + + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, this.name); + var config = this.configuration; + var data = toolState.data[config.currentTool]; + data.active = false; + data.highlight = false; + data.handles.invalidHandlePlacement = false; // Reset the current handle + + config.currentHandle = 0; + config.currentTool = -1; + data.canComplete = false; + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["removeToolState"])(element, this.name, data); + + this._deactivateDraw(element); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * New image event handler. + * + * @public + * @param {Object} evt The event. + * @returns {null} + */ + + }, { + key: "newImageCallback", + value: function newImageCallback(evt) { + var config = this.configuration; + + if (!(this._drawing && this._activeDrawingToolReference)) { + return; + } // Actively drawing but scrolled to different image. + + + var element = evt.detail.element; + var data = this._activeDrawingToolReference; + data.active = false; + data.highlight = false; + data.handles.invalidHandlePlacement = false; // Connect the end handle to the origin handle + + var points = data.handles.points; + points[config.currentHandle - 1].lines.push(points[0]); // Reset the current handle + + config.currentHandle = 0; + config.currentTool = -1; + data.canComplete = false; + + this._deactivateDraw(element); + + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + }, { + key: "spacing", + get: function get() { + return this.configuration.spacing; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehand spacing to a value other than a number.'); + } + + this.configuration.spacing = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "activeHandleRadius", + get: function get() { + return this.configuration.activeHandleRadius; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehand activeHandleRadius to a value other than a number.'); + } + + this.configuration.activeHandleRadius = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "completeHandleRadius", + get: function get() { + return this.configuration.completeHandleRadius; + }, + set: function set(value) { + if (typeof value !== 'number') { + throw new Error('Attempting to set freehand completeHandleRadius to a value other than a number.'); + } + + this.configuration.completeHandleRadius = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "alwaysShowHandles", + get: function get() { + return this.configuration.alwaysShowHandles; + }, + set: function set(value) { + if (typeof value !== 'boolean') { + throw new Error('Attempting to set freehand alwaysShowHandles to a value other than a boolean.'); + } + + this.configuration.alwaysShowHandles = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element); + } + }, { + key: "invalidColor", + get: function get() { + return this.configuration.invalidColor; + }, + set: function set(value) { + /* + It'd be easy to check if the color was e.g. a valid rgba color. However + it'd be difficult to check if the color was a named CSS color without + bloating the library, so we don't. If the canvas can't intepret the color + it'll show up grey. + */ + this.configuration.invalidColor = value; + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element); + } + }]); + + return FreehandRoiTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_9__["default"]); + + + +function defaultFreehandConfiguration() { + return { + mouseLocation: { + handles: { + start: { + highlight: true, + active: true + } + } + }, + spacing: 1, + activeHandleRadius: 3, + completeHandleRadius: 6, + completeHandleRadiusTouch: 28, + alwaysShowHandles: false, + invalidColor: 'crimson', + currentHandle: 0, + currentTool: -1, + drawHandles: true + }; +} + +function preventPropagation(evt) { + evt.stopImmediatePropagation(); + evt.stopPropagation(); + evt.preventDefault(); +} + +/***/ }), + +/***/ "./tools/annotation/LengthTool.js": +/*!****************************************!*\ + !*** ./tools/annotation/LengthTool.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return LengthTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../util/lineSegDistance.js */ "./util/lineSegDistance.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/throttle */ "./util/throttle.js"); + + + + + + // State + + + + // Drawing + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_14__["getLogger"])('tools:annotation:LengthTool'); +/** + * @public + * @class LengthTool + * @memberof Tools.Annotation + * @classdesc Tool for measuring distances. + * @extends Tools.Base.BaseAnnotationTool + */ + +var LengthTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(LengthTool, _BaseAnnotationTool); + + function LengthTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, LengthTool); + + var defaultProps = { + name: 'Length', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__["lengthCursor"], + configuration: { + drawHandles: true + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(LengthTool).call(this, props, defaultProps)); + _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_16__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(LengthTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image; + + if (!goodEventData) { + logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement")); + return; + } + + var _eventData$currentPoi = eventData.currentPoints.image, + x = _eventData$currentPoi.x, + y = _eventData$currentPoi.y; + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + handles: { + start: { + x: x, + y: y, + highlight: true, + active: false + }, + end: { + x: x, + y: y, + highlight: true, + active: true + }, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + /** + * + * + * @param {*} element + * @param {*} data + * @param {*} coords + * @returns {Boolean} + */ + + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end; + var validParameters = hasStartAndEndHandles; + + if (!validParameters) { + logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool")); + return false; + } + + if (data.visible === false) { + return false; + } + + return Object(_util_lineSegDistance_js__WEBPACK_IMPORTED_MODULE_12__["default"])(element, data.handles.start, data.handles.end, coords) < 25; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_15__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Set rowPixelSpacing and columnPixelSpacing to 1 if they are undefined (or zero) + + + var dx = (data.handles.end.x - data.handles.start.x) * (colPixelSpacing || 1); + var dy = (data.handles.end.y - data.handles.start.y) * (rowPixelSpacing || 1); // Calculate the length, and create the text variable with the millimeters or pixels suffix + + var length = Math.sqrt(dx * dx + dy * dy); // Store the length inside the tool for outside access + + data.length = length; + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["getNewContext"])(eventData.canvasContext.canvas); + var image = eventData.image, + element = eventData.element; + + var _getPixelSpacing2 = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_15__["default"])(image), + rowPixelSpacing = _getPixelSpacing2.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing2.colPixelSpacing; + + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_7__["default"].getToolWidth(); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["draw"])(context, function (context) { + // Configurable shadow + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["setShadow"])(context, _this2.configuration); + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_8__["default"].getColorIfActive(data); // Draw the measurement line + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_9__["drawLine"])(context, element, data.handles.start, data.handles.end, { + color: color + }); // Draw the handles + + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + + if (_this2.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, eventData, data.handles, handleOptions); + } + + if (!data.handles.textBox.hasMoved) { + var coords = { + x: Math.max(data.handles.start.x, data.handles.end.x) + }; // Depending on which handle has the largest x-value, + // Set the y-value for the text box + + if (coords.x === data.handles.start.x) { + coords.y = data.handles.start.y; + } else { + coords.y = data.handles.end.y; + } + + data.handles.textBox.x = coords.x; + data.handles.textBox.y = coords.y; + } // Move the textbox slightly to the right and upwards + // So that it sits beside the length tool handle + + + var xOffset = 10; // Update textbox stats + + if (data.invalidated === true) { + if (data.length) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } + + var text = textBoxText(data, rowPixelSpacing, colPixelSpacing); + Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_10__["default"])(context, element, data.handles.textBox, text, data.handles, textBoxAnchorPoints, color, lineWidth, xOffset, true); + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + + function textBoxText(data, rowPixelSpacing, colPixelSpacing) { + // Set the length text suffix depending on whether or not pixelSpacing is available + var suffix = 'mm'; + + if (!rowPixelSpacing || !colPixelSpacing) { + suffix = 'pixels'; + } + + data.unit = suffix; + return "".concat(data.length.toFixed(2), " ").concat(suffix); + } + + function textBoxAnchorPoints(handles) { + var midpoint = { + x: (handles.start.x + handles.end.x) / 2, + y: (handles.start.y + handles.end.y) / 2 + }; + return [handles.start, midpoint, handles.end]; + } + } + }]); + + return LengthTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]); + + + +/***/ }), + +/***/ "./tools/annotation/ProbeTool.js": +/*!***************************************!*\ + !*** ./tools/annotation/ProbeTool.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProbeTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../stateManagement/textStyle.js */ "./stateManagement/textStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/getRGBPixels.js */ "./util/getRGBPixels.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_throttle__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../util/throttle */ "./util/throttle.js"); + + + + + + + // State + + + + // Drawing + + + + // Utilities + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_16__["getLogger"])('tools:annotation:ProbeTool'); +/** + * @public + * @class ProbeTool + * @memberof Tools.Annotation + * @classdesc Tool which provides a probe of the image data at the + * desired position. + * @extends Tools.Base.BaseAnnotationTool + */ + +var ProbeTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(ProbeTool, _BaseAnnotationTool); + + function ProbeTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ProbeTool); + + var defaultProps = { + name: 'Probe', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__["probeCursor"], + configuration: { + drawHandles: true + } + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(ProbeTool).call(this, props, defaultProps)); + _this.throttledUpdateCachedStats = Object(_util_throttle__WEBPACK_IMPORTED_MODULE_17__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ProbeTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image; + + if (!goodEventData) { + logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement")); + return; + } + + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + handles: { + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true + } + } + }; + } + /** + * + * + * @param {*} element + * @param {*} data + * @param {*} coords + * @returns {Boolean} + */ + + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + var hasEndHandle = data && data.handles && data.handles.end; + var validParameters = hasEndHandle; + + if (!validParameters) { + logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool")); + } + + if (!validParameters || data.visible === false) { + return false; + } + + var probeCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); + return _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.point.distance(probeCoords, coords) < 5; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var x = Math.round(data.handles.end.x); + var y = Math.round(data.handles.end.y); + var stats = {}; + + if (x >= 0 && y >= 0 && x < image.columns && y < image.rows) { + stats.x = x; + stats.y = y; + + if (image.color) { + stats.storedPixels = Object(_util_getRGBPixels_js__WEBPACK_IMPORTED_MODULE_13__["default"])(element, x, y, 1, 1); + } else { + stats.storedPixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getStoredPixels(element, x, y, 1, 1); + stats.sp = stats.storedPixels[0]; + stats.mo = stats.sp * image.slope + image.intercept; + stats.suv = Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_14__["default"])(image, stats.sp); + } + } + + data.cachedStats = stats; + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var eventData = evt.detail; + var handleRadius = this.configuration.handleRadius; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas); + var image = eventData.image, + element = eventData.element; + var fontHeight = _stateManagement_textStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getFontSize(); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) { + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data); + + if (_this2.configuration.drawHandles) { + // Draw the handles + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_12__["default"])(context, eventData, data.handles, { + handleRadius: handleRadius, + color: color + }); + } // Update textbox stats + + + if (data.invalidated === true) { + if (data.cachedStats) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } + + var text, str; + var _data$cachedStats = data.cachedStats, + x = _data$cachedStats.x, + y = _data$cachedStats.y, + storedPixels = _data$cachedStats.storedPixels, + sp = _data$cachedStats.sp, + mo = _data$cachedStats.mo, + suv = _data$cachedStats.suv; + + if (x >= 0 && y >= 0 && x < image.columns && y < image.rows) { + text = "".concat(x, ", ").concat(y); + + if (image.color) { + str = "R: ".concat(storedPixels[0], " G: ").concat(storedPixels[1], " B: ").concat(storedPixels[2]); + } else { + // Draw text + str = "SP: ".concat(sp, " MO: ").concat(parseFloat(mo.toFixed(3))); + + if (suv) { + str += " SUV: ".concat(parseFloat(suv.toFixed(3))); + } + } // Coords for text + + + var coords = { + // Translate the x/y away from the cursor + x: data.handles.end.x + 3, + y: data.handles.end.y - 3 + }; + var textCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(eventData.element, coords); + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, str, textCoords.x, textCoords.y + fontHeight + 5, color); + Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, text, textCoords.x, textCoords.y, color); + } + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + } + }]); + + return ProbeTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + + + +/***/ }), + +/***/ "./tools/annotation/RectangleRoiTool.js": +/*!**********************************************!*\ + !*** ./tools/annotation/RectangleRoiTool.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RectangleRoiTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../util/calculateSUV.js */ "./util/calculateSUV.js"); +/* harmony import */ var _util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../util/getROITextBoxCoords.js */ "./util/getROITextBoxCoords.js"); +/* harmony import */ var _util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./../../util/numbersWithCommas.js */ "./util/numbersWithCommas.js"); +/* harmony import */ var _util_throttle_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./../../util/throttle.js */ "./util/throttle.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); + + + + + + + // State + + + + // Drawing + + // Util + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_16__["getLogger"])('tools:annotation:RectangleRoiTool'); +/** + * @public + * @class RectangleRoiTool + * @memberof Tools.Annotation + * @classdesc Tool for drawing rectangular regions of interest, and measuring + * the statistics of the enclosed pixels. + * @extends Tools.Base.BaseAnnotationTool + */ + +var RectangleRoiTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(RectangleRoiTool, _BaseAnnotationTool); + + function RectangleRoiTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RectangleRoiTool); + + var defaultProps = { + name: 'RectangleRoi', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + drawHandles: true // showMinMax: false, + // showHounsfieldUnits: true + + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_15__["rectangleRoiCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(RectangleRoiTool).call(this, props, defaultProps)); + _this.throttledUpdateCachedStats = Object(_util_throttle_js__WEBPACK_IMPORTED_MODULE_14__["default"])(_this.updateCachedStats, 110); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(RectangleRoiTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var goodEventData = eventData && eventData.currentPoints && eventData.currentPoints.image; + + if (!goodEventData) { + logger.error("required eventData not supplied to tool ".concat(this.name, "'s createNewMeasurement")); + return; + } + + return { + visible: true, + active: true, + color: undefined, + invalidated: true, + handles: { + start: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: false + }, + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true + }, + initialRotation: eventData.viewport.rotation, + textBox: { + active: false, + hasMoved: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + } + } + }; + } + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords, interactionType) { + var hasStartAndEndHandles = data && data.handles && data.handles.start && data.handles.end; + var validParameters = hasStartAndEndHandles; + + if (!validParameters) { + logger.warn("invalid parameters supplied to tool ".concat(this.name, "'s pointNearTool")); + } + + if (!validParameters || data.visible === false) { + return false; + } + + var distance = interactionType === 'mouse' ? 15 : 25; + var startCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.start); + var endCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.pixelToCanvas(element, data.handles.end); + var rect = { + left: Math.min(startCanvas.x, endCanvas.x), + top: Math.min(startCanvas.y, endCanvas.y), + width: Math.abs(startCanvas.x - endCanvas.x), + height: Math.abs(startCanvas.y - endCanvas.y) + }; + var distanceToPoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstoneMath.rect.distanceToPoint(rect, coords); + return distanceToPoint < distance; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; + var modality = seriesModule.modality; + var pixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image); + + var stats = _calculateStats(image, element, data.handles, modality, pixelSpacing); + + data.cachedStats = stats; + data.invalidated = false; + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var _this2 = this; + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_7__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } + + var eventData = evt.detail; + var image = eventData.image, + element = eventData.element; + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_8__["default"].getToolWidth(); + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas); + + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_17__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; // Meta + + + var seriesModule = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.metaData.get('generalSeriesModule', image.imageId) || {}; // Pixel Spacing + + var modality = seriesModule.modality; + var hasPixelSpacing = rowPixelSpacing && colPixelSpacing; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) { + // If we have tool data for this element - iterate over each set and draw it + for (var i = 0; i < toolData.data.length; i++) { + var data = toolData.data[i]; + + if (data.visible === false) { + continue; + } // Configure + + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data); + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["setShadow"])(context, _this2.configuration); // Draw + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawRect"])(context, element, data.handles.start, data.handles.end, { + color: color + }, 'pixel', data.handles.initialRotation); + + if (_this2.configuration.drawHandles) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawHandles"])(context, eventData, data.handles, handleOptions); + } // Update textbox stats + + + if (data.invalidated === true) { + if (data.cachedStats) { + _this2.throttledUpdateCachedStats(image, element, data); + } else { + _this2.updateCachedStats(image, element, data); + } + } // Default to textbox on right side of ROI + + + if (!data.handles.textBox.hasMoved) { + var defaultCoords = Object(_util_getROITextBoxCoords_js__WEBPACK_IMPORTED_MODULE_12__["default"])(eventData.viewport, data.handles); + Object.assign(data.handles.textBox, defaultCoords); + } + + var textBoxAnchorPoints = function textBoxAnchorPoints(handles) { + return _findTextBoxAnchorPoints(handles.start, handles.end); + }; + + var textBoxContent = _createTextBoxContent(context, image.color, data.cachedStats, modality, hasPixelSpacing, _this2.configuration); + + data.unit = _getUnit(modality, _this2.configuration.showHounsfieldUnits); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["drawLinkedTextBox"])(context, element, data.handles.textBox, textBoxContent, data.handles, textBoxAnchorPoints, color, lineWidth, 10, true); + } + }); + } + }]); + + return RectangleRoiTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); +/** + * TODO: This is the same method (+ GetPixels) for the other ROIs + * TODO: The pixel filtering is the unique bit + * + * @param {*} startHandle + * @param {*} endHandle + * @returns {{ left: number, top: number, width: number, height: number}} + */ + + + + +function _getRectangleImageCoordinates(startHandle, endHandle) { + return { + left: Math.min(startHandle.x, endHandle.x), + top: Math.min(startHandle.y, endHandle.y), + width: Math.abs(startHandle.x - endHandle.x), + height: Math.abs(startHandle.y - endHandle.y) + }; +} +/** + * + * + * @param {*} image + * @param {*} element + * @param {*} handles + * @param {*} modality + * @param {*} pixelSpacing + * @returns {Object} The Stats object + */ + + +function _calculateStats(image, element, handles, modality, pixelSpacing) { + // Retrieve the bounds of the rectangle in image coordinates + var roiCoordinates = _getRectangleImageCoordinates(handles.start, handles.end); // Retrieve the array of pixels that the rectangle bounds cover + + + var pixels = _externalModules_js__WEBPACK_IMPORTED_MODULE_5__["default"].cornerstone.getPixels(element, roiCoordinates.left, roiCoordinates.top, roiCoordinates.width, roiCoordinates.height); // Calculate the mean & standard deviation from the pixels and the rectangle details + + var roiMeanStdDev = _calculateRectangleStats(pixels, roiCoordinates); + + var meanStdDevSUV; + + if (modality === 'PT') { + meanStdDevSUV = { + mean: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, roiMeanStdDev.mean, true) || 0, + stdDev: Object(_util_calculateSUV_js__WEBPACK_IMPORTED_MODULE_11__["default"])(image, roiMeanStdDev.stdDev, true) || 0 + }; + } // Calculate the image area from the rectangle dimensions and pixel spacing + + + var area = roiCoordinates.width * (pixelSpacing.colPixelSpacing || 1) * (roiCoordinates.height * (pixelSpacing.rowPixelSpacing || 1)); + return { + area: area || 0, + count: roiMeanStdDev.count || 0, + mean: roiMeanStdDev.mean || 0, + variance: roiMeanStdDev.variance || 0, + stdDev: roiMeanStdDev.stdDev || 0, + min: roiMeanStdDev.min || 0, + max: roiMeanStdDev.max || 0, + meanStdDevSUV: meanStdDevSUV + }; +} +/** + * + * + * @param {*} sp + * @param {*} rectangle + * @returns {{ count, number, mean: number, variance: number, stdDev: number, min: number, max: number }} + */ + + +function _calculateRectangleStats(sp, rectangle) { + var sum = 0; + var sumSquared = 0; + var count = 0; + var index = 0; + var min = sp ? sp[0] : null; + var max = sp ? sp[0] : null; + + for (var y = rectangle.top; y < rectangle.top + rectangle.height; y++) { + for (var x = rectangle.left; x < rectangle.left + rectangle.width; x++) { + sum += sp[index]; + sumSquared += sp[index] * sp[index]; + min = Math.min(min, sp[index]); + max = Math.max(max, sp[index]); + count++; // TODO: Wouldn't this just be sp.length? + + index++; + } + } + + if (count === 0) { + return { + count: count, + mean: 0.0, + variance: 0.0, + stdDev: 0.0, + min: 0.0, + max: 0.0 + }; + } + + var mean = sum / count; + var variance = sumSquared / count - mean * mean; + return { + count: count, + mean: mean, + variance: variance, + stdDev: Math.sqrt(variance), + min: min, + max: max + }; +} +/** + * + * + * @param {*} startHandle + * @param {*} endHandle + * @returns {Array.<{x: number, y: number}>} + */ + + +function _findTextBoxAnchorPoints(startHandle, endHandle) { + var _getRectangleImageCoo = _getRectangleImageCoordinates(startHandle, endHandle), + left = _getRectangleImageCoo.left, + top = _getRectangleImageCoo.top, + width = _getRectangleImageCoo.width, + height = _getRectangleImageCoo.height; + + return [{ + // Top middle point of rectangle + x: left + width / 2, + y: top + }, { + // Left middle point of rectangle + x: left, + y: top + height / 2 + }, { + // Bottom middle point of rectangle + x: left + width / 2, + y: top + height + }, { + // Right middle point of rectangle + x: left + width, + y: top + height / 2 + }]; +} +/** + * + * + * @param {*} area + * @param {*} hasPixelSpacing + * @returns {string} The formatted label for showing area + */ + + +function _formatArea(area, hasPixelSpacing) { + // This uses Char code 178 for a superscript 2 + var suffix = hasPixelSpacing ? " mm".concat(String.fromCharCode(178)) : " px".concat(String.fromCharCode(178)); + return "Area: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(area.toFixed(2))).concat(suffix); +} + +function _getUnit(modality, showHounsfieldUnits) { + return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : ''; +} +/** + * TODO: This is identical to EllipticalROI's same fn + * TODO: We may want to make this a utility for ROIs with these values? + * + * @param {*} context + * @param {*} isColorImage + * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV } + * @param {*} modality + * @param {*} hasPixelSpacing + * @param {*} [options={}] + * @returns {string[]} + */ + + +function _createTextBoxContent(context, isColorImage, _ref, modality, hasPixelSpacing) { + var area = _ref.area, + mean = _ref.mean, + stdDev = _ref.stdDev, + min = _ref.min, + max = _ref.max, + meanStdDevSUV = _ref.meanStdDevSUV; + var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; + var showMinMax = options.showMinMax || false; + var textLines = []; + var otherLines = []; + + if (!isColorImage) { + var hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0; + + var unit = _getUnit(modality, options.showHounsfieldUnits); + + var meanString = "Mean: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(mean.toFixed(2)), " ").concat(unit); + var stdDevString = "Std Dev: ".concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(stdDev.toFixed(2)), " ").concat(unit); // If this image has SUV values to display, concatenate them to the text line + + if (hasStandardUptakeValues) { + var SUVtext = ' SUV: '; + var meanSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(meanStdDevSUV.mean.toFixed(2))); + var stdDevSuvString = "".concat(SUVtext).concat(Object(_util_numbersWithCommas_js__WEBPACK_IMPORTED_MODULE_13__["default"])(meanStdDevSUV.stdDev.toFixed(2))); + var targetStringLength = Math.floor(context.measureText("".concat(stdDevString, " ")).width); + + while (context.measureText(meanString).width < targetStringLength) { + meanString += ' '; + } + + otherLines.push("".concat(meanString).concat(meanSuvString)); + otherLines.push("".concat(stdDevString, " ").concat(stdDevSuvString)); + } else { + otherLines.push("".concat(meanString, " ").concat(stdDevString)); + } + + if (showMinMax) { + var minString = "Min: ".concat(min, " ").concat(unit); + var maxString = "Max: ".concat(max, " ").concat(unit); + + var _targetStringLength = hasStandardUptakeValues ? Math.floor(context.measureText("".concat(stdDevString, " ")).width) : Math.floor(context.measureText("".concat(meanString, " ")).width); + + while (context.measureText(minString).width < _targetStringLength) { + minString += ' '; + } + + otherLines.push("".concat(minString).concat(maxString)); + } + } + + textLines.push(_formatArea(area, hasPixelSpacing)); + otherLines.forEach(function (x) { + return textLines.push(x); + }); + return textLines; +} + +/***/ }), + +/***/ "./tools/annotation/TextMarkerTool.js": +/*!********************************************!*\ + !*** ./tools/annotation/TextMarkerTool.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TextMarkerTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base/BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./../../drawing/drawTextBox.js */ "./drawing/drawTextBox.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../cursors/index.js */ "./tools/cursors/index.js"); + + + + + + + + + + + + + + +/** + * @public + * @class TextMarkerTool + * @memberof Tools.Annotation + * + * @classdesc Tool for annotating an image with text markers. + * @extends Tools.Base.BaseAnnotationTool + */ + +var TextMarkerTool = +/*#__PURE__*/ +function (_BaseAnnotationTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(TextMarkerTool, _BaseAnnotationTool); + + function TextMarkerTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, TextMarkerTool); + + var defaultProps = { + name: 'TextMarker', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + markers: [], + current: '', + ascending: true, + loop: false, + changeTextCallback: changeTextCallback + }, + svgCursor: _cursors_index_js__WEBPACK_IMPORTED_MODULE_13__["textMarkerCursor"] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(TextMarkerTool).call(this, props, defaultProps)); + _this.touchPressCallback = _this._changeText.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + _this.doubleClickCallback = _this._changeText.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(TextMarkerTool, [{ + key: "createNewMeasurement", + value: function createNewMeasurement(eventData) { + var config = this.configuration; + + if (!config.current) { + return; + } // Create the measurement data for this tool with the end handle activated + + + var measurementData = { + visible: true, + active: true, + text: config.current, + color: undefined, + handles: { + end: { + x: eventData.currentPoints.image.x, + y: eventData.currentPoints.image.y, + highlight: true, + active: true, + hasBoundingBox: true + } + } + }; // Create a rectangle representing the image + + var imageRect = { + left: 0, + top: 0, + width: eventData.image.width, + height: eventData.image.height + }; // Check if the current handle is outside the image, + // If it is, prevent the handle creation + + if (!_externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.point.insideRect(measurementData.handles.end, imageRect)) { + return; + } // Update the current marker for the next marker + + + var currentIndex = config.markers.indexOf(config.current); + var increment = config.ascending ? 1 : -1; + currentIndex += increment; + + if (currentIndex >= config.markers.length) { + currentIndex = config.loop ? 0 : -1; + } else if (currentIndex < 0) { + currentIndex = config.loop ? config.markers.length : -1; + } + + config.current = config.markers[currentIndex]; + return measurementData; + } + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + if (data.visible === false) { + return false; + } + + if (!data.handles.end.boundingBox) { + return; + } + + var distanceToPoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstoneMath.rect.distanceToPoint(data.handles.end.boundingBox, coords); + var insideBoundingBox = Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_8__["default"])(data.handles.end, coords); + return distanceToPoint < 10 || insideBoundingBox; + } + }, { + key: "updateCachedStats", + value: function updateCachedStats() {// Implementing to satisfy BaseAnnotationTool + } + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var eventData = evt.detail; + var config = this.configuration; // If we have no toolData for this element, return immediately as there is nothing to do + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__["getToolState"])(eventData.element, this.name); + + if (!toolData) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["getNewContext"])(eventData.canvasContext.canvas); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_9__["default"].getColorIfActive(data); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_10__["setShadow"])(context, config); + var textCoords = _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.pixelToCanvas(eventData.element, data.handles.end); + var options = { + centering: { + x: true, + y: true + } + }; + data.handles.end.boundingBox = Object(_drawing_drawTextBox_js__WEBPACK_IMPORTED_MODULE_11__["default"])(context, data.text, textCoords.x, textCoords.y - 10, color, options); + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } + } + }, { + key: "_changeText", + value: function _changeText(evt) { + var eventData = evt.detail; + var element = eventData.element, + currentPoints = eventData.currentPoints; + var data; + + function doneChangingTextCallback(data, updatedText, deleteTool) { + if (deleteTool === true) { + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__["removeToolState"])(element, this.name, data); + } else { + data.text = updatedText; + } + + data.active = false; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element); + } + + var config = this.configuration; + var coords = currentPoints.canvas; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_12__["getToolState"])(element, this.name); // Now check to see if there is a handle we can move + + if (!toolData) { + return; + } + + for (var i = 0; i < toolData.data.length; i++) { + data = toolData.data[i]; + + if (this.pointNearTool(element, data, coords)) { + data.active = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_7__["default"].cornerstone.updateImage(element); // Allow relabelling via a callback + + config.changeTextCallback(data, eventData, doneChangingTextCallback); + evt.stopImmediatePropagation(); + evt.preventDefault(); + evt.stopPropagation(); + return; + } + } + } + }]); + + return TextMarkerTool; +}(_base_BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); +/** + * This function is a callback to be overwriten in order to provide the wanted feature + * modal, overlay, popup or any kind of interaction with the user to be able to update + * the text marker label. + * + * @param {Object} data + * @param {Object} eventData + * @param {doneChangingTextCallback} doneChangingTextCallback + * @returns {void} + */ + + + + +var changeTextCallback = function changeTextCallback(data, eventData, doneChangingTextCallback) { + // eslint-disable-next-line no-alert + doneChangingTextCallback(data, prompt('Change your annotation:')); +}; +/** + * @callback doneChangingTextCallback + * @param {Object} data + * @param {string} text - The new text + */ + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/addNewMeasurement.js": +/*!*****************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/addNewMeasurement.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../events.js */ "./events.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../util/triggerEvent.js */ "./util/triggerEvent.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../util/getActiveTool */ "./util/getActiveTool.js"); +/* harmony import */ var _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/updatePerpendicularLineHandles.js */ "./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js"); + + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt, interactionType) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element, + image = eventData.image, + buttons = eventData.buttons; + var config = this.configuration; + + if (checkPixelSpacing(image)) { + return; + } + + var measurementData = this.createNewMeasurement(eventData); + + var doneCallback = function doneCallback() { + measurementData.active = false; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + }; // Associate this data with this imageId so we can render it and manipulate it + + + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["addToolState"])(element, this.name, measurementData); + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + var timestamp = new Date().getTime(); + var _measurementData$hand = measurementData.handles, + end = _measurementData$hand.end, + perpendicularStart = _measurementData$hand.perpendicularStart; + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__["moveNewHandle"])(eventData, this.name, measurementData, end, {}, interactionType, function () { + var handles = measurementData.handles, + longestDiameter = measurementData.longestDiameter, + shortestDiameter = measurementData.shortestDiameter; + var hasHandlesOutside = Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData, handles); + var longestDiameterSize = parseFloat(longestDiameter) || 0; + var shortestDiameterSize = parseFloat(shortestDiameter) || 0; + var isTooSmal = longestDiameterSize < 1 || shortestDiameterSize < 1; + var isTooFast = new Date().getTime() - timestamp < 150; + + if (hasHandlesOutside || isTooSmal || isTooFast) { + // Delete the measurement + measurementData.cancelled = true; + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, _this.name, measurementData); + } else { + // Set lesionMeasurementData Session + config.getMeasurementLocationCallback(measurementData, eventData, doneCallback); + } // Update perpendicular line and disconnect it from the long-line + + + Object(_utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_8__["default"])(eventData, measurementData); + perpendicularStart.locked = false; + measurementData.invalidated = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_6__["default"])(element, buttons, interactionType); + + if (activeTool instanceof _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_7__["default"]) { + activeTool.updateCachedStats(image, element, measurementData); + } + + var modifiedEventData = { + toolType: _this.name, + element: element, + measurementData: measurementData + }; + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].MEASUREMENT_MODIFIED, modifiedEventData); + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].MEASUREMENT_COMPLETED, modifiedEventData); + }); +}); + +var checkPixelSpacing = function checkPixelSpacing(image) { + var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.metaData.get('imagePlaneModule', image.imageId); + var rowPixelSpacing = image.rowPixelSpacing; + var colPixelSpacing = image.columnPixelSpacing; + + if (imagePlane) { + rowPixelSpacing = imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing; + colPixelSpacing = imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing; + } // LT-29 Disable Target Measurements when pixel spacing is not available + + + return !rowPixelSpacing || !colPixelSpacing; +}; + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/createNewMeasurement.js": +/*!********************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/createNewMeasurement.js ***! + \********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var getHandle = function getHandle(x, y, index) { + var extraAttributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + return Object.assign({ + x: x, + y: y, + index: index, + drawnIndependently: false, + allowedOutsideImage: false, + highlight: true, + active: false + }, extraAttributes); +}; + +/* harmony default export */ __webpack_exports__["default"] = (function (mouseEventData) { + var _mouseEventData$curre = mouseEventData.currentPoints.image, + x = _mouseEventData$curre.x, + y = _mouseEventData$curre.y; // Create the measurement data for this tool with the end handle activated + + var measurementData = { + toolType: this.name, + isCreating: true, + visible: true, + active: true, + invalidated: true, + handles: { + start: getHandle(x, y, 0), + end: getHandle(x, y, 1, { + active: true + }), + perpendicularStart: getHandle(x, y, 2, { + locked: true + }), + perpendicularEnd: getHandle(x, y, 3), + textBox: getHandle(x - 50, y - 70, null, { + highlight: false, + hasMoved: true, + active: false, + movesIndependently: false, + drawnIndependently: true, + allowedOutsideImage: true, + hasBoundingBox: true + }) + }, + longestDiameter: 0, + shortestDiameter: 0 + }; + return measurementData; +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/handleSelectedCallback.js": +/*!**********************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/handleSelectedCallback.js ***! + \**********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (evt, toolData, handle) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + + if (interactionType === 'touch') { + this.handleSelectedTouchCallback(evt); + } else { + this.handleSelectedMouseCallback(evt); + } +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/handleSelectedMouseCallback.js": +/*!***************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/handleSelectedMouseCallback.js ***! + \***************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../store/index.js */ "./store/index.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../../events.js */ "./events.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _moveHandle_moveHandle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./moveHandle/moveHandle.js */ "./tools/annotation/bidirectionalTool/moveHandle/moveHandle.js"); +/* harmony import */ var _invertHandles_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./invertHandles.js */ "./tools/annotation/bidirectionalTool/invertHandles.js"); +/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../store/setToolCursor.js */ "./store/setToolCursor.js"); + + +/* jshint -W083 */ + + + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element; + var data; + var distanceThreshold = _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].clickProximity; + + var handleDoneMove = function handleDoneMove(handle) { + data.invalidated = true; + + if (Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_5__["default"])(eventData, data.handles)) { + // Delete the measurement + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, _this.name, data); + } // Update the handles to keep selected state + + + if (handle) { + handle.moving = false; + handle.selected = true; + } + + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_10__["setToolCursor"])(_this.element, _this.svgCursor); + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].MOUSE_MOVE, _this._moveCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_START, _this._moveCallback); + }; + + var coords = eventData.startPoints.canvas; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } // Now check to see if there is a handle we can move + + + var _loop = function _loop(i) { + data = toolData.data[i]; + var handleParams = [element, data.handles, coords, distanceThreshold]; + var handle = _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"].apply(void 0, handleParams); + + if (handle) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].MOUSE_MOVE, _this._moveCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_START, _this._moveCallback); + data.active = true; + unselectAllHandles(data.handles); + handle.moving = true; // Invert handles if needed + + handle = Object(_invertHandles_js__WEBPACK_IMPORTED_MODULE_9__["default"])(eventData, data, handle); + /* Hide the cursor to improve precision while resizing the line or set to move + if dragging text box + */ + + if (!handle.hasBoundingBox) { + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_10__["hideToolCursor"])(_this.element); + } + + Object(_moveHandle_moveHandle_js__WEBPACK_IMPORTED_MODULE_8__["default"])(eventData, _this.name, data, handle, function () { + return handleDoneMove(handle); + }); + preventPropagation(evt); + return { + v: true + }; + } + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(_ret) === "object") return _ret.v; + } + + var getDoneMovingCallback = function getDoneMovingCallback(handles) { + return function () { + setHandlesMovingState(handles, false); + handleDoneMove(); + }; + }; + + for (var i = 0; i < toolData.data.length; i++) { + data = toolData.data[i]; + + if (this.pointNearTool(element, data, coords, 'mouse')) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].MOUSE_MOVE, this._moveCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_START, this._moveCallback); + data.active = true; + unselectAllHandles(data.handles); + setHandlesMovingState(data.handles, true); + var doneMovingCallback = getDoneMovingCallback(data.handles); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveAllHandles"])(eventData, this.name, data, null, { + deleteIfHandleOutsideImage: true, + preventHandleOutsideImage: false + }, 'mouse', doneMovingCallback); + preventPropagation(evt); + return true; + } + } +}); // Clear the selected state for the given handles object + +var unselectAllHandles = function unselectAllHandles(handles) { + var imageNeedsUpdate = false; + Object.keys(handles).forEach(function (handleKey) { + if (handleKey === 'textBox') { + return; + } + + handles[handleKey].selected = false; + imageNeedsUpdate = handles[handleKey].active || imageNeedsUpdate; + handles[handleKey].active = false; + }); + return imageNeedsUpdate; +}; + +var setHandlesMovingState = function setHandlesMovingState(handles, state) { + Object.keys(handles).forEach(function (handleKey) { + if (handleKey === 'textBox') { + return; + } + + handles[handleKey].moving = state; + }); +}; + +var preventPropagation = function preventPropagation(evt) { + evt.stopImmediatePropagation(); + evt.stopPropagation(); + evt.preventDefault(); +}; + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/handleSelectedTouchCallback.js": +/*!***************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/handleSelectedTouchCallback.js ***! + \***************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../store/index.js */ "./store/index.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../../events.js */ "./events.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../../manipulators/anyHandlesOutsideImage.js */ "./manipulators/anyHandlesOutsideImage.js"); +/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../../manipulators/index.js */ "./manipulators/index.js"); +/* harmony import */ var _moveHandle_touchMoveHandle_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./moveHandle/touchMoveHandle.js */ "./tools/annotation/bidirectionalTool/moveHandle/touchMoveHandle.js"); + + +/* jshint -W083 */ + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element; + var data; + var distanceThreshold = _store_index_js__WEBPACK_IMPORTED_MODULE_2__["state"].touchProximity; + + var handleDoneMove = function handleDoneMove(handle) { + data.invalidated = true; + + if (Object(_manipulators_anyHandlesOutsideImage_js__WEBPACK_IMPORTED_MODULE_5__["default"])(eventData, data.handles)) { + // Delete the measurement + Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["removeToolState"])(element, _this.name, data); + } // Update the handles to keep selected state + + + if (handle) { + handle.moving = false; + handle.selected = true; + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone.updateImage(element); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_DRAG, _this._moveCallback); + }; + + var coords = eventData.startPoints.canvas; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_4__["getToolState"])(evt.currentTarget, this.name); + + if (!toolData) { + return; + } // Now check to see if there is a handle we can move + + + var _loop = function _loop(i) { + data = toolData.data[i]; + var handleParams = [element, data.handles, coords, distanceThreshold]; + var handle = _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_6__["default"].apply(void 0, handleParams); + + if (handle) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_DRAG, _this._moveCallback); + data.active = true; + unselectAllHandles(data.handles); + handle.moving = true; + Object(_moveHandle_touchMoveHandle_js__WEBPACK_IMPORTED_MODULE_8__["default"])(eventData, _this.name, data, handle, function () { + return handleDoneMove(handle); + }); + preventPropagation(evt); + return { + v: true + }; + } + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(_ret) === "object") return _ret.v; + } + + var getDoneMovingCallback = function getDoneMovingCallback(handles) { + return function () { + setHandlesMovingState(handles, false); + handleDoneMove(); + }; + }; + + for (var i = 0; i < toolData.data.length; i++) { + data = toolData.data[i]; + + if (this.pointNearTool(element, data, coords, 'touch')) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_3__["default"].TOUCH_DRAG, this._moveCallback); + data.active = true; + unselectAllHandles(data.handles); + setHandlesMovingState(data.handles, true); + var doneMovingCallback = getDoneMovingCallback(data.handles); + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_7__["moveAllHandles"])(eventData, this.name, data, null, { + deleteIfHandleOutsideImage: true, + preventHandleOutsideImage: false + }, 'touch', doneMovingCallback); + preventPropagation(evt); + return true; + } + } +}); // Clear the selected state for the given handles object + +var unselectAllHandles = function unselectAllHandles(handles) { + var imageNeedsUpdate = false; + Object.keys(handles).forEach(function (handleKey) { + if (handleKey === 'textBox') { + return; + } + + handles[handleKey].selected = false; + imageNeedsUpdate = handles[handleKey].active || imageNeedsUpdate; + handles[handleKey].active = false; + }); + return imageNeedsUpdate; +}; + +var setHandlesMovingState = function setHandlesMovingState(handles, state) { + Object.keys(handles).forEach(function (handleKey) { + if (handleKey === 'textBox') { + return; + } + + handles[handleKey].moving = state; + }); +}; + +var preventPropagation = function preventPropagation(evt) { + evt.stopImmediatePropagation(); + evt.stopPropagation(); + evt.preventDefault(); +}; + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/invertHandles.js": +/*!*************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/invertHandles.js ***! + \*************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return invertHandles; }); +var swapAttribute = function swapAttribute(a, b, attribute) { + var originalA = a[attribute]; + var originalB = b[attribute]; + a[attribute] = originalB; + b[attribute] = originalA; +}; + +var swapHandles = function swapHandles(a, b) { + swapAttribute(a, b, 'x'); + swapAttribute(a, b, 'y'); + swapAttribute(a, b, 'moving'); + swapAttribute(a, b, 'hover'); + swapAttribute(a, b, 'active'); + swapAttribute(a, b, 'selected'); +}; + +function invertHandles(eventData, measurementData, handle) { + var _eventData$image = eventData.image, + rowPixelSpacing = _eventData$image.rowPixelSpacing, + columnPixelSpacing = _eventData$image.columnPixelSpacing; + var handles = measurementData.handles; + var start = handles.start, + end = handles.end, + perpendicularStart = handles.perpendicularStart, + perpendicularEnd = handles.perpendicularEnd; // Calculate the long axis length + + var dx = (start.x - end.x) * (columnPixelSpacing || 1); + var dy = (start.y - end.y) * (rowPixelSpacing || 1); + var length = Math.sqrt(dx * dx + dy * dy); // Calculate the short axis length + + var wx = (perpendicularStart.x - perpendicularEnd.x) * (columnPixelSpacing || 1); + var wy = (perpendicularStart.y - perpendicularEnd.y) * (rowPixelSpacing || 1); + var width = Math.sqrt(wx * wx + wy * wy) || 0; + + if (width > length) { + swapHandles(start, end); + swapHandles(start, perpendicularStart); + swapHandles(end, perpendicularEnd); + return Object.values(handles).find(function (h) { + return h.moving === true; + }); + } + + return handle; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/mouseMoveCallback.js": +/*!*****************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/mouseMoveCallback.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../stateManagement/toolCoordinates.js */ "./stateManagement/toolCoordinates.js"); +/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); + + + + // Replaces the cornerstoneTools.handleActivator function by skiping the active handle comparison + +var handleActivator = function handleActivator(element, handles, canvasPoint) { + var distanceThreshold = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 6; + var nearbyHandle = Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element, handles, canvasPoint, distanceThreshold); + var handleActivatorChanged = false; + Object.keys(handles).forEach(function (handleKey) { + if (handleKey === 'textBox') { + return; + } + + var handle = handles[handleKey]; + var newActiveState = handle === nearbyHandle; + + if (handle.active !== newActiveState) { + handleActivatorChanged = true; + } + + handle.active = newActiveState; + }); + return handleActivatorChanged; +}; // MouseMoveCallback is used to hide handles when mouse is away + + +/* harmony default export */ __webpack_exports__["default"] = (function (event) { + var _this = this; + + var eventData = event.detail; + var element = eventData.element; + _stateManagement_toolCoordinates_js__WEBPACK_IMPORTED_MODULE_1__["default"].setCoords(eventData); // If we have no tool data for this element, do nothing + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_3__["getToolState"])(element, this.name); + + if (!toolData) { + return; + } // We have tool data, search through all data and see if we can activate a handle + + + var imageNeedsUpdate = false; + + var _loop = function _loop(i) { + // Get the cursor position in canvas coordinates + var coords = eventData.currentPoints.canvas; + var data = toolData.data[i]; + var handleActivatorChanged = handleActivator(element, data.handles, coords); + Object.keys(data.handles).forEach(function (handleKey) { + if (handleKey === 'textBox') { + return; + } + + var handle = data.handles[handleKey]; + handle.hover = handle.active; + }); + + if (handleActivatorChanged) { + imageNeedsUpdate = true; + } + + var nearTool = _this.pointNearTool(element, data, coords, 'mouse'); + + var nearToolAndInactive = nearTool && !data.active; + var notNearToolAndActive = !nearTool && data.active; + + if (nearToolAndInactive || notNearToolAndActive) { + data.active = !data.active; + imageNeedsUpdate = true; + } + }; + + for (var i = 0; i < toolData.data.length; i++) { + _loop(i); + } // Handle activation status changed, redraw the image + + + if (imageNeedsUpdate === true) { + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + } +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js": +/*!**********************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js ***! + \**********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getBaseData; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getDistanceWithPixelSpacing.js */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js"); + + + +function createLine(startPoint, endPoint) { + return { + start: startPoint, + end: endPoint + }; +} +/** + * Extract and group the base data to be used on bidirectional tool lines + * moving. + * + * @param {*} measurementData Data from current bidirectional tool measurement + * @param {*} eventData Data object associated with the event + * @param {*} fixedPoint Point that is not being moved in line + * + * @returns {*} Grouped that needed for lines moving + */ + + +function getBaseData(measurementData, eventData, fixedPoint) { + var lineSegment = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment; + var _measurementData$hand = measurementData.handles, + start = _measurementData$hand.start, + end = _measurementData$hand.end, + perpendicularStart = _measurementData$hand.perpendicularStart, + perpendicularEnd = _measurementData$hand.perpendicularEnd; + var _eventData$image = eventData.image, + _eventData$image$colu = _eventData$image.columnPixelSpacing, + columnPixelSpacing = _eventData$image$colu === void 0 ? 1 : _eventData$image$colu, + _eventData$image$rowP = _eventData$image.rowPixelSpacing, + rowPixelSpacing = _eventData$image$rowP === void 0 ? 1 : _eventData$image$rowP; + var longLine = createLine(start, end); + var perpendicularLine = createLine(perpendicularStart, perpendicularEnd); + var intersection = lineSegment.intersectLine(longLine, perpendicularLine); + var distanceToFixed = Object(_utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, fixedPoint, intersection); + return { + columnPixelSpacing: columnPixelSpacing, + // Width that a pixel represents in mm + rowPixelSpacing: rowPixelSpacing, + // Height that a pixel represents in mm + start: start, + // Start point of the long line + end: end, + // End point of the long line + perpendicularStart: perpendicularStart, + // Start point of the perpendicular line + perpendicularEnd: perpendicularEnd, + // End point of the perpendicular line + longLine: longLine, + // Long line object containing the start and end points + intersection: intersection, + // Intersection point between long and perpendicular lines + distanceToFixed: distanceToFixed, + // Distance from intersection to the fixed point + fixedPoint: fixedPoint // Opposite point from the handle that is being moved + + }; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/moveHandle.js": +/*!*********************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/moveHandle.js ***! + \*********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../store/index.js */ "./store/index.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../../../events.js */ "./events.js"); +/* harmony import */ var _setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./setHandlesPosition.js */ "./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../util/getActiveTool */ "./util/getActiveTool.js"); +/* harmony import */ var _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js"); + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (mouseEventData, toolType, data, handle, doneMovingCallback, preventHandleOutsideImage) { + var element = mouseEventData.element, + image = mouseEventData.image, + buttons = mouseEventData.buttons; + var distanceFromTool = { + x: handle.x - mouseEventData.currentPoints.image.x, + y: handle.y - mouseEventData.currentPoints.image.y + }; + + var _dragCallback = function _dragCallback(event) { + var eventData = event.detail; + handle.hasMoved = true; + + if (handle.index === undefined || handle.index === null) { + handle.x = eventData.currentPoints.image.x + distanceFromTool.x; + handle.y = eventData.currentPoints.image.y + distanceFromTool.y; + } else { + Object(_setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(handle, eventData, data, distanceFromTool); + } + + if (preventHandleOutsideImage) { + handle.x = Math.max(handle.x, 0); + handle.x = Math.min(handle.x, eventData.image.width); + handle.y = Math.max(handle.y, 0); + handle.y = Math.min(handle.y, eventData.image.height); + } + + data.invalidated = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__["default"])(element, buttons, 'mouse'); + + if (activeTool instanceof _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__["default"]) { + activeTool.updateCachedStats(image, element, data); + } + + var modifiedEventData = { + toolType: toolType, + element: element, + measurementData: data + }; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.triggerEvent(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MEASUREMENT_MODIFIED, modifiedEventData); + }; + + handle.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = true; + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_DRAG, _dragCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, _dragCallback); + var currentImage = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getImage(element); + + var imageRenderedHandler = function imageRenderedHandler() { + var newImage = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getImage(element); // Check if the rendered image changed during measurement modifying and stop it if so + + if (newImage.imageId !== currentImage.imageId) { + interactionEndCallback(); + } + }; // Bind the event listener for image rendering + + + element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_RENDERED, imageRenderedHandler); + + var interactionEndCallback = function interactionEndCallback() { + handle.active = false; + _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = false; + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.EVENTS.IMAGE_RENDERED, imageRenderedHandler); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_DRAG, _dragCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_UP, interactionEndCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_CLICK, interactionEndCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, _dragCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG_END, interactionEndCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TAP, interactionEndCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + + if (typeof doneMovingCallback === 'function') { + doneMovingCallback(); + } + }; + + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_UP, interactionEndCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MOUSE_CLICK, interactionEndCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG_END, interactionEndCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TAP, interactionEndCallback); +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/moveLongLine.js": +/*!************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/moveLongLine.js ***! + \************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return moveLongLine; }); +/* harmony import */ var _utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/getDistanceWithPixelSpacing.js */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js"); +/* harmony import */ var _getBaseData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../getBaseData.js */ "./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js"); +/* harmony import */ var _updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updatePerpendicularLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/updatePerpendicularLine.js"); + + + +/** + * Move the long line updating the perpendicular line handles position. + * + * @param {*} proposedPoint Point that was moved in bidirectional tool + * @param {*} measurementData Data from current bidirectional tool measurement + * @param {*} eventData Data object associated with the event + * @param {*} fixedPoint Point that is not being moved in long line + * + * @returns {boolean} True if perpendicular handles were updated, false if not + */ + +function moveLongLine(proposedPoint, measurementData, eventData, fixedPoint) { + var baseData = Object(_getBaseData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(measurementData, eventData, fixedPoint); + var columnPixelSpacing = baseData.columnPixelSpacing, + rowPixelSpacing = baseData.rowPixelSpacing, + distanceToFixed = baseData.distanceToFixed; // Calculate the length of the new line, considering the proposed point + + var newLineLength = Object(_utils_getDistanceWithPixelSpacing_js__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, fixedPoint, proposedPoint); // Stop here if the handle tries to move before the intersection point + + if (newLineLength <= distanceToFixed) { + return false; + } // Calculate the new intersection point + + + var distanceRatio = distanceToFixed / newLineLength; + var newIntersection = { + x: fixedPoint.x + (proposedPoint.x - fixedPoint.x) * distanceRatio, + y: fixedPoint.y + (proposedPoint.y - fixedPoint.y) * distanceRatio + }; // Calculate and the new position of the perpendicular handles + + var newLine = Object(_updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__["default"])(baseData, newIntersection); // Update the perpendicular line handles + + measurementData.handles.perpendicularStart.x = newLine.start.x; + measurementData.handles.perpendicularStart.y = newLine.start.y; + measurementData.handles.perpendicularEnd.x = newLine.end.x; + measurementData.handles.perpendicularEnd.y = newLine.end.y; + return true; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/updatePerpendicularLine.js": +/*!***********************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/updatePerpendicularLine.js ***! + \***********************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return updatePerpendicularLine; }); +/* harmony import */ var _utils_getLineVector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/getLineVector */ "./tools/annotation/bidirectionalTool/utils/getLineVector.js"); +/* harmony import */ var _utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/getDistanceWithPixelSpacing */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js"); + + +/** + * Returns the updated line object that will be used to change the position of + * the perpendicular line handles. + * + * @param {*} baseData Base data for bidirectional line moving + * @param {*} mid Middle point considering the proposed point + * + * @returns {*} Returns a line object with the updated handles position + */ + +function updatePerpendicularLine(baseData, mid) { + var columnPixelSpacing = baseData.columnPixelSpacing, + rowPixelSpacing = baseData.rowPixelSpacing, + start = baseData.start, + perpendicularStart = baseData.perpendicularStart, + perpendicularEnd = baseData.perpendicularEnd, + intersection = baseData.intersection, + fixedPoint = baseData.fixedPoint; // Get the original distance from perpendicular start handle to intersection + + var distancePS = Object(_utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, perpendicularStart, intersection); // Get the original distance from perpendicular end handle to intersection + + var distancePE = Object(_utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, perpendicularEnd, intersection); // Inclination of the perpendicular line + + var vector = Object(_utils_getLineVector__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, fixedPoint, mid); // Define the multiplier + + var multiplier = fixedPoint === start ? 1 : -1; + var rowMultiplier = multiplier * rowPixelSpacing; + var columnMultiplier = multiplier * columnPixelSpacing; // Calculate and return the new position of the perpendicular handles + + return { + start: { + x: mid.x + vector.y * distancePS * rowMultiplier, + y: mid.y + vector.x * distancePS * columnMultiplier * -1 + }, + end: { + x: mid.x + vector.y * distancePE * rowMultiplier * -1, + y: mid.y + vector.x * distancePE * columnMultiplier + } + }; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js": +/*!*******************************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js ***! + \*******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getDirectionMultiplier; }); +/* harmony import */ var _isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isPerpendicularEndFixed.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js"); + +/** + * Return the direction multiplier based on the perpendicular fixed point and + * the end point. + * + * @param {*} fixedPoint Point that is not being moved in perpendicular line + * @param {*} perpendicularEnd The end point of the perpencular line + * + * @returns {number} Returns -1 if end point is not being moved or 1 if it is + */ + +function getDirectionMultiplier(fixedPoint, perpendicularEnd) { + return Object(_isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__["default"])(fixedPoint, perpendicularEnd) ? -1 : 1; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getHelperLine.js": +/*!**********************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getHelperLine.js ***! + \**********************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getHelperLine; }); +/* harmony import */ var _getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDirectionMultiplier */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js"); + +/** + * Creates a helper line with the same inclination as the perpendicular line + * but having the start point as the proposed point. + * This line will start in the proposed point and will grow in the long line + * direction trying to cross it to enable finding the intersection point + * between the long line and this new perpendicular line. + * + * @param {*} baseData Base data for bidirectional line moving + * @param {*} proposedPoint Point that was moved in bidirectional tool + * @param {*} vector Vector with the perpendicular line inclination + * + * @returns {*} Returns the helper line containing the start and end points + */ + +function getHelperLine(baseData, proposedPoint, vector) { + var columnPixelSpacing = baseData.columnPixelSpacing, + rowPixelSpacing = baseData.rowPixelSpacing, + perpendicularEnd = baseData.perpendicularEnd, + fixedPoint = baseData.fixedPoint; // Create a helper line to find the intesection point in the long line + + var highNumber = Number.MAX_SAFE_INTEGER; // Get the multiplier + + var multiplier = Object(_getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_0__["default"])(fixedPoint, perpendicularEnd) * highNumber; + return { + start: proposedPoint, + end: { + x: proposedPoint.x + vector.y * rowPixelSpacing * multiplier, + y: proposedPoint.y + vector.x * columnPixelSpacing * multiplier * -1 + } + }; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getMovingPoint.js": +/*!***********************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getMovingPoint.js ***! + \***********************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getMovingPoint; }); +/* harmony import */ var _isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isPerpendicularEndFixed.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js"); + +/** + * Utility function to return the point that is the opposite of the fixed + * point (the point not being moved in the bidirectional tool's perpendicular + * line). + * + * @param {*} fixedPoint Point that is not being moved in perpendicular line + * @param {*} perpendicularStart The start point of the perpencular line + * @param {*} perpendicularEnd The end point of the perpencular line + * + * @returns {*} Point that is being moved in perpendicular line + */ + +function getMovingPoint(fixedPoint, perpendicularStart, perpendicularEnd) { + if (Object(_isPerpendicularEndFixed_js__WEBPACK_IMPORTED_MODULE_0__["default"])(fixedPoint, perpendicularEnd)) { + return perpendicularStart; + } + + return perpendicularEnd; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js": +/*!********************************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/isPerpendicularEndFixed.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isPerpendicularEndFixed; }); +/** + * Returns true if the end point is the point that is not being moved in the + * perpendicular line. + * + * @param {*} fixedPoint Point that is not being moved in perpendicular line + * @param {*} perpendicularEnd The end point of the perpencular line + * + * @returns {boolean} Returns true if the fixed point is the end point + */ +function isPerpendicularEndFixed(fixedPoint, perpendicularEnd) { + return fixedPoint === perpendicularEnd; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/lineHasLength.js": +/*!**********************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/lineHasLength.js ***! + \**********************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return lineHasLength; }); +/* harmony import */ var _utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/getDistanceWithPixelSpacing */ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js"); + +/** + * Returns true if the given line object has its length different from zero, + * considering the column and row pixel spacings. + * + * @param {number} columnPixelSpacing Width that a pixel represents in mm + * @param {number} rowPixelSpacing Height that a pixel represents in mm + * @param {*} line Line object that will have its length calculated + * + * @returns {boolean} Returns true if line has any length + */ + +function lineHasLength(columnPixelSpacing, rowPixelSpacing, line) { + var lineLength = Object(_utils_getDistanceWithPixelSpacing__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, line.start, line.end); + return lineLength !== 0; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/movePerpendicularLine.js": +/*!******************************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/movePerpendicularLine.js ***! + \******************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return movePerpendicularLine; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _utils_getLineVector_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/getLineVector.js */ "./tools/annotation/bidirectionalTool/utils/getLineVector.js"); +/* harmony import */ var _getBaseData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../getBaseData.js */ "./tools/annotation/bidirectionalTool/moveHandle/getBaseData.js"); +/* harmony import */ var _lineHasLength_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lineHasLength.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/lineHasLength.js"); +/* harmony import */ var _getHelperLine_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getHelperLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getHelperLine.js"); +/* harmony import */ var _updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./updatePerpendicularLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/updatePerpendicularLine.js"); + + + + + + +/** + * Move the perpendicular line updating the opposite handle position. + * + * @param {*} proposedPoint Point that was moved in bidirectional tool + * @param {*} measurementData Data from current bidirectional tool measurement + * @param {*} eventData Data object associated with the event + * @param {*} fixedPoint Point that is not being moved in long line + * + * @returns {boolean} True if perpendicular handles were updated, false if not + */ + +function movePerpendicularLine(proposedPoint, measurementData, eventData, fixedPoint) { + var lineSegment = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment; + var baseData = Object(_getBaseData_js__WEBPACK_IMPORTED_MODULE_2__["default"])(measurementData, eventData, fixedPoint); + var columnPixelSpacing = baseData.columnPixelSpacing, + rowPixelSpacing = baseData.rowPixelSpacing, + start = baseData.start, + longLine = baseData.longLine, + intersection = baseData.intersection; // Stop here if the long line has no length + + if (!Object(_lineHasLength_js__WEBPACK_IMPORTED_MODULE_3__["default"])(columnPixelSpacing, rowPixelSpacing, longLine)) { + return false; + } // Inclination of the perpendicular line + + + var vector = Object(_utils_getLineVector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(columnPixelSpacing, rowPixelSpacing, start, intersection); // Get a helper line to calculate the intersection + + var helperLine = Object(_getHelperLine_js__WEBPACK_IMPORTED_MODULE_4__["default"])(baseData, proposedPoint, vector); // Find the new intersection in the long line + + var newIntersection = lineSegment.intersectLine(longLine, helperLine); // Stop the flow here if there's no intersection point between lines + + if (!newIntersection) { + return false; + } // Calculate and the new position of the perpendicular handles + + + var newLine = Object(_updatePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_5__["default"])(baseData, newIntersection, helperLine, vector); // Change the position of the perpendicular line handles + + measurementData.handles.perpendicularStart.x = newLine.start.x; + measurementData.handles.perpendicularStart.y = newLine.start.y; + measurementData.handles.perpendicularEnd.x = newLine.end.x; + measurementData.handles.perpendicularEnd.y = newLine.end.y; + return true; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/updatePerpendicularLine.js": +/*!********************************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/updatePerpendicularLine.js ***! + \********************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return updatePerpendicularLine; }); +/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../node_modules/@babel/runtime/helpers/defineProperty.js"); +/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDirectionMultiplier */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getDirectionMultiplier.js"); +/* harmony import */ var _getMovingPoint__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getMovingPoint */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/getMovingPoint.js"); + + + +/** + * Returns the updated line object that will be used to change the position of + * the perpendicular line handles. + * + * @param {*} baseData Base data for bidirectional line moving + * @param {*} mid Middle point considering the proposed point + * @param {*} helperLine Line based on proposed point that crosses long line + * @param {*} vector Vector with the perpendicular line inclination + * + * @returns {*} Returns a line object with the updated handles position + */ + +function updatePerpendicularLine(baseData, mid, helperLine, vector) { + var _ref; + + var columnPixelSpacing = baseData.columnPixelSpacing, + rowPixelSpacing = baseData.rowPixelSpacing, + fixedPoint = baseData.fixedPoint, + perpendicularStart = baseData.perpendicularStart, + perpendicularEnd = baseData.perpendicularEnd, + distanceToFixed = baseData.distanceToFixed; // Get the multiplier + + var multiplier = Object(_getDirectionMultiplier__WEBPACK_IMPORTED_MODULE_1__["default"])(fixedPoint, perpendicularEnd) * distanceToFixed; // Define the moving point + + var movingPoint = Object(_getMovingPoint__WEBPACK_IMPORTED_MODULE_2__["default"])(fixedPoint, perpendicularStart, perpendicularEnd); // Get the object keys for moving and fixed points + + var isMovingStart = movingPoint === perpendicularStart; + var movingKey = isMovingStart ? 'start' : 'end'; + var fixedKey = isMovingStart ? 'end' : 'start'; // Calculate and return the new position of the perpendicular handles + + return _ref = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_ref, movingKey, { + x: helperLine.start.x, + y: helperLine.start.y + }), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_ref, fixedKey, { + x: mid.x + vector.y * rowPixelSpacing * multiplier, + y: mid.y + vector.x * columnPixelSpacing * multiplier * -1 + }), _ref; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js": +/*!*****************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js ***! + \*****************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _moveLongLine_moveLongLine_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./moveLongLine/moveLongLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/moveLongLine/moveLongLine.js"); +/* harmony import */ var _movePerpendicularLine_movePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./movePerpendicularLine/movePerpendicularLine.js */ "./tools/annotation/bidirectionalTool/moveHandle/movePerpendicularLine/movePerpendicularLine.js"); + + + // Sets position of handles(start, end, perpendicularStart, perpendicularEnd) + +/* harmony default export */ __webpack_exports__["default"] = (function (handle, eventData, data, distanceFromTool) { + var movedPoint; + var outOfBounds; + var result; + var intersection; + var d1; + var d2; + var longLine = {}; + var perpendicularLine = {}; + var proposedPoint = { + x: eventData.currentPoints.image.x + distanceFromTool.x, + y: eventData.currentPoints.image.y + distanceFromTool.y + }; + + if (handle.index === 0) { + // If long-axis start point is moved + result = Object(_moveLongLine_moveLongLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(proposedPoint, data, eventData, data.handles.end); + + if (result) { + handle.x = proposedPoint.x; + handle.y = proposedPoint.y; + } else { + eventData.currentPoints.image.x = handle.x; + eventData.currentPoints.image.y = handle.y; + } + } else if (handle.index === 1) { + // If long-axis end point is moved + result = Object(_moveLongLine_moveLongLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(proposedPoint, data, eventData, data.handles.start); + + if (result) { + handle.x = proposedPoint.x; + handle.y = proposedPoint.y; + } else { + eventData.currentPoints.image.x = handle.x; + eventData.currentPoints.image.y = handle.y; + } + } else if (handle.index === 2) { + outOfBounds = false; // If perpendicular start point is moved + + longLine.start = { + x: data.handles.start.x, + y: data.handles.start.y + }; + longLine.end = { + x: data.handles.end.x, + y: data.handles.end.y + }; + perpendicularLine.start = { + x: data.handles.perpendicularEnd.x, + y: data.handles.perpendicularEnd.y + }; + perpendicularLine.end = { + x: proposedPoint.x, + y: proposedPoint.y + }; + intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine); + + if (!intersection) { + perpendicularLine.end = { + x: data.handles.perpendicularStart.x, + y: data.handles.perpendicularStart.y + }; + intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine); + d1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.start); + d2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.end); + + if (!intersection || d1 < 3 || d2 < 3) { + outOfBounds = true; + } + } + + movedPoint = false; + + if (!outOfBounds) { + movedPoint = Object(_movePerpendicularLine_movePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__["default"])(proposedPoint, data, eventData, data.handles.perpendicularEnd); + + if (!movedPoint) { + eventData.currentPoints.image.x = data.handles.perpendicularStart.x; + eventData.currentPoints.image.y = data.handles.perpendicularStart.y; + } + } + } else if (handle.index === 3) { + outOfBounds = false; // If perpendicular end point is moved + + longLine.start = { + x: data.handles.start.x, + y: data.handles.start.y + }; + longLine.end = { + x: data.handles.end.x, + y: data.handles.end.y + }; + perpendicularLine.start = { + x: data.handles.perpendicularStart.x, + y: data.handles.perpendicularStart.y + }; + perpendicularLine.end = { + x: proposedPoint.x, + y: proposedPoint.y + }; + intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine); + + if (!intersection) { + perpendicularLine.end = { + x: data.handles.perpendicularEnd.x, + y: data.handles.perpendicularEnd.y + }; + intersection = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine); + d1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.start); + d2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(intersection, data.handles.end); + + if (!intersection || d1 < 3 || d2 < 3) { + outOfBounds = true; + } + } + + movedPoint = false; + + if (!outOfBounds) { + movedPoint = Object(_movePerpendicularLine_movePerpendicularLine_js__WEBPACK_IMPORTED_MODULE_2__["default"])(proposedPoint, data, eventData, data.handles.perpendicularStart); + + if (!movedPoint) { + eventData.currentPoints.image.x = data.handles.perpendicularEnd.x; + eventData.currentPoints.image.y = data.handles.perpendicularEnd.y; + } + } + } +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/moveHandle/touchMoveHandle.js": +/*!**************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/moveHandle/touchMoveHandle.js ***! + \**************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../store/index.js */ "./store/index.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../../../events.js */ "./events.js"); +/* harmony import */ var _setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./setHandlesPosition.js */ "./tools/annotation/bidirectionalTool/moveHandle/setHandlesPosition.js"); +/* harmony import */ var _util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../util/getActiveTool */ "./util/getActiveTool.js"); +/* harmony import */ var _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../base/BaseAnnotationTool */ "./tools/base/BaseAnnotationTool.js"); + + + + + + +var touchEndEvents = [_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_END, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG_END, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_PINCH, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_PRESS, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TAP]; +/* harmony default export */ __webpack_exports__["default"] = (function (mouseEventData, toolType, data, handle, doneMovingCallback, preventHandleOutsideImage) { + var element = mouseEventData.element, + image = mouseEventData.image, + buttons = mouseEventData.buttons; + var distanceFromTool = { + x: handle.x - mouseEventData.currentPoints.image.x, + y: handle.y - mouseEventData.currentPoints.image.y + }; + + var touchDragCallback = function touchDragCallback(event) { + var eventData = event.detail; + handle.hasMoved = true; + + if (handle.index === undefined || handle.index === null) { + handle.x = eventData.currentPoints.image.x + distanceFromTool.x; + handle.y = eventData.currentPoints.image.y + distanceFromTool.y; + } else { + Object(_setHandlesPosition_js__WEBPACK_IMPORTED_MODULE_3__["default"])(handle, eventData, data, distanceFromTool); + } + + if (preventHandleOutsideImage) { + handle.x = Math.max(handle.x, 0); + handle.x = Math.min(handle.x, eventData.image.width); + handle.y = Math.max(handle.y, 0); + handle.y = Math.min(handle.y, eventData.image.height); + } + + data.invalidated = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + var activeTool = Object(_util_getActiveTool__WEBPACK_IMPORTED_MODULE_4__["default"])(element, buttons, 'touch'); + + if (activeTool instanceof _base_BaseAnnotationTool__WEBPACK_IMPORTED_MODULE_5__["default"]) { + activeTool.updateCachedStats(image, element, data); + } + + var modifiedEventData = { + toolType: toolType, + element: element, + measurementData: data + }; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.triggerEvent(element, _events_js__WEBPACK_IMPORTED_MODULE_2__["default"].MEASUREMENT_MODIFIED, modifiedEventData); + }; + + handle.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = true; + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, touchDragCallback); + + var touchEndCallback = function touchEndCallback() { + handle.active = false; + _store_index_js__WEBPACK_IMPORTED_MODULE_1__["state"].isToolLocked = false; + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_2__["default"].TOUCH_DRAG, touchDragCallback); + touchEndEvents.forEach(function (eventType) { + element.removeEventListener(eventType, touchEndCallback); + }); + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.updateImage(element); + + if (typeof doneMovingCallback === 'function') { + doneMovingCallback(); + } + }; + + touchEndEvents.forEach(function (eventType) { + element.addEventListener(eventType, touchEndCallback); + }); +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/pointNearTool.js": +/*!*************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/pointNearTool.js ***! + \*************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../store/index.js */ "./store/index.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../../util/pointInsideBoundingBox.js */ "./util/pointInsideBoundingBox.js"); + + + + +var pointNearPerpendicular = function pointNearPerpendicular(element, handles, coords, distanceThreshold) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; + var cornerstoneMath = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath; + var lineSegment = { + start: cornerstone.pixelToCanvas(element, handles.perpendicularStart), + end: cornerstone.pixelToCanvas(element, handles.perpendicularEnd) + }; + var distanceToPoint = cornerstoneMath.lineSegment.distanceToPoint(lineSegment, coords); + return distanceToPoint < distanceThreshold; +}; + +/* harmony default export */ __webpack_exports__["default"] = (function (element, data, coords) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; + var cornerstoneMath = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstoneMath; + var handles = data.handles; + var lineSegment = { + start: cornerstone.pixelToCanvas(element, handles.start), + end: cornerstone.pixelToCanvas(element, handles.end) + }; + var distanceToPoint = cornerstoneMath.lineSegment.distanceToPoint(lineSegment, coords); + + if (Object(_util_pointInsideBoundingBox_js__WEBPACK_IMPORTED_MODULE_2__["default"])(handles.textBox, coords)) { + return true; + } + + var distanceThreshold = interactionType === 'mouse' ? _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].clickProximity : _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].touchProximity; + + if (pointNearPerpendicular(element, handles, coords, distanceThreshold)) { + return true; + } + + return distanceToPoint < distanceThreshold; +}); + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/renderToolData.js": +/*!**************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/renderToolData.js ***! + \**************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../../drawing/drawHandles.js */ "./drawing/drawHandles.js"); +/* harmony import */ var _utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/updatePerpendicularLineHandles.js */ "./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js"); +/* harmony import */ var _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../../stateManagement/toolStyle.js */ "./stateManagement/toolStyle.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../../drawing/index.js */ "./drawing/index.js"); +/* harmony import */ var _drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../../drawing/drawLinkedTextBox.js */ "./drawing/drawLinkedTextBox.js"); +/* harmony import */ var _util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../util/getPixelSpacing */ "./util/getPixelSpacing.js"); + + +/* eslint no-loop-func: 0 */ +// --> OFF + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function (evt) { + var _this = this; + + var eventData = evt.detail; + var element = eventData.element, + canvasContext = eventData.canvasContext, + image = eventData.image; + var _this$configuration = this.configuration, + handleRadius = _this$configuration.handleRadius, + drawHandlesOnHover = _this$configuration.drawHandlesOnHover; // If we have no toolData for this element, return immediately as there is nothing to do + + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_5__["getToolState"])(element, this.name); + + if (!toolData) { + return; + } + + var _getPixelSpacing = Object(_util_getPixelSpacing__WEBPACK_IMPORTED_MODULE_8__["default"])(image), + rowPixelSpacing = _getPixelSpacing.rowPixelSpacing, + colPixelSpacing = _getPixelSpacing.colPixelSpacing; // LT-29 Disable Target Measurements when pixel spacing is not available + + + if (!rowPixelSpacing || !colPixelSpacing) { + return; + } // We have tool data for this element - iterate over each one and draw it + + + var context = Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_6__["getNewContext"])(canvasContext.canvas); + var color; + var activeColor = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_4__["default"].getActiveColor(); + var lineWidth = _stateManagement_toolStyle_js__WEBPACK_IMPORTED_MODULE_3__["default"].getToolWidth(); + + var _loop = function _loop(i) { + var data = toolData.data[i]; + + if (data.visible === false) { + return "continue"; + } + + color = data.active ? activeColor : _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_4__["default"].getToolColor(); // Calculate the data measurements + + if (data.invalidated === true) { + if (data.longestDiameter && data.shortestDiameter) { + _this.throttledUpdateCachedStats(image, element, data); + } else { + _this.updateCachedStats(image, element, data); + } + } + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_6__["draw"])(context, function (context) { + // Configurable shadow + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_6__["setShadow"])(context, _this.configuration); + var _data$handles = data.handles, + start = _data$handles.start, + end = _data$handles.end, + perpendicularStart = _data$handles.perpendicularStart, + perpendicularEnd = _data$handles.perpendicularEnd, + textBox = _data$handles.textBox; // Draw the measurement line + + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_6__["drawLine"])(context, element, start, end, { + color: color + }); // Draw perpendicular line + + var strokeWidth = lineWidth; + Object(_utils_updatePerpendicularLineHandles_js__WEBPACK_IMPORTED_MODULE_2__["default"])(eventData, data); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_6__["drawLine"])(context, element, perpendicularStart, perpendicularEnd, { + color: color, + strokeWidth: strokeWidth + }); // Draw the handles + + var handleOptions = { + color: color, + handleRadius: handleRadius, + drawHandlesIfActive: drawHandlesOnHover + }; // Draw the handles + + if (_this.configuration.drawHandles) { + Object(_drawing_drawHandles_js__WEBPACK_IMPORTED_MODULE_1__["default"])(context, eventData, data.handles, handleOptions); + } // Draw the textbox + // Move the textbox slightly to the right and upwards + // So that it sits beside the length tool handle + + + var xOffset = 10; + + var textBoxAnchorPoints = function textBoxAnchorPoints(handles) { + return [handles.start, handles.end, handles.perpendicularStart, handles.perpendicularEnd]; + }; + + var textLines = getTextBoxText(data, rowPixelSpacing, colPixelSpacing); + Object(_drawing_drawLinkedTextBox_js__WEBPACK_IMPORTED_MODULE_7__["default"])(context, element, textBox, textLines, data.handles, textBoxAnchorPoints, color, lineWidth, xOffset, true); + }); + }; + + for (var i = 0; i < toolData.data.length; i++) { + var _ret = _loop(i); + + if (_ret === "continue") continue; + } +}); + +var getTextBoxText = function getTextBoxText(data, rowPixelSpacing, colPixelSpacing) { + var suffix = ' mm'; + + if (!rowPixelSpacing || !colPixelSpacing) { + suffix = ' pixels'; + } + + var lengthText = " L ".concat(data.longestDiameter).concat(suffix); + var widthText = " W ".concat(data.shortestDiameter).concat(suffix); + var labels = data.labels; + + if (labels && Array.isArray(labels)) { + return [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(labels), [lengthText, widthText]); + } + + return [lengthText, widthText]; +}; + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/utils/calculateLongestAndShortestDiameters.js": +/*!******************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/utils/calculateLongestAndShortestDiameters.js ***! + \******************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return calculateLongestAndShortestDiameters; }); +/** + * Calculates longest and shortest diameters using measurement handles and pixelSpacing + * @param {Object} measurementData + * @param {Object} pixelSpacing pixelSpacing + * + *@returns {Object} longestDiameter and shortestDiameter + */ +function calculateLongestAndShortestDiameters(measurementData, pixelSpacing) { + var rowPixelSpacing = pixelSpacing.rowPixelSpacing, + colPixelSpacing = pixelSpacing.colPixelSpacing; + var _measurementData$hand = measurementData.handles, + start = _measurementData$hand.start, + end = _measurementData$hand.end, + perpendicularStart = _measurementData$hand.perpendicularStart, + perpendicularEnd = _measurementData$hand.perpendicularEnd; // Calculate the long axis length + + var dx = (start.x - end.x) * (colPixelSpacing || 1); + var dy = (start.y - end.y) * (rowPixelSpacing || 1); + var length = Math.sqrt(dx * dx + dy * dy); // Calculate the short axis length + + var wx = (perpendicularStart.x - perpendicularEnd.x) * (colPixelSpacing || 1); + var wy = (perpendicularStart.y - perpendicularEnd.y) * (rowPixelSpacing || 1); + var width = Math.sqrt(wx * wx + wy * wy); + + if (!width) { + width = 0; + } // Length is always longer than width + + + if (width > length) { + var tempW = width; + var tempL = length; + length = tempW; + width = tempL; + } + + return { + longestDiameter: length.toFixed(1), + shortestDiameter: width.toFixed(1) + }; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js": +/*!*********************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/utils/getDistanceWithPixelSpacing.js ***! + \*********************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getDistanceWithPixelSpacing; }); +/** + * Return the distance between 2 points considering the pixel spacing + * + * @param {number} columnPixelSpacing Width that a pixel represents in mm + * @param {number} rowPixelSpacing Height that a pixel represents in mm + * @param {*} startPoint Start point of the line + * @param {*} endPoint End point of the line + * + * @returns {number} Distance between the 2 given points considering the pixel spacing + */ +function getDistanceWithPixelSpacing(columnPixelSpacing, rowPixelSpacing, startPoint, endPoint) { + var calcX = (startPoint.x - endPoint.x) / rowPixelSpacing; + var calcY = (startPoint.y - endPoint.y) / columnPixelSpacing; + return Math.sqrt(calcX * calcX + calcY * calcY); +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/utils/getLineVector.js": +/*!*******************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/utils/getLineVector.js ***! + \*******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getLineVector; }); +/** + * Return the Vector of a line which determines its inclination and length + * + * @param {number} columnPixelSpacing Width that a pixel represents in mm + * @param {number} rowPixelSpacing Height that a pixel represents in mm + * @param {*} startPoint Start point of the line + * @param {*} endPoint End point of the line + * + * @returns {*} Resulting line inclination vector + */ +function getLineVector(columnPixelSpacing, rowPixelSpacing, startPoint, endPoint) { + var dx = (startPoint.x - endPoint.x) * columnPixelSpacing; + var dy = (startPoint.y - endPoint.y) * rowPixelSpacing; + var length = Math.sqrt(dx * dx + dy * dy); + var vectorX = dx / length; + var vectorY = dy / length; + return { + x: vectorX, + y: vectorY, + length: length + }; +} + +/***/ }), + +/***/ "./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js": +/*!************************************************************************************!*\ + !*** ./tools/annotation/bidirectionalTool/utils/updatePerpendicularLineHandles.js ***! + \************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return updatePerpendicularLineHandles; }); +/* harmony import */ var _getLineVector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getLineVector */ "./tools/annotation/bidirectionalTool/utils/getLineVector.js"); + +/** + * Update the perpendicular line handles when the measurement is being created. + * This method will make the perpendicular line intersect in the middle of the + * long line and assume half the size of the long line. + * + * @param {*} eventData Data object associated with the event + * @param {*} measurementData Data from current bidirectional tool measurement + * + * @returns {boolean} False in case the handle is not locked or true when moved + */ + +function updatePerpendicularLineHandles(eventData, measurementData) { + if (!measurementData.handles.perpendicularStart.locked) { + return false; + } + + var startX, startY, endX, endY; + var _measurementData$hand = measurementData.handles, + start = _measurementData$hand.start, + end = _measurementData$hand.end; + var _eventData$image = eventData.image, + _eventData$image$colu = _eventData$image.columnPixelSpacing, + columnPixelSpacing = _eventData$image$colu === void 0 ? 1 : _eventData$image$colu, + _eventData$image$rowP = _eventData$image.rowPixelSpacing, + rowPixelSpacing = _eventData$image$rowP === void 0 ? 1 : _eventData$image$rowP; + + if (start.x === end.x && start.y === end.y) { + startX = start.x; + startY = start.y; + endX = end.x; + endY = end.y; + } else { + // Mid point of long-axis line + var mid = { + x: (start.x + end.x) / 2, + y: (start.y + end.y) / 2 + }; // Inclination of the perpendicular line + + var vector = Object(_getLineVector__WEBPACK_IMPORTED_MODULE_0__["default"])(columnPixelSpacing, rowPixelSpacing, start, end); + var perpendicularLineLength = vector.length / 2; + var rowMultiplier = perpendicularLineLength / (2 * rowPixelSpacing); + var columnMultiplier = perpendicularLineLength / (2 * columnPixelSpacing); + startX = mid.x + columnMultiplier * vector.y; + startY = mid.y - rowMultiplier * vector.x; + endX = mid.x - columnMultiplier * vector.y; + endY = mid.y + rowMultiplier * vector.x; + } + + measurementData.handles.perpendicularStart.x = startX; + measurementData.handles.perpendicularStart.y = startY; + measurementData.handles.perpendicularEnd.x = endX; + measurementData.handles.perpendicularEnd.y = endY; + return true; +} + +/***/ }), + +/***/ "./tools/annotation/index.js": +/*!***********************************!*\ + !*** ./tools/annotation/index.js ***! + \***********************************/ +/*! exports provided: AngleTool, ArrowAnnotateTool, BidirectionalTool, CircleRoiTool, CobbAngleTool, EllipticalRoiTool, FreehandRoiTool, LengthTool, ProbeTool, RectangleRoiTool, TextMarkerTool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _AngleTool_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AngleTool.js */ "./tools/annotation/AngleTool.js"); +/* harmony import */ var _ArrowAnnotateTool_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ArrowAnnotateTool.js */ "./tools/annotation/ArrowAnnotateTool.js"); +/* harmony import */ var _BidirectionalTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BidirectionalTool.js */ "./tools/annotation/BidirectionalTool.js"); +/* harmony import */ var _CircleRoiTool_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CircleRoiTool.js */ "./tools/annotation/CircleRoiTool.js"); +/* harmony import */ var _CobbAngleTool_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CobbAngleTool.js */ "./tools/annotation/CobbAngleTool.js"); +/* harmony import */ var _EllipticalRoiTool_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./EllipticalRoiTool.js */ "./tools/annotation/EllipticalRoiTool.js"); +/* harmony import */ var _FreehandRoiTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FreehandRoiTool.js */ "./tools/annotation/FreehandRoiTool.js"); +/* harmony import */ var _LengthTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./LengthTool.js */ "./tools/annotation/LengthTool.js"); +/* harmony import */ var _ProbeTool_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ProbeTool.js */ "./tools/annotation/ProbeTool.js"); +/* harmony import */ var _RectangleRoiTool_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./RectangleRoiTool.js */ "./tools/annotation/RectangleRoiTool.js"); +/* harmony import */ var _TextMarkerTool_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./TextMarkerTool.js */ "./tools/annotation/TextMarkerTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AngleTool", function() { return _AngleTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ArrowAnnotateTool", function() { return _ArrowAnnotateTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BidirectionalTool", function() { return _BidirectionalTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CircleRoiTool", function() { return _CircleRoiTool_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CobbAngleTool", function() { return _CobbAngleTool_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EllipticalRoiTool", function() { return _EllipticalRoiTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FreehandRoiTool", function() { return _FreehandRoiTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LengthTool", function() { return _LengthTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ProbeTool", function() { return _ProbeTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RectangleRoiTool", function() { return _RectangleRoiTool_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TextMarkerTool", function() { return _TextMarkerTool_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + + + + + + + + + + + + // Named Exports + + + + + + + + + + + + // Namespace, default export + +/* harmony default export */ __webpack_exports__["default"] = ({ + AngleTool: _AngleTool_js__WEBPACK_IMPORTED_MODULE_0__["default"], + ArrowAnnotateTool: _ArrowAnnotateTool_js__WEBPACK_IMPORTED_MODULE_1__["default"], + BidirectionalTool: _BidirectionalTool_js__WEBPACK_IMPORTED_MODULE_2__["default"], + CircleRoiTool: _CircleRoiTool_js__WEBPACK_IMPORTED_MODULE_3__["default"], + CobbAngleTool: _CobbAngleTool_js__WEBPACK_IMPORTED_MODULE_4__["default"], + EllipticalRoiTool: _EllipticalRoiTool_js__WEBPACK_IMPORTED_MODULE_5__["default"], + FreehandRoiTool: _FreehandRoiTool_js__WEBPACK_IMPORTED_MODULE_6__["default"], + LengthTool: _LengthTool_js__WEBPACK_IMPORTED_MODULE_7__["default"], + ProbeTool: _ProbeTool_js__WEBPACK_IMPORTED_MODULE_8__["default"], + RectangleRoiTool: _RectangleRoiTool_js__WEBPACK_IMPORTED_MODULE_9__["default"], + TextMarkerTool: _TextMarkerTool_js__WEBPACK_IMPORTED_MODULE_10__["default"] +}); + +/***/ }), + +/***/ "./tools/base/BaseAnnotationTool.js": +/*!******************************************!*\ + !*** ./tools/base/BaseAnnotationTool.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _BaseTool_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _manipulators_handleActivator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../manipulators/handleActivator.js */ "./manipulators/handleActivator.js"); +/* harmony import */ var _util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../util/findAndMoveHelpers.js */ "./util/findAndMoveHelpers.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/logger */ "./util/logger.js"); + + + + + + + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_9__["getLogger"])('baseAnnotationTool'); +/** + * @memberof Tools.Base + * @classdesc Abstract class for tools which create and display annotations on the + * cornerstone canvas. + * @extends Tools.Base.BaseTool + */ + +var BaseAnnotationTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(BaseAnnotationTool, _BaseTool); + + function BaseAnnotationTool() { + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BaseAnnotationTool); + + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BaseAnnotationTool).apply(this, arguments)); + } + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BaseAnnotationTool, [{ + key: "createNewMeasurement", + // =================================================================== + // Abstract Methods - Must be implemented. + // =================================================================== + + /** + * Creates a new annotation. + * + * @method createNewMeasurement + * @memberof Tools.Base.BaseAnnotationTool + * + * @param {type} evt description + * @returns {type} description + */ + // eslint-disable-next-line no-unused-vars + value: function createNewMeasurement(evt) { + throw new Error("Method createNewMeasurement not implemented for ".concat(this.name, ".")); + } + /** + * + * Returns true if the given coords are need the tool. + * + * @method pointNearTool + * @memberof Tools.Base.BaseAnnotationTool + * + * @param {*} element + * @param {*} data + * @param {*} coords + * @param {string} [interactionType=mouse] + * @returns {boolean} If the point is near the tool + */ + // eslint-disable-next-line no-unused-vars + + }, { + key: "pointNearTool", + value: function pointNearTool(element, data, coords) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + throw new Error("Method pointNearTool not implemented for ".concat(this.name, ".")); + } + /** + * Returns the distance in px from the given coords to the closest handle of the annotation. + * + * @method distanceFromPoint + * @memberof Tools.Base.BaseAnnotationTool + * + * @param {*} element + * @param {*} data + * @param {*} coords + * @returns {number} - the distance in px from the provided coordinates to the + * closest rendered portion of the annotation. -1 if the distance cannot be + * calculated. + */ + // eslint-disable-next-line no-unused-vars + + }, { + key: "distanceFromPoint", + value: function distanceFromPoint(element, data, coords) { + throw new Error("Method distanceFromPoint not implemented for ".concat(this.name, ".")); + } + /** + * Used to redraw the tool's annotation data per render + * + * @abstract + * @param {*} evt + * @returns {void} + */ + // eslint-disable-next-line no-unused-vars + + }, { + key: "renderToolData", + value: function renderToolData(evt) { + throw new Error("renderToolData not implemented for ".concat(this.name, ".")); + } // =================================================================== + // Virtual Methods - Have default behavior but may be overriden. + // =================================================================== + + /** + * Event handler for MOUSE_MOVE event. + * + * @abstract + * @event + * @param {Object} evt - The event. + * @returns {boolean} - True if the image needs to be updated + */ + + }, { + key: "mouseMoveCallback", + value: function mouseMoveCallback(evt) { + var _evt$detail = evt.detail, + element = _evt$detail.element, + currentPoints = _evt$detail.currentPoints; + var coords = currentPoints.canvas; + var toolState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_6__["getToolState"])(element, this.name); + var imageNeedsUpdate = false; + + for (var d = 0; d < toolState.data.length; d++) { + var data = toolState.data[d]; // Hovering a handle? + + if (Object(_manipulators_handleActivator_js__WEBPACK_IMPORTED_MODULE_7__["default"])(element, data.handles, coords) === true) { + imageNeedsUpdate = true; + } // Tool data's 'active' does not match coordinates + // TODO: can't we just do an if/else and save on a pointNearTool check? + + + var nearToolAndNotMarkedActive = this.pointNearTool(element, data, coords, 'mouse') && !data.active; + var notNearToolAndMarkedActive = !this.pointNearTool(element, data, coords, 'mouse') && data.active; + + if (nearToolAndNotMarkedActive || notNearToolAndMarkedActive) { + data.active = !data.active; + imageNeedsUpdate = true; + } + } + + return imageNeedsUpdate; + } + /** + * Custom callback for when a handle is selected. + * @method handleSelectedCallback + * @memberof Tools.Base.BaseAnnotationTool + * + * @param {*} evt - + * @param {*} toolData - + * @param {*} handle - The selected handle. + * @param {String} interactionType - + * @returns {void} + */ + + }, { + key: "handleSelectedCallback", + value: function handleSelectedCallback(evt, toolData, handle) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_8__["moveHandleNearImagePoint"])(evt, this, toolData, handle, interactionType); + } + /** + * Custom callback for when a tool is selected. + * + * @method toolSelectedCallback + * @memberof Tools.Base.BaseAnnotationTool + * + * @param {*} evt + * @param {*} annotation + * @param {string} [interactionType=mouse] + * @returns {void} + */ + + }, { + key: "toolSelectedCallback", + value: function toolSelectedCallback(evt, annotation) { + var interactionType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mouse'; + Object(_util_findAndMoveHelpers_js__WEBPACK_IMPORTED_MODULE_8__["moveAnnotation"])(evt, this, annotation, interactionType); + } + /** + * Updates cached statistics for the tool's annotation data on the element + * + * @param {*} image + * @param {*} element + * @param {*} data + * @returns {void} + */ + + }, { + key: "updateCachedStats", + value: function updateCachedStats(image, element, data) { + // eslint-disable-line + logger.warn("updateCachedStats not implemented for ".concat(this.name, ".")); + } + }]); + + return BaseAnnotationTool; +}(_BaseTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (BaseAnnotationTool); + +/***/ }), + +/***/ "./tools/base/BaseBrushTool.js": +/*!*************************************!*\ + !*** ./tools/base/BaseBrushTool.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _BaseTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _store_isToolActiveForElement_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../store/isToolActiveForElement.js */ "./store/isToolActiveForElement.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/segmentation */ "./util/segmentation/index.js"); + + + + + + + + + + + + +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_10__["getModule"])('segmentation'); +/** + * @abstract + * @memberof Tools.Base + * @classdesc Abstract class for tools which manipulate the mask data to be displayed on + * the cornerstone canvas. + * @extends Tools.Base.BaseTool + */ + +var BaseBrushTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BaseBrushTool, _BaseTool); + + function BaseBrushTool(props) { + var _this; + + var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BaseBrushTool); + + if (!defaultProps.configuration) { + defaultProps.configuration = { + alwaysEraseOnClick: false + }; + } + + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BaseBrushTool).call(this, props, defaultProps)); + _this.updateOnMouseMove = true; + _this.hideDefaultCursor = true; + _this._drawing = false; + _this._drawingMouseUpCallback = _this._drawingMouseUpCallback.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } // =================================================================== + // Abstract Methods - Must be implemented. + // =================================================================== + + /** + * Helper function for rendering the brush. + * + * @abstract + * @param {Object} evt - The event. + * @returns {void} + */ + // eslint-disable-next-line no-unused-vars + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BaseBrushTool, [{ + key: "renderBrush", + value: function renderBrush(evt) { + throw new Error("Method renderBrush not implemented for ".concat(this.name, ".")); + } + /** + * Paints the data to the labelmap. + * + * @protected + * @abstract + * @param {Object} evt The event. + * @returns {void} + */ + // eslint-disable-next-line no-unused-vars + + }, { + key: "_paint", + value: function _paint(evt) { + throw new Error("Method _paint not implemented for ".concat(this.name, ".")); + } // =================================================================== + // Virtual Methods - Have default behavior but may be overriden. + // =================================================================== + + /** + * Event handler for MOUSE_DRAG event. + * + * @override + * @abstract + * @event + * @param {Object} evt - The event. + */ + + }, { + key: "mouseDragCallback", + value: function mouseDragCallback(evt) { + var currentPoints = evt.detail.currentPoints; + this._lastImageCoords = currentPoints.image; // Safety measure incase _startPainting is overridden and doesn't always + // start a paint. + + if (this._drawing) { + this._paint(evt); + } + } + /** + * Event handler for MOUSE_DOWN event. + * + * @override + * @abstract + * @event + * @param {Object} evt - The event. + */ + + }, { + key: "preMouseDownCallback", + value: function preMouseDownCallback(evt) { + var eventData = evt.detail; + var element = eventData.element, + currentPoints = eventData.currentPoints; + + this._startPainting(evt); + + this._lastImageCoords = currentPoints.image; + this._drawing = true; + + this._startListeningForMouseUp(element); + + this._paint(evt); + + return true; + } + /** + * Initialise painting with BaseBrushTool. + * + * @abstract + * @event + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "_startPainting", + value: function _startPainting(evt) { + var eventData = evt.detail; + var element = eventData.element; + var configuration = segmentationModule.configuration, + getters = segmentationModule.getters; + + var _getters$labelmap2D = getters.labelmap2D(element), + labelmap2D = _getters$labelmap2D.labelmap2D, + labelmap3D = _getters$labelmap2D.labelmap3D, + currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex, + activeLabelmapIndex = _getters$labelmap2D.activeLabelmapIndex; + + var shouldErase = this._isCtrlDown(eventData) || this.configuration.alwaysEraseOnClick; + this.paintEventData = { + labelmap2D: labelmap2D, + labelmap3D: labelmap3D, + currentImageIdIndex: currentImageIdIndex, + activeLabelmapIndex: activeLabelmapIndex, + shouldErase: shouldErase + }; + + if (configuration.storeHistory) { + var previousPixelData = labelmap2D.pixelData.slice(); + this.paintEventData.previousPixelData = previousPixelData; + } + } + /** + * End painting with BaseBrushTool. + * + * @abstract + * @event + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "_endPainting", + value: function _endPainting(evt) { + var configuration = segmentationModule.configuration, + setters = segmentationModule.setters; + var _this$paintEventData = this.paintEventData, + labelmap2D = _this$paintEventData.labelmap2D, + currentImageIdIndex = _this$paintEventData.currentImageIdIndex; // Grab the labels on the slice. + + var segmentSet = new Set(labelmap2D.pixelData); + var iterator = segmentSet.values(); + var segmentsOnLabelmap = []; + var done = false; + + while (!done) { + var next = iterator.next(); + done = next.done; + + if (!done) { + segmentsOnLabelmap.push(next.value); + } + } + + labelmap2D.segmentsOnLabelmap = segmentsOnLabelmap; + + if (configuration.storeHistory) { + var previousPixelData = this.paintEventData.previousPixelData; + var newPixelData = labelmap2D.pixelData; + var operation = { + imageIdIndex: currentImageIdIndex, + diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_11__["getDiffBetweenPixelData"])(previousPixelData, newPixelData) + }; + setters.pushState(this.element, [operation]); + } + + Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_11__["triggerLabelmapModifiedEvent"])(this.element); + } // =================================================================== + // Implementation interface + // =================================================================== + + /** + * Event handler for MOUSE_MOVE event. + * + * @override + * @abstract + * @event + * @param {Object} evt - The event. + */ + + }, { + key: "mouseMoveCallback", + value: function mouseMoveCallback(evt) { + var currentPoints = evt.detail.currentPoints; + this._lastImageCoords = currentPoints.image; + } + /** + * Used to redraw the tool's cursor per render. + * + * @override + * @param {Object} evt - The event. + */ + + }, { + key: "renderToolData", + value: function renderToolData(evt) { + var eventData = evt.detail; + var element = eventData.element; // Only brush needs to render. + + if (Object(_store_isToolActiveForElement_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element, this.name)) { + // Call the hover event for the brush + this.renderBrush(evt); + } + } + /** + * Event handler for switching mode to passive. + * + * @override + * @event + * @param {Object} evt - The event. + */ + // eslint-disable-next-line no-unused-vars + + }, { + key: "passiveCallback", + value: function passiveCallback(evt) { + try { + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(this.element); + } catch (error) { + // It is possible that the image has not been loaded + // when this is called. + return; + } + } + /** + * Event handler for MOUSE_UP during the drawing event loop. + * + * @protected + * @event + * @param {Object} evt - The event. + * @returns {void} + */ + + }, { + key: "_drawingMouseUpCallback", + value: function _drawingMouseUpCallback(evt) { + var eventData = evt.detail; + var element = eventData.element; + + this._endPainting(evt); + + this._drawing = false; + this._mouseUpRender = true; + + this._stopListeningForMouseUp(element); + } + }, { + key: "newImageCallback", + value: function newImageCallback(evt) { + if (this._drawing) { + // End painting on one slice and start on another. + this._endPainting(evt); + + this._startPainting(evt); + } + } + /** + * Adds modify loop event listeners. + * + * @protected + * @param {Object} element - The viewport element to add event listeners to. + * @modifies {element} + * @returns {void} + */ + + }, { + key: "_startListeningForMouseUp", + value: function _startListeningForMouseUp(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._drawingMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback); + element.addEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._drawingMouseUpCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } + /** + * Adds modify loop event listeners. + * + * @protected + * @param {Object} element - The viewport element to add event listeners to. + * @modifies {element} + * @returns {void} + */ + + }, { + key: "_stopListeningForMouseUp", + value: function _stopListeningForMouseUp(element) { + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_UP, this._drawingMouseUpCallback); + element.removeEventListener(_events_js__WEBPACK_IMPORTED_MODULE_7__["default"].MOUSE_CLICK, this._drawingMouseUpCallback); + _externalModules_js__WEBPACK_IMPORTED_MODULE_8__["default"].cornerstone.updateImage(element); + } // =================================================================== + // Brush API. This is effectively a wrapper around the store. + // =================================================================== + + /** + * Increases the brush size + * + * @public + * @api + * @returns {void} + */ + + }, { + key: "increaseBrushSize", + value: function increaseBrushSize() { + var configuration = segmentationModule.configuration, + setters = segmentationModule.setters; + var oldRadius = configuration.radius; + var newRadius = Math.floor(oldRadius * 1.2); // If e.g. only 2 pixels big. Math.floor(2*1.2) = 2. + // Hence, have minimum increment of 1 pixel. + + if (newRadius === oldRadius) { + newRadius += 1; + } + + setters.radius(newRadius); + } + /** + * Decreases the brush size + * + * @public + * @api + * @returns {void} + */ + + }, { + key: "decreaseBrushSize", + value: function decreaseBrushSize() { + var configuration = segmentationModule.configuration, + setters = segmentationModule.setters; + var oldRadius = configuration.radius; + var newRadius = Math.floor(oldRadius * 0.8); + setters.radius(newRadius); + } + }, { + key: "_isCtrlDown", + value: function _isCtrlDown(eventData) { + return eventData.event && eventData.event.ctrlKey || eventData.ctrlKey; + } + }]); + + return BaseBrushTool; +}(_BaseTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]); + +/* harmony default export */ __webpack_exports__["default"] = (BaseBrushTool); + +/***/ }), + +/***/ "./tools/base/BaseTool.js": +/*!********************************!*\ + !*** ./tools/base/BaseTool.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _mixins_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../mixins/index.js */ "./mixins/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); +/* harmony import */ var _util_deepmerge_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../../util/deepmerge.js */ "./util/deepmerge.js"); +/* harmony import */ var _store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../store/setToolCursor.js */ "./store/setToolCursor.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../store */ "./store/index.js"); + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('tools:base:BaseTool'); +var globalConfigurationModule = Object(_store__WEBPACK_IMPORTED_MODULE_7__["getModule"])('globalConfiguration'); +/** + * @typedef ToolConfiguration + * @param {String} name + * @param {object} strategies - Named strategy functions + * @param {String} defaultStrategy - The name of the strategy to use by default + * @param {Object} configuration + * @param {String[]} mixins - A list of mixin names to apply to the tool + */ + +/** + * @memberof Tools.Base + * @classdesc BaseTool Class description + * @property {String[]} supportedInteractionTypes - A string list of ways the tool can interact with the user + */ + +var BaseTool = +/*#__PURE__*/ +function () { + /** + * Constructor description + * @param {props} [props={}] Tool properties set on instantiation of a tool + * @param {defaultProps} [defaultProps={}] Tools Default properties + */ + function BaseTool(props, defaultProps) { + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, BaseTool); + + /** + * Merge default props with custom props + */ + this.initialConfiguration = Object(_util_deepmerge_js__WEBPACK_IMPORTED_MODULE_5__["default"])(defaultProps, props); + var _this$initialConfigur = this.initialConfiguration, + name = _this$initialConfigur.name, + strategies = _this$initialConfigur.strategies, + defaultStrategy = _this$initialConfigur.defaultStrategy, + configuration = _this$initialConfigur.configuration, + supportedInteractionTypes = _this$initialConfigur.supportedInteractionTypes, + mixins = _this$initialConfigur.mixins, + svgCursor = _this$initialConfigur.svgCursor; + /** + * A unique, identifying tool name + * @type {String} + */ + + this.name = name; + /** @type {String} */ + + this.mode = 'disabled'; + this.element = undefined; + this.supportedInteractionTypes = supportedInteractionTypes || []; + this.strategies = strategies || {}; + this.defaultStrategy = defaultStrategy || Object.keys(this.strategies)[0] || undefined; + this.activeStrategy = this.defaultStrategy; + + if (svgCursor) { + this.svgCursor = svgCursor; + } // Options are set when a tool is added, during a "mode" change, + // or via a tool's option's setter + + + this._options = {}; // Configuration is set at tool initalization + + this._configuration = Object.assign({}, configuration); // `updateOnMouseMove` causes the frame to render on every mouse move when + // the tool is active. This is useful for tools that render large/dynamic + // items to the canvas which can't easily be respresented with an SVG Cursor. + + this.updateOnMouseMove = false; + this.hideDefaultCursor = false; // Apply mixins if mixinsArray is not empty. + + if (mixins && mixins.length) { + this._applyMixins(mixins); + } + + this._cursors = Object.assign({}, this.initialConfiguration.cursors); + var defaultCursor = this.defaultStrategy && this._cursors[this.activeStrategy]; + + if (defaultCursor) { + this.svgCursor = defaultCursor; + } + } // + // CONFIGURATION + // + + /** + * Config... + * @public + * @type {Object} + * @instance + */ + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(BaseTool, [{ + key: "mergeOptions", + + /** + * Merges provided options with existing options. + * + * @public + * @instance + * @param {Object} options - options object to merge with existing options. + * @returns {undefined} + */ + value: function mergeOptions(options) { + this._options = Object.assign({}, this._options, options); + } + /** + * Clears the tools options. + * + * @public + * @instance + * @memberof Tools.Base.BaseTool + * @returns {undefined} + */ + + }, { + key: "clearOptions", + value: function clearOptions() { + this._options = {}; + } + /** + * Apply the currently set/active strategy. + * + * @public + * @instance + * @method applyActiveStrategy + * @memberof Tools.Base.BaseTool + * + * @param {Object} evt The event that triggered the strategies application + * @param {Object} operationData - An object containing extra data not present in the `evt`, + * required to apply the strategy. + * @returns {*} strategies vary widely; check each specific strategy to find expected return value + */ + + }, { + key: "applyActiveStrategy", + value: function applyActiveStrategy(evt, operationData) { + return this.strategies[this.activeStrategy].call(this, evt, operationData); + } + /** + * Iterates over registered mixins; any matching names in the provided `mixinsArray` will + * be merged with this instance. + * + * @private + * @method _applyMixins + * @param {string[]} mixinsArray An array of mixin identifiers (strings). + * @returns {undefined} + */ + + }, { + key: "_applyMixins", + value: function _applyMixins(mixinsArray) { + for (var i = 0; i < mixinsArray.length; i++) { + var mixin = _mixins_index_js__WEBPACK_IMPORTED_MODULE_3__["default"]["".concat(mixinsArray[i])]; + + if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(mixin) === 'object') { + Object.assign(this, mixin); + + if (typeof this.initializeMixin === 'function') { + // Run the mixin's initialisation process. + this.initializeMixin(); + } + } else { + logger.warn("".concat(this.name, ": mixin ").concat(_mixins_index_js__WEBPACK_IMPORTED_MODULE_3__["default"][i], " does not exist.")); + } + } // Don't keep initialiseMixin from last mixin. + + + if (this.initializeMixin === 'function') { + delete this.initializeMixin; + } + } + /** + * Change the active strategy. + * + * @public + * @method setActiveStrategy + * @param {string} strategy + * @returns {null} + */ + + }, { + key: "setActiveStrategy", + value: function setActiveStrategy(strategy) { + this.activeStrategy = strategy; + + if (globalConfigurationModule.configuration.showSVGCursors) { + this.changeCursor(this.element, strategy); + } + } + /** + * Function responsible for changing the Cursor, according to the strategy. + * @param {HTMLElement} element + * @param {string} strategy The strategy to be used on Tool + * @public + * @returns {void} + */ + + }, { + key: "changeCursor", + value: function changeCursor(element, strategy) { + // Necessary to avoid setToolCursor call without elements, which throws an error. + if (!element) { + return; + } // If there are cursors set per strategy, change the cursor. + + + var cursor = this._cursors[strategy]; + + if (cursor) { + this.svgCursor = cursor; + + if (this.mode === 'active') { + Object(_store_setToolCursor_js__WEBPACK_IMPORTED_MODULE_6__["setToolCursor"])(element, cursor); // External.cornerstone.updateImage(element); + } + } + } // =================================================================== + // Virtual Methods - Have default behavior but may be overridden. + // =================================================================== + // + // MOUSE + // + + /** + * Callback that takes priority if the tool is active, before `MOUSE_DOWN` + * events are processed. Does nothing by default. + * + * @callback BaseTool~preMouseDownCallback + * @param {CornerstoneTools.event:cornerstonetoolsmousedown} evt + * @returns {boolean} consumedEvent - True if function consumed the event. + */ + + /** + * Callback that takes priority if the tool is active, after `MOUSE_DOWN` + * events are processed. Does nothing by default. + * + * @callback BaseTool~postMouseDownCallback + * @param {CornerstoneTools.event:cornerstonetoolsmousedown} evt + * @returns {boolean} consumedEvent - True if function consumed the event. + */ + + /** + * Callback that is called if the tool is active, after `MOUSE_DOWN` + * events are processed. Does nothing by default. + * + * @virtual + * @param {type} evt + * @returns {boolean} consumedEvent - True if function consumed the event. + */ + + /** + * Example implementation: + * + * postMouseDownCallback(evt) { + * return false; + * } + */ + + /** + * Callback that takes priority if the tool is active, before `TOUCH_START` + * events are processed. Does nothing by default. + * + * @virtual + * @param {type} evt + * @returns {boolean} consumedEvent - True if function consumed the event. + */ + + /** + * Example implementation: + * + * preTouchStartCallback(evt) { + * return false; + * } + */ + + /** + * Callback that is called if the tool is active, after `TOUCH_START` + * events are processed. Does nothing by default. + * + * @virtual + * @param {type} evt + * @returns {boolean} consumedEvent - True if function consumed the event. + */ + + /** + * Example implementation: + * + * postTouchStartCallback(evt) { + * return false; + * } + */ + + }, { + key: "configuration", + get: function get() { + return this._configuration; + }, + set: function set(configuration) { + this._configuration = configuration; + } // + // OPTIONS + // + + /** + * Options... + * @readonly + * @instance + */ + + }, { + key: "options", + get: function get() { + return this._options; + } + }], [{ + key: "configuration", + get: function get() {} + }]); + + return BaseTool; +}(); + +/* harmony default export */ __webpack_exports__["default"] = (BaseTool); + +/***/ }), + +/***/ "./tools/base/index.js": +/*!*****************************!*\ + !*** ./tools/base/index.js ***! + \*****************************/ +/*! exports provided: BaseAnnotationTool, BaseBrushTool, BaseTool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseAnnotationTool.js */ "./tools/base/BaseAnnotationTool.js"); +/* harmony import */ var _BaseTool_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BaseTool.js */ "./tools/base/BaseTool.js"); +/* harmony import */ var _BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseBrushTool.js */ "./tools/base/BaseBrushTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BaseAnnotationTool", function() { return _BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BaseBrushTool", function() { return _BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BaseTool", function() { return _BaseTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + + + + // Named Exports + + + + // Namespace, default export + +/* harmony default export */ __webpack_exports__["default"] = ({ + BaseAnnotationTool: _BaseAnnotationTool_js__WEBPACK_IMPORTED_MODULE_0__["default"], + BaseBrushTool: _BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_2__["default"], + BaseTool: _BaseTool_js__WEBPACK_IMPORTED_MODULE_1__["default"] +}); + +/***/ }), + +/***/ "./tools/cursors/MouseCursor.js": +/*!**************************************!*\ + !*** ./tools/cursors/MouseCursor.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return MouseCursor; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store/index.js */ "./store/index.js"); + + + + +var cursorModule = _store_index_js__WEBPACK_IMPORTED_MODULE_3__["modules"].cursor; +/* eslint-disable valid-jsdoc */ + +/* +MACROS - The following keys will have the appropriate value injected when +an SVG is requested: + +- ACTIVE_COLOR => options.activeColor || toolColors.getActiveColor(); +- TOOL_COLOR => options.toolColor || toolColors.getToolColor(); +- FILL_COLOR => options.fillColor || toolColors.getFillColor(); +*/ + +var MouseCursor = +/*#__PURE__*/ +function () { + function MouseCursor(iconGroupString, options) { + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, MouseCursor); + + this.iconGroupString = iconGroupString; + this.options = Object.assign({}, cursorModule.getters.defaultOptions(), options); + } + /** + * Returns an SVG of the icon only. + * + * @param {Object} options - An object which overrides default properties of the returned SVG. + * @returns {Blob} The SVG of the icon. + */ + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(MouseCursor, [{ + key: "getIconSVG", + value: function getIconSVG() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var svgString = this._generateIconSVGString(options); + + return new Blob([svgString], { + type: 'image/svg+xml' + }); + } + /** + * Returns a string representation of the SVG of the icon only. + * + * @param {Object} options - An object which overrides default properties of the returned SVG. + * @returns {string} The stringified SVG of the icon. + */ + + }, { + key: "getIconSVGString", + value: function getIconSVGString() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return this._generateIconSVGString(options); + } + /** + * Returns an SVG of the icon + pointer. + * + * @param {Object} options - An object which overrides default properties of the returned SVG. + * @returns {Blob} The SVG of the icon + pointer.. + */ + + }, { + key: "getIconWithPointerSVG", + value: function getIconWithPointerSVG() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var svgString = this._generateIconWithPointerSVGString(options); + + return new Blob([svgString], { + type: 'image/svg+xml' + }); + } + /** + * Returns a string representation of the SVG of the icon + pointer. + * + * @param {Object} options - An object which overrides default properties of the returned SVG. + * @returns {string} The stringified SVG of the icon + pointer. + */ + + }, { + key: "getIconWithPointerString", + value: function getIconWithPointerString() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return this._generateIconWithPointerSVGString(options); + } + /** + * Returns the mousePoint as a space seperated string. + * + * @returns {string} The mousePoint. + */ + + }, { + key: "_generateIconWithPointerSVGString", + + /** + * Generates a string representation of the icon + pointer. + * + * @param {Object} options - An object which overrides default properties of the returned string. + * @returns {string} The SVG as a string. + */ + value: function _generateIconWithPointerSVGString() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var svgOptions = Object.assign({}, this.options, options); + var mousePointerGroupString = svgOptions.mousePointerGroupString, + iconSize = svgOptions.iconSize, + viewBox = svgOptions.viewBox; + var scale = iconSize / Math.max(viewBox.x, viewBox.y); + var svgSize = 16 + iconSize; + var svgString = "\n \n \n ").concat(mousePointerGroupString, "\n \n \n ").concat(this.iconGroupString, "\n \n "); + return this._injectColors(svgString, svgOptions); + } + /** + * Generates a string representation of the icon. + * + * @param {Object} options - An object which overrides default properties of the returned string. + * @returns {string} The SVG as a string. + */ + + }, { + key: "_generateIconSVGString", + value: function _generateIconSVGString() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var svgOptions = Object.assign({}, this.options, options); + var iconSize = svgOptions.iconSize, + viewBox = svgOptions.viewBox; + var svgString = "\n \n ").concat(this.iconGroupString, "\n "); + return this._injectColors(svgString, svgOptions); + } + /** + * Replaces ACTIVE_COLOR, TOOL_COLOR and FILL_COLOR in svgString with their appropriate values. + * + * @param {string} svgString - The string to modify. + * @param {Object} options - Optional overrides for the colors. + * @returns {string} The string with color values injected. + */ + + }, { + key: "_injectColors", + value: function _injectColors(svgString) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var activeColor = options.activeColor || _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getActiveColor(); + var toolColor = options.toolColor || _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getToolColor(); + var fillColor = options.fillColor || _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getFillColor(); + return svgString.replace(/ACTIVE_COLOR/g, "".concat(activeColor)).replace(/TOOL_COLOR/g, "".concat(toolColor)).replace(/FILL_COLOR/g, "".concat(fillColor)); + } + }, { + key: "mousePoint", + get: function get() { + var mousePoint = this.options.mousePoint; + return "".concat(mousePoint.x, " ").concat(mousePoint.y); + } + }]); + + return MouseCursor; +}(); + + + +/***/ }), + +/***/ "./tools/cursors/index.js": +/*!********************************!*\ + !*** ./tools/cursors/index.js ***! + \********************************/ +/*! exports provided: angleCursor, arrowAnnotateCursor, bidirectionalCursor, cobbAngleCursor, circleRoiCursor, ellipticalRoiCursor, freehandRoiCursor, freehandRoiSculptorCursor, lengthCursor, probeCursor, rectangleRoiCursor, textMarkerCursor, crosshairsCursor, eraserCursor, magnifyCursor, panCursor, rotateCursor, stackScrollCursor, wwwcRegionCursor, wwwcCursor, zoomCursor, freehandEraseInsideCursor, freehandFillInsideCursor, freehandEraseOutsideCursor, freehandFillOutsideCursor, segRectangleEraseInsideCursor, segRectangleFillInsideCursor, segRectangleEraseOutsideCursor, segRectangleFillOutsideCursor, segCircleEraseInsideCursor, segCircleFillInsideCursor, segCircleEraseOutsideCursor, segCircleFillOutsideCursor */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "angleCursor", function() { return angleCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "arrowAnnotateCursor", function() { return arrowAnnotateCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bidirectionalCursor", function() { return bidirectionalCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cobbAngleCursor", function() { return cobbAngleCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "circleRoiCursor", function() { return circleRoiCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ellipticalRoiCursor", function() { return ellipticalRoiCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freehandRoiCursor", function() { return freehandRoiCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freehandRoiSculptorCursor", function() { return freehandRoiSculptorCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lengthCursor", function() { return lengthCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "probeCursor", function() { return probeCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rectangleRoiCursor", function() { return rectangleRoiCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "textMarkerCursor", function() { return textMarkerCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "crosshairsCursor", function() { return crosshairsCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraserCursor", function() { return eraserCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "magnifyCursor", function() { return magnifyCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "panCursor", function() { return panCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotateCursor", function() { return rotateCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stackScrollCursor", function() { return stackScrollCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wwwcRegionCursor", function() { return wwwcRegionCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wwwcCursor", function() { return wwwcCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zoomCursor", function() { return zoomCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freehandEraseInsideCursor", function() { return freehandEraseInsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freehandFillInsideCursor", function() { return freehandFillInsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freehandEraseOutsideCursor", function() { return freehandEraseOutsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freehandFillOutsideCursor", function() { return freehandFillOutsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segRectangleEraseInsideCursor", function() { return segRectangleEraseInsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segRectangleFillInsideCursor", function() { return segRectangleFillInsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segRectangleEraseOutsideCursor", function() { return segRectangleEraseOutsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segRectangleFillOutsideCursor", function() { return segRectangleFillOutsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segCircleEraseInsideCursor", function() { return segCircleEraseInsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segCircleFillInsideCursor", function() { return segCircleFillInsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segCircleEraseOutsideCursor", function() { return segCircleEraseOutsideCursor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "segCircleFillOutsideCursor", function() { return segCircleFillOutsideCursor; }); +/* harmony import */ var _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MouseCursor.js */ "./tools/cursors/MouseCursor.js"); + +/* +MACROS: + +The following keys will have the appropriate value injected by the MouseCursor +class when an SVG is requested: + +- ACTIVE_COLOR => options.activeColor || toolColors.getActiveColor(); +- TOOL_COLOR => options.toolColor || toolColors.getToolColor(); +- FILL_COLOR => options.fillColor || toolColors.getFillColor(); +*/ + +var angleCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var arrowAnnotateCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n \n ", { + viewBox: { + x: 24, + y: 24 + } +}); +var bidirectionalCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n \n \n \n \n \n \n ", { + viewBox: { + x: 48, + y: 48 + } +}); +var cobbAngleCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n \n \n \n \n ", { + viewBox: { + x: 32, + y: 32 + } +}); +var circleRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 32, + y: 32 + } +}); +var ellipticalRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 32, + y: 32 + } +}); +var freehandRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", { + viewBox: { + x: 18, + y: 18 + } +}); +var freehandRoiSculptorCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", { + viewBox: { + x: 18, + y: 18 + } +}); +var lengthCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n \n ", { + viewBox: { + x: 24, + y: 24 + } +}); +var probeCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var rectangleRoiCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var textMarkerCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var crosshairsCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var eraserCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 2048, + y: 1792 + } +}); +var magnifyCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 512, + y: 512 + } +}); +var panCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var rotateCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var stackScrollCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 24, + y: 28 + } +}); +var wwwcRegionCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("", { + viewBox: { + x: 1792, + y: 1792 + } +}); +var wwwcCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n ", { + viewBox: { + x: 18, + y: 18 + } +}); +var zoomCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("\n ", { + viewBox: { + x: 640, + y: 512 + } +}); +var segToolCursorBoundaries = { + x: 127, + y: 60 +}; + +var minusRect = function minusRect() { + var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ACTIVE_COLOR'; + return ""); +}; + +var plusRect = function plusRect() { + var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ACTIVE_COLOR'; + return "\n "); +}; + +var scissorIcon = ""; +var rectangleIcon = ""; +var circleIcon = ""; +var freehandEraseInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(minusRect()), { + viewBox: segToolCursorBoundaries +}); +var freehandFillInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(plusRect()), { + viewBox: segToolCursorBoundaries +}); +var freehandEraseOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(minusRect()), { + viewBox: segToolCursorBoundaries +}); +var freehandFillOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(scissorIcon, " ").concat(plusRect()), { + viewBox: segToolCursorBoundaries +}); +var segRectangleEraseInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(minusRect()), { + viewBox: segToolCursorBoundaries +}); +var segRectangleFillInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(plusRect()), { + viewBox: segToolCursorBoundaries +}); +var segRectangleEraseOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(minusRect()), { + viewBox: segToolCursorBoundaries +}); +var segRectangleFillOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(rectangleIcon, " ").concat(plusRect()), { + viewBox: segToolCursorBoundaries +}); +var segCircleEraseInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(minusRect()), { + viewBox: segToolCursorBoundaries +}); +var segCircleFillInsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(plusRect()), { + viewBox: segToolCursorBoundaries +}); +var segCircleEraseOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(minusRect()), { + viewBox: segToolCursorBoundaries +}); +var segCircleFillOutsideCursor = new _MouseCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"]("".concat(circleIcon, " ").concat(plusRect()), { + viewBox: segToolCursorBoundaries +}); + +/***/ }), + +/***/ "./tools/index.js": +/*!************************!*\ + !*** ./tools/index.js ***! + \************************/ +/*! exports provided: CrosshairsTool, DoubleTapFitToWindowTool, DragProbeTool, EraserTool, FreehandRoiSculptorTool, MagnifyTool, OverlayTool, OrientationMarkersTool, PanMultiTouchTool, PanTool, ReferenceLinesTool, RotateTool, RotateTouchTool, ScaleOverlayTool, StackScrollMouseWheelTool, StackScrollMultiTouchTool, StackScrollTool, WwwcRegionTool, WwwcTool, ZoomMouseWheelTool, ZoomTool, ZoomTouchPinchTool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _CrosshairsTool_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CrosshairsTool.js */ "./tools/CrosshairsTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CrosshairsTool", function() { return _CrosshairsTool_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _DoubleTapFitToWindowTool_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./DoubleTapFitToWindowTool.js */ "./tools/DoubleTapFitToWindowTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DoubleTapFitToWindowTool", function() { return _DoubleTapFitToWindowTool_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _DragProbeTool_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DragProbeTool.js */ "./tools/DragProbeTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DragProbeTool", function() { return _DragProbeTool_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _EraserTool_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EraserTool.js */ "./tools/EraserTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EraserTool", function() { return _EraserTool_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _FreehandRoiSculptorTool_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FreehandRoiSculptorTool.js */ "./tools/FreehandRoiSculptorTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FreehandRoiSculptorTool", function() { return _FreehandRoiSculptorTool_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _MagnifyTool_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./MagnifyTool.js */ "./tools/MagnifyTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MagnifyTool", function() { return _MagnifyTool_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _OverlayTool_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./OverlayTool.js */ "./tools/OverlayTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "OverlayTool", function() { return _OverlayTool_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _OrientationMarkersTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./OrientationMarkersTool.js */ "./tools/OrientationMarkersTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "OrientationMarkersTool", function() { return _OrientationMarkersTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _PanMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./PanMultiTouchTool.js */ "./tools/PanMultiTouchTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PanMultiTouchTool", function() { return _PanMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _PanTool_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./PanTool.js */ "./tools/PanTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PanTool", function() { return _PanTool_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _ReferenceLinesTool_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ReferenceLinesTool.js */ "./tools/ReferenceLinesTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReferenceLinesTool", function() { return _ReferenceLinesTool_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _RotateTool_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./RotateTool.js */ "./tools/RotateTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RotateTool", function() { return _RotateTool_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _RotateTouchTool_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./RotateTouchTool.js */ "./tools/RotateTouchTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RotateTouchTool", function() { return _RotateTouchTool_js__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _ScaleOverlayTool_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ScaleOverlayTool.js */ "./tools/ScaleOverlayTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ScaleOverlayTool", function() { return _ScaleOverlayTool_js__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _StackScrollMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./StackScrollMouseWheelTool.js */ "./tools/StackScrollMouseWheelTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StackScrollMouseWheelTool", function() { return _StackScrollMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_14__["default"]; }); + +/* harmony import */ var _StackScrollMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./StackScrollMultiTouchTool.js */ "./tools/StackScrollMultiTouchTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StackScrollMultiTouchTool", function() { return _StackScrollMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + +/* harmony import */ var _StackScrollTool_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./StackScrollTool.js */ "./tools/StackScrollTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StackScrollTool", function() { return _StackScrollTool_js__WEBPACK_IMPORTED_MODULE_16__["default"]; }); + +/* harmony import */ var _WwwcRegionTool_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./WwwcRegionTool.js */ "./tools/WwwcRegionTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WwwcRegionTool", function() { return _WwwcRegionTool_js__WEBPACK_IMPORTED_MODULE_17__["default"]; }); + +/* harmony import */ var _WwwcTool_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./WwwcTool.js */ "./tools/WwwcTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WwwcTool", function() { return _WwwcTool_js__WEBPACK_IMPORTED_MODULE_18__["default"]; }); + +/* harmony import */ var _ZoomMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./ZoomMouseWheelTool.js */ "./tools/ZoomMouseWheelTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ZoomMouseWheelTool", function() { return _ZoomMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_19__["default"]; }); + +/* harmony import */ var _ZoomTool_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ZoomTool.js */ "./tools/ZoomTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ZoomTool", function() { return _ZoomTool_js__WEBPACK_IMPORTED_MODULE_20__["default"]; }); + +/* harmony import */ var _ZoomTouchPinchTool_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./ZoomTouchPinchTool.js */ "./tools/ZoomTouchPinchTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ZoomTouchPinchTool", function() { return _ZoomTouchPinchTool_js__WEBPACK_IMPORTED_MODULE_21__["default"]; }); + + + + + + + + + + + + + + + + + + + + + + + // Named Exports + + // Namespace, default export + +/* harmony default export */ __webpack_exports__["default"] = ({ + CrosshairsTool: _CrosshairsTool_js__WEBPACK_IMPORTED_MODULE_0__["default"], + DoubleTapFitToWindowTool: _DoubleTapFitToWindowTool_js__WEBPACK_IMPORTED_MODULE_1__["default"], + DragProbeTool: _DragProbeTool_js__WEBPACK_IMPORTED_MODULE_2__["default"], + EraserTool: _EraserTool_js__WEBPACK_IMPORTED_MODULE_3__["default"], + FreehandRoiSculptorTool: _FreehandRoiSculptorTool_js__WEBPACK_IMPORTED_MODULE_4__["default"], + MagnifyTool: _MagnifyTool_js__WEBPACK_IMPORTED_MODULE_5__["default"], + OverlayTool: _OverlayTool_js__WEBPACK_IMPORTED_MODULE_6__["default"], + OrientationMarkersTool: _OrientationMarkersTool_js__WEBPACK_IMPORTED_MODULE_7__["default"], + PanMultiTouchTool: _PanMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_8__["default"], + PanTool: _PanTool_js__WEBPACK_IMPORTED_MODULE_9__["default"], + ReferenceLinesTool: _ReferenceLinesTool_js__WEBPACK_IMPORTED_MODULE_10__["default"], + RotateTool: _RotateTool_js__WEBPACK_IMPORTED_MODULE_11__["default"], + RotateTouchTool: _RotateTouchTool_js__WEBPACK_IMPORTED_MODULE_12__["default"], + ScaleOverlayTool: _ScaleOverlayTool_js__WEBPACK_IMPORTED_MODULE_13__["default"], + StackScrollMouseWheelTool: _StackScrollMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_14__["default"], + StackScrollMultiTouchTool: _StackScrollMultiTouchTool_js__WEBPACK_IMPORTED_MODULE_15__["default"], + StackScrollTool: _StackScrollTool_js__WEBPACK_IMPORTED_MODULE_16__["default"], + WwwcRegionTool: _WwwcRegionTool_js__WEBPACK_IMPORTED_MODULE_17__["default"], + WwwcTool: _WwwcTool_js__WEBPACK_IMPORTED_MODULE_18__["default"], + ZoomMouseWheelTool: _ZoomMouseWheelTool_js__WEBPACK_IMPORTED_MODULE_19__["default"], + ZoomTool: _ZoomTool_js__WEBPACK_IMPORTED_MODULE_20__["default"], + ZoomTouchPinchTool: _ZoomTouchPinchTool_js__WEBPACK_IMPORTED_MODULE_21__["default"] +}); + +/***/ }), + +/***/ "./tools/referenceLines/calculateReferenceLine.js": +/*!********************************************************!*\ + !*** ./tools/referenceLines/calculateReferenceLine.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../util/pointProjector.js */ "./util/pointProjector.js"); + +/** + * Calculates a reference line between two planes by projecting the top left hand corner and bottom right hand corner + * Of the reference image onto the target image. Ideally we would calculate the intersection between the planes but + * That requires a bit more math and this works fine for most cases. + * + * @export + * @public + * @method + * @name calculateReferenceLine + * @param {Object} targetImagePlane The imagePlane on which the reference line will be drawn. + * @param {Object} referenceImagePlane The imagePlane being referenced. + * @returns {Object} The start and end points of the line to be drawn. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (targetImagePlane, referenceImagePlane) { + var points = Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__["planePlaneIntersection"])(targetImagePlane, referenceImagePlane); + + if (!points) { + return; + } + + return { + start: Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__["projectPatientPointToImagePlane"])(points.start, targetImagePlane), + end: Object(_util_pointProjector_js__WEBPACK_IMPORTED_MODULE_0__["projectPatientPointToImagePlane"])(points.end, targetImagePlane) + }; +}); + +/***/ }), + +/***/ "./tools/referenceLines/renderActiveReferenceLine.js": +/*!***********************************************************!*\ + !*** ./tools/referenceLines/renderActiveReferenceLine.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _calculateReferenceLine_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./calculateReferenceLine.js */ "./tools/referenceLines/calculateReferenceLine.js"); +/* harmony import */ var _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../../stateManagement/toolColors.js */ "./stateManagement/toolColors.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../util/convertToVector3.js */ "./util/convertToVector3.js"); +/* harmony import */ var _drawing_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../../drawing/index.js */ "./drawing/index.js"); + + + + + +/** + * Renders the active reference line. + * + * @export @public @method + * @name renderActiveReferenceLine + * @param {Object} context The canvas context. + * @param {Object} eventData The data associated with the event. + * @param {HTMLElement} targetElement The element on which to render the reference line. + * @param {HTMLElement} referenceElement The element referenced by the line. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (context, eventData, targetElement, referenceElement) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var targetImage = cornerstone.getEnabledElement(targetElement).image; + var referenceImage = cornerstone.getEnabledElement(referenceElement).image; // Make sure the images are actually loaded for the target and reference + + if (!targetImage || !referenceImage) { + return; + } + + var targetImagePlane = cornerstone.metaData.get('imagePlaneModule', targetImage.imageId); + var referenceImagePlane = cornerstone.metaData.get('imagePlaneModule', referenceImage.imageId); // Make sure the target and reference actually have image plane metadata + + if (!targetImagePlane || !referenceImagePlane || !targetImagePlane.rowCosines || !targetImagePlane.columnCosines || !targetImagePlane.imagePositionPatient || !referenceImagePlane.rowCosines || !referenceImagePlane.columnCosines || !referenceImagePlane.imagePositionPatient) { + return; + } // The image planes must be in the same frame of reference + + + if (targetImagePlane.frameOfReferenceUID !== referenceImagePlane.frameOfReferenceUID) { + return; + } + + targetImagePlane.rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImagePlane.rowCosines); + targetImagePlane.columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImagePlane.columnCosines); + targetImagePlane.imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(targetImagePlane.imagePositionPatient); + referenceImagePlane.rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(referenceImagePlane.rowCosines); + referenceImagePlane.columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(referenceImagePlane.columnCosines); + referenceImagePlane.imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_3__["default"])(referenceImagePlane.imagePositionPatient); // The image plane normals must be > 30 degrees apart + + var targetNormal = targetImagePlane.rowCosines.clone().cross(targetImagePlane.columnCosines); + var referenceNormal = referenceImagePlane.rowCosines.clone().cross(referenceImagePlane.columnCosines); + var angleInRadians = targetNormal.angleTo(referenceNormal); + angleInRadians = Math.abs(angleInRadians); + + if (angleInRadians < 0.5) { + // 0.5 radians = ~30 degrees + return; + } + + var referenceLine = Object(_calculateReferenceLine_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane, referenceImagePlane); + + if (!referenceLine) { + return; + } + + var color = _stateManagement_toolColors_js__WEBPACK_IMPORTED_MODULE_2__["default"].getActiveColor(); // Draw the referenceLines + + context.setTransform(1, 0, 0, 1, 0, 0); + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_4__["draw"])(context, function (context) { + Object(_drawing_index_js__WEBPACK_IMPORTED_MODULE_4__["drawLine"])(context, eventData.element, referenceLine.start, referenceLine.end, { + color: color + }); + }); +}); + +/***/ }), + +/***/ "./tools/segmentation/BrushTool.js": +/*!*****************************************!*\ + !*** ./tools/segmentation/BrushTool.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BrushTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../base */ "./tools/base/index.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_segmentation_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/segmentation/index.js */ "./util/segmentation/index.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); + + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_10__["getLogger"])('tools:BrushTool'); +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_8__["getModule"])('segmentation'); +/** + * @public + * @class BrushTool + * @memberof Tools.Brush + * @classdesc Tool for drawing segmentations on an image. + * @extends Tools.Base.BaseBrushTool + */ + +var BrushTool = +/*#__PURE__*/ +function (_BaseBrushTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(BrushTool, _BaseBrushTool); + + function BrushTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, BrushTool); + + var defaultProps = { + name: 'Brush', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: {}, + mixins: ['renderBrushMixin'] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(BrushTool).call(this, props, defaultProps)); + _this.touchDragCallback = _this._paint.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + /** + * Paints the data to the labelmap. + * + * @protected + * @param {Object} evt The data object associated with the event. + * @returns {void} + */ + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(BrushTool, [{ + key: "_paint", + value: function _paint(evt) { + var configuration = segmentationModule.configuration; + var eventData = evt.detail; + var element = eventData.element; + var _eventData$image = eventData.image, + rows = _eventData$image.rows, + columns = _eventData$image.columns; + var _eventData$currentPoi = eventData.currentPoints.image, + x = _eventData$currentPoi.x, + y = _eventData$currentPoi.y; + + if (x < 0 || x > columns || y < 0 || y > rows) { + return; + } + + var radius = configuration.radius; + var pointerArray = Object(_util_segmentation_index_js__WEBPACK_IMPORTED_MODULE_9__["getCircle"])(radius, rows, columns, x, y); + var _this$paintEventData = this.paintEventData, + labelmap2D = _this$paintEventData.labelmap2D, + labelmap3D = _this$paintEventData.labelmap3D, + shouldErase = _this$paintEventData.shouldErase; // Draw / Erase the active color. + + Object(_util_segmentation_index_js__WEBPACK_IMPORTED_MODULE_9__["drawBrushPixels"])(pointerArray, labelmap2D.pixelData, labelmap3D.activeSegmentIndex, columns, shouldErase); + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(evt.detail.element); + } + }]); + + return BrushTool; +}(_base__WEBPACK_IMPORTED_MODULE_7__["BaseBrushTool"]); + + + +/***/ }), + +/***/ "./tools/segmentation/CircleScissorsTool.js": +/*!**************************************************!*\ + !*** ./tools/segmentation/CircleScissorsTool.js ***! + \**************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CircleScissorsTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../base */ "./tools/base/index.js"); +/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./strategies */ "./tools/segmentation/strategies/index.js"); +/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../cursors */ "./tools/cursors/index.js"); + + + + + + + +/** + * @public + * @class CircleScissorsTool + * @memberof Tools + * @classdesc Tool for manipulating labelmap data by drawing a circle. + * @extends Tools.Base.BaseTool + */ + +var CircleScissorsTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(CircleScissorsTool, _BaseTool); + + /** @inheritdoc */ + function CircleScissorsTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CircleScissorsTool); + + var defaultProps = { + name: 'CircleScissors', + strategies: { + FILL_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillInsideCircle"], + FILL_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillOutsideCircle"], + ERASE_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseOutsideCircle"], + ERASE_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseInsideCircle"] + }, + cursors: { + FILL_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleFillInsideCursor"], + FILL_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleFillOutsideCursor"], + ERASE_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleEraseOutsideCursor"], + ERASE_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleEraseInsideCursor"] + }, + defaultStrategy: 'FILL_INSIDE', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors__WEBPACK_IMPORTED_MODULE_6__["segCircleFillInsideCursor"], + mixins: ['circleSegmentationMixin'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(CircleScissorsTool).call(this, props, defaultProps)); + } + + return CircleScissorsTool; +}(_base__WEBPACK_IMPORTED_MODULE_4__["BaseTool"]); + + + +/***/ }), + +/***/ "./tools/segmentation/CorrectionScissorsTool.js": +/*!******************************************************!*\ + !*** ./tools/segmentation/CorrectionScissorsTool.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return CorrectionScissorsTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../base */ "./tools/base/index.js"); +/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../cursors */ "./tools/cursors/index.js"); +/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./strategies */ "./tools/segmentation/strategies/index.js"); + + + + + + + +/** + * @public + * @class CorrectionScissorsTool + * @memberof Tools + * @classdesc Tool for correcting segments on a labelmap. + * @extends Tools.Base.BaseTool + */ + +var CorrectionScissorsTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(CorrectionScissorsTool, _BaseTool); + + /** @inheritdoc */ + function CorrectionScissorsTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CorrectionScissorsTool); + + var defaultProps = { + name: 'CorrectionScissors', + strategies: { + CORRECTION: _strategies__WEBPACK_IMPORTED_MODULE_6__["correction"] + }, + cursors: { + CORRECTION: _cursors__WEBPACK_IMPORTED_MODULE_5__["freehandFillInsideCursor"] + }, + defaultStrategy: 'CORRECTION', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors__WEBPACK_IMPORTED_MODULE_5__["freehandFillInsideCursor"], + mixins: ['polylineSegmentationMixin'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(CorrectionScissorsTool).call(this, props, defaultProps)); + } + + return CorrectionScissorsTool; +}(_base__WEBPACK_IMPORTED_MODULE_4__["BaseTool"]); + + + +/***/ }), + +/***/ "./tools/segmentation/FreehandScissorsTool.js": +/*!****************************************************!*\ + !*** ./tools/segmentation/FreehandScissorsTool.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FreehandScissorsTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../cursors */ "./tools/cursors/index.js"); +/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./strategies */ "./tools/segmentation/strategies/index.js"); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../base */ "./tools/base/index.js"); + + + + + + + +/** + * @public + * @class FreehandScissorsTool + * @memberof Tools + * @classdesc Tool for manipulating labelmap data by drawing a freehand polygon. + * @extends Tools.Base.BaseTool + */ + +var FreehandScissorsTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(FreehandScissorsTool, _BaseTool); + + /** @inheritdoc */ + function FreehandScissorsTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandScissorsTool); + + var defaultProps = { + name: 'FreehandScissors', + strategies: { + FILL_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillInsideFreehand"], + FILL_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillOutsideFreehand"], + ERASE_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseOutsideFreehand"], + ERASE_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseInsideFreehand"] + }, + cursors: { + FILL_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandFillInsideCursor"], + FILL_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandFillOutsideCursor"], + ERASE_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandEraseOutsideCursor"], + ERASE_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandEraseInsideCursor"] + }, + defaultStrategy: 'FILL_INSIDE', + supportedInteractionTypes: ['Mouse', 'Touch'], + svgCursor: _cursors__WEBPACK_IMPORTED_MODULE_4__["freehandFillInsideCursor"], + mixins: ['freehandSegmentationMixin'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(FreehandScissorsTool).call(this, props, defaultProps)); + } + + return FreehandScissorsTool; +}(_base__WEBPACK_IMPORTED_MODULE_6__["BaseTool"]); + + + +/***/ }), + +/***/ "./tools/segmentation/RectangleScissorsTool.js": +/*!*****************************************************!*\ + !*** ./tools/segmentation/RectangleScissorsTool.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return RectangleScissorsTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../base */ "./tools/base/index.js"); +/* harmony import */ var _strategies__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./strategies */ "./tools/segmentation/strategies/index.js"); +/* harmony import */ var _cursors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../cursors */ "./tools/cursors/index.js"); + + + + + + + +/** + * @public + * @class RectangleScissorsTool + * @memberof Tools + * @classdesc Tool for manipulating labelmap data by drawing a rectangle. + * @extends Tools.Base.BaseTool + */ + +var RectangleScissorsTool = +/*#__PURE__*/ +function (_BaseTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_3___default()(RectangleScissorsTool, _BaseTool); + + /** @inheritdoc */ + function RectangleScissorsTool() { + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, RectangleScissorsTool); + + var defaultProps = { + name: 'RectangleScissors', + strategies: { + FILL_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillInsideRectangle"], + FILL_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["fillOutsideRectangle"], + ERASE_OUTSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseOutsideRectangle"], + ERASE_INSIDE: _strategies__WEBPACK_IMPORTED_MODULE_5__["eraseInsideRectangle"] + }, + cursors: { + FILL_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleFillInsideCursor"], + FILL_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleFillOutsideCursor"], + ERASE_OUTSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleEraseOutsideCursor"], + ERASE_INSIDE: _cursors__WEBPACK_IMPORTED_MODULE_6__["segRectangleEraseInsideCursor"] + }, + defaultStrategy: 'FILL_INSIDE', + supportedInteractionTypes: ['Mouse', 'Touch'], + mixins: ['rectangleSegmentationMixin'] + }; + return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_1___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_2___default()(RectangleScissorsTool).call(this, props, defaultProps)); + } + + return RectangleScissorsTool; +}(_base__WEBPACK_IMPORTED_MODULE_4__["BaseTool"]); + + + +/***/ }), + +/***/ "./tools/segmentation/SphericalBrushTool.js": +/*!**************************************************!*\ + !*** ./tools/segmentation/SphericalBrushTool.js ***! + \**************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return SphericalBrushTool; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); +/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js"); +/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "../node_modules/@babel/runtime/helpers/assertThisInitialized.js"); +/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js"); +/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../base/BaseBrushTool.js */ "./tools/base/BaseBrushTool.js"); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../../store/index.js */ "./store/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _util_logger_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/logger.js */ "./util/logger.js"); + + + + + + + + + + + + + +var logger = Object(_util_logger_js__WEBPACK_IMPORTED_MODULE_11__["getLogger"])('tools:SphericalBrushTool'); +var segmentationModule = Object(_store_index_js__WEBPACK_IMPORTED_MODULE_8__["getModule"])('segmentation'); +/** + * @public + * @class BrushTool + * @memberof Tools.Brush + * @classdesc Tool for drawing segmentations on an image. + * @extends Tools.Base.BaseBrushTool + */ + +var SphericalBrushTool = +/*#__PURE__*/ +function (_BaseBrushTool) { + _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_5___default()(SphericalBrushTool, _BaseBrushTool); + + function SphericalBrushTool() { + var _this; + + var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, SphericalBrushTool); + + var defaultProps = { + name: 'SphericalBrush', + supportedInteractionTypes: ['Mouse', 'Touch'], + configuration: { + alwaysEraseOnClick: false + }, + mixins: ['renderBrushMixin'] + }; + _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(SphericalBrushTool).call(this, props, defaultProps)); + _this.touchDragCallback = _this._paint.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4___default()(_this)); + return _this; + } + /** + * Initialise painting with BaseBrushTool. + * + * @abstract + * @event + * @param {Object} evt - The event. + * @returns {void} + */ + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(SphericalBrushTool, [{ + key: "_startPainting", + value: function _startPainting(evt) { + var configuration = segmentationModule.configuration, + getters = segmentationModule.getters; + var eventData = evt.detail; + var element = eventData.element, + image = eventData.image; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone; + var radius = configuration.radius; + var rows = image.rows, + columns = image.columns; + var pixelSpacing = Math.max(image.rowPixelSpacing, image.columnPixelSpacing); + var stackState = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_10__["getToolState"])(element, 'stack'); + var stackData = stackState.data[0]; + var imageIds = stackData.imageIds; + + var _getters$labelmap2D = getters.labelmap2D(element), + labelmap2D = _getters$labelmap2D.labelmap2D, + labelmap3D = _getters$labelmap2D.labelmap3D, + currentImageIdIndex = _getters$labelmap2D.currentImageIdIndex, + activeLabelmapIndex = _getters$labelmap2D.activeLabelmapIndex; + + var shouldErase = this._isCtrlDown(eventData) || this.configuration.alwaysEraseOnClick; + var imagePlaneOfCurrentImage = cornerstone.metaData.get('imagePlaneModule', image.imageId); + var imagesInRange; + + if (imagePlaneOfCurrentImage) { + var ippOfCurrentImage = imagePlaneOfCurrentImage.imagePositionPatient; + imagesInRange = this._getImagesInRange(currentImageIdIndex, ippOfCurrentImage, imageIds, radius, pixelSpacing); + } else { + logger.warn("No imagePlane metadata found for image, defaulting to circle brush application."); + imagesInRange = [// The current image. + { + imageIdIndex: currentImageIdIndex, + radiusOnImage: radius + }]; + } + + this.paintEventData = { + labelmap2D: labelmap2D, + labelmap3D: labelmap3D, + currentImageIdIndex: currentImageIdIndex, + activeLabelmapIndex: activeLabelmapIndex, + shouldErase: shouldErase, + imagesInRange: imagesInRange + }; + + if (configuration.storeHistory) { + var previousPixeldataForImagesInRange = []; + + for (var i = 0; i < imagesInRange.length; i++) { + var imageIdIndex = imagesInRange[i].imageIdIndex; + var labelmap2DForImageIdIndex = getters.labelmap2DByImageIdIndex(labelmap3D, imageIdIndex, rows, columns); + var previousPixeldata = labelmap2DForImageIdIndex.pixelData.slice(); + previousPixeldataForImagesInRange.push(previousPixeldata); + } + + this.paintEventData.previousPixeldataForImagesInRange = previousPixeldataForImagesInRange; + } + } + /** + * Paints the data to the labelmap. + * + * @private + * @param {Object} evt The data object associated with the event. + * @returns {void} + */ + + }, { + key: "_paint", + value: function _paint(evt) { + var getters = segmentationModule.getters; + var eventData = evt.detail; + var element = eventData.element; + var image = eventData.image; + var rows = image.rows, + columns = image.columns; + var _eventData$currentPoi = eventData.currentPoints.image, + x = _eventData$currentPoi.x, + y = _eventData$currentPoi.y; + + if (x < 0 || x > columns || y < 0 || y > rows) { + return; + } + + var _this$paintEventData = this.paintEventData, + labelmap3D = _this$paintEventData.labelmap3D, + imagesInRange = _this$paintEventData.imagesInRange, + shouldErase = _this$paintEventData.shouldErase; + + for (var i = 0; i < imagesInRange.length; i++) { + var _imagesInRange$i = imagesInRange[i], + imageIdIndex = _imagesInRange$i.imageIdIndex, + radiusOnImage = _imagesInRange$i.radiusOnImage; + var pointerArray = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["getCircle"])(radiusOnImage, rows, columns, x, y); // Cache the view on this image if its not present. + + var labelmap2DForImageIdIndex = getters.labelmap2DByImageIdIndex(labelmap3D, imageIdIndex, rows, columns); // Draw / Erase the active color. + + Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["drawBrushPixels"])(pointerArray, labelmap2DForImageIdIndex.pixelData, labelmap3D.activeSegmentIndex, columns, shouldErase); + } + + _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.updateImage(evt.detail.element); + } + /** + * _getImagesInRange - Returns an array of image Ids within range of the + * sphere, and the in-plane brush radii of those images. + * + * @param {string} currentImageIdIndex The imageId of the image displayed on + * the cornerstone enabled element. + * @param {number[]} ippOfCurrentImage The image position patient of the image. + * @param {string[]} imageIds An array of images in the stack. + * @param {number} radius The radius of the sphere. + * @param {number} pixelSpacing The pixelSpacing. + * @returns {Object[]} An array of imageIds in range and their + * in plane brush radii. + */ + + }, { + key: "_getImagesInRange", + value: function _getImagesInRange(currentImageIdIndex, ippOfCurrentImage, imageIds, radius, pixelSpacing) { + var radiusInMM = radius * pixelSpacing; + var imagesInRange = [// The current image. + { + imageIdIndex: currentImageIdIndex, + radiusOnImage: radius + }]; // Check images above + + for (var i = currentImageIdIndex + 1; i < imageIds.length; i++) { + var radiusOnImage = this._getRadiusOnImage(imageIds[i], ippOfCurrentImage, radiusInMM, pixelSpacing); + + if (!radiusOnImage) { + break; + } + + imagesInRange.push({ + imageIdIndex: i, + radiusOnImage: radiusOnImage + }); + } // Check images below + + + for (var _i = currentImageIdIndex - 1; _i >= 0; _i--) { + var _radiusOnImage = this._getRadiusOnImage(imageIds[_i], ippOfCurrentImage, radiusInMM, pixelSpacing); + + if (!_radiusOnImage) { + break; + } + + imagesInRange.push({ + imageIdIndex: _i, + radiusOnImage: _radiusOnImage + }); + } + + return imagesInRange; + } + /** + * _getRadiusOnImage - If the image is in range of the spherical brush, returns + * the in-plane brush radius on that image. + * + * @param {string} imageId The cornerstone imageId of the image. + * @param {number[]} ippOfCurrentImage The image position patient of the current image. + * @param {number} radiusInMM The radius of the sphere in millimeters. + * @param {string} pixelSpacing The pixelspacing. + * @returns {number|undefined} The brush radius on the image, undefined if + * the image is out of range of the sphere. + */ + + }, { + key: "_getRadiusOnImage", + value: function _getRadiusOnImage(imageId, ippOfCurrentImage, radiusInMM, pixelSpacing) { + var imagePlane = _externalModules_js__WEBPACK_IMPORTED_MODULE_6__["default"].cornerstone.metaData.get('imagePlaneModule', imageId); + + if (!imagePlane) { + logger.warn("Can't find imagePlane metadata for image, cancelling spherical brushing on: ".concat(imageId, ",")); + return; + } + + var ipp = imagePlane.imagePositionPatient; + var distance = Math.sqrt(Math.pow(ipp[0] - ippOfCurrentImage[0], 2) + Math.pow(ipp[1] - ippOfCurrentImage[1], 2) + Math.pow(ipp[2] - ippOfCurrentImage[2], 2)); + + if (distance > radiusInMM) { + // Image too far away, break! + return; + } + + return Math.floor(Math.sqrt(Math.pow(radiusInMM, 2) - Math.pow(distance, 2)) / pixelSpacing); + } + }, { + key: "_endPainting", + value: function _endPainting(evt) { + var _this$paintEventData2 = this.paintEventData, + labelmap3D = _this$paintEventData2.labelmap3D, + imagesInRange = _this$paintEventData2.imagesInRange; + var operations = []; + var configuration = segmentationModule.configuration, + setters = segmentationModule.setters; + + for (var i = 0; i < imagesInRange.length; i++) { + var imageIdIndex = imagesInRange[i].imageIdIndex; + var labelmap2D = labelmap3D.labelmaps2D[imageIdIndex]; // Grab the labels on the slice. + + var segmentSet = new Set(labelmap2D.pixelData); + var iterator = segmentSet.values(); + var segmentsOnLabelmap = []; + var done = false; + + while (!done) { + var next = iterator.next(); + done = next.done; + + if (!done) { + segmentsOnLabelmap.push(next.value); + } + } + + labelmap2D.segmentsOnLabelmap = segmentsOnLabelmap; + + if (configuration.storeHistory) { + var previousPixeldataForImagesInRange = this.paintEventData.previousPixeldataForImagesInRange; + var previousPixeldata = previousPixeldataForImagesInRange[i]; + var _labelmap2D = labelmap3D.labelmaps2D[imageIdIndex]; + var newPixelData = _labelmap2D.pixelData; + operations.push({ + imageIdIndex: imageIdIndex, + diff: Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["getDiffBetweenPixelData"])(previousPixeldata, newPixelData) + }); + } + } + + if (configuration.storeHistory) { + setters.pushState(this.element, operations); + } + + Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_9__["triggerLabelmapModifiedEvent"])(this.element); + } + }]); + + return SphericalBrushTool; +}(_base_BaseBrushTool_js__WEBPACK_IMPORTED_MODULE_7__["default"]); + + + +/***/ }), + +/***/ "./tools/segmentation/index.js": +/*!*************************************!*\ + !*** ./tools/segmentation/index.js ***! + \*************************************/ +/*! exports provided: BrushTool, SphericalBrushTool, FreehandScissorsTool, RectangleScissorsTool, CircleScissorsTool, CorrectionScissorsTool, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _BrushTool__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BrushTool */ "./tools/segmentation/BrushTool.js"); +/* harmony import */ var _SphericalBrushTool__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SphericalBrushTool */ "./tools/segmentation/SphericalBrushTool.js"); +/* harmony import */ var _FreehandScissorsTool__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FreehandScissorsTool */ "./tools/segmentation/FreehandScissorsTool.js"); +/* harmony import */ var _RectangleScissorsTool__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RectangleScissorsTool */ "./tools/segmentation/RectangleScissorsTool.js"); +/* harmony import */ var _CircleScissorsTool__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CircleScissorsTool */ "./tools/segmentation/CircleScissorsTool.js"); +/* harmony import */ var _CorrectionScissorsTool__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./CorrectionScissorsTool */ "./tools/segmentation/CorrectionScissorsTool.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BrushTool", function() { return _BrushTool__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SphericalBrushTool", function() { return _SphericalBrushTool__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FreehandScissorsTool", function() { return _FreehandScissorsTool__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RectangleScissorsTool", function() { return _RectangleScissorsTool__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CircleScissorsTool", function() { return _CircleScissorsTool__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CorrectionScissorsTool", function() { return _CorrectionScissorsTool__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + + + + + + + // Named Exports + + + + + + + // Namespace, default export + +/* harmony default export */ __webpack_exports__["default"] = ({ + BrushTool: _BrushTool__WEBPACK_IMPORTED_MODULE_0__["default"], + SphericalBrushTool: _SphericalBrushTool__WEBPACK_IMPORTED_MODULE_1__["default"], + CircleScissorsTool: _CircleScissorsTool__WEBPACK_IMPORTED_MODULE_4__["default"], + CorrectionScissorsTool: _CorrectionScissorsTool__WEBPACK_IMPORTED_MODULE_5__["default"], + FreehandScissorsTool: _FreehandScissorsTool__WEBPACK_IMPORTED_MODULE_2__["default"], + RectangleScissorsTool: _RectangleScissorsTool__WEBPACK_IMPORTED_MODULE_3__["default"] +}); + +/***/ }), + +/***/ "./tools/segmentation/strategies/correction.js": +/*!*****************************************************!*\ + !*** ./tools/segmentation/strategies/correction.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return correction; }); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index.js */ "./tools/segmentation/strategies/index.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_clip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/clip */ "./util/clip.js"); +/* harmony import */ var _util_isPointInImage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/isPointInImage */ "./util/isPointInImage.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_5__["getLogger"])('util:segmentation:operations:correction'); +/** + * Using the stroke given, determine which action(s) to perfom: + * - Stroke starts and ends inside a segmentation: Behaves as an subtractive freehand scissors. + * - Stroke starts and ends outside a segmentation: Behaves as an additive freehand scissors. + * - Stroke out-in-out: Section is subtracted. + * - Stroke in-out-in: Section is added. + * + * @param {Object} evt The cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * + * @returns {null} + */ + +function correction(evt, operationData) { + var pixelData = operationData.pixelData, + segmentIndex = operationData.segmentIndex, + segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "freehandSegmentationMixin") { + logger.error("correction operation requires freehandSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } + + var nodes = snapPointsToGrid(evt, operationData); + var scissorOperation = checkIfSimpleScissorOperation(nodes, segmentIndex); + + if (scissorOperation.isScissorOperation) { + if (scissorOperation.operation === 'fillInsideFreehand') { + logger.warn('The line never intersects a segment.'); + Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["fillInsideFreehand"])(evt, operationData); + } else if (scissorOperation.operation === 'eraseInsideFreehand') { + logger.warn('The line is only ever inside the segment.'); + Object(_index_js__WEBPACK_IMPORTED_MODULE_1__["eraseInsideFreehand"])(evt, operationData); + } + + return; + } // Create binary labelmap with only this segment for calculations of each operation. + + + var workingLabelMap = new Uint8Array(pixelData.length); + var operations = splitLineIntoSeperateOperations(nodes, segmentIndex); + operations.forEach(function (operation) { + performOperation(operation, pixelData, workingLabelMap, segmentIndex, evt); + }); +} +/** + * Snap the freehand points to the labelmap grid and attach a label for each node. + * + * @param {Object[]} points An array of points drawn by the user. + * @param {UInt16Array|Float32Array} pixelData The 2D labelmap. + * @param {Object} evt The cornerstone event. + * @returns {Object[]} + */ + +function snapPointsToGrid(evt, operationData) { + var pixelData = operationData.pixelData, + points = operationData.points; + var image = evt.detail.image; + var cols = image.width; + var rows = image.height; + var nodes = []; + + for (var i = 0; i < points.length; i++) { + var point = points[i]; + var x = Math.floor(point.x); + var y = Math.floor(point.y); // Clamp within the confines of the image. + + x = Object(_util_clip__WEBPACK_IMPORTED_MODULE_3__["default"])(x, 0, cols - 1); + y = Object(_util_clip__WEBPACK_IMPORTED_MODULE_3__["default"])(y, 0, rows - 1); + var lastNode = nodes[nodes.length - 1]; // Skip double counting of closely drawn freehand points. + + if (lastNode && x === lastNode.x && y === lastNode.y) { + continue; + } + + nodes.push({ + x: x, + y: y, + segment: pixelData[y * cols + x] + }); + } + + return nodes; +} +/** + * Check if the operation is a simple scissors add/remove. + * @param {Object[]} nodes - The nodes snapped to the grid. + * @param {number} segmentIndex + * @returns {Object} Information about the operation. + * `isScissorOperation` is true if the operation is a simple scissor. + * If `isScissorOperation` is true, `operation` says which operation. + */ + + +function checkIfSimpleScissorOperation(nodes, segmentIndex) { + var allInside = true; + var allOutside = true; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + + if (node.segment === segmentIndex) { + allOutside = false; + } else { + allInside = false; + } + + if (!allInside && !allOutside) { + break; + } + } + + if (allOutside) { + return { + isScissorOperation: true, + operation: 'fillInsideFreehand' + }; + } else if (allInside) { + return { + isScissorOperation: true, + operation: 'eraseInsideFreehand' + }; + } + + return { + isScissorOperation: false + }; +} +/** + * Performs the given add/subtract operation using a modification of the Tobias Heimann Correction Algorithm: + * The algorithm is described in full length in Tobias Heimann's diploma thesis (MBI Technical Report 145, p. 37 - 40). + * + * @param {Object} operation The operation. + * @param {UInt16Array|Float32Array} pixelData The 2D labelmap. + * @param {UInt16Array|Float32Array} workingLabelMap A copy of the labelmap for processing purposes. + * @param {number} segmentIndex The label of the tool being used. + * @param {Object} evt The cornerstone event. + */ + + +function performOperation(operation, pixelData, workingLabelMap, segmentIndex, evt) { + var _evt$detail$image = evt.detail.image, + cols = _evt$detail$image.width, + rows = _evt$detail$image.height; + var nodes = operation.nodes, + additive = operation.additive; + var shouldFillOver = additive ? 0 : 1; // Local getters to swap from cornerstone vector notation and flattened array indicies. + + var getPixelIndex = function getPixelIndex(pixelCoord) { + return pixelCoord.y * cols + pixelCoord.x; + }; + + var getPixelCoordinateFromPixelIndex = function getPixelCoordinateFromPixelIndex(pixelIndex) { + return { + x: pixelIndex % cols, + y: Math.floor(pixelIndex / cols) + }; + }; + + if (additive) { + logger.warn('additive operation...'); + } else { + logger.warn('subtractive operation...'); + } + + var _getPixelPaths = getPixelPaths(nodes), + pixelPath = _getPixelPaths.pixelPath, + leftPath = _getPixelPaths.leftPath, + rightPath = _getPixelPaths.rightPath; // Find extent of region for floodfill (This segment + the drawn loop). + // This is to reduce the extent of the outwards floodfill, which constitutes 99% of the computation. + + + var firstPixelOnPath = pixelPath[0]; + var boundingBox = { + xMin: firstPixelOnPath.x, + xMax: firstPixelOnPath.x, + yMin: firstPixelOnPath.y, + yMax: firstPixelOnPath.y + }; // ...whilst also initializing the workingLabelmap + + for (var i = 0; i < workingLabelMap.length; i++) { + if (pixelData[i] === segmentIndex) { + var pixel = getPixelCoordinateFromPixelIndex(i); + expandBoundingBox(boundingBox, pixel); + workingLabelMap[i] = 1; + } else { + workingLabelMap[i] = 0; + } + } // Set workingLabelmap pixelPath to 2 to form a + // Boundary in the working labelmap to contain the flood fills. + + + for (var _i = 0; _i < pixelPath.length; _i++) { + var _pixel = pixelPath[_i]; + workingLabelMap[getPixelIndex(_pixel)] = 2; + expandBoundingBox(boundingBox, _pixel); + } + + clipBoundingBox(boundingBox, rows, cols); + var xMin = boundingBox.xMin, + xMax = boundingBox.xMax, + yMin = boundingBox.yMin, + yMax = boundingBox.yMax; // Define a getter for the fill routine to access the working label map. + + function getter(x, y) { + // Check if out of bounds, as the flood filler doesn't know about the dimensions of + // The data structure. E.g. if cols is 10, (0,1) and (10, 0) would point to the same + // position in this getter. + if (x >= xMax || x < xMin || y >= yMax || y < yMin) { + return; + } + + return workingLabelMap[y * cols + x]; + } + + var leftArea = 0; + var rightArea = 0; // Traverse the path whilst pouring paint off the left and right sides. + + for (var _i2 = 0; _i2 < leftPath.length; _i2++) { + // Left fill + var leftPixel = leftPath[_i2]; + var leftValue = workingLabelMap[getPixelIndex(leftPixel)]; + + if (leftValue === shouldFillOver && Object(_util_isPointInImage__WEBPACK_IMPORTED_MODULE_4__["default"])(leftPixel, rows, cols)) { + leftArea += fillFromPixel(leftPixel, 3, workingLabelMap, getter, cols); + } // Right fill + + + var rightPixel = rightPath[_i2]; + var rightValue = workingLabelMap[getPixelIndex(rightPixel)]; + + if (rightValue === shouldFillOver && Object(_util_isPointInImage__WEBPACK_IMPORTED_MODULE_4__["default"])(rightPixel, rows, cols)) { + rightArea += fillFromPixel(rightPixel, 4, workingLabelMap, getter, cols); + } + } + + if (leftArea === 0 || rightArea === 0) { + // The areas are connected, therefore the start and end + // Of the path go through unconnected regions, exit. + return; + } + + var replaceValue = additive ? segmentIndex : 0; // Fill in smallest area. + + var fillValue = leftArea < rightArea ? 3 : 4; + + for (var _i3 = 0; _i3 < workingLabelMap.length; _i3++) { + if (workingLabelMap[_i3] === fillValue) { + pixelData[_i3] = replaceValue; + } + } + + if (replaceValue === segmentIndex) { + // Fill in the path. + for (var _i4 = 0; _i4 < pixelPath.length; _i4++) { + pixelData[getPixelIndex(pixelPath[_i4])] = segmentIndex; + } + } else { + // Only erase this segment. + for (var _i5 = 0; _i5 < pixelPath.length; _i5++) { + var pixelIndex = getPixelIndex(pixelPath[_i5]); + + if (pixelData[pixelIndex] === segmentIndex) { + pixelData[pixelIndex] = 0; + } + } + } +} +/** + * Expands the bounding box if the pixel falls outside it. + * + * @param {Object} boundingBox The bounding box. + * @param {Object} pixel The pixel. + * @returns {null} + */ + + +function expandBoundingBox(boundingBox, pixel) { + var x = pixel.x, + y = pixel.y; + + if (x < boundingBox.xMin) { + boundingBox.xMin = x; + } + + if (x > boundingBox.xMax) { + boundingBox.xMax = x; + } + + if (y < boundingBox.yMin) { + boundingBox.yMin = y; + } + + if (y > boundingBox.yMax) { + boundingBox.yMax = y; + } +} +/** + * Expands the bounding box by 2 px and then clips it to the image size. + * @param {Object} boundingBox The bounding box. + * @param {number} rows The number of rows. + * @param {number} cols The number of columns. + * @returns {null} + */ + + +function clipBoundingBox(boundingBox, rows, cols) { + // Add a 2px border to stop the floodfill starting out of bounds and exploading. + var border = 2; + boundingBox.xMax = Math.min(boundingBox.xMax + border, cols); + boundingBox.xMin = Math.max(boundingBox.xMin - border, 0); + boundingBox.yMax = Math.min(boundingBox.yMax + border, rows); + boundingBox.yMin = Math.max(boundingBox.yMin - border, 0); +} +/** + * Performs a floodfill from the given pixel to the workingLabelMap. + * @param {Object} pixel The pixel. + * @param {number} fillValue The fill value. + * @param {UInt8Array} workingLabelMap The working labelmap. + * @param {function} getter The getter function for pixels in the labelmap. + * @param {number} cols The number of columns. + * @returns {number} The number of pixels flooded. + */ + + +function fillFromPixel(pixel, fillValue, workingLabelMap, getter, cols) { + var result = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["floodFill"])(getter, [pixel.x, pixel.y]); + var flooded = result.flooded; + + for (var p = 0; p < flooded.length; p++) { + var floodedI = flooded[p]; + workingLabelMap[floodedI[1] * cols + floodedI[0]] = fillValue; + } + + return flooded.length; +} +/** + * Interpolates the pixelPath using an obstacleless path finding algorithm. + * @param {Object[]} nodes The nodes to interpolate between. + * @returns {Object} The pixelPath, and the path to the left and right of it. + */ + + +function getPixelPaths(nodes) { + var pixelPath = []; + + for (var i = 0; i < nodes.length - 1; i++) { + // Push the node. + pixelPath.push(nodes[i]); // Path towards next node. + + pixelPath.push.apply(pixelPath, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["getPixelPathBetweenPixels"])(nodes[i], nodes[i + 1]))); + } // Push final node. + + + pixelPath.push[nodes[nodes.length - 1]]; // Get paths on either side. + + var leftPath = []; + var rightPath = []; + + for (var _i6 = 0; _i6 < pixelPath.length - 1; _i6++) { + var _getNodesPerpendicula = getNodesPerpendicularToPathPixel(pixelPath[_i6], pixelPath[_i6 + 1]), + left = _getNodesPerpendicula.left, + right = _getNodesPerpendicula.right; + + leftPath.push(left); + rightPath.push(right); + } + + return { + pixelPath: pixelPath, + leftPath: leftPath, + rightPath: rightPath + }; +} +/** + * Using the current and next pixel on the path, determine the adjacent pixels + * which are perpendicular to the path direction. (i.e. to the left and to the right). + * + * @param {Object} pathPixel The pixel being queried. + * @param {Object} nextPathPixel the pathPixel's successor. + * + * @returns {Object} The coordinates of the left and right perpendicular pixels. + */ + + +function getNodesPerpendicularToPathPixel(pathPixel, nextPathPixel) { + var direction = { + x: nextPathPixel.x - pathPixel.x, + y: nextPathPixel.y - pathPixel.y + }; // P = pathPixel, n = nextPathPixel, L = left, R = right + // + // |n| |R| | |n| | |L| |n| + // | |p| | |L|p|R| | |p| | + // |L| | | | | | | | | |R| + // + // | |R| | | |L| | + // |n|p| | | |p|n| + // | |L| | | |R| | + // + // |R| | | | | | | | | |L| + // | |p| | |R|p|L| | |p| | + // |n| |L| | |n| | |R| |n| + + if (direction.x === -1 && direction.y === 1) { + return { + left: { + x: pathPixel.x - 1, + y: pathPixel.y - 1 + }, + right: { + x: pathPixel.x + 1, + y: pathPixel.y + 1 + } + }; + } else if (direction.x === 0 && direction.y === 1) { + return { + left: { + x: pathPixel.x - 1, + y: pathPixel.y + }, + right: { + x: pathPixel.x + 1, + y: pathPixel.y + } + }; + } else if (direction.x === 1 && direction.y === 1) { + return { + left: { + x: pathPixel.x - 1, + y: pathPixel.y + 1 + }, + right: { + x: pathPixel.x + 1, + y: pathPixel.y - 1 + } + }; + } else if (direction.x === 1 && direction.y === 0) { + return { + left: { + x: pathPixel.x, + y: pathPixel.y + 1 + }, + right: { + x: pathPixel.x, + y: pathPixel.y - 1 + } + }; + } else if (direction.x === 1 && direction.y === -1) { + return { + left: { + x: pathPixel.x + 1, + y: pathPixel.y + 1 + }, + right: { + x: pathPixel.x - 1, + y: pathPixel.y - 1 + } + }; + } else if (direction.x === 0 && direction.y === -1) { + return { + left: { + x: pathPixel.x + 1, + y: pathPixel.y + }, + right: { + x: pathPixel.x - 1, + y: pathPixel.y + } + }; + } else if (direction.x === -1 && direction.y === -1) { + return { + left: { + x: pathPixel.x + 1, + y: pathPixel.y - 1 + }, + right: { + x: pathPixel.x - 1, + y: pathPixel.y + 1 + } + }; + } else if (direction.x === -1 && direction.y === 0) { + return { + left: { + x: pathPixel.x, + y: pathPixel.y - 1 + }, + right: { + x: pathPixel.x, + y: pathPixel.y + 1 + } + }; + } + + logger.error("Unable to find left and right paths for flood fill ", pathPixel, nextPathPixel, direction); +} +/** + * Splits the path of nodes into seperate add/remove operations. + * + * @param {Object[]} nodes The array of nodes. + * @param {number} segmentIndex The label value to replace. + * @returns {{additive: boolean, nodes: []}[]} An array of operations to perform, + * whether they are `additive` and the + * corresponding `nodes` of the operation. + */ + + +function splitLineIntoSeperateOperations(nodes, segmentIndex) { + // Check whether the first node is inside a segment of the appropriate label or not. + var isLabel = nodes[0].segment === segmentIndex; + var operations = []; + operations.push({ + additive: !isLabel, + nodes: [] + }); + var operationIndex = 0; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + + if (isLabel) { + operations[operationIndex].nodes.push(node); + + if (node.segment !== segmentIndex) { + // Start a new operation and include the last two nodes. + operationIndex++; + isLabel = !isLabel; + operations.push({ + additive: true, + nodes: [] + }); + operations[operationIndex].nodes.push(nodes[i - 1]); + operations[operationIndex].nodes.push(node); + } + } else { + operations[operationIndex].nodes.push(node); + + if (node.segment === segmentIndex) { + // Start a new operation and add include the last two nodes. + operationIndex++; + isLabel = !isLabel; + operations.push({ + additive: false, + nodes: [] + }); + operations[operationIndex].nodes.push(nodes[i - 1]); + operations[operationIndex].nodes.push(node); + } + } + } // Trim the first and last entries, as they don't form full operations. + + + operations.pop(); + operations.shift(); + return operations; +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/eraseCircle.js": +/*!******************************************************!*\ + !*** ./tools/segmentation/strategies/eraseCircle.js ***! + \******************************************************/ +/*! exports provided: eraseInsideCircle, eraseOutsideCircle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseInsideCircle", function() { return eraseInsideCircle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideCircle", function() { return eraseOutsideCircle; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_ellipse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/ellipse */ "./util/ellipse/index.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_getCircleCoords_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/getCircleCoords.js */ "./util/getCircleCoords.js"); + + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('util:segmentation:operations:eraseInsideCircle'); +/** + * EraseInsideCircle - Erase all pixels labeled with the activeSegmentIndex, + * in the region defined by the circle. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function eraseCircle(evt, operationData) { + var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "circleSegmentationMixin") { + logger.error("eraseInsideCircle operation requires circleSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } + + var eventData = evt.detail; + + var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_3__["getBoundingBoxAroundCircle"])(evt), + _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2), + topLeft = _getBoundingBoxAround2[0], + bottomRight = _getBoundingBoxAround2[1]; + + var ellipse = Object(_util_getCircleCoords_js__WEBPACK_IMPORTED_MODULE_4__["default"])(eventData.handles.start, eventData.handles.end); + inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_3__["eraseInsideShape"])(evt, operationData, function (point) { + return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_1__["pointInEllipse"])(ellipse, point); + }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_3__["eraseOutsideShape"])(evt, operationData, function (point) { + return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_1__["pointInEllipse"])(ellipse, point); + }, topLeft, bottomRight); +} +/** + * Erase all pixels inside/outside the region defined by the circle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + + +function eraseInsideCircle(evt, operationData) { + eraseCircle(evt, operationData, true); +} +/** + * Erase all pixels outside the region defined by the circle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function eraseOutsideCircle(evt, operationData) { + eraseCircle(evt, operationData, false); +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/eraseFreehand.js": +/*!********************************************************!*\ + !*** ./tools/segmentation/strategies/eraseFreehand.js ***! + \********************************************************/ +/*! exports provided: eraseInsideFreehand, eraseOutsideFreehand */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseInsideFreehand", function() { return eraseInsideFreehand; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideFreehand", function() { return eraseOutsideFreehand; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/isPointInPolygon */ "./util/isPointInPolygon.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('util:segmentation:operations:eraseInsideFreehand'); +/** + * Erase all pixels labeled with the activeSegmentIndex, + * in the region defined by evt.operationData.points. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function eraseFreehand(evt, operationData) { + var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var points = operationData.points, + segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "freehandSegmentationMixin") { + logger.error("eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } + + var image = evt.detail.image; + var vertices = points.map(function (a) { + return [a.x, a.y]; + }); + + var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundPolygon"])(vertices, image), + _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2), + topLeft = _getBoundingBoxAround2[0], + bottomRight = _getBoundingBoxAround2[1]; + + inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["eraseInsideShape"])(evt, operationData, function (point) { + return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices); + }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["eraseOutsideShape"])(evt, operationData, function (point) { + return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices); + }, topLeft, bottomRight); +} +/** + * Erase all pixels inside/outside the region defined by `operationData.points`. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + + +function eraseInsideFreehand(evt, operationData) { + eraseFreehand(evt, operationData, true); +} +/** + * Erase all pixels outside the region defined by `operationData.points`. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function eraseOutsideFreehand(evt, operationData) { + eraseFreehand(evt, operationData, false); +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/eraseRectangle.js": +/*!*********************************************************!*\ + !*** ./tools/segmentation/strategies/eraseRectangle.js ***! + \*********************************************************/ +/*! exports provided: eraseInsideRectangle, eraseOutsideRectangle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseInsideRectangle", function() { return eraseInsideRectangle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideRectangle", function() { return eraseOutsideRectangle; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_1__["getLogger"])('util:segmentation:operations:eraseInsideRectangle'); +/** + * Erase all pixels inside the region defined by the rectangle. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function eraseRectangle(evt, operationData) { + var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var points = operationData.points, + segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "rectangleSegmentationMixin") { + logger.error("eraseInsideRectangle operation requires rectangleSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } + + var eventData = evt.detail; // Loop through all pixels in the segmentation data mask + // Obtain the bounding box of the entire drawing so that + // we can subset our search. + + var image = eventData.image; + var vertices = points.map(function (a) { + return [a.x, a.y]; + }); + + var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["getBoundingBoxAroundPolygon"])(vertices, image), + _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2), + topLeft = _getBoundingBoxAround2[0], + bottomRight = _getBoundingBoxAround2[1]; + + inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["eraseInsideShape"])(evt, operationData, function () { + return true; + }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_2__["eraseOutsideBoundingBox"])(evt, operationData, topLeft, bottomRight); +} +/** + * Erase all pixels inside/outside the region defined by the rectangle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + + +function eraseInsideRectangle(evt, operationData) { + eraseRectangle(evt, operationData, true); +} +/** + * Erase all pixels outside the region defined by the rectangle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function eraseOutsideRectangle(evt, operationData) { + eraseRectangle(evt, operationData, false); +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/fillCircle.js": +/*!*****************************************************!*\ + !*** ./tools/segmentation/strategies/fillCircle.js ***! + \*****************************************************/ +/*! exports provided: fillInsideCircle, fillOutsideCircle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillInsideCircle", function() { return fillInsideCircle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillOutsideCircle", function() { return fillOutsideCircle; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_ellipse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/ellipse */ "./util/ellipse/index.js"); +/* harmony import */ var _util_getCircleCoords__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/getCircleCoords */ "./util/getCircleCoords.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_4__["getLogger"])('util:segmentation:operations:fillCircle'); +/** + * Fill all pixels inside/outside the region defined by the circle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function fillCircle(evt, operationData) { + var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "circleSegmentationMixin") { + logger.error("fillInsideCircle operation requires circleSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } + + var eventData = evt.detail; + + var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundCircle"])(evt), + _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2), + topLeft = _getBoundingBoxAround2[0], + bottomRight = _getBoundingBoxAround2[1]; + + var ellipse = Object(_util_getCircleCoords__WEBPACK_IMPORTED_MODULE_3__["default"])(eventData.handles.start, eventData.handles.end); + inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillInsideShape"])(evt, operationData, function (point) { + return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_2__["pointInEllipse"])(ellipse, point); + }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillOutsideShape"])(evt, operationData, function (point) { + return Object(_util_ellipse__WEBPACK_IMPORTED_MODULE_2__["pointInEllipse"])(ellipse, point); + }, topLeft, bottomRight); +} +/** + * Fill all pixels inside/outside the region defined by the circle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + + +function fillInsideCircle(evt, operationData) { + fillCircle(evt, operationData, true); +} +/** + * Fill all pixels outside the region defined by the circle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function fillOutsideCircle(evt, operationData) { + fillCircle(evt, operationData, false); +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/fillFreehand.js": +/*!*******************************************************!*\ + !*** ./tools/segmentation/strategies/fillFreehand.js ***! + \*******************************************************/ +/*! exports provided: fillInsideFreehand, fillOutsideFreehand */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillInsideFreehand", function() { return fillInsideFreehand; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillOutsideFreehand", function() { return fillOutsideFreehand; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/isPointInPolygon */ "./util/isPointInPolygon.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('util:segmentation:operations:fillInsideFreehand'); +/** + * Fill all pixels inside/outside the region defined by + * `operationData.points` with the `activeSegmentIndex` value. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function fillFreehand(evt, operationData) { + var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var points = operationData.points, + segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "freehandSegmentationMixin") { + logger.error("eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } // Obtain the bounding box of the entire drawing so that + // we can subset our search. Outside of the bounding box, + // everything is outside of the polygon. + + + var image = evt.detail.image; + var vertices = points.map(function (a) { + return [a.x, a.y]; + }); + + var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundPolygon"])(vertices, image), + _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2), + topLeft = _getBoundingBoxAround2[0], + bottomRight = _getBoundingBoxAround2[1]; + + inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillInsideShape"])(evt, operationData, function (point) { + return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices); + }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillOutsideShape"])(evt, operationData, function (point) { + return Object(_util_isPointInPolygon__WEBPACK_IMPORTED_MODULE_2__["default"])([point.x, point.y], vertices); + }, topLeft, bottomRight); +} +/** + * Fill all pixels inside/outside the region defined by `operationData.points`. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + + +function fillInsideFreehand(evt, operationData) { + fillFreehand(evt, operationData, true); +} +/** + * Fill all pixels outside the region defined by `operationData.points`. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function fillOutsideFreehand(evt, operationData) { + fillFreehand(evt, operationData, false); +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/fillRectangle.js": +/*!********************************************************!*\ + !*** ./tools/segmentation/strategies/fillRectangle.js ***! + \********************************************************/ +/*! exports provided: fillInsideRectangle, fillOutsideRectangle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillInsideRectangle", function() { return fillInsideRectangle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillOutsideRectangle", function() { return fillOutsideRectangle; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _util_segmentation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../util/segmentation */ "./util/segmentation/index.js"); +/* harmony import */ var _util_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../util/logger */ "./util/logger.js"); + + + +var logger = Object(_util_logger__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('util:segmentation:operations:fillInsideRectangle'); +/** + * FillInsideRectangle - Fill all pixels inside/outside the region defined + * by the rectangle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function fillRectangle(evt, operationData) { + var inside = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var points = operationData.points, + segmentationMixinType = operationData.segmentationMixinType; + + if (segmentationMixinType !== "rectangleSegmentationMixin") { + logger.error("eraseInsideRectangle operation requires rectangleSegmentationMixin operationData, recieved ".concat(segmentationMixinType)); + return; + } + + var image = evt.detail.image; + var vertices = points.map(function (a) { + return [a.x, a.y]; + }); + + var _getBoundingBoxAround = Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["getBoundingBoxAroundPolygon"])(vertices, image), + _getBoundingBoxAround2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_getBoundingBoxAround, 2), + topLeft = _getBoundingBoxAround2[0], + bottomRight = _getBoundingBoxAround2[1]; + + inside ? Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillInsideShape"])(evt, operationData, function () { + return true; + }, topLeft, bottomRight) : Object(_util_segmentation__WEBPACK_IMPORTED_MODULE_1__["fillOutsideBoundingBox"])(evt, operationData, topLeft, bottomRight); +} +/** + * Fill all pixels inside/outside the region defined by the rectangle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + + +function fillInsideRectangle(evt, operationData) { + fillRectangle(evt, operationData, true); +} +/** + * Fill all pixels outside the region defined by the rectangle. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @returns {null} + */ + +function fillOutsideRectangle(evt, operationData) { + fillRectangle(evt, operationData, false); +} + +/***/ }), + +/***/ "./tools/segmentation/strategies/index.js": +/*!************************************************!*\ + !*** ./tools/segmentation/strategies/index.js ***! + \************************************************/ +/*! exports provided: correction, eraseInsideFreehand, eraseOutsideFreehand, eraseInsideRectangle, eraseOutsideRectangle, fillInsideFreehand, fillOutsideFreehand, fillInsideRectangle, fillOutsideRectangle, fillInsideCircle, fillOutsideCircle, eraseInsideCircle, eraseOutsideCircle */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _correction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./correction */ "./tools/segmentation/strategies/correction.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "correction", function() { return _correction__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _eraseFreehand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eraseFreehand */ "./tools/segmentation/strategies/eraseFreehand.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseInsideFreehand", function() { return _eraseFreehand__WEBPACK_IMPORTED_MODULE_1__["eraseInsideFreehand"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideFreehand", function() { return _eraseFreehand__WEBPACK_IMPORTED_MODULE_1__["eraseOutsideFreehand"]; }); + +/* harmony import */ var _eraseRectangle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eraseRectangle.js */ "./tools/segmentation/strategies/eraseRectangle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseInsideRectangle", function() { return _eraseRectangle_js__WEBPACK_IMPORTED_MODULE_2__["eraseInsideRectangle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideRectangle", function() { return _eraseRectangle_js__WEBPACK_IMPORTED_MODULE_2__["eraseOutsideRectangle"]; }); + +/* harmony import */ var _fillFreehand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fillFreehand */ "./tools/segmentation/strategies/fillFreehand.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillInsideFreehand", function() { return _fillFreehand__WEBPACK_IMPORTED_MODULE_3__["fillInsideFreehand"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillOutsideFreehand", function() { return _fillFreehand__WEBPACK_IMPORTED_MODULE_3__["fillOutsideFreehand"]; }); + +/* harmony import */ var _fillRectangle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fillRectangle */ "./tools/segmentation/strategies/fillRectangle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillInsideRectangle", function() { return _fillRectangle__WEBPACK_IMPORTED_MODULE_4__["fillInsideRectangle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillOutsideRectangle", function() { return _fillRectangle__WEBPACK_IMPORTED_MODULE_4__["fillOutsideRectangle"]; }); + +/* harmony import */ var _fillCircle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fillCircle */ "./tools/segmentation/strategies/fillCircle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillInsideCircle", function() { return _fillCircle__WEBPACK_IMPORTED_MODULE_5__["fillInsideCircle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillOutsideCircle", function() { return _fillCircle__WEBPACK_IMPORTED_MODULE_5__["fillOutsideCircle"]; }); + +/* harmony import */ var _eraseCircle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./eraseCircle */ "./tools/segmentation/strategies/eraseCircle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseInsideCircle", function() { return _eraseCircle__WEBPACK_IMPORTED_MODULE_6__["eraseInsideCircle"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideCircle", function() { return _eraseCircle__WEBPACK_IMPORTED_MODULE_6__["eraseOutsideCircle"]; }); + + + + + + + + + +/***/ }), + +/***/ "./util/SaveAs.js": +/*!************************!*\ + !*** ./util/SaveAs.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Exports an image of the canvas. + * @export @public @method + * @name saveAs + * + * @param {HTMLElement} element The element to export. + * @param {string} filename The name of the exported image. + * @param {string} [mimetype = 'image/png'] The mimetype of the exported image. + * @returns {void} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (element, filename) { + var mimetype = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'image/png'; + var canvas = element.querySelector('canvas'); // If we are using IE, use canvas.msToBlob + + if (canvas.msToBlob) { + var blob = canvas.msToBlob(); + return window.navigator.msSaveBlob(blob, filename); + } // Thanks to Ken Fyrstenber + // http://stackoverflow.com/questions/18480474/how-to-save-an-image-from-canvas + + + var lnk = document.createElement('a'); // The key here is to set the download attribute of the a tag + + lnk.download = filename; // Convert canvas content to data-uri for link. When download + // Attribute is set the content pointed to by link will be + // Pushed as 'download' in HTML5 capable browsers + + lnk.href = canvas.toDataURL(mimetype, 1); // Create a 'fake' click-event to trigger the download + + if (document.createEvent) { + var e = document.createEvent('MouseEvents'); + e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + lnk.dispatchEvent(e); + } else if (lnk.fireEvent) { + lnk.fireEvent('onclick'); + } +}); + +/***/ }), + +/***/ "./util/angleBetweenPoints.js": +/*!************************************!*\ + !*** ./util/angleBetweenPoints.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Calculates the (interior) angle in degrees from the initial mouse location + * to the current mouse location in relation to the center point. + * @public + * @function angleBetweenPoints + * + * @param {Object} p0 The center point. + * @param {Object} p1 The initial point. + * @param {Object} p2 The final point. + * @returns {Object} { angle, direction } + */ +/* harmony default export */ __webpack_exports__["default"] = (function (p0, p1, p2) { + var p12 = Math.sqrt(Math.pow(p0.x - p1.x, 2) + Math.pow(p0.y - p1.y, 2)); + var p13 = Math.sqrt(Math.pow(p0.x - p2.x, 2) + Math.pow(p0.y - p2.y, 2)); + var p23 = Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2)); + var angle = Math.acos((Math.pow(p12, 2) + Math.pow(p13, 2) - Math.pow(p23, 2)) / (2 * p12 * p13)) * 180 / Math.PI; // The direction of the angle (> 0 clockwise, < 0 anti-clockwise) + + var direction = (p1.x - p0.x) * (p2.y - p0.y) - (p1.y - p0.y) * (p2.x - p0.x); + return { + angle: angle, + direction: direction + }; +}); + +/***/ }), + +/***/ "./util/calculateSUV.js": +/*!******************************!*\ + !*** ./util/calculateSUV.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Calculates a Standardized Uptake Value. + * @export @public @method + * @name calculateSUV + * + * @param {Object} image The image. + * @param {number} storedPixelValue The raw pixel value. + * @param {bool} [skipRescale=fale] + * @returns {number} The SUV. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (image, storedPixelValue) { + var skipRescale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var patientStudyModule = cornerstone.metaData.get('patientStudyModule', image.imageId); + var seriesModule = cornerstone.metaData.get('generalSeriesModule', image.imageId); + + if (!patientStudyModule || !seriesModule) { + return; + } + + var modality = seriesModule.modality; // Image must be PET + + if (modality !== 'PT') { + return; + } + + var modalityPixelValue = skipRescale ? storedPixelValue : storedPixelValue * image.slope + image.intercept; + var patientWeight = patientStudyModule.patientWeight; // In kg + + if (!patientWeight) { + return; + } + + var petSequenceModule = cornerstone.metaData.get('petIsotopeModule', image.imageId); + + if (!petSequenceModule) { + return; + } + + var radiopharmaceuticalInfo = petSequenceModule.radiopharmaceuticalInfo; + var startTime = radiopharmaceuticalInfo.radiopharmaceuticalStartTime; + var totalDose = radiopharmaceuticalInfo.radionuclideTotalDose; + var halfLife = radiopharmaceuticalInfo.radionuclideHalfLife; + var seriesAcquisitionTime = seriesModule.seriesTime; + + if (!startTime || !totalDose || !halfLife || !seriesAcquisitionTime) { + return; + } + + var acquisitionTimeInSeconds = fracToDec(seriesAcquisitionTime.fractionalSeconds || 0) + seriesAcquisitionTime.seconds + seriesAcquisitionTime.minutes * 60 + seriesAcquisitionTime.hours * 60 * 60; + var injectionStartTimeInSeconds = fracToDec(startTime.fractionalSeconds) + startTime.seconds + startTime.minutes * 60 + startTime.hours * 60 * 60; + var durationInSeconds = acquisitionTimeInSeconds - injectionStartTimeInSeconds; + var correctedDose = totalDose * Math.exp(-durationInSeconds * Math.log(2) / halfLife); + var suv = modalityPixelValue * patientWeight / correctedDose * 1000; + return suv; +}); +/** + * Returns a decimal value given a fractional value. + * @private + * @method + * @name fracToDec + * + * @param {number} fractionalValue The value to convert. + * @returns {number} The value converted to decimal. + */ + +function fracToDec(fractionalValue) { + return parseFloat(".".concat(fractionalValue)); +} + +/***/ }), + +/***/ "./util/clip.js": +/*!**********************!*\ + !*** ./util/clip.js ***! + \**********************/ +/*! exports provided: clip, clipToBox, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clip", function() { return clip; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clipToBox", function() { return clipToBox; }); +/** + * Clips a value to an upper and lower bound. + * @export @public @method + * @name clip + * + * @param {number} val The value to clip. + * @param {number} low The lower bound. + * @param {number} high The upper bound. + * @returns {number} The clipped value. + */ +function clip(val, low, high) { + return Math.min(Math.max(low, val), high); +} +/** + * Clips a value within a box. + * @export @public @method + * @name clipToBox + * + * @param {Object} point The point to clip + * @param {Object} box The bounding box to clip to. + * @returns {Object} The clipped point. + */ + +function clipToBox(point, box) { + // Clip an {x, y} point to a box of size {width, height} + point.x = clip(point.x, 0, box.width); + point.y = clip(point.y, 0, box.height); +} +/* harmony default export */ __webpack_exports__["default"] = (clip); + +/***/ }), + +/***/ "./util/convertToVector3.js": +/*!**********************************!*\ + !*** ./util/convertToVector3.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return convertToVector3; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Convert an Array to a cornerstoneMath.Vector3 + * @export @public @method + * @name convertToVector3 + * + * @param {Array|cornerstoneMath.Vector3} arrayOrVector3 Input array or Vector3 + * @returns {cornerstoneMath.Vector3} + */ + +function convertToVector3(arrayOrVector3) { + var cornerstoneMath = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath; + + if (arrayOrVector3 instanceof cornerstoneMath.Vector3) { + return arrayOrVector3; + } + + return new cornerstoneMath.Vector3(arrayOrVector3[0], arrayOrVector3[1], arrayOrVector3[2]); +} + +/***/ }), + +/***/ "./util/copyPoints.js": +/*!****************************!*\ + !*** ./util/copyPoints.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Returns a copy of the points object. + * @public + * @function copyPoints + * + * @param {Object} points - The object to copy. + * @returns {Object} - The copy. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (points) { + var page = _copy(points.page); + + var image = _copy(points.image); + + var client = _copy(points.client); + + var canvas = _copy(points.canvas); + + return { + page: page, + image: image, + client: client, + canvas: canvas + }; +}); +/** + * + * @private + * @function _copy + * + * @param {Object} point - { x, y } + * @returns {Object} { x, y } + */ + +function _copy() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + x = _ref.x, + y = _ref.y; + + return { + x: x, + y: y + }; +} + +/***/ }), + +/***/ "./util/debounce.js": +/*!**************************!*\ + !*** ./util/debounce.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isObject.js */ "./util/isObject.js"); + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked, or until the next browser frame is drawn. The debounced function + * comes with a `cancel` method to cancel delayed `func` invocations and a + * `flush` method to immediately invoke them. Provide `options` to indicate + * whether `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. The `func` is invoked with the last arguments provided to the + * debounced function. Subsequent calls to the debounced function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until the next tick, similar to `setTimeout` with a timeout of `0`. + * + * If `wait` is omitted in an environment with `requestAnimationFrame`, `func` + * invocation will be deferred until the next frame is drawn (typically about + * 16ms). + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `debounce` and `throttle`. + * + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] + * The number of milliseconds to delay; if omitted, `requestAnimationFrame` is + * used (if available). + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', debounce(calculateLayout, 150)) + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })) + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * const debounced = debounce(batchLog, 250, { 'maxWait': 1000 }) + * const source = new EventSource('/stream') + * jQuery(source).on('message', debounced) + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel) + * + * // Check for pending invocations. + * const status = debounced.pending() ? "Pending..." : "Ready" + */ + +function debounce(func, wait, options) { + var lastArgs, lastThis, maxWait, result, timerId, lastCallTime; + var lastInvokeTime = 0; + var leading = false; + var maxing = false; + var trailing = true; // Bypass `requestAnimationFrame` by explicitly setting `wait=0`. + + var useRAF = !wait && wait !== 0 && typeof window.requestAnimationFrame === 'function'; + + if (typeof func !== 'function') { + throw new TypeError('Expected a function'); + } + + wait = Number(wait) || 0; + + if (Object(_isObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(options)) { + leading = Boolean(options.leading); + maxing = 'maxWait' in options; + maxWait = maxing ? Math.max(Number(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? Boolean(options.trailing) : trailing; + } + + function invokeFunc(time) { + var args = lastArgs; + var thisArg = lastThis; + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function startTimer(pendingFunc, wait) { + if (useRAF) { + return window.requestAnimationFrame(pendingFunc); + } + + return setTimeout(pendingFunc, wait); + } + + function cancelTimer(id) { + if (useRAF) { + return window.cancelAnimationFrame(id); + } + + clearTimeout(id); + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; // Start the timer for the trailing edge. + + timerId = startTimer(timerExpired, wait); // Invoke the leading edge. + + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime; + var timeSinceLastInvoke = time - lastInvokeTime; + var timeWaiting = wait - timeSinceLastCall; + return maxing ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime; + var timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + + return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; + } + + function timerExpired() { + var time = Date.now(); + + if (shouldInvoke(time)) { + return trailingEdge(time); + } // Restart the timer. + + + timerId = startTimer(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + + if (trailing && lastArgs) { + return invokeFunc(time); + } + + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + cancelTimer(timerId); + } + + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(Date.now()); + } + + function pending() { + return timerId !== undefined; + } + + function debounced() { + var time = Date.now(); + var isInvoking = shouldInvoke(time); + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + lastArgs = args; + lastThis = this; // eslint-disable-line consistent-this + + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + + if (maxing) { + // Handle invocations in a tight loop. + timerId = startTimer(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + + if (timerId === undefined) { + timerId = startTimer(timerExpired, wait); + } + + return result; + } + + debounced.cancel = cancel; + debounced.flush = flush; + debounced.pending = pending; + return debounced; +} + +/* harmony default export */ __webpack_exports__["default"] = (debounce); + +/***/ }), + +/***/ "./util/debugLib/common.js": +/*!*********************************!*\ + !*** ./util/debugLib/common.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); + + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = __webpack_require__(/*! ms */ "../node_modules/ms/index.js"); + Object.keys(env).forEach(function (key) { + createDebug[key] = env[key]; + }); + /** + * Active `debug` instances. + */ + + createDebug.instances = []; + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + + createDebug.formatters = {}; + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @returns {Number|String} An ANSI color code for the given namespace + * @api private + */ + + function selectColor(namespace) { + var hash = 0; + + for (var i = 0; i < namespace.length; i++) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + + createDebug.selectColor = selectColor; + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @returns {Function} + * @api public + */ + + function createDebug(namespace) { + var prevTime; + + function debug() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + // Disabled? + if (!debug.enabled) { + return; + } + + var self = debug; // Set `diff` timestamp + + var curr = Number(new Date()); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } // Apply any `formatters` transformations + + + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + + index++; + var formatter = createDebug.formatters[format]; + + if (typeof formatter === 'function') { + var val = args[index]; + match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format` + + args.splice(index, 1); + index--; + } + + return match; + }); // Apply env-specific formatting (colors, etc.) + + createDebug.formatArgs.call(self, args); + var logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + // env-specific initialization logic for debug instances + + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + return debug; + } + + function destroy() { + var index = createDebug.instances.indexOf(this); + + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + + return false; + } + + function extend(namespace, delimiter) { + var newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + + + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.names = []; + createDebug.skips = []; + var i; + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // Ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp("^".concat(namespaces.substr(1), "$"))); + } else { + createDebug.names.push(new RegExp("^".concat(namespaces, "$"))); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + var instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + /** + * Disable debug output. + * + * @returns {String} namespaces + * @api public + */ + + + function disable() { + var namespaces = [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(createDebug.names.map(toNamespace)), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(createDebug.skips.map(toNamespace).map(function (namespace) { + return "-".concat(namespace); + }))).join(','); + createDebug.enable(''); + return namespaces; + } + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @returns {Boolean} + * @api public + */ + + + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + var i; + var len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @returns {String} namespace + * @api private + */ + + + function toNamespace(regexp) { + return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, '*'); + } + /** + * Coerce `val`. + * + * @param {Mixed} val + * @returns {Mixed} + * @api private + */ + + + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + + return val; + } + + createDebug.enable(createDebug.load()); + return createDebug; +} + +/* harmony default export */ __webpack_exports__["default"] = (setup); + +/***/ }), + +/***/ "./util/debugLib/index.js": +/*!********************************!*\ + !*** ./util/debugLib/index.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.js */ "./util/debugLib/common.js"); +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +var storage = localstorage(); +var debugLib = { + formatArgs: formatArgs, + save: save, + load: load, + useColors: useColors, + storage: storage +}; +/** + * Colors. + */ + +debugLib.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33']; +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ +// eslint-disable-next-line complexity + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } // Internet Explorer and Edge do not support colors. + + + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + + + return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773 + typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker + typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); +} +/** + * Colorize log arguments if enabled. + * + * @api public + */ + + +function formatArgs(args) { + args[0] = "".concat((this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' '), "+").concat(setupDebug.humanize(this.diff)); + + if (!this.useColors) { + return; + } + + var c = "color: ".concat(this.color); + args.splice(1, 0, c, 'color: inherit'); // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function (match) { + if (match === '%%') { + return; + } + + index++; + + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + args.splice(lastC, 0, c); +} +/** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + + +debugLib.log = console.debug || console.log || function () {}; +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + + +function save(namespaces) { + try { + if (namespaces) { + debugLib.storage.setItem('debug', namespaces); + } else { + debugLib.storage.removeItem('debug'); + } + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + + +function load() { + var r; + + try { + r = debugLib.storage.getItem('debug'); + } catch (error) { + console.warn(error); + } // Swallow + // XXX (@Qix-) should we be logging these? + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + + + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) {// Swallow + // XXX (@Qix-) should we be logging these? + } +} + +var setupDebug = Object(_common_js__WEBPACK_IMPORTED_MODULE_0__["default"])(debugLib); +var formatters = setupDebug.formatters; +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return "[UnexpectedJSONParseError]: ".concat(error.message); + } +}; + +/* harmony default export */ __webpack_exports__["default"] = (setupDebug); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node_modules/process/browser.js */ "../node_modules/process/browser.js"))) + +/***/ }), + +/***/ "./util/deepmerge.js": +/*!***************************!*\ + !*** ./util/deepmerge.js ***! + \***************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); + + +var isMergeableObject = function isMergeableObject(val) { + var nonNullObject = val && _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(val) === 'object'; + return nonNullObject && Object.prototype.toString.call(val) !== '[object RegExp]' && Object.prototype.toString.call(val) !== '[object Date]'; +}; + +var emptyTarget = function emptyTarget(val) { + var isEmpty = Array.isArray(val) ? [] : {}; + return isEmpty; +}; + +var cloneIfNecessary = function cloneIfNecessary(value, optionsArgument) { + var clone = optionsArgument && optionsArgument.clone === true; + return clone && isMergeableObject(value) ? deepmerge(emptyTarget(value), value, optionsArgument) : value; +}; + +var defaultArrayMerge = function defaultArrayMerge(target, source, optionsArgument) { + var destination = target.slice(); + source.forEach(function (e, i) { + if (typeof destination[i] === 'undefined') { + destination[i] = cloneIfNecessary(e, optionsArgument); + } else if (isMergeableObject(e)) { + destination[i] = deepmerge(target[i], e, optionsArgument); + } else if (target.indexOf(e) === -1) { + destination.push(cloneIfNecessary(e, optionsArgument)); + } + }); + return destination; +}; + +var mergeObject = function mergeObject(target, source, optionsArgument) { + var destination = {}; + + if (isMergeableObject(target)) { + Object.keys(target).forEach(function (key) { + destination[key] = cloneIfNecessary(target[key], optionsArgument); + }); + } + + Object.keys(source).forEach(function (key) { + if (!isMergeableObject(source[key]) || !target[key]) { + destination[key] = cloneIfNecessary(source[key], optionsArgument); + } else { + destination[key] = deepmerge(target[key], source[key], optionsArgument); + } + }); + return destination; +}; + +var deepmerge = function deepmerge() { + var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var optionsArgument = arguments.length > 2 ? arguments[2] : undefined; + var array = Array.isArray(source); + var options = optionsArgument || { + arrayMerge: defaultArrayMerge + }; + var arrayMerge = options.arrayMerge || defaultArrayMerge; + + if (array) { + return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : cloneIfNecessary(source, optionsArgument); + } + + return mergeObject(target, source, optionsArgument); +}; + +/* harmony default export */ __webpack_exports__["default"] = (deepmerge); + +/***/ }), + +/***/ "./util/ellipse/calculateEllipseStatistics.js": +/*!****************************************************!*\ + !*** ./util/ellipse/calculateEllipseStatistics.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pointInEllipse.js */ "./util/ellipse/pointInEllipse.js"); + +/** + * Calculates the statistics of an elliptical region of interest. + * + * @private + * @function calculateEllipseStatistics + * + * @param {number[]} sp - Array of the image data's pixel values. + * @param {Object} ellipse - { top, left, height, width } - An object describing the ellipse. + * @returns {Object} { count, mean, variance, stdDev, min, max } + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (sp, ellipse) { + var sum = 0; + var sumSquared = 0; + var count = 0; + var index = 0; + var min = null; + var max = null; + + for (var y = ellipse.top; y < ellipse.top + ellipse.height; y++) { + for (var x = ellipse.left; x < ellipse.left + ellipse.width; x++) { + var point = { + x: x, + y: y + }; + + if (Object(_pointInEllipse_js__WEBPACK_IMPORTED_MODULE_0__["default"])(ellipse, point)) { + if (min === null) { + min = sp[index]; + max = sp[index]; + } + + sum += sp[index]; + sumSquared += sp[index] * sp[index]; + min = Math.min(min, sp[index]); + max = Math.max(max, sp[index]); + count++; + } + + index++; + } + } + + if (count === 0) { + return { + count: count, + mean: 0.0, + variance: 0.0, + stdDev: 0.0, + min: 0.0, + max: 0.0 + }; + } + + var mean = sum / count; + var variance = sumSquared / count - mean * mean; + return { + count: count, + mean: mean, + variance: variance, + stdDev: Math.sqrt(variance), + min: min, + max: max + }; +}); + +/***/ }), + +/***/ "./util/ellipse/index.js": +/*!*******************************!*\ + !*** ./util/ellipse/index.js ***! + \*******************************/ +/*! exports provided: calculateEllipseStatistics, pointInEllipse, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _calculateEllipseStatistics_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calculateEllipseStatistics.js */ "./util/ellipse/calculateEllipseStatistics.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "calculateEllipseStatistics", function() { return _calculateEllipseStatistics_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pointInEllipse.js */ "./util/ellipse/pointInEllipse.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pointInEllipse", function() { return _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + + + // Named + + // Default + +/* harmony default export */ __webpack_exports__["default"] = ({ + calculateEllipseStatistics: _calculateEllipseStatistics_js__WEBPACK_IMPORTED_MODULE_0__["default"], + pointInEllipse: _pointInEllipse_js__WEBPACK_IMPORTED_MODULE_1__["default"] +}); + +/***/ }), + +/***/ "./util/ellipse/pointInEllipse.js": +/*!****************************************!*\ + !*** ./util/ellipse/pointInEllipse.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Returns true if a point is within an ellipse + * @export @public @method + * @name pointInEllipse + * + * @param {Object} ellipse Object defining the ellipse. + * @param {Object} location The location of the point. + * @returns {boolean} True if the point is within the ellipse. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (ellipse, location) { + var xRadius = ellipse.width / 2; + var yRadius = ellipse.height / 2; + + if (xRadius <= 0.0 || yRadius <= 0.0) { + return false; + } + + var center = { + x: ellipse.left + xRadius, + y: ellipse.top + yRadius + }; + /* This is a more general form of the circle equation + * + * X^2/a^2 + Y^2/b^2 <= 1 + */ + + var normalized = { + x: location.x - center.x, + y: location.y - center.y + }; + var inEllipse = normalized.x * normalized.x / (xRadius * xRadius) + normalized.y * normalized.y / (yRadius * yRadius) <= 1.0; + return inEllipse; +}); + +/***/ }), + +/***/ "./util/findAndMoveHelpers.js": +/*!************************************!*\ + !*** ./util/findAndMoveHelpers.js ***! + \************************************/ +/*! exports provided: moveHandleNearImagePoint, findHandleDataNearImagePoint, moveAnnotation */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "moveHandleNearImagePoint", function() { return moveHandleNearImagePoint; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findHandleDataNearImagePoint", function() { return findHandleDataNearImagePoint; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "moveAnnotation", function() { return moveAnnotation; }); +/* harmony import */ var _store_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/index.js */ "./store/index.js"); +/* harmony import */ var _manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../manipulators/getHandleNearImagePoint.js */ "./manipulators/getHandleNearImagePoint.js"); +/* harmony import */ var _manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../manipulators/index.js */ "./manipulators/index.js"); + + + // TODO this should just be in manipulators? They are just manipulator wrappers anyway. + +/** + * Moves a handle near the image point. + * @public + * @function moveHandleNearImagePoint + * @memberof Util + * + * @param {Event} evt The event. + * @param {*} tool The tool + * @param {Object} toolData The toolData that corresponds to the handle. + * @param {Object} handle The handle to be moved. + * @param {string} interactionType + * @returns {undefined} + */ + +var moveHandleNearImagePoint = function moveHandleNearImagePoint(evt, tool, toolData, handle, interactionType) { + toolData.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked = true; + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__["moveHandle"])(evt.detail, tool.name, toolData, handle, tool.options, interactionType); + evt.stopImmediatePropagation(); + evt.stopPropagation(); + evt.preventDefault(); + return; +}; +/** + * Finds the handle near the image point and its corresponding data. + * + * @public + * @function findHandleDataNearImagePoint + * @memberof Util + * + * @param {HTMLElement} element The elment. + * @param {Object} toolState The state of the tool. + * @param {string} toolName The name of the tool the handle corrosponds to. + * @param {Object} coords The coordinates that need to be checked. + * @param {String} [interactionType=mouse] + * @returns {*} + */ + + +var findHandleDataNearImagePoint = function findHandleDataNearImagePoint(element, toolState, toolName, coords) { + var interactionType = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'mouse'; + + for (var i = 0; i < toolState.data.length; i++) { + var data = toolState.data[i]; + var handle = Object(_manipulators_getHandleNearImagePoint_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, data.handles, coords, interactionType === 'mouse' ? _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].clickProximity : _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].touchProximity); + + if (handle) { + return { + handle: handle, + data: data + }; + } + } +}; +/** + * Moves an entire annotation near the click. + * + * @public + * @function moveAnnotation + * @memberof Util + * + * @param {Event} evt The event. + * @param {Object} tool The tool that the annotation belongs to. + * @param {string} tool.name + * @param {Object} [tool.options={}] + * @param {Boolean} [tool.options.preventHandleOutsideImage] + * @param {Boolean} [tool.options.deleteIfHandleOutsideImage] + * @param {Object} annotation The toolData that corresponds to the annotation. + * @param {String} [interactionType=mouse] + * @returns {undefined} + */ + + +var moveAnnotation = function moveAnnotation(evt, tool, annotation) { + var interactionType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'mouse'; + annotation.active = true; + _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked = true; + Object(_manipulators_index_js__WEBPACK_IMPORTED_MODULE_2__["moveAllHandles"])(evt.detail, tool.name, annotation, null, tool.options, interactionType, function () { + annotation.active = false; + _store_index_js__WEBPACK_IMPORTED_MODULE_0__["state"].isToolLocked = false; + }); + evt.stopImmediatePropagation(); + evt.stopPropagation(); + evt.preventDefault(); + return; +}; + + + +/***/ }), + +/***/ "./util/freehand/ClickedLineData.js": +/*!******************************************!*\ + !*** ./util/freehand/ClickedLineData.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ClickedLineData; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); + + +/** + * @public + * @name ClickedLineData + * @classdesc Creates an object containing information about the clicked line. + * @property {number} toolIndex ID of the tool that the line corresponds to. + * @property {Object} handleIndexArray An array of the handle indicies that correspond to the line segment. + */ +var ClickedLineData = +/** + * Constructs an object containing information about the clicked line. + * @param {number} toolIndex - The ID of the tool the line corresponds to. + * @param {Object} handleIndexArray - An array of the handle indicies that correspond to the line segment. + */ +function ClickedLineData(toolIndex, handleIndexArray) { + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ClickedLineData); + + this.toolIndex = toolIndex; + this.handleIndexArray = handleIndexArray; +}; + + + +/***/ }), + +/***/ "./util/freehand/FreehandHandleData.js": +/*!*********************************************!*\ + !*** ./util/freehand/FreehandHandleData.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FreehandHandleData; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); + + +/** + * @public + * @name FreehandHandleData + * @classdesc Creates a single handle for the freehand tool. + * + * @property {number} x The x position. + * @property {number} y The y position. + * @property {boolean} highlight Whether the handle should be rendered as the highlighted color. + * @property {boolean} active Whether the handle is active. + * @property {Object} lines An array of lines associated with the handle. + */ +var FreehandHandleData = +/** + * Constructs a a single handle for the freehand tool + * + * @param {Object} position - The position of the handle. + * @param {boolean} highlight - whether the handle should be rendered as the highlighted color. + * @param {boolean} active - whether the handle is active. + */ +function FreehandHandleData(position) { + var highlight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var active = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandHandleData); + + this.x = position.x; + this.y = position.y; + this.highlight = highlight; + this.active = active; + this.lines = []; +}; + + + +/***/ }), + +/***/ "./util/freehand/FreehandLineFinder.js": +/*!*********************************************!*\ + !*** ./util/freehand/FreehandLineFinder.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return FreehandLineFinder; }); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js"); +/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js"); +/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ClickedLineData.js */ "./util/freehand/ClickedLineData.js"); + + + + + +var distanceThreshold = 10; +/** + * @public + * @class FreehandLineFinder + * @classdesc Class that finds lines of freehand ROIs based on click proximity. + */ + +var FreehandLineFinder = +/*#__PURE__*/ +function () { + /** + * Creates an instance of FreehandLineFinder. + * @param {*} eventData - Data object associated with the event. + * @param {string} toolName - The tool name + * @memberof FreehandLineFinder + */ + function FreehandLineFinder(eventData, toolName) { + _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, FreehandLineFinder); + + this._eventData = eventData; + this._toolName = toolName; + } + /** + * Looks for lines near the mouse cursor. + * + * @public + * @method + * @returns {ClickedLineData} Data object corresponding to the clicked line. + */ + + + _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(FreehandLineFinder, [{ + key: "findLine", + value: function findLine() { + var closestToolIndex = this.findTool(); + + if (closestToolIndex === null) { + return null; + } + + var closeLines = this._getCloseLinesInTool(closestToolIndex); + + if (closeLines) { + var clickedLineData = this._findCorrectLine(closestToolIndex, closeLines); // Note: clickedLineData may be null if no valid projections are found. + + + return clickedLineData; + } // Return null if no valid close lines found. + + + return null; + } + /** + * Looks for tools near the mouse cursor. + * + * @public + * @method + * + * @returns {ClickedLineData} Data object corresponding to the clicked line. + */ + + }, { + key: "findTool", + value: function findTool() { + this._toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(this._eventData.element, this._toolName); + this._mousePoint = this._eventData.currentPoints.canvas; + + if (!this._toolData) { + return null; + } + + var closestHandle = this._nearestHandleToPointAllTools(); + + return closestHandle.toolIndex; + } + /** + * Finds the nearest handle to the mouse cursor for all tools. + * @private + * @method + * @returns {Object} The handle closest to the point. + */ + + }, { + key: "_nearestHandleToPointAllTools", + value: function _nearestHandleToPointAllTools() { + var toolData = this._toolData; + var closestHandle = { + toolIndex: null, + handleIndex: null, + distance: Infinity // Some large number + + }; + + for (var toolIndex = 0; toolIndex < toolData.data.length; toolIndex++) { + var closestHandleForToolI = this._nearestHandleToPoint(toolIndex); + + if (closestHandleForToolI === null) { + continue; + } + + if (closestHandleForToolI.distance < closestHandle.distance) { + closestHandle = closestHandleForToolI; + } + } + + return closestHandle; + } + /** + * Finds the nearest handle to the mouse cursor for a specific tool. + * @private + * @method + * + * @param {number} toolIndex The index of the particular freehand tool. + * @returns {Object} An object containing information about the closest handle. + */ + + }, { + key: "_nearestHandleToPoint", + value: function _nearestHandleToPoint(toolIndex) { + var eventData = this._eventData; + var toolData = this._toolData; + var data = toolData.data[toolIndex]; + var points = data.handles.points; + + if (points === undefined) { + return null; + } + + if (data.visible === false) { + return null; + } + + var closest = { + toolIndex: toolIndex, + handleIndex: null, + distance: Infinity // Some large number + + }; + + for (var i = 0; i < points.length; i++) { + var handleCanvas = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(eventData.element, points[i]); + var handleDistanceFromMousePoint = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstoneMath.point.distance(handleCanvas, this._mousePoint); + + if (handleDistanceFromMousePoint < closest.distance) { + closest.handleIndex = i; + closest.distance = handleDistanceFromMousePoint; + } + } + + return closest; + } + /** + * Finds all the lines close to the mouse point for a particular tool. + * @private + * @method + * + * @param {number} toolIndex The index of the particular freehand tool. + * @returns {Object} An array of lines close to the mouse point. + */ + + }, { + key: "_getCloseLinesInTool", + value: function _getCloseLinesInTool(toolIndex) { + var toolData = this._toolData; + var points = toolData.data[toolIndex].handles.points; + var closeLines = []; + + for (var i = 0; i < points.length; i++) { + var nextIndex = FreehandLineFinder.getNextHandleIndex(i, points.length); + + var d = this._distanceOfPointfromLine(points[i], points[nextIndex]); + + if (d < distanceThreshold) { + closeLines.push([i, nextIndex]); + } + } + + return closeLines; + } + /** + * Finds the line the user clicked on from an array of close lines.\ + * @private + * @method + * + * @param {number} toolIndex The index of the particular freehand tool. + * @param {Object} closeLines An array of lines close to the mouse point. + * @returns {ClickedLineData|null} An instance of ClickedLineData containing information about the line, or null if no line is correct. + */ + + }, { + key: "_findCorrectLine", + value: function _findCorrectLine(toolIndex, closeLines) { + // Test if any candidate lines can be projected onto by the mousePoint + for (var i = 0; i < closeLines.length; i++) { + if (this._pointProjectsToLineSegment(toolIndex, closeLines[i])) { + return new _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_4__["default"](toolIndex, closeLines[i]); + } + } // No valid line found + + + return null; + } + /** + * Returns true if the mouse point projects onto the line segment. + * @private + * @method + * + * @param {number} toolIndex The index of the particular freehand tool. + * @param {Object} handleIndexArray An array of indicies corresponding to the line segment. + * @returns {boolean} True if the mouse point projects onto the line segment + */ + + }, { + key: "_pointProjectsToLineSegment", + value: function _pointProjectsToLineSegment(toolIndex, handleIndexArray) { + var eventData = this._eventData; + var toolData = this._toolData; + var data = toolData.data[toolIndex]; + var points = data.handles.points; + + if (data.handles.points === undefined) { + return; + } + + if (data.visible === false) { + return false; + } + + var handle1 = points[handleIndexArray[0]]; + var handle2 = points[handleIndexArray[1]]; + var p = FreehandLineFinder.getCanvasPointsFromHandles(handle1, handle2, eventData.element); + var r = FreehandLineFinder.getLineAsVector(p); + + var m = this._getLineOriginToMouseAsVector(p); // Project vector m onto r to see if the point is within bounds of line segment + + + var mProj = (m[0] * r[0] + m[1] * r[1]) / r.magnitude; + + if (mProj > 0 && mProj < r.magnitude) { + return true; + } + + return false; + } + /** + * Returns the canvas positions from the handle's pixel positions. + * + * @static + * @public + * @method + * @param {FreehandHandleData} handle1 The first handle. + * @param {FreehandHandleData} handle2 The second handle. + * @param {Object} element The element on which the handles reside. + * @returns {Object} An array contsining the handle positions in canvas coordinates. + */ + + }, { + key: "_getLineOriginToMouseAsVector", + + /** + * Constructs a vector from the direction and magnitude of the line from the the line origin to the mouse cursor. + * @private + * @method + * + * @param {Object} p An array of two points respresenting the line segment. + * @returns {Object} An array containing the x and y components of the vector. + */ + value: function _getLineOriginToMouseAsVector(p) { + var m = [this._mousePoint.x - p[0].x, this._mousePoint.y - p[0].y]; + return m; + } + /** + * Calculates the perpendicular distance of the mouse cursor from a line segment. + * @private + * @method + * + * @param {FreehandHandleData} handle1 The first handle. + * @param {FreehandHandleData} handle2 The first handle. + * @returns {number} The perpendicular distance of the mouse cursor from the line segment. + */ + + }, { + key: "_distanceOfPointfromLine", + value: function _distanceOfPointfromLine(handle1, handle2) { + var eventData = this._eventData; + var p1 = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(eventData.element, handle1); + var p2 = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(eventData.element, handle2); + var pMouse = this._mousePoint; // Perpendicular distance of point from line: + // = 2* area of triangle(p1,p2,pm) / length of triangle's base |p2 - p1| + + var twiceAreaOfTriangle = Math.abs((p2.y - p1.y) * pMouse.x - (p2.x - p1.x) * pMouse.y + p2.x * p1.y - p2.y * p1.x); + var rMagnitude = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstoneMath.point.distance(p1, p2); + var d = twiceAreaOfTriangle / rMagnitude; + return d; + } + /** + * Gets the next handl index from a cyclical array of points. + * + * @static + * @public + * @method + * + * @param {number} currentIndex The current index. + * @param {number} length The number of handles in the polygon. + * @returns {number} The index of the next handle. + */ + + }], [{ + key: "getCanvasPointsFromHandles", + value: function getCanvasPointsFromHandles(handle1, handle2, element) { + var p = []; // Point r from left to right so that we only have one orientation to test. + + if (handle1.x < handle2.x) { + p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle1)); + p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle2)); + } else { + p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle2)); + p.push(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.pixelToCanvas(element, handle1)); + } + + return p; + } + /** + * Converts a line segment to a vector. + * + * @static + * @public + * @method + * @param {Object} p An array of two points respresenting the line segment. + * @returns {Object} An array containing the x and y components of the vector, as well as a magnitude property. + */ + + }, { + key: "getLineAsVector", + value: function getLineAsVector(p) { + var r = [p[1].x - p[0].x, p[1].y - p[0].y]; + r.magnitude = _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstoneMath.point.distance(p[0], p[1]); + return r; + } + }, { + key: "getNextHandleIndex", + value: function getNextHandleIndex(currentIndex, length) { + var nextIndex; + + if (currentIndex < length - 1) { + nextIndex = currentIndex + 1; + } else { + nextIndex = 0; + } + + return nextIndex; + } + }]); + + return FreehandLineFinder; +}(); + + + +/***/ }), + +/***/ "./util/freehand/addLine.js": +/*!**********************************!*\ + !*** ./util/freehand/addLine.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * AddLine - Adds a line to a specifc index of a freehand tool points array. + * + * @param {Object[]} points The array of points. + * @param {Number} insertIndex The index to insert the line. + * @returns {Null} description + */ +/* harmony default export */ __webpack_exports__["default"] = (function (points, insertIndex) { + // Add the line from the inserted handle to the handle after + if (insertIndex === points.length - 1) { + points[insertIndex].lines.push(points[0]); + } else { + points[insertIndex].lines.push(points[insertIndex + 1]); + } +}); + +/***/ }), + +/***/ "./util/freehand/calculateFreehandStatistics.js": +/*!******************************************************!*\ + !*** ./util/freehand/calculateFreehandStatistics.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _pointInFreehand_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pointInFreehand.js */ "./util/freehand/pointInFreehand.js"); + +/** + * Calculates the statistics of all the pixels within the freehand object. + * @export @public @method + * @name calculateFreehandStatistics + * + * @param {Object} sp An array of the pixel data. + * @param {Object} boundingBox Rectangular box enclosing the polygon. + * @param {Object} dataHandles Data object associated with the tool. + * @returns {Object} Object containing the derived statistics. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (sp, boundingBox, dataHandles) { + var statisticsObj = { + count: 0, + mean: 0.0, + variance: 0.0, + stdDev: 0.0 + }; + var sum = getSum(sp, boundingBox, dataHandles); + + if (sum.count === 0) { + return statisticsObj; + } + + statisticsObj.count = sum.count; + statisticsObj.mean = sum.value / sum.count; + statisticsObj.variance = sum.squared / sum.count - statisticsObj.mean * statisticsObj.mean; + statisticsObj.stdDev = Math.sqrt(statisticsObj.variance); + return statisticsObj; +}); +/** + * Calculates the sum, squared sum and count of all pixels within the polygon. + * @private + * @method + * @name getSum + * + * @param {Object} sp An array of the pixel data. + * @param {Object} boundingBox Rectangular box enclosing the polygon. + * @param {Object} dataHandles Data object associated with the tool. + * @returns {Object} Object containing the sum, squared sum and pixel count. + */ + +function getSum(sp, boundingBox, dataHandles) { + var sum = { + value: 0, + squared: 0, + count: 0 + }; + var index = 0; + + for (var y = boundingBox.top; y < boundingBox.top + boundingBox.height; y++) { + for (var x = boundingBox.left; x < boundingBox.left + boundingBox.width; x++) { + var point = { + x: x, + y: y + }; + sumPointIfInFreehand(dataHandles, point, sum, sp[index]); + index++; + } + } + + return sum; +} +/** + * Adds the pixel to the workingSum if it is within the polygon. + * @private + * @method sumPointIfInFreehand + * + * @param {Object} dataHandles Data object associated with the tool. + * @param {Object} point The pixel coordinates. + * @param {Object} workingSum The working sum, squared sum and pixel count. + * @param {Object} pixelValue The pixel value. // @modifies {workingSum} + * @returns {undefined} + */ + + +function sumPointIfInFreehand(dataHandles, point, workingSum, pixelValue) { + if (Object(_pointInFreehand_js__WEBPACK_IMPORTED_MODULE_0__["default"])(dataHandles, point)) { + workingSum.value += pixelValue; + workingSum.squared += pixelValue * pixelValue; + workingSum.count++; + } +} + +/***/ }), + +/***/ "./util/freehand/freehandArea.js": +/*!***************************************!*\ + !*** ./util/freehand/freehandArea.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Calculates the area of a freehand tool polygon. + * @export @public @method + * @name freehandArea + * + * @param {Object} dataHandles Data object associated with the tool. + * @param {Object} scaling Area scaling of image. + * @returns {number} The area of the polygon. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (dataHandles, scaling) { + var freeHandArea = 0; + var j = dataHandles.length - 1; // The last vertex is the previous one to the first + + scaling = scaling || 1; // If scaling is falsy, set scaling to 1 + + for (var i = 0; i < dataHandles.length; i++) { + freeHandArea += (dataHandles[j].x + dataHandles[i].x) * (dataHandles[j].y - dataHandles[i].y); + j = i; // Here j is previous vertex to i + } + + return Math.abs(freeHandArea * scaling / 2.0); +}); + +/***/ }), + +/***/ "./util/freehand/freehandIntersect.js": +/*!********************************************!*\ + !*** ./util/freehand/freehandIntersect.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Orientation algoritm to determine if two lines cross. + * Credit and details: geeksforgeeks.org/check-if-two-given-line-segments-intersect/ + */ + +/** + * Determines whether a new handle causes an intersection of the lines of the polygon. + * @public + * @function newHandle + * + * @param {Object} candidateHandle The new handle to check. + * @param {Object} dataHandles data object associated with the tool. + * @returns {boolean} - Whether the new line intersects with any other lines of the polygon. + */ +function newHandle(candidateHandle, dataHandles) { + // Check if the proposed line will intersect any existent line + var lastHandleId = dataHandles.length - 1; + var lastHandle = getCoords(dataHandles[lastHandleId]); + var newHandle = getCoords(candidateHandle); + return doesIntersectOtherLines(dataHandles, lastHandle, newHandle, [lastHandleId]); +} +/** + * Checks if the last line of a polygon will intersect the other lines of the polgyon. + * @public + * @function end + * + * @param {Object} dataHandles data object associated with the tool. + * @returns {boolean} Whether the last line intersects with any other lines of the polygon. + */ + + +function end(dataHandles) { + var lastHandleId = dataHandles.length - 1; + var lastHandle = getCoords(dataHandles[lastHandleId]); + var firstHandle = getCoords(dataHandles[0]); + return doesIntersectOtherLines(dataHandles, lastHandle, firstHandle, [lastHandleId, 0]); +} +/** + * Checks whether the modification of a handle's position causes intersection of the lines of the polygon. + * @public + * @method modify + * + * @param {Object} dataHandles Data object associated with the tool. + * @param {number} modifiedHandleId The id of the handle being modified. + * @returns {boolean} Whether the modfication causes any intersections. + */ + + +function modify(dataHandles, modifiedHandleId) { + // Check if the modifiedHandle's previous and next lines will intersect any other line in the polygon + var modifiedHandle = getCoords(dataHandles[modifiedHandleId]); // Previous neightbor handle + + var neighborHandleId = modifiedHandleId - 1; + + if (modifiedHandleId === 0) { + neighborHandleId = dataHandles.length - 1; + } + + var neighborHandle = getCoords(dataHandles[neighborHandleId]); + + if (doesIntersectOtherLines(dataHandles, modifiedHandle, neighborHandle, [modifiedHandleId, neighborHandleId])) { + return true; + } // Next neightbor handle + + + if (modifiedHandleId === dataHandles.length - 1) { + neighborHandleId = 0; + } else { + neighborHandleId = modifiedHandleId + 1; + } + + neighborHandle = getCoords(dataHandles[neighborHandleId]); + return doesIntersectOtherLines(dataHandles, modifiedHandle, neighborHandle, [modifiedHandleId, neighborHandleId]); +} +/** + * Checks whether the line (p1,q1) intersects any of the other lines in the polygon. + * @private + * @function doesIntersectOtherLines + * + * @param {Object} dataHandles Data object associated with the tool. + * @param {Object} p1 Coordinates of the start of the line. + * @param {Object} q1 Coordinates of the end of the line. + * @param {Object} ignoredHandleIds Ids of handles to ignore (i.e. lines that share a vertex with the line being tested). + * @returns {boolean} Whether the line intersects any of the other lines in the polygon. + */ + + +function doesIntersectOtherLines(dataHandles, p1, q1, ignoredHandleIds) { + var j = dataHandles.length - 1; + + for (var i = 0; i < dataHandles.length; i++) { + if (ignoredHandleIds.indexOf(i) !== -1 || ignoredHandleIds.indexOf(j) !== -1) { + j = i; + continue; + } + + var p2 = getCoords(dataHandles[j]); + var q2 = getCoords(dataHandles[i]); + + if (doesIntersect(p1, q1, p2, q2)) { + return true; + } + + j = i; + } + + return false; +} +/** + * Checks whether the line (p1,q1) intersects the line (p2,q2) via an orientation algorithm. + * @private + * @function doesIntersect + * + * @param {Object} p1 Coordinates of the start of the line 1. + * @param {Object} q1 Coordinates of the end of the line 1. + * @param {Object} p2 Coordinates of the start of the line 2. + * @param {Object} q2 Coordinates of the end of the line 2. + * @returns {boolean} Whether lines (p1,q1) and (p2,q2) intersect. + */ + + +function doesIntersect(p1, q1, p2, q2) { + var result = false; + var orient = [orientation(p1, q1, p2), orientation(p1, q1, q2), orientation(p2, q2, p1), orientation(p2, q2, q1)]; // General Case + + if (orient[0] !== orient[1] && orient[2] !== orient[3]) { + return true; + } // Special Cases + + + if (orient[0] === 0 && onSegment(p1, p2, q1)) { + // If p1, q1 and p2 are colinear and p2 lies on segment p1q1 + result = true; + } else if (orient[1] === 0 && onSegment(p1, q2, q1)) { + // If p1, q1 and p2 are colinear and q2 lies on segment p1q1 + result = true; + } else if (orient[2] === 0 && onSegment(p2, p1, q2)) { + // If p2, q2 and p1 are colinear and p1 lies on segment p2q2 + result = true; + } else if (orient[3] === 0 && onSegment(p2, q1, q2)) { + // If p2, q2 and q1 are colinear and q1 lies on segment p2q2 + result = true; + } + + return result; +} +/** + * Returns an object with two properties, x and y, from a heavier FreehandHandleData object. + * @private + * @function getCoords + * + * @param {Object} dataHandle Data object associated with a single handle in the freehand tool. + * @returns {Object} An object containing position propeties x and y. + */ + + +function getCoords(dataHandle) { + return { + x: dataHandle.x, + y: dataHandle.y + }; +} +/** + * Checks the orientation of 3 points. + * @private + * @function orientation + * + * @param {Object} p First point. + * @param {Object} q Second point. + * @param {Object} r Third point. + * @returns {number} - 0: Colinear, 1: Clockwise, 2: Anticlockwise + */ + + +function orientation(p, q, r) { + var orientationValue = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); + + if (orientationValue === 0) { + return 0; // Colinear + } + + return orientationValue > 0 ? 1 : 2; +} +/** + * Checks if point q lines on the segment (p,r). + * @private + * @function onSegment + * + * @param {Object} p Point p. + * @param {Object} q Point q. + * @param {Object} r Point r. + * @returns {boolean} - If q lies on line segment (p,r). + */ + + +function onSegment(p, q, r) { + if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) { + return true; + } + + return false; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + newHandle: newHandle, + end: end, + modify: modify +}); + +/***/ }), + +/***/ "./util/freehand/index.js": +/*!********************************!*\ + !*** ./util/freehand/index.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _calculateFreehandStatistics_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calculateFreehandStatistics.js */ "./util/freehand/calculateFreehandStatistics.js"); +/* harmony import */ var _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ClickedLineData.js */ "./util/freehand/ClickedLineData.js"); +/* harmony import */ var _freehandArea_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./freehandArea.js */ "./util/freehand/freehandArea.js"); +/* harmony import */ var _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FreehandHandleData.js */ "./util/freehand/FreehandHandleData.js"); +/* harmony import */ var _freehandIntersect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./freehandIntersect.js */ "./util/freehand/freehandIntersect.js"); +/* harmony import */ var _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FreehandLineFinder.js */ "./util/freehand/FreehandLineFinder.js"); +/* harmony import */ var _insertOrDelete_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./insertOrDelete.js */ "./util/freehand/insertOrDelete.js"); +/* harmony import */ var _pointInFreehand_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pointInFreehand.js */ "./util/freehand/pointInFreehand.js"); +/* harmony import */ var _addLine_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./addLine.js */ "./util/freehand/addLine.js"); + + + + + + + + + +/* harmony default export */ __webpack_exports__["default"] = ({ + calculateFreehandStatistics: _calculateFreehandStatistics_js__WEBPACK_IMPORTED_MODULE_0__["default"], + ClickedLineData: _ClickedLineData_js__WEBPACK_IMPORTED_MODULE_1__["default"], + freehandArea: _freehandArea_js__WEBPACK_IMPORTED_MODULE_2__["default"], + FreehandHandleData: _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_3__["default"], + freehandIntersect: _freehandIntersect_js__WEBPACK_IMPORTED_MODULE_4__["default"], + FreehandLineFinder: _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_5__["default"], + insertOrDelete: _insertOrDelete_js__WEBPACK_IMPORTED_MODULE_6__["default"], + pointInFreehand: _pointInFreehand_js__WEBPACK_IMPORTED_MODULE_7__["default"], + addLine: _addLine_js__WEBPACK_IMPORTED_MODULE_8__["default"] +}); + +/***/ }), + +/***/ "./util/freehand/insertOrDelete.js": +/*!*****************************************!*\ + !*** ./util/freehand/insertOrDelete.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FreehandLineFinder.js */ "./util/freehand/FreehandLineFinder.js"); +/* harmony import */ var _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FreehandHandleData.js */ "./util/freehand/FreehandHandleData.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _addLine_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addLine.js */ "./util/freehand/addLine.js"); + + + + + +/** + * Inserts or deletes a point from a freehand tool. + * @export @public @method + * @name insertOrDelete + * + * @param {Object} evt The event. + * @param {Object} nearby Object containing information about a nearby handle. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (evt, nearby) { + var eventData = evt.detail; + + if (nearby && nearby.handleNearby !== null) { + var deleteInfo = { + toolIndex: nearby.toolIndex, + handleIndex: nearby.handleNearby + }; + + _deletePoint.call(this, eventData, deleteInfo); + } else { + var freehandLineFinder = new _FreehandLineFinder_js__WEBPACK_IMPORTED_MODULE_0__["default"](eventData, this.name); + var insertInfo = freehandLineFinder.findLine(); + + if (insertInfo) { + _insertPoint.call(this, eventData, insertInfo); + } + } +}); +/** + * Deletes a point from a freehand tool. + * @private + * @method + * + * @param {Object} eventData The data object associated with the event. + * @param {Object} deleteInfo Object containing information about which point to delete. + * @returns {void} + */ + +function _deletePoint(eventData, deleteInfo) { + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(eventData.element, this.name); + + if (toolData === undefined) { + return; + } + + var deleteHandle = deleteInfo.handleIndex; + var toolIndex = deleteInfo.toolIndex; // Get the toolData from insertInfo + + var data = toolData.data[toolIndex]; + var points = data.handles.points; // Only allow delete if > 3 points + + if (points.length <= 3) { + return; + } // Link the line of the previous handle to the one after handles[deleteHandle]; + + + if (deleteHandle === points.length - 1) { + points[deleteHandle - 1].lines.pop(); + points[deleteHandle - 1].lines.push(points[0]); + } else if (deleteHandle === 0) { + points[points.length - 1].lines.pop(); + points[points.length - 1].lines.push(points[deleteHandle + 1]); + } else { + points[deleteHandle - 1].lines.pop(); + points[deleteHandle - 1].lines.push(points[deleteHandle + 1]); + } // Remove the handle + + + points.splice(deleteHandle, 1); + data.invalidated = true; + data.active = true; + data.highlight = true; // Force onImageRendered to fire + + _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.updateImage(eventData.element); +} +/** + * Inserts a new point into a freehand tool. + * @private + * @method + * + * @param {Object} eventData - The data object associated with the event. + * @param {Object} insertInfo - Object containing information about where to insert the point. + * @returns {void} + */ + + +function _insertPoint(eventData, insertInfo) { + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(eventData.element, this.name); + + if (toolData === undefined) { + return; + } // Get the toolData from insertInfo + + + var data = toolData.data[insertInfo.toolIndex]; + + var insertIndex = _getInsertionIndex(insertInfo); + + if (insertIndex === Infinity) { + return; + } + + var handleData = new _FreehandHandleData_js__WEBPACK_IMPORTED_MODULE_1__["default"](eventData.currentPoints.image); + var points = data.handles.points; // Add the new handle + + points.splice(insertIndex, 0, handleData); // Add the line from the previous handle to the inserted handle (note the tool is now one increment longer) + + points[insertIndex - 1].lines.pop(); + points[insertIndex - 1].lines.push(eventData.currentPoints.image); + Object(_addLine_js__WEBPACK_IMPORTED_MODULE_4__["default"])(points, insertIndex); + data.active = true; + data.highlight = true; // Force onImageRendered to fire + + data.invalidated = true; + _externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.updateImage(eventData.element); +} +/** + * Gets the handle index of a tool in which to insert the new point. + * @private + * @method + * + * @param {Object} insertInfo - Object containing information about where to insert the point. + * @returns {void} + */ + + +function _getInsertionIndex(insertInfo) { + // Get lowest index that isn't zero + var handleIndexArray = insertInfo.handleIndexArray; + var insertIndex = Infinity; + var arrayContainsZero = handleIndexArray.includes(0); + + for (var i = 0; i < handleIndexArray.length; i++) { + var index = handleIndexArray[i]; + + if (index !== 0 && index < insertIndex) { + insertIndex = index; + } + } // Treat the special case of handleIndexArray === [0,1] || [1,0] + + + if (arrayContainsZero && insertIndex === 1) { + insertIndex = 0; + } // The insertion index shall be just after the lower index + + + insertIndex++; + return insertIndex; +} + +/***/ }), + +/***/ "./util/freehand/pointInFreehand.js": +/*!******************************************!*\ + !*** ./util/freehand/pointInFreehand.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Calculates whether "location" is inside the polygon defined by dataHandles + * by counting the number of times a ray originating from "point" crosses the + * edges of the polygon. Odd === inside, Even === outside. + * @export @public @method + * @name pointInFreehand + * + * @param {Object} dataHandles Data object associated with the tool. + * @param {Object} location The coordinates being queried. + * @returns {boolean} True if the location is inside the polygon defined by dataHandles. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (dataHandles, location) { + var inROI = false; // Cycle round pairs of points + + var j = dataHandles.length - 1; // The last vertex is the previous one to the first + + for (var i = 0; i < dataHandles.length; i++) { + if (rayFromPointCrosssesLine(location, dataHandles[i], dataHandles[j])) { + inROI = !inROI; + } + + j = i; // Here j is previous vertex to i + } + + return inROI; +}); +/** + * Returns true if the y-position yp is enclosed within y-positions y1 and y2. + * @private + * @method + * @name isEnclosedY + * + * @param {number} yp The y position of point p. + * @param {number} y1 The y position of point 1. + * @param {number} y2 The y position of point 2. + * @returns {boolean} True if the y-position yp is enclosed within y-positions y1 and y2. + */ + +function isEnclosedY(yp, y1, y2) { + if (y1 < yp && yp < y2 || y2 < yp && yp < y1) { + return true; + } + + return false; +} +/** + * Returns true if the line segment is to the right of the point. + * @private + * @method + * @name isLineRightOfPoint + * + * @param {Object} point The point being queried. + * @param {Object} lp1 The first point of the line segment. + * @param {Object} lp2 The second point of the line segment. + * @returns {boolean} True if the line is to the right of the point. + */ + + +function isLineRightOfPoint(point, lp1, lp2) { + // If both right of point return true + if (lp1.x > point.x && lp2.x > point.x) { + return true; + } // Catch when line is vertical. + + + if (lp1.x === lp2.x) { + return point.x < lp1.x; + } // Put leftmost point in lp1 + + + if (lp1.x > lp2.x) { + var lptemp = lp1; + lp1 = lp2; + lp2 = lptemp; + } + + var lPointY = lineSegmentAtPoint(point, lp1, lp2); // If the lp1.x and lp2.x enclose point.x check gradient of line and see if + // Point is above or below the line to calculate if it inside. + + if (Math.sign(lPointY.gradient) * point.y > Math.sign(lPointY.gradient) * lPointY.value) { + return true; + } + + return false; +} +/** + * Returns the y value of the line segment at the x value of the point. + * @private + * @method + * @name lineSegmentAtPoint + * + * @param {Object} point The point being queried. + * @param {Object} lp1 The first point of the line segment. + * @param {Object} lp2 The second point of the line segment. + * @returns {Object} An object containing the y value as well as the gradient of the line segment. + */ + + +function lineSegmentAtPoint(point, lp1, lp2) { + var dydx = (lp2.y - lp1.y) / (lp2.x - lp1.x); + var fx = { + value: lp1.y + dydx * (point.x - lp1.x), + gradient: dydx + }; + return fx; +} +/** + * Returns true if a rightwards ray originating from the point crosses the line defined by handleI and handleJ. + * @private + * @method + * @name rayFromPointCrosssesLine + * + * @param {Object} point The point being queried. + * @param {Object} handleI The first handle of the line segment. + * @param {Object} handleJ The second handle of the line segment. + * @returns {boolean} True if a rightwards ray originating from the point crosses the line defined by handleI and handleJ. + */ + + +function rayFromPointCrosssesLine(point, handleI, handleJ) { + if (isEnclosedY(point.y, handleI.y, handleJ.y) && isLineRightOfPoint(point, handleI, handleJ)) { + return true; + } + + return false; +} + +/***/ }), + +/***/ "./util/getActiveTool.js": +/*!*******************************!*\ + !*** ./util/getActiveTool.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getActiveTool; }); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store */ "./store/index.js"); +/* harmony import */ var _store_getActiveToolsForElement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store/getActiveToolsForElement */ "./store/getActiveToolsForElement.js"); +/* harmony import */ var _store_filterToolsUsableWithMultiPartTools__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store/filterToolsUsableWithMultiPartTools */ "./store/filterToolsUsableWithMultiPartTools.js"); + + + // Todo: We could simplify this if we only allow one active +// Tool per mouse button mask? + +function getActiveTool(element, buttons) { + var interactionType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'mouse'; + var tools; + + if (interactionType === 'touch') { + tools = Object(_store_getActiveToolsForElement__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _store__WEBPACK_IMPORTED_MODULE_0__["getters"].touchTools()); + tools = tools.filter(function (tool) { + return tool.options.isTouchActive; + }); + } else { + // Filter out disabled, enabled, and passive + tools = Object(_store_getActiveToolsForElement__WEBPACK_IMPORTED_MODULE_1__["default"])(element, _store__WEBPACK_IMPORTED_MODULE_0__["getters"].mouseTools()); // Filter out tools that do not match mouseButtonMask + + tools = tools.filter(function (tool) { + return Array.isArray(tool.options.mouseButtonMask) && buttons && tool.options.mouseButtonMask.includes(buttons) && tool.options.isMouseActive; + }); + + if (_store__WEBPACK_IMPORTED_MODULE_0__["state"].isMultiPartToolActive) { + tools = Object(_store_filterToolsUsableWithMultiPartTools__WEBPACK_IMPORTED_MODULE_2__["default"])(tools); + } + } + + if (tools.length === 0) { + return; + } + + return tools[0]; +} + +/***/ }), + +/***/ "./util/getCircleCoords.js": +/*!*********************************!*\ + !*** ./util/getCircleCoords.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getCircleCoords; }); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules */ "./externalModules.js"); + +/** + * Retrieve the bounds of the circle in image coordinates + * + * @param {*} startHandle + * @param {*} endHandle + * @returns {{ left: number, top: number, width: number, height: number }} + */ + +function getCircleCoords(startHandle, endHandle) { + var distance = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance; + var radius = distance(startHandle, endHandle); + return { + left: Math.floor(Math.min(startHandle.x - radius, endHandle.x)), + top: Math.floor(Math.min(startHandle.y - radius, endHandle.y)), + width: radius * 2, + height: radius * 2 + }; +} + +/***/ }), + +/***/ "./util/getDefault.js": +/*!****************************!*\ + !*** ./util/getDefault.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Returns the first argument if defined, otherwise returns the second + * + * @param {*} value + * @param {*} defaultValue + * @returns {*} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (value, defaultValue) { + return value === undefined ? defaultValue : value; +}); + +/***/ }), + +/***/ "./util/getKeyPressData.js": +/*!*********************************!*\ + !*** ./util/getKeyPressData.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getKeyPressData; }); +/* harmony import */ var _store___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../store/ */ "./store/index.js"); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules */ "./externalModules.js"); + + +function getKeyPressData(e) { + var cornerstone = _externalModules__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; + var element = e.currentTarget; + var enabledElement = cornerstone.getEnabledElement(element); + + if (!enabledElement || !enabledElement.image) { + return; + } + + var currentPointsImage = _store___WEBPACK_IMPORTED_MODULE_0__["default"].state.mousePositionImage; + return { + event: window.event || e, + // Old IE support + element: element, + viewport: cornerstone.getViewport(element), + image: enabledElement.image, + currentPoints: { + image: currentPointsImage, + canvas: cornerstone.pixelToCanvas(element, currentPointsImage) + }, + keyCode: e.keyCode, + which: e.which + }; +} + +/***/ }), + +/***/ "./util/getLuminance.js": +/*!******************************!*\ + !*** ./util/getLuminance.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Returns the luminance of a region. + * @public + * @function getLuminance + * + * @param {HTMLElement} element The element. + * @param {number} x The x position of the top-left corner of the region. + * @param {number} y The y position of the top-left corner of the region. + * @param {number} width The width of the region. + * @param {number} height The height of the region + * @returns {number[]} The luminance. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, x, y, width, height) { + if (!element) { + throw new Error('getLuminance: parameter element must not be undefined'); + } + + x = Math.round(x); + y = Math.round(y); + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); + var image = enabledElement.image; + var luminance = []; + var index = 0; + var pixelData = image.getPixelData(); + var spIndex, row, column; + + if (image.color) { + for (row = 0; row < height; row++) { + for (column = 0; column < width; column++) { + spIndex = ((row + y) * image.columns + (column + x)) * 4; + var red = pixelData[spIndex]; + var green = pixelData[spIndex + 1]; + var blue = pixelData[spIndex + 2]; + luminance[index++] = 0.2126 * red + 0.7152 * green + 0.0722 * blue; + } + } + } else { + for (row = 0; row < height; row++) { + for (column = 0; column < width; column++) { + spIndex = (row + y) * image.columns + (column + x); + luminance[index++] = pixelData[spIndex] * image.slope + image.intercept; + } + } + } + + return luminance; +}); + +/***/ }), + +/***/ "./util/getMaxSimultaneousRequests.js": +/*!********************************************!*\ + !*** ./util/getMaxSimultaneousRequests.js ***! + \********************************************/ +/*! exports provided: getDefaultSimultaneousRequests, getMaxSimultaneousRequests, setMaxSimultaneousRequests, getBrowserInfo, isMobileDevice */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultSimultaneousRequests", function() { return getDefaultSimultaneousRequests; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getMaxSimultaneousRequests", function() { return getMaxSimultaneousRequests; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setMaxSimultaneousRequests", function() { return setMaxSimultaneousRequests; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getBrowserInfo", function() { return getBrowserInfo; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isMobileDevice", function() { return isMobileDevice; }); +var configMaxSimultaneousRequests; // Maximum concurrent connections to the same server +// Information from http://sgdev-blog.blogspot.fr/2014/01/maximum-concurrent-connection-to-same.html + +var maxSimultaneousRequests = { + default: 6, + IE: { + 9: 6, + 10: 8, + default: 8 + }, + Firefox: { + default: 6 + }, + Opera: { + 10: 8, + 11: 6, + 12: 6, + default: 6 + }, + Chrome: { + default: 6 + }, + Safari: { + default: 6 + } +}; // Browser name / version detection +// +// + +/** + * Browser name / version detection + * http://stackoverflow.com/questions/2400935/browser-detection-in-javascript + * @export @public @method + * @name getBrowserInfo + * + * @returns {string} The name and version of the browser. + */ + +function getBrowserInfo() { + var ua = navigator.userAgent; + var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || []; + var tem; + + if (/trident/i.test(M[1])) { + tem = /\brv[ :]+(\d+)/g.exec(ua) || []; + return "IE ".concat(tem[1] || ''); + } + + if (M[1] === 'Chrome') { + tem = ua.match(/\b(OPR|Edge)\/(\d+)/); + + if (tem !== null) { + return tem.slice(1).join(' ').replace('OPR', 'Opera'); + } + } + + M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']; + + if ((tem = ua.match(/version\/(\d+)/i)) !== null) { + M.splice(1, 1, tem[1]); + } + + return M.join(' '); +} +/** + * Sets the maximum number of simultaneous requests. + * @export @public @method + * @name setMaxSimultaneousRequests + * + * @param {number} newMaxSimultaneousRequests The value. + * @returns {void} + */ + + +function setMaxSimultaneousRequests(newMaxSimultaneousRequests) { + configMaxSimultaneousRequests = newMaxSimultaneousRequests; +} +/** + * Returns the maximum number of simultaneous requests. + * @export @public @method + * @name getMaxSimultaneousRequests + * + * @returns {number} The maximum number of simultaneous requests + */ + + +function getMaxSimultaneousRequests() { + if (configMaxSimultaneousRequests) { + return configMaxSimultaneousRequests; + } + + return getDefaultSimultaneousRequests(); +} +/** + * Returns the default number of simultaneous requests. + * @export @public @method + * @name getDefaultSimultaneousRequests + * + * @returns {number} The default number of simultaneous requests. + */ + + +function getDefaultSimultaneousRequests() { + var infoString = getBrowserInfo(); + var info = infoString.split(' '); + var browserName = info[0]; + var browserVersion = info[1]; + var browserData = maxSimultaneousRequests[browserName]; + + if (!browserData) { + return maxSimultaneousRequests.default; + } + + if (!browserData[browserVersion]) { + return browserData.default; + } + + return browserData[browserVersion]; +} +/** + * Checks if cornerstoneTools is operating on a mobile device. + * @export @public @method + * @name isMobileDevice + * + * @returns {boolean} True if running on a mobile device. + */ + + +function isMobileDevice() { + var pattern = new RegExp('Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini'); + return pattern.test(navigator.userAgent); +} + + + +/***/ }), + +/***/ "./util/getPixelSpacing.js": +/*!*********************************!*\ + !*** ./util/getPixelSpacing.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getPixelSpacing; }); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules */ "./externalModules.js"); + +function getPixelSpacing(image) { + var imagePlane = _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.metaData.get('imagePlaneModule', image.imageId); + + if (imagePlane) { + return { + rowPixelSpacing: imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing, + colPixelSpacing: imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing + }; + } + + return { + rowPixelSpacing: image.rowPixelSpacing, + colPixelSpacing: image.columnPixelSpacing + }; +} + +/***/ }), + +/***/ "./util/getRGBPixels.js": +/*!******************************!*\ + !*** ./util/getRGBPixels.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Gets pixels of an RGB image. + * @export @public @method + * @name getRGBPixels + * + * @param {HTMLElement} element The element. + * @param {number} x The x position of the top-left corner of the region. + * @param {number} y The y position of the top-left corner of the region. + * @param {number} width The width of the region. + * @param {number} height The height of the region + * @returns {number[]} The pixel data. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, x, y, width, height) { + if (!element) { + throw new Error('getRGBPixels: parameter element must not be undefined'); + } + + x = Math.round(x); + y = Math.round(y); + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); + var storedPixelData = []; + var index = 0; + var pixelData = enabledElement.image.getPixelData(); + var spIndex, row, column; + + if (enabledElement.image.color) { + for (row = 0; row < height; row++) { + for (column = 0; column < width; column++) { + spIndex = ((row + y) * enabledElement.image.columns + (column + x)) * 4; + var red = pixelData[spIndex]; + var green = pixelData[spIndex + 1]; + var blue = pixelData[spIndex + 2]; + var alpha = pixelData[spIndex + 3]; + storedPixelData[index++] = red; + storedPixelData[index++] = green; + storedPixelData[index++] = blue; + storedPixelData[index++] = alpha; + } + } + } + + return storedPixelData; +}); + +/***/ }), + +/***/ "./util/getROITextBoxCoords.js": +/*!*************************************!*\ + !*** ./util/getROITextBoxCoords.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getROITextBoxCoords; }); +/** + * Determine the coordinates that will place the textbox to the right of the + * annotation, taking rotation, hflip, and vflip into account. + * + * @param {Object} viewport - The object that stores rotation, hflip, and vflip. + * @param {Object} handles - The handles of the annotation. + * @returns {Object} - The coordinates for default placement of the textbox + */ +function getROITextBoxCoords(viewport, handles) { + var corners = _determineCorners(handles); + + var centerX = (corners.left.x + corners.right.x) / 2; + var centerY = (corners.top.y + corners.bottom.y) / 2; + var textBox = {}; + + if (viewport.rotation >= 0 && viewport.rotation < 90) { + textBox.x = viewport.hflip ? corners.left.x : corners.right.x; + textBox.y = centerY; + } + + if (viewport.rotation >= 90 && viewport.rotation < 180) { + textBox.x = centerX; + textBox.y = viewport.vflip ? corners.bottom.y : corners.top.y; + } + + if (viewport.rotation >= 180 && viewport.rotation < 270) { + textBox.x = viewport.hflip ? corners.right.x : corners.left.x; + textBox.y = centerY; + } + + if (viewport.rotation >= 270 && viewport.rotation < 360) { + textBox.x = centerX; + textBox.y = viewport.vflip ? corners.top.y : corners.bottom.y; + } + + return textBox; +} +/** + * Determine the handles that have the min/max x and y values. + * + * @param {Object} handles - The handles of the annotation. + * @returns {Object} - The top, left, bottom, and right handles + */ + +function _determineCorners(handles) { + var handlesLeftToRight = [handles.start, handles.end].sort(_compareX); + var handlesTopToBottom = [handles.start, handles.end].sort(_compareY); + var left = handlesLeftToRight[0]; + var right = handlesLeftToRight[handlesLeftToRight.length - 1]; + var top = handlesTopToBottom[0]; + var bottom = handlesTopToBottom[handlesTopToBottom.length - 1]; + return { + top: top, + left: left, + bottom: bottom, + right: right + }; + + function _compareX(a, b) { + return a.x < b.x ? -1 : 1; + } + + function _compareY(a, b) { + return a.y < b.y ? -1 : 1; + } +} + +/***/ }), + +/***/ "./util/isEmptyObject.js": +/*!*******************************!*\ + !*** ./util/isEmptyObject.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Helper to determine if an object has no keys and is the correct type (is empty) + * + * @private + * @function isEmptyObject + * @param {Object} obj The object to check + * @returns {Boolean} true if the object is empty + */ +var isEmptyObject = function isEmptyObject(obj) { + return Object.keys(obj).length === 0 && obj.constructor === Object; +}; + +/* harmony default export */ __webpack_exports__["default"] = (isEmptyObject); + +/***/ }), + +/***/ "./util/isObject.js": +/*!**************************!*\ + !*** ./util/isObject.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); +/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); + + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * isObject({}) + * // => true + * + * isObject([1, 2, 3]) + * // => true + * + * isObject(Function) + * // => true + * + * isObject(null) + * // => false + */ +function isObject(value) { + var type = _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(value); + + return value !== null && (type === 'object' || type === 'function'); +} + +/* harmony default export */ __webpack_exports__["default"] = (isObject); + +/***/ }), + +/***/ "./util/isPointInImage.js": +/*!********************************!*\ + !*** ./util/isPointInImage.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isPointInImage; }); +/** + * Checks if the point is within the image boundaries. + * @param {Object} pixel The pixel. + * @param {number} rows The number of rows. + * @param {number} cols The number of columns. + * @returns {boolean} + */ +function isPointInImage(_ref, rows, cols) { + var x = _ref.x, + y = _ref.y; + return x < cols && x >= 0 && y < rows && y >= 0; +} + +/***/ }), + +/***/ "./util/isPointInPolygon.js": +/*!**********************************!*\ + !*** ./util/isPointInPolygon.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isPointInPolygon; }); +/** + * Checks whether a point is inside a polygon + * + * {@link https://github.com/substack/point-in-polygon/blob/master/index.js} + * ray-casting algorithm based on + * {@link http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html} + * + * @param {Array} point The point [x1, y1] + * @param {Array} vs The vertices [[x1, y1], [x2, y2], ...] of the Polygon + * @returns {boolean} + */ +function isPointInPolygon(point, vs) { + var x = point[0]; + var y = point[1]; + var inside = false; + + for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) { + var xi = vs[i][0]; + var yi = vs[i][1]; + var xj = vs[j][0]; + var yj = vs[j][1]; + var intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; + + if (intersect) { + inside = !inside; + } + } + + return inside; +} + +/***/ }), + +/***/ "./util/lineSegDistance.js": +/*!*********************************!*\ + !*** ./util/lineSegDistance.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Calculates the distance of a line segment from a point. + * @export @public @method + * @name lineSegDistance + * + * @param {HTMLElement} element The element. + * @param {Object} start The starting position of the line. + * @param {Object} end The end position of the line. + * @param {Object} coords The coordinates of the point. + * @returns {name} The distance between the line and the point. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, start, end, coords) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var lineSegment = { + start: cornerstone.pixelToCanvas(element, start), + end: cornerstone.pixelToCanvas(element, end) + }; + return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.lineSegment.distanceToPoint(lineSegment, coords); +}); + +/***/ }), + +/***/ "./util/logger.js": +/*!************************!*\ + !*** ./util/logger.js ***! + \************************/ +/*! exports provided: getLogger, enable, disable */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLogger", function() { return getLogger; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "enable", function() { return enable; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disable", function() { return disable; }); +/* harmony import */ var _debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./debugLib/index.js */ "./util/debugLib/index.js"); + +var BASE_SCOPE = 'cornerstoneTools'; +var baseLogger = Object(_debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__["default"])(BASE_SCOPE); // eslint-disable-next-line no-process-env + +var devMode = "development" === 'development'; // If we're in dev-mode, tell the user how to get logs + +if (devMode && !baseLogger.enabled) { + // eslint-disable-next-line no-console + console.log('%cCornerstone Tools', 'background: #339955; padding: 4px; font-weight: bold; color: white'); // eslint-disable-next-line no-console + + console.info('run %clocalStorage.setItem("debug", "cornerstoneTools")%c to see console output', 'background: #eaeaea; color: #333; font-family: monospace', ''); +} +/** + * @method debug + * Create's a scoped debuging logger + */ + + +var getLogger = function getLogger(scope) { + var log = baseLogger.extend(scope); + return { + log: log, + // eslint-disable-next-line no-console + warn: devMode ? console.warn.bind(console) : log, + // eslint-disable-next-line no-console + error: console.error.bind(console) + }; +}; +/** + * @method enable + * @param {string} scope The scope to enabled + * @returns {void} + */ + +var enable = function enable() { + var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "".concat(BASE_SCOPE, ":*"); + return _debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].enable(scope); +}; +/** + * @method disable + * @param {string} scope + * @returns {string} The previously enabled scope + */ + +var disable = function disable() { + return _debugLib_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].disable(); +}; + +/***/ }), + +/***/ "./util/makeUnselectable.js": +/*!**********************************!*\ + !*** ./util/makeUnselectable.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * A helper function to make an element (and its content) being non selectable. + * @export @public @method + * @name makeUnselectable + * + * @param {HTMLElement} element The element to make unselectable + * @param {Boolean} ignorePointerEvents true to make this element also + * ignore events (e.g. mouse click), false otherwise. + * @returns {void} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (element, ignorePointerEvents) { + element.style.webkitUserSelect = 'none'; + element.style.webkitTouchCallout = 'none'; + element.style.mozUserSelect = 'none'; + element.style.msUserSelect = 'none'; + element.style.oUserSelect = 'none'; + element.style.khtmlUserSelect = 'none'; + element.style.userSelect = 'none'; + element.unselectable = 'on'; + + element.oncontextmenu = function () { + return false; + }; + + if (ignorePointerEvents === true) { + element.style.pointerEvents = 'none'; + } +}); + +/***/ }), + +/***/ "./util/numbersWithCommas.js": +/*!***********************************!*\ + !*** ./util/numbersWithCommas.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Converts a number to a string with comma separators. + * http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript + * @export @public @method + * @name numbersWithCommas + * + * @param {number} x The number to convert. + * @returns {string} The pretty-printed number as a string. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (x) { + var parts = x.toString().split('.'); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); + return parts.join('.'); +}); + +/***/ }), + +/***/ "./util/pointInsideBoundingBox.js": +/*!****************************************!*\ + !*** ./util/pointInsideBoundingBox.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Returns true if a point is enclosed within a bounding box. + * @export @public @method + * @name pointInsideBoundingBox + * + * @param {Object} handle The handle containing the boundingBox. + * @param {Object} coords The coordinate to check. + * @returns {boolean} True if the point is enclosed within the bounding box. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (handle, coords) { + if (!handle.boundingBox) { + return; + } + + return _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.insideRect(coords, handle.boundingBox); +}); + +/***/ }), + +/***/ "./util/pointProjector.js": +/*!********************************!*\ + !*** ./util/pointProjector.js ***! + \********************************/ +/*! exports provided: projectPatientPointToImagePlane, imagePointToPatientPoint, planePlaneIntersection, rotatePoint */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "projectPatientPointToImagePlane", function() { return projectPatientPointToImagePlane; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "imagePointToPatientPoint", function() { return imagePointToPatientPoint; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "planePlaneIntersection", function() { return planePlaneIntersection; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotatePoint", function() { return rotatePoint; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/convertToVector3.js */ "./util/convertToVector3.js"); + + +/** + * Projects a patient point to an image point + * @export @public @method + * @name projectPatientPointToImagePlane + * + * @param {Object} patientPoint The patient point. + * @param {Object} imagePlane The image plane used for projection. + * @returns {Object} The projected coordinates. + */ + +function projectPatientPointToImagePlane(patientPoint, imagePlane) { + var rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.rowCosines); + var columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.columnCosines); + var imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.imagePositionPatient); + var point = patientPoint.clone().sub(imagePositionPatient); + var x = rowCosines.dot(point) / imagePlane.columnPixelSpacing; + var y = columnCosines.dot(point) / imagePlane.rowPixelSpacing; + return { + x: x, + y: y + }; +} // + +/** + * Projects an image point to a patient point + * @export @public @method + * @name imagePointToPatientPoint + * + * @param {Object} imagePoint The image point. + * @param {Object} imagePlane The image plane used for projection. + * @returns {Object} The projected coordinates. + */ + +function imagePointToPatientPoint(imagePoint, imagePlane) { + var rowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.rowCosines); + var columnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.columnCosines); + var imagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imagePlane.imagePositionPatient); + var x = rowCosines.clone().multiplyScalar(imagePoint.x); + x.multiplyScalar(imagePlane.columnPixelSpacing); + var y = columnCosines.clone().multiplyScalar(imagePoint.y); + y.multiplyScalar(imagePlane.rowPixelSpacing); + var patientPoint = x.add(y); + patientPoint.add(imagePositionPatient); + return patientPoint; +} +/** + * Returns a rectangle from the imagePlane. + * @export @public @method + * @name getRectangleFromImagePlane + * + * @param {Object} imagePlane The imagePlane. + * @returns {Object} The rect. + */ + +function getRectangleFromImagePlane(imagePlane) { + // Get the points + var topLeft = imagePointToPatientPoint({ + x: 0, + y: 0 + }, imagePlane); + var topRight = imagePointToPatientPoint({ + x: imagePlane.columns, + y: 0 + }, imagePlane); + var bottomLeft = imagePointToPatientPoint({ + x: 0, + y: imagePlane.rows + }, imagePlane); + var bottomRight = imagePointToPatientPoint({ + x: imagePlane.columns, + y: imagePlane.rows + }, imagePlane); // Get each side as a vector + + var rect = { + top: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(topLeft, topRight), + left: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(topLeft, bottomLeft), + right: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(topRight, bottomRight), + bottom: new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(bottomLeft, bottomRight) + }; + return rect; +} +/** + * Gets all the intersections of a line with a rect. + * @private + * @method + * @name lineRectangleIntersection + * + * @param {Object} line The line to check. + * @param {Object} rect The rect being intersected. + * @returns {Object[]} An array of the intersections. + */ + + +function lineRectangleIntersection(line, rect) { + var intersections = []; + Object.keys(rect).forEach(function (side) { + var segment = rect[side]; + var intersection = line.intersectLine(segment); + + if (intersection) { + intersections.push(intersection); + } + }); + return intersections; +} +/** + * Gets the line of intersection between two planes in patient space. + * @export @public @method + * @name planePlaneIntersection + * + * @param {Object} targetImagePlane The target plane. + * @param {Object} referenceImagePlane The reference plane + * @returns {Object} The intersections. + */ + + +function planePlaneIntersection(targetImagePlane, referenceImagePlane) { + var targetRowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.rowCosines); + var targetColumnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.columnCosines); + var targetImagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetImagePlane.imagePositionPatient); + var referenceRowCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(referenceImagePlane.rowCosines); + var referenceColumnCosines = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(referenceImagePlane.columnCosines); + var referenceImagePositionPatient = Object(_util_convertToVector3_js__WEBPACK_IMPORTED_MODULE_1__["default"])(referenceImagePlane.imagePositionPatient); // First, get the normals of each image plane + + var targetNormal = targetRowCosines.clone().cross(targetColumnCosines); + var targetPlane = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Plane(); + targetPlane.setFromNormalAndCoplanarPoint(targetNormal, targetImagePositionPatient); + var referenceNormal = referenceRowCosines.clone().cross(referenceColumnCosines); + var referencePlane = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Plane(); + referencePlane.setFromNormalAndCoplanarPoint(referenceNormal, referenceImagePositionPatient); + var originDirection = referencePlane.clone().intersectPlane(targetPlane); + var origin = originDirection.origin; + var direction = originDirection.direction; // Calculate the longest possible length in the reference image plane (the length of the diagonal) + + var bottomRight = imagePointToPatientPoint({ + x: referenceImagePlane.columns, + y: referenceImagePlane.rows + }, referenceImagePlane); + var distance = referenceImagePositionPatient.distanceTo(bottomRight); // Use this distance to bound the ray intersecting the two planes + + var line = new _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.Line3(); + line.start = origin; + line.end = origin.clone().add(direction.multiplyScalar(distance)); // Find the intersections between this line and the reference image plane's four sides + + var rect = getRectangleFromImagePlane(referenceImagePlane); + var intersections = lineRectangleIntersection(line, rect); // Return the intersections between this line and the reference image plane's sides + // In order to draw the reference line from the target image. + + if (intersections.length !== 2) { + return; + } + + return { + start: intersections[0], + end: intersections[1] + }; +} +/** + * Translate a point using a rotation angle. + * @export @public @method + * @name rotatePoint + * + * @param {Object} point - `{ x, y }` in either pixel or canvas coordinates. + * @param {Object} center - `{ x, y }` in either pixel or canvas coordinates. + * @param {Number} angle - angle in degrees + * @returns {Object} - `{ x, y }` new point translated + */ + +function rotatePoint(point, center, angle) { + var angleRadians = angle * (Math.PI / 180); // Convert to radians + + var rotatedX = Math.cos(angleRadians) * (point.x - center.x) - Math.sin(angleRadians) * (point.y - center.y) + center.x; + var rotatedY = Math.sin(angleRadians) * (point.x - center.x) + Math.cos(angleRadians) * (point.y - center.y) + center.y; + return { + x: rotatedX, + y: rotatedY + }; +} + +/***/ }), + +/***/ "./util/roundToDecimal.js": +/*!********************************!*\ + !*** ./util/roundToDecimal.js ***! + \********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Rounds a number to the specified precision. + * @export @public @method + * @name roundToDecimal + * + * @param {number} value The value to round. + * @param {number} precision The required precision. + * @returns {number} The rounded number. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (value, precision) { + var multiplier = Math.pow(10, precision); + return Math.round(value * multiplier) / multiplier; +}); + +/***/ }), + +/***/ "./util/scroll.js": +/*!************************!*\ + !*** ./util/scroll.js ***! + \************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _scrollToIndex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scrollToIndex.js */ "./util/scrollToIndex.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _clip_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clip.js */ "./util/clip.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); + + + + +/** + * Scrolls through the stack. + * @export @public @method + * @name scroll + * + * @param {HTMLElement} element The element to scroll. + * @param {number} images The number of images to scroll through. + * @param {type} [loop = false] Whether to loop the scrolling. + * @param {type} [allowSkipping = true] Whether frames can be skipped. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, images) { + var loop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + var allowSkipping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_1__["getToolState"])(element, 'stack'); + + if (!toolData || !toolData.data || !toolData.data.length) { + return; + } + + var stackData = toolData.data[0]; + + if (!stackData.pending) { + stackData.pending = []; + } + + var newImageIdIndex = stackData.currentImageIdIndex + images; + + if (loop) { + var nbImages = stackData.imageIds.length; + newImageIdIndex %= nbImages; + } else { + newImageIdIndex = Object(_clip_js__WEBPACK_IMPORTED_MODULE_2__["default"])(newImageIdIndex, 0, stackData.imageIds.length - 1); + } + + if (allowSkipping) { + Object(_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, newImageIdIndex); + } else { + var pendingEvent = { + index: newImageIdIndex + }; + stackData.pending.push(pendingEvent); + scrollWithoutSkipping(stackData, pendingEvent, element); + } +}); +/** + * Recursively scrolls the stack until the desired image is reached. + * @private + * @method + * @name scrollWithoutSkipping + * + * @param {type} stackData Data object containing information about the stack. + * @param {Object} pendingEvent The event to process next. + * @param {HTMLElement} element The element being scrolled through. + * @returns {void} + */ + +function scrollWithoutSkipping(stackData, pendingEvent, element) { + if (stackData.pending[0] === pendingEvent) { + if (stackData.currentImageIdIndex === pendingEvent.index) { + stackData.pending.splice(stackData.pending.indexOf(pendingEvent), 1); + + if (stackData.pending.length > 0) { + scrollWithoutSkipping(stackData, stackData.pending[0], element); + } + + return; + } + + var newImageHandler = function newImageHandler(event) { + var index = stackData.imageIds.indexOf(event.detail.image.imageId); + + if (index === pendingEvent.index) { + stackData.pending.splice(stackData.pending.indexOf(pendingEvent), 1); + element.removeEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.NEW_IMAGE, newImageHandler); + + if (stackData.pending.length > 0) { + scrollWithoutSkipping(stackData, stackData.pending[0], element); + } + } + }; + + element.addEventListener(_externalModules_js__WEBPACK_IMPORTED_MODULE_3__["default"].cornerstone.EVENTS.NEW_IMAGE, newImageHandler); + Object(_scrollToIndex_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, pendingEvent.index); + } +} + +/***/ }), + +/***/ "./util/scrollToIndex.js": +/*!*******************************!*\ + !*** ./util/scrollToIndex.js ***! + \*******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../events.js */ "./events.js"); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../stateManagement/toolState.js */ "./stateManagement/toolState.js"); +/* harmony import */ var _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../requestPool/requestPoolManager.js */ "./requestPool/requestPoolManager.js"); +/* harmony import */ var _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../stateManagement/loadHandlerManager.js */ "./stateManagement/loadHandlerManager.js"); +/* harmony import */ var _util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/triggerEvent.js */ "./util/triggerEvent.js"); + + + + + + +/** + * Scrolls through the stack to the image index requested. + * @export @public @method + * @name scrollToIndex + * + * @param {type} element The element to scroll through. + * @param {type} newImageIdIndex The target image index. + * @returns {void} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (element, newImageIdIndex) { + var toolData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stack'); + + if (!toolData || !toolData.data || !toolData.data.length) { + return; + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_1__["default"].cornerstone; // If we have more than one stack, check if we have a stack renderer defined + + var stackRenderer; + + if (toolData.data.length > 1) { + var stackRendererData = Object(_stateManagement_toolState_js__WEBPACK_IMPORTED_MODULE_2__["getToolState"])(element, 'stackRenderer'); + + if (stackRendererData && stackRendererData.data && stackRendererData.data.length) { + stackRenderer = stackRendererData.data[0]; + } + } + + var stackData = toolData.data[0]; // Allow for negative indexing + + if (newImageIdIndex < 0) { + newImageIdIndex += stackData.imageIds.length; + } + + var startLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__["default"].getStartLoadHandler(element); + var endLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__["default"].getEndLoadHandler(element); + var errorLoadingHandler = _stateManagement_loadHandlerManager_js__WEBPACK_IMPORTED_MODULE_4__["default"].getErrorLoadingHandler(element); + + function doneCallback(image) { + if (stackData.currentImageIdIndex !== newImageIdIndex) { + return; + } // Check if the element is still enabled in Cornerstone, + // If an error is thrown, stop here. + + + try { + // TODO: Add 'isElementEnabled' to Cornerstone? + cornerstone.getEnabledElement(element); + } catch (error) { + return; + } + + if (stackRenderer) { + stackRenderer.currentImageIdIndex = newImageIdIndex; + stackRenderer.render(element, toolData.data); + } else { + cornerstone.displayImage(element, image); + } + + if (endLoadingHandler) { + endLoadingHandler(element, image); + } + } + + function failCallback(error) { + var imageId = stackData.imageIds[newImageIdIndex]; + + if (errorLoadingHandler) { + errorLoadingHandler(element, imageId, error); + } + } + + if (newImageIdIndex === stackData.currentImageIdIndex) { + return; + } + + if (startLoadingHandler) { + startLoadingHandler(element); + } + + var eventData = { + newImageIdIndex: newImageIdIndex, + direction: newImageIdIndex - stackData.currentImageIdIndex + }; + stackData.currentImageIdIndex = newImageIdIndex; + var newImageId = stackData.imageIds[newImageIdIndex]; // Retry image loading in cases where previous image promise + // Was rejected, if the option is set + + /* + Const config = stackScroll.getConfiguration(); + TODO: Revisit this. It appears that Core's imageCache is not + keeping rejected promises anywhere, so we have no way to know + if something was previously rejected. + if (config && config.retryLoadOnScroll === true) { + } + */ + // Convert the preventCache value in stack data to a boolean + + var preventCache = Boolean(stackData.preventCache); + var imagePromise; + + if (preventCache) { + imagePromise = cornerstone.loadImage(newImageId); + } else { + imagePromise = cornerstone.loadAndCacheImage(newImageId); + } + + imagePromise.then(doneCallback, failCallback); // Make sure we kick off any changed download request pools + + _requestPool_requestPoolManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].startGrabbing(); + Object(_util_triggerEvent_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element, _events_js__WEBPACK_IMPORTED_MODULE_0__["default"].STACK_SCROLL, eventData); +}); + +/***/ }), + +/***/ "./util/segmentation/drawBrush.js": +/*!****************************************!*\ + !*** ./util/segmentation/drawBrush.js ***! + \****************************************/ +/*! exports provided: drawBrushPixels */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drawBrushPixels", function() { return drawBrushPixels; }); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _eraseIfSegmentIndex_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eraseIfSegmentIndex.js */ "./util/segmentation/eraseIfSegmentIndex.js"); + + +/** + * DrawBrushPixels - Adds or removes labels to a labelmap. + * + * @param {number[]} pointerArray The array of pixels to paint. + * @param {Object} labelmap2D The `pixelData` array to paint to. + * @param {number} segmentIndex The segment being drawn. + * @param {number} columns The number of columns in the image. + * @param {boolean} shouldErase = false Whether we should erase rather than color pixels. + * @returns {null} + */ + +function drawBrushPixels(pointerArray, pixelData, segmentIndex, columns) { + var shouldErase = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + + var getPixelIndex = function getPixelIndex(x, y) { + return y * columns + x; + }; + + pointerArray.forEach(function (point) { + var spIndex = getPixelIndex.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(point)); + + if (shouldErase) { + Object(_eraseIfSegmentIndex_js__WEBPACK_IMPORTED_MODULE_1__["default"])(spIndex, pixelData, segmentIndex); + } else { + pixelData[spIndex] = segmentIndex; + } + }); +} + + + +/***/ }), + +/***/ "./util/segmentation/eraseIfSegmentIndex.js": +/*!**************************************************!*\ + !*** ./util/segmentation/eraseIfSegmentIndex.js ***! + \**************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return eraseIfSegmentIndex; }); +/** + * If the pixelData for the given pixelIndex is equal to the segmentIndex + * erase it (set it to 0). + * @param {number} pixelIndex The index of the pixel. + * @param {UInt16Array} pixelData The pixelData array. + * @param {number} segmentIndex The segment Index to erase. + */ +function eraseIfSegmentIndex(pixelIndex, pixelData, segmentIndex) { + if (pixelData[pixelIndex] === segmentIndex) { + pixelData[pixelIndex] = 0; + } +} + +/***/ }), + +/***/ "./util/segmentation/eraseOutsideBoundingBox.js": +/*!******************************************************!*\ + !*** ./util/segmentation/eraseOutsideBoundingBox.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return eraseOutsideBoundingBox; }); +/* harmony import */ var _eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eraseIfSegmentIndex */ "./util/segmentation/eraseIfSegmentIndex.js"); + +/** + * EraseOutsideBoundingBox - Erase all pixels labeled with the activeSegmentIndex, + * outside the bouding box defined by the `topLeft` and `topRight`. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + +function eraseOutsideBoundingBox(evt, operationData, topLeft, bottomRight) { + var eventData = evt.detail; + var pixelData = operationData.pixelData, + segmentIndex = operationData.segmentIndex; + var image = eventData.image; + var width = image.width, + height = image.height; // Loop until top of bounding box from top of image, color the entire row + + for (var i = 0; i < width; i++) { + for (var j = 0; j < topLeft[1]; j++) { + Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(j * width + i, pixelData, segmentIndex); + } + } // Loop within rows of bounding box, to the left of the box + + + for (var _i = 0; _i < topLeft[0]; _i++) { + for (var _j = topLeft[1]; _j < bottomRight[1]; _j++) { + Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(_j * width + _i, pixelData, segmentIndex); + } + } // Loop within rows of bounding box, to the right of the box + + + for (var _i2 = bottomRight[0]; _i2 < width; _i2++) { + for (var _j2 = topLeft[1]; _j2 < bottomRight[1]; _j2++) { + Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(_j2 * width + _i2, pixelData, segmentIndex); + } + } // Loop from bottom of bounding box until bottom of image, color entire row + + + for (var _i3 = 0; _i3 < width; _i3++) { + for (var _j3 = bottomRight[1]; _j3 < height; _j3++) { + Object(_eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_0__["default"])(_j3 * width + _i3, pixelData, segmentIndex); + } + } +} + +/***/ }), + +/***/ "./util/segmentation/eraseShape.js": +/*!*****************************************!*\ + !*** ./util/segmentation/eraseShape.js ***! + \*****************************************/ +/*! exports provided: eraseInsideShape, eraseOutsideShape */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseInsideShape", function() { return eraseInsideShape; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideShape", function() { return eraseOutsideShape; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eraseOutsideBoundingBox */ "./util/segmentation/eraseOutsideBoundingBox.js"); +/* harmony import */ var _isSameSegment_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isSameSegment.js */ "./util/segmentation/isSameSegment.js"); +/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../logger.js */ "./util/logger.js"); + + + + +var logger = Object(_logger_js__WEBPACK_IMPORTED_MODULE_3__["getLogger"])('util:segmentation:operations:eraseOutsideCircle'); +/** + * Erase all pixels labeled with the activeSegmentIndex, + * inside/outside the region defined by the shape. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + +function eraseShape(evt, operationData, pointInShape, topLeft, bottomRight) { + var insideOrOutside = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'inside'; + var width = evt.detail.image.width; + var pixelData = operationData.pixelData, + segmentIndex = operationData.segmentIndex; + + var _topLeft = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(topLeft, 2), + xMin = _topLeft[0], + yMin = _topLeft[1]; + + var _bottomRight = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(bottomRight, 2), + xMax = _bottomRight[0], + yMax = _bottomRight[1]; + + if (insideOrOutside === 'outside') { + Object(_eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, operationData, topLeft, bottomRight); + } + + for (var x = xMin; x < xMax; x++) { + for (var y = yMin; y < yMax; y++) { + var pixelIndex = y * width + x; // If the pixel is the same segmentIndex and is inside the + // Region defined by the array of points, set their value to segmentIndex. + + if (Object(_isSameSegment_js__WEBPACK_IMPORTED_MODULE_2__["default"])(pixelIndex, pixelData, segmentIndex) && pointInShape({ + x: x, + y: y + })) { + pixelData[pixelIndex] = 0; + } + } + } +} +/** + * Erase all pixels labeled with the activeSegmentIndex, + * inside the region defined by the shape. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + + +function eraseInsideShape(evt, operationData, pointInShape, topLeft, bottomRight) { + eraseShape(evt, operationData, pointInShape, topLeft, bottomRight, 'inside'); +} +/** + * Erase all pixels labeled with the activeSegmentIndex, + * outside the region defined by the shape. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + +function eraseOutsideShape(evt, operationData, pointInShape, topLeft, bottomRight) { + eraseShape(evt, operationData, function (point) { + return !pointInShape(point); + }, topLeft, bottomRight, 'outside'); +} + +/***/ }), + +/***/ "./util/segmentation/fillOutsideBoundingBox.js": +/*!*****************************************************!*\ + !*** ./util/segmentation/fillOutsideBoundingBox.js ***! + \*****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return fillOutsideBoundingBox; }); +/** + * EraseInside - fill all pixels labeled with the activeSegmentIndex, + * outside the bouding box defined by the `topLeft` and `topRight`. + * @param {} evt The Cornerstone event. + * @param {} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ +function fillOutsideBoundingBox(evt, operationData, topLeft, bottomRight) { + var pixelData = operationData.pixelData, + segmentIndex = operationData.segmentIndex; + var _evt$detail$image = evt.detail.image, + width = _evt$detail$image.width, + height = _evt$detail$image.height; // Loop until top of bounding box from top of image, color the entire row + + for (var i = 0; i < width; i++) { + for (var j = 0; j < topLeft[1]; j++) { + pixelData[j * width + i] = segmentIndex; + } + } // Loop within rows of bounding box, to the left of the box + + + for (var _i = 0; _i < topLeft[0]; _i++) { + for (var _j = topLeft[1]; _j < bottomRight[1]; _j++) { + pixelData[_j * width + _i] = segmentIndex; + } + } // Loop within rows of bounding box, to the right of the box + + + for (var _i2 = bottomRight[0]; _i2 < width; _i2++) { + for (var _j2 = topLeft[1]; _j2 < bottomRight[1]; _j2++) { + pixelData[_j2 * width + _i2] = segmentIndex; + } + } // Loop from bottom of bounding box until bottom of image, color entire row + + + for (var _i3 = 0; _i3 < width; _i3++) { + for (var _j3 = bottomRight[1]; _j3 < height; _j3++) { + pixelData[_j3 * width + _i3] = segmentIndex; + } + } +} + +/***/ }), + +/***/ "./util/segmentation/fillShape.js": +/*!****************************************!*\ + !*** ./util/segmentation/fillShape.js ***! + \****************************************/ +/*! exports provided: fillInsideShape, fillOutsideShape */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillInsideShape", function() { return fillInsideShape; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillOutsideShape", function() { return fillOutsideShape; }); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../node_modules/@babel/runtime/helpers/slicedToArray.js"); +/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fillOutsideBoundingBox */ "./util/segmentation/fillOutsideBoundingBox.js"); +/* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../logger.js */ "./util/logger.js"); + + + +var logger = Object(_logger_js__WEBPACK_IMPORTED_MODULE_2__["getLogger"])('util:segmentation:operations:helpers:fillShape'); +/** + * Fill all pixels labeled with the activeSegmentIndex, + * inside/outside the region defined by the shape. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + +function fillShape(evt, operationData, pointInShape, topLeft, bottomRight) { + var insideOrOutside = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'inside'; + var pixelData = operationData.pixelData, + segmentIndex = operationData.segmentIndex; + + if (pixelData === undefined || segmentIndex === undefined) { + logger.error("fillInsideShape requires operationData to contain pixelData and segmentIndex"); + return; + } + + var width = evt.detail.image.width; + + var _topLeft = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(topLeft, 2), + xMin = _topLeft[0], + yMin = _topLeft[1]; + + var _bottomRight = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(bottomRight, 2), + xMax = _bottomRight[0], + yMax = _bottomRight[1]; + + if (insideOrOutside === 'outside') { + Object(_fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_1__["default"])(evt, operationData, topLeft, bottomRight); + } + + for (var x = xMin; x < xMax; x++) { + for (var y = yMin; y < yMax; y++) { + var pixelIndex = y * width + x; // If the pixel is the same segmentIndex and is inside the + // Region defined by the array of points, set their value to segmentIndex. + + if (pointInShape({ + x: x, + y: y + })) { + pixelData[pixelIndex] = segmentIndex; + } + } + } +} +/** + * Fill all pixels labeled with the activeSegmentIndex, + * inside the region defined by the shape. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + + +function fillInsideShape(evt, operationData, pointInShape, topLeft, bottomRight) { + fillShape(evt, operationData, pointInShape, topLeft, bottomRight, 'inside'); +} +/** + * Fill all pixels labeled with the activeSegmentIndex, + * outside the region defined by the shape. + * @param {Object} evt The Cornerstone event. + * @param {Object} operationData An object containing the `pixelData` to + * modify, the `segmentIndex` and the `points` array. + * @param {Object} pointInShape - A function that checks if a point, x,y is within a shape. + * @param {number[]} topLeft The top left of the bounding box. + * @param {number[]} bottomRight The bottom right of the bounding box. + * @returns {null} + */ + +function fillOutsideShape(evt, operationData, pointInShape, topLeft, bottomRight) { + fillShape(evt, operationData, function (point) { + return !pointInShape(point); + }, topLeft, bottomRight, 'outside'); +} + +/***/ }), + +/***/ "./util/segmentation/floodFill.js": +/*!****************************************!*\ + !*** ./util/segmentation/floodFill.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../node_modules/@babel/runtime/helpers/toConsumableArray.js"); +/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); + + +/** + * floodFill.js - Taken from MIT OSS lib - https://github.com/tuzz/n-dimensional-flood-fill + * Refactored to ES6. + * + * @param {function} getter The getter to the elements of your data structure, + * e.g. getter(x,y) for a 2D interprettation of your structure. + * @param {number[]} seed The seed for your fill. The dimensionality is infered + * by the number of dimensions of the seed. + * @param {function} [options.onFlood] An optional callback to execute when each pixel is flooded. + * e.g. onFlood(x,y). + * @param {function} [options.onBoundary] An optional callback to execute whenever a boundary is reached. + * a boundary could be another segmentIndex, or the edge of your + * data structure (i.e. when your getter returns undefined). + * @param {function} [options.equals] An optional equality method for your datastructure. + * Default is simply value1 = value2. + * @param {boolean} [options.diagonals] Whether you allow flooding through diagonals. Defaults to false. + * + * @returns {Object} + */ +/* harmony default export */ __webpack_exports__["default"] = (function (getter, seed) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var onFlood = options.onFlood || function () {}; + + var onBoundary = options.onBoundary || function () {}; + + var equals = options.equals || defaultEquals; + var diagonals = options.diagonals || false; + var startNode = get(seed); + var permutations = prunedPermutations(); + var stack = []; + var flooded = []; + var visits = {}; + var bounds = {}; + stack.push({ + currentArgs: seed + }); + + while (stack.length > 0) { + flood(stack.pop()); + } + + return { + flooded: flooded, + boundaries: boundaries() + }; + + function flood(job) { + var getArgs = job.currentArgs; + var prevArgs = job.previousArgs; + + if (visited(getArgs)) { + return; + } + + markAsVisited(getArgs); + + if (member(getArgs)) { + markAsFlooded(getArgs); + pushAdjacent(getArgs); + } else { + markAsBoundary(prevArgs); + } + } + + function visited(key) { + return visits[key] === true; + } + + function markAsVisited(key) { + visits[key] = true; + } + + function member(getArgs) { + var node = safely(get, [getArgs]); + return safely(equals, [node, startNode]); + } + + function markAsFlooded(getArgs) { + flooded.push(getArgs); + onFlood.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(getArgs)); + } + + function markAsBoundary(prevArgs) { + bounds[prevArgs] = prevArgs; + onBoundary.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(prevArgs)); + } + + function pushAdjacent(getArgs) { + for (var i = 0; i < permutations.length; i += 1) { + var perm = permutations[i]; + var nextArgs = getArgs.slice(0); + + for (var j = 0; j < getArgs.length; j += 1) { + nextArgs[j] += perm[j]; + } + + stack.push({ + currentArgs: nextArgs, + previousArgs: getArgs + }); + } + } + + function get(getArgs) { + return getter.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(getArgs)); + } + + function safely(f, args) { + try { + return f.apply(void 0, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(args)); + } catch (error) { + return; + } + } + + function prunedPermutations() { + var permutations = permute(seed.length); + return permutations.filter(function (perm) { + var count = countNonZeroes(perm); + return count !== 0 && (count === 1 || diagonals); + }); + } + + function permute(length) { + var perms = []; + + var permutation = function permutation(string) { + return string.split('').map(function (c) { + return parseInt(c, 10) - 1; + }); + }; + + for (var i = 0; i < Math.pow(3, length); i += 1) { + var string = lpad(i.toString(3), '0', length); + perms.push(permutation(string)); + } + + return perms; + } + + function boundaries() { + var array = []; + + for (var key in bounds) { + if (bounds.hasOwnProperty(key)) { + array.unshift(bounds[key]); + } + } + + return array; + } +}); + +function defaultEquals(a, b) { + return a === b; +} + +function countNonZeroes(array) { + var count = 0; + + for (var i = 0; i < array.length; i += 1) { + if (array[i] !== 0) { + count += 1; + } + } + + return count; +} + +function lpad(string, character, length) { + var array = new Array(length + 1); + var pad = array.join(character); + return (pad + string).slice(-length); +} + +/***/ }), + +/***/ "./util/segmentation/getBoundingBoxAroundCircle.js": +/*!*********************************************************!*\ + !*** ./util/segmentation/getBoundingBoxAroundCircle.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getBoundingBoxAroundCircle; }); +/* harmony import */ var _getCircleCoords__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../getCircleCoords */ "./util/getCircleCoords.js"); + +function getBoundingBoxAroundCircle(evt) { + var handles = evt.detail.handles; + var _evt$detail$image = evt.detail.image, + imageWidth = _evt$detail$image.width, + imageHeight = _evt$detail$image.height; + var circleCoordinates = Object(_getCircleCoords__WEBPACK_IMPORTED_MODULE_0__["default"])(handles.start, handles.end); + var xMax = circleCoordinates.width + circleCoordinates.left; + var xMin = circleCoordinates.left; + var yMax = circleCoordinates.top + circleCoordinates.height; + var yMin = circleCoordinates.top; + xMin = Math.floor(xMin); + yMin = Math.floor(yMin); + xMax = Math.floor(xMax); + yMax = Math.floor(yMax); + xMax = Math.min(imageWidth, xMax); + xMin = Math.max(0, xMin); + yMax = Math.min(imageHeight, yMax); + yMin = Math.max(0, yMin); + return [[xMin, yMin], [xMax, yMax]]; +} + +/***/ }), + +/***/ "./util/segmentation/getBoundingBoxAroundPolygon.js": +/*!**********************************************************!*\ + !*** ./util/segmentation/getBoundingBoxAroundPolygon.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getBoundingBoxAroundPolygon; }); +function getBoundingBoxAroundPolygon(vertices, image) { + var xMin = Infinity; + var xMax = 0; + var yMin = Infinity; + var yMax = 0; + var width = image.width, + height = image.height; + vertices.forEach(function (v) { + xMin = Math.min(v[0], xMin); + xMax = Math.max(v[0], xMax); + yMin = Math.min(v[1], yMin); + yMax = Math.max(v[1], yMax); + }); + xMin = Math.floor(xMin); + yMin = Math.floor(yMin); + xMax = Math.floor(xMax); + yMax = Math.floor(yMax); + xMax = Math.min(width, xMax); + xMin = Math.max(0, xMin); + yMax = Math.min(height, yMax); + yMin = Math.max(0, yMin); + return [[xMin, yMin], [xMax, yMax]]; +} + +/***/ }), + +/***/ "./util/segmentation/getCircle.js": +/*!****************************************!*\ + !*** ./util/segmentation/getCircle.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getCircle; }); +/** + * Gets the pixels within the circle. + * @export @public @method + * @name getCircle + * + * @param {number} radius The radius of the circle. + * @param {number} rows The number of rows. + * @param {number} columns The number of columns. + * @param {number} [xCoord = 0] The x-location of the center of the circle. + * @param {number} [yCoord = 0] The y-location of the center of the circle. + * @returns {Array.number[]} Array of pixels contained within the circle. + */ +function getCircle(radius, rows, columns) { + var xCoord = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; + var yCoord = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var x0 = Math.floor(xCoord); + var y0 = Math.floor(yCoord); + + if (radius === 1) { + return [[x0, y0]]; + } + + var circleArray = []; + var index = 0; + + for (var y = -radius; y <= radius; y++) { + var _yCoord = y0 + y; + + if (_yCoord > rows || _yCoord < 0) { + continue; + } + + for (var x = -radius; x <= radius; x++) { + var _xCoord = x0 + x; + + if (_xCoord >= columns || _xCoord < 0) { + continue; + } + + if (x * x + y * y < radius * radius) { + circleArray[index++] = [x0 + x, y0 + y]; + } + } + } + + return circleArray; +} + +/***/ }), + +/***/ "./util/segmentation/getDiffBetweenPixelData.js": +/*!******************************************************!*\ + !*** ./util/segmentation/getDiffBetweenPixelData.js ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getDiffBetweenPixelData; }); +function getDiffBetweenPixelData(previousPixelData, newPixelData) { + var diff = []; + + for (var i = 0; i < previousPixelData.length; i++) { + if (previousPixelData[i] !== newPixelData[i]) { + diff.push([i, previousPixelData[i], newPixelData[i]]); + } + } + + return diff; +} + +/***/ }), + +/***/ "./util/segmentation/getPixelPathBetweenPixels.js": +/*!********************************************************!*\ + !*** ./util/segmentation/getPixelPathBetweenPixels.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); + +var oneOverRoot2 = 1 / Math.sqrt(2); // Cache this to avoid repeated computation. + +var DIRECTIONS = { + up: { + x: 0, + y: 1 + }, + upRight: { + x: oneOverRoot2, + y: oneOverRoot2 + }, + right: { + x: 1, + y: 0 + }, + downRight: { + x: oneOverRoot2, + y: -oneOverRoot2 + }, + down: { + x: 0, + y: 1 + }, + downLeft: { + x: -oneOverRoot2, + y: -oneOverRoot2 + }, + left: { + x: -1, + y: 0 + }, + upLeft: { + x: -oneOverRoot2, + y: oneOverRoot2 + } +}; +/** + * GetPixelPathBetweenPixels - Generates a 1-pixel wide path of pixels between two pixels. + * This is essentially simplified A* pathfinding, as we know there are no "obstacles". + * + * @param {Object} p1 The starting pixel + * @param {Object} p2 The end pixel. + * + * @returns {Object[]} All of the pixels on the shortest path between p1 and p2. + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (p1, p2) { + var p = { + x: p1.x, + y: p1.y + }; + var path = []; + + while (p2.x !== p.x || p2.y !== p.y) { + if (p2.x === p.x) { + // Goal is above or bellow us. + if (p2.y > p.y) { + p.y++; + } else { + p.y--; + } + } else if (p2.y === p.y) { + // Goal is to the left or right of us. + if (p2.x > p.x) { + p.x++; + } else { + p.x--; + } + } else if (p2.y > p.y) { + if (p2.x > p.x) { + // Can go up, right or diagonally up-right towards goal. + moveUpRight(p, p2); + } else { + // Can go up, left, or diagonally up-left towards goal. + moveUpLeft(p, p2); + } + } else if (p2.x > p.x) { + // Can go down, right, or diagonally down-right towards goal. + moveDownRight(p, p2); + } else { + // Can go down, left, or diagonally down-left towards goal. + moveDownLeft(p, p2); + } + + path.push({ + x: p.x, + y: p.y + }); + } + + path.pop(); // Remove last node as is the same as the destination. + + return path; +}); +/** + * MoveUpRight - Moves p up, right or diagonally up right towards p2. + * @param {Object} p + * @param {Object} p2 + * + * @returns {null} + */ + +function moveUpRight(p, p2) { + var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel. + + var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.up), dotProduct2D(unitVector, DIRECTIONS.right), dotProduct2D(unitVector, DIRECTIONS.upRight)]; + var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts); + + switch (largestIndex) { + case 0: + p.y++; + break; + + case 1: + p.x++; + break; + + case 2: + p.y++; + p.x++; + } +} +/** + * MoveUpLeft - Moves p up, left or diagonally up left towards p2. + * @param {Object} p + * @param {Object} p2 + * + * @returns {null} + */ + + +function moveUpLeft(p, p2) { + var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel. + + var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.up), dotProduct2D(unitVector, DIRECTIONS.left), dotProduct2D(unitVector, DIRECTIONS.upLeft)]; + var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts); + + switch (largestIndex) { + case 0: + p.y++; + break; + + case 1: + p.x--; + break; + + case 2: + p.y++; + p.x--; + } +} +/** + * MoveDownRight - Moves p down, right or diagonally down right towards p2. + * @param {Object} p + * @param {Object} p2 + * + * @returns {null} + */ + + +function moveDownRight(p, p2) { + var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel. + + var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.down), dotProduct2D(unitVector, DIRECTIONS.right), dotProduct2D(unitVector, DIRECTIONS.downRight)]; + var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts); + + switch (largestIndex) { + case 0: + p.y--; + break; + + case 1: + p.x++; + break; + + case 2: + p.y--; + p.x++; + } +} +/** + * MoveDownLeft - Moves p down, left or diagonally down left towards p2. + * @param {Object} p + * @param {Object} p2 + * + * @returns {null} + */ + + +function moveDownLeft(p, p2) { + var unitVector = unitVectorFromPtoP2(p, p2); // Largest dot product is fastest way to travel. + + var dotProducts = [dotProduct2D(unitVector, DIRECTIONS.down), dotProduct2D(unitVector, DIRECTIONS.left), dotProduct2D(unitVector, DIRECTIONS.downLeft)]; + var largestIndex = getIndexOfLargestInLengthThreeArray(dotProducts); + + switch (largestIndex) { + case 0: + p.y--; + break; + + case 1: + p.x--; + break; + + case 2: + p.y--; + p.x--; + } +} +/** + * UnitVectorFromPtoP2 - Returns a unit vector pointing from p to p2. + * @param {Object} p + * @param {Object} p2 + * + * @returns {Object} The unit vector. + */ + + +function unitVectorFromPtoP2(p, p2) { + var distance = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstoneMath.point.distance(p, p2); + return { + x: (p2.x - p.x) / distance, + y: (p2.y - p.y) / distance + }; +} + +function dotProduct2D(p, p2) { + return p.x * p2.x + p.y * p2.y; +} +/** + * GetIndexOfLargestInLengthThreeArray - Returns the index of the largest value + * in the 3 element array. + * @param {number[]} array + * @returns {number} + */ + + +function getIndexOfLargestInLengthThreeArray(array) { + var largestIndex = array[0] > array[1] ? 0 : 1; + + if (array[2] > array[largestIndex]) { + largestIndex = 2; + } + + return largestIndex; +} + +/***/ }), + +/***/ "./util/segmentation/index.js": +/*!************************************!*\ + !*** ./util/segmentation/index.js ***! + \************************************/ +/*! exports provided: drawBrushPixels, eraseIfSegmentIndex, eraseOutsideBoundingBox, eraseInsideShape, eraseOutsideShape, fillOutsideBoundingBox, fillInsideShape, fillOutsideShape, floodFill, getBoundingBoxAroundCircle, getBoundingBoxAroundPolygon, getCircle, getPixelPathBetweenPixels, isSameSegment, triggerLabelmapModifiedEvent, getDiffBetweenPixelData */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _drawBrush__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drawBrush */ "./util/segmentation/drawBrush.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "drawBrushPixels", function() { return _drawBrush__WEBPACK_IMPORTED_MODULE_0__["drawBrushPixels"]; }); + +/* harmony import */ var _eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eraseIfSegmentIndex */ "./util/segmentation/eraseIfSegmentIndex.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseIfSegmentIndex", function() { return _eraseIfSegmentIndex__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./eraseOutsideBoundingBox */ "./util/segmentation/eraseOutsideBoundingBox.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideBoundingBox", function() { return _eraseOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _eraseShape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eraseShape */ "./util/segmentation/eraseShape.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseInsideShape", function() { return _eraseShape__WEBPACK_IMPORTED_MODULE_3__["eraseInsideShape"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eraseOutsideShape", function() { return _eraseShape__WEBPACK_IMPORTED_MODULE_3__["eraseOutsideShape"]; }); + +/* harmony import */ var _fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fillOutsideBoundingBox */ "./util/segmentation/fillOutsideBoundingBox.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillOutsideBoundingBox", function() { return _fillOutsideBoundingBox__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _fillShape__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fillShape */ "./util/segmentation/fillShape.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillInsideShape", function() { return _fillShape__WEBPACK_IMPORTED_MODULE_5__["fillInsideShape"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fillOutsideShape", function() { return _fillShape__WEBPACK_IMPORTED_MODULE_5__["fillOutsideShape"]; }); + +/* harmony import */ var _floodFill__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./floodFill */ "./util/segmentation/floodFill.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "floodFill", function() { return _floodFill__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _getBoundingBoxAroundCircle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getBoundingBoxAroundCircle */ "./util/segmentation/getBoundingBoxAroundCircle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBoundingBoxAroundCircle", function() { return _getBoundingBoxAroundCircle__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _getBoundingBoxAroundPolygon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getBoundingBoxAroundPolygon */ "./util/segmentation/getBoundingBoxAroundPolygon.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getBoundingBoxAroundPolygon", function() { return _getBoundingBoxAroundPolygon__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _getCircle__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getCircle */ "./util/segmentation/getCircle.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCircle", function() { return _getCircle__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _getPixelPathBetweenPixels__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getPixelPathBetweenPixels */ "./util/segmentation/getPixelPathBetweenPixels.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getPixelPathBetweenPixels", function() { return _getPixelPathBetweenPixels__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _isSameSegment__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./isSameSegment */ "./util/segmentation/isSameSegment.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSameSegment", function() { return _isSameSegment__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _triggerLabelmapModifiedEvent__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./triggerLabelmapModifiedEvent */ "./util/segmentation/triggerLabelmapModifiedEvent.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "triggerLabelmapModifiedEvent", function() { return _triggerLabelmapModifiedEvent__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _getDiffBetweenPixelData__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./getDiffBetweenPixelData */ "./util/segmentation/getDiffBetweenPixelData.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDiffBetweenPixelData", function() { return _getDiffBetweenPixelData__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + + + + + + + + + + + + + + + + + +/***/ }), + +/***/ "./util/segmentation/isSameSegment.js": +/*!********************************************!*\ + !*** ./util/segmentation/isSameSegment.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isSameSegment; }); +/** + * Returns true if the pixelIndex of pixelData is the same as the segmentIndex. + * + * @param {number} pixelIndex The index of the pixel. + * @param {UInt16Array} pixelData The pixelData array. + * @param {number} segmentIndex The segment Index to erase. + * + * @returns {boolean} + */ +function isSameSegment(pixelIndex, pixelData, segmentIndex) { + return pixelData[pixelIndex] === segmentIndex; +} + +/***/ }), + +/***/ "./util/segmentation/triggerLabelmapModifiedEvent.js": +/*!***********************************************************!*\ + !*** ./util/segmentation/triggerLabelmapModifiedEvent.js ***! + \***********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return triggerLabelmapModifiedEvent; }); +/* harmony import */ var _externalModules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules */ "./externalModules.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../events.js */ "./events.js"); +/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store */ "./store/index.js"); + + + +/** + * Triggers the LABELMAP_MODIFIED event for the active element, providing the labelmapIndex that was modified. + * + * @param {HTMLElement} element + * @param {number} labelmapIndex The labelmapIndex. Defaults to the active for that element if not set. + */ + +function triggerLabelmapModifiedEvent(element, labelmapIndex) { + var _getModule = Object(_store__WEBPACK_IMPORTED_MODULE_2__["getModule"])('segmentation'), + getters = _getModule.getters; + + labelmapIndex = labelmapIndex === undefined ? getters.activeLabelmapIndex(element) : labelmapIndex; + _externalModules__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.triggerEvent(element, _events_js__WEBPACK_IMPORTED_MODULE_1__["default"].LABELMAP_MODIFIED, { + labelmapIndex: labelmapIndex + }); +} + +/***/ }), + +/***/ "./util/setContextToDisplayFontSize.js": +/*!*********************************************!*\ + !*** ./util/setContextToDisplayFontSize.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + +/** + * Sets the canvas context transformation matrix so it is scaled to show text + * more cleanly even if the image is scaled up. See + * https://github.com/cornerstonejs/cornerstoneTools/wiki/DrawingText + * for more information + * @export @public @function + * @name setContextToDisplayFontSize + * + * @param {HTMLElement} enabledElement The cornerstone enabled element. + * @param {CanvasRenderingContext2D} context The canvas context. + * @param {number} fontSize The font size. + * @returns {Object} {fontSize: number, lineHeight: number, fontScale: number} + */ + +/* harmony default export */ __webpack_exports__["default"] = (function (enabledElement, context, fontSize) { + var fontScale = 0.1; + _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.setToPixelCoordinateSystem(enabledElement, context, fontScale); // Return the font size to use + + var scaledFontSize = fontSize / enabledElement.viewport.scale / fontScale; // TODO: actually calculate this? + + var lineHeight = fontSize / enabledElement.viewport.scale / fontScale; + return { + fontSize: scaledFontSize, + lineHeight: lineHeight, + fontScale: fontScale + }; +}); + +/***/ }), + +/***/ "./util/throttle.js": +/*!**************************!*\ + !*** ./util/throttle.js ***! + \**************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _debounce_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./debounce.js */ "./util/debounce.js"); +/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isObject.js */ "./util/isObject.js"); + + +/** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds (or once per browser frame). The throttled function + * comes with a `cancel` method to cancel delayed `func` invocations and a + * `flush` method to immediately invoke them. Provide `options` to indicate + * whether `func` should be invoked on the leading and/or trailing edge of the + * `wait` timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until the next tick, similar to `setTimeout` with a timeout of `0`. + * + * If `wait` is omitted in an environment with `requestAnimationFrame`, `func` + * invocation will be deferred until the next frame is drawn (typically about + * 16ms). + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `throttle` and `debounce`. + * + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] + * The number of milliseconds to throttle invocations to; if omitted, + * `requestAnimationFrame` is used (if available). + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', throttle(updatePosition, 100)) + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * const throttled = throttle(renewToken, 300000, { 'trailing': false }) + * jQuery(element).on('click', throttled) + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel) + */ + +function throttle(func, wait, options) { + var leading = true; + var trailing = true; + + if (typeof func !== 'function') { + throw new TypeError('Expected a function'); + } + + if (Object(_isObject_js__WEBPACK_IMPORTED_MODULE_1__["default"])(options)) { + leading = 'leading' in options ? Boolean(options.leading) : leading; + trailing = 'trailing' in options ? Boolean(options.trailing) : trailing; + } + + return Object(_debounce_js__WEBPACK_IMPORTED_MODULE_0__["default"])(func, wait, { + leading: leading, + trailing: trailing, + maxWait: wait + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (throttle); + +/***/ }), + +/***/ "./util/triggerEvent.js": +/*!******************************!*\ + !*** ./util/triggerEvent.js ***! + \******************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return triggerEvent; }); +/** + * Triggers a CustomEvent. + * @public + * @method triggerEvent + * + * @param {EventTarget} el The element or EventTarget to trigger the event upon. + * @param {String} type The event type name. + * @param {Object|null} [detail=null] The event data to be sent. + * @returns {Boolean} The return value is false if at least one event listener called preventDefault(). Otherwise it returns true. + */ +function triggerEvent(el, type) { + var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var event; // This check is needed to polyfill CustomEvent on IE11- + + if (typeof window.CustomEvent === 'function') { + event = new CustomEvent(type, { + detail: detail, + cancelable: true + }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(type, true, true, detail); + } + + return el.dispatchEvent(event); +} + +/***/ }), + +/***/ "./util/wait.js": +/*!**********************!*\ + !*** ./util/wait.js ***! + \**********************/ +/*! exports provided: wait, waitForEnabledElementImageToLoad, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wait", function() { return wait; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "waitForEnabledElementImageToLoad", function() { return waitForEnabledElementImageToLoad; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../externalModules.js */ "./externalModules.js"); + +/** + * Waits a set amount of time, then resolves. Can be chained off of to delay + * next call in promise chain. + * @public + * @function wait + * @param {number} ms - number in ms to wait + * @returns {Promise} - A promise that resolves when setTimeout elapses + */ + +var wait = function wait(ms) { + return new Promise(function (resolve) { + return setTimeout(resolve, ms); + }); +}; +/** + * A promise that returns an EnabledElement who's image has loaded, or + * null if the provided element ceases being an enabledElement before an + * image has been loaded. + * @public + * @function waitForEnabledElementImageToLoad + * + * @param {HTMLElement} element - An element that is an EnabledElement + * @returns {EnabledElement} - The enabled element that has loaded an image + */ + +function waitForEnabledElementImageToLoad(element) { + try { + var enabledElement = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone.getEnabledElement(element); + + if (!enabledElement.image) { + return wait(250).then(function () { + return waitForEnabledElementImageToLoad(element); + }); + } // EnabledElement's image is loaded. + + + return enabledElement; + } catch (ex) { + // Is no longer, or never was an enabled element, stop polling + return null; + } +} +/* harmony default export */ __webpack_exports__["default"] = (wait); + +/***/ }), + +/***/ "./util/zoom/changeViewportScale.js": +/*!******************************************!*\ + !*** ./util/zoom/changeViewportScale.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Changes the scale of the viewport. + * + * @private + * @function changeViewportScale + * + * @param {Object} viewport The viewport to scale. + * @param {number} ticks The change in magnifcation factor. + * @param {Object} scaleLimits The limits in scale. + * @returns {Object} The scaled viewport. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (viewport, ticks, scaleLimits) { + var maxScale = scaleLimits.maxScale, + minScale = scaleLimits.minScale; + var pow = 1.7; + var oldFactor = Math.log(viewport.scale) / Math.log(pow); + var factor = oldFactor + ticks; + var scale = Math.pow(pow, factor); + + if (maxScale && scale > maxScale) { + viewport.scale = maxScale; + } else if (minScale && scale < minScale) { + viewport.scale = minScale; + } else { + viewport.scale = scale; + } + + return viewport; +}); + +/***/ }), + +/***/ "./util/zoom/correctShift.js": +/*!***********************************!*\ + !*** ./util/zoom/correctShift.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Corrects the shift by accountoing for viewport rotation and flips. + * @export @public @method + * @name correctShift + * + * @param {Object} shift The shift to correct. + * @param {Object} viewportOrientation Object containing information on the viewport orientation. + * @returns {Object} The corrected shift. + */ +/* harmony default export */ __webpack_exports__["default"] = (function (shift, viewportOrientation) { + var hflip = viewportOrientation.hflip, + vflip = viewportOrientation.vflip, + rotation = viewportOrientation.rotation; // Apply Flips + + shift.x *= hflip ? -1 : 1; + shift.y *= vflip ? -1 : 1; // Apply rotations + + if (rotation !== 0) { + var angle = rotation * Math.PI / 180; + var cosA = Math.cos(angle); + var sinA = Math.sin(angle); + var newX = shift.x * cosA - shift.y * sinA; + var newY = shift.x * sinA + shift.y * cosA; + shift.x = newX; + shift.y = newY; + } + + return shift; +}); + +/***/ }), + +/***/ "./util/zoom/index.js": +/*!****************************!*\ + !*** ./util/zoom/index.js ***! + \****************************/ +/*! exports provided: changeViewportScale, correctShift, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _changeViewportScale_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./changeViewportScale.js */ "./util/zoom/changeViewportScale.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "changeViewportScale", function() { return _changeViewportScale_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _correctShift_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./correctShift.js */ "./util/zoom/correctShift.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "correctShift", function() { return _correctShift_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + + + // Named + + // Default + +/* harmony default export */ __webpack_exports__["default"] = ({ + changeViewportScale: _changeViewportScale_js__WEBPACK_IMPORTED_MODULE_0__["default"], + correctShift: _correctShift_js__WEBPACK_IMPORTED_MODULE_1__["default"] +}); + +/***/ }), + +/***/ "./version.js": +/*!********************!*\ + !*** ./version.js ***! + \********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ('4.12.1'); + +/***/ }) + +/******/ }); +}); +//# sourceMappingURL=cornerstoneTools.js.map diff --git a/lib/cornerstone/cornerstoneTools.min.js b/lib/cornerstone/cornerstoneTools.min.js new file mode 100644 index 0000000..bc8aa00 --- /dev/null +++ b/lib/cornerstone/cornerstoneTools.min.js @@ -0,0 +1,3 @@ +/*! cornerstone-tools - 4.22.1 - 2020-10-13 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/cornerstoneTools */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("cornerstone-tools",[],t):"object"==typeof exports?exports["cornerstone-tools"]=t():e.cornerstoneTools=t()}(window,(function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(a,o,function(t){return e[t]}.bind(null,o));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=25)}([function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;n=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},storage:function(){try{return localStorage}catch(e){}}()};o.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],o.log=console.debug||console.log||function(){};var i=Object(a.a)(o);i.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: ".concat(e.message)}},t.a=i}).call(this,n(15))},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){e.exports=n(23)},function(e,t,n){"use strict";var a=n(6),o=n.n(a);t.a=function(e){function t(e){for(var t=0,n=0;n1)for(var n=1;n=1.5*n;return Math.round(e/n)+" "+a+(o?"s":"")}e.exports=function(e,t){t=t||{};var s=typeof e;if("string"===s&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!t)return;var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*r;case"weeks":case"week":case"w":return 6048e5*r;case"days":case"day":case"d":return r*i;case"hours":case"hour":case"hrs":case"hr":case"h":return r*o;case"minutes":case"minute":case"mins":case"min":case"m":return r*a;case"seconds":case"second":case"secs":case"sec":case"s":return r*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}(e);if("number"===s&&!1===isNaN(e))return t.long?function(e){var t=Math.abs(e);if(t>=i)return r(e,t,i,"day");if(t>=o)return r(e,t,o,"hour");if(t>=a)return r(e,t,a,"minute");if(t>=n)return r(e,t,n,"second");return e+" ms"}(e):function(e){var t=Math.abs(e);if(t>=i)return Math.round(e/i)+"d";if(t>=o)return Math.round(e/o)+"h";if(t>=a)return Math.round(e/a)+"m";if(t>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){var n=[],a=!0,o=!1,i=void 0;try{for(var r,s=e[Symbol.iterator]();!(a=(r=s.next()).done)&&(n.push(r.value),!t||n.length!==t);a=!0);}catch(e){o=!0,i=e}finally{try{a||null==s.return||s.return()}finally{if(o)throw i}}return n}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t,n){var a=function(){return this||"object"==typeof self&&self}()||Function("return this")(),o=a.regeneratorRuntime&&Object.getOwnPropertyNames(a).indexOf("regeneratorRuntime")>=0,i=o&&a.regeneratorRuntime;if(a.regeneratorRuntime=void 0,e.exports=n(24),o)a.regeneratorRuntime=i;else try{delete a.regeneratorRuntime}catch(e){a.regeneratorRuntime=void 0}},function(e,t){!function(t){"use strict";var n=Object.prototype,a=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",r=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag",l="object"==typeof e,c=t.regeneratorRuntime;if(c)l&&(e.exports=c);else{(c=t.regeneratorRuntime=l?e.exports:{}).wrap=f;var u={},d={};d[i]=function(){return this};var h=Object.getPrototypeOf,v=h&&h(h(I([])));v&&v!==n&&a.call(v,i)&&(d=v);var g=x.prototype=p.prototype=Object.create(d);y.prototype=g.constructor=x,x.constructor=y,x[s]=y.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,x):(e.__proto__=x,s in e||(e[s]="GeneratorFunction")),e.prototype=Object.create(g),e},c.awrap=function(e){return{__await:e}},T(b.prototype),b.prototype[r]=function(){return this},c.AsyncIterator=b,c.async=function(e,t,n,a){var o=new b(f(e,t,n,a));return c.isGeneratorFunction(t)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},T(g),g[s]="Generator",g[i]=function(){return this},g.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var a=t.pop();if(a in e)return n.value=a,n.done=!1,n}return n.done=!0,n}},c.values=I,w.prototype={constructor:w,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&a.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(n,a){return r.type="throw",r.arg=e,t.next=n,a&&(t.method="next",t.arg=void 0),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],r=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=a.call(i,"catchLoc"),l=a.call(i,"finallyLoc");if(s&&l){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&a.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var a=n.completion;if("throw"===a.type){var o=a.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:I(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}}}function f(e,t,n,a){var o=t&&t.prototype instanceof p?t:p,i=Object.create(o.prototype),r=new w(a||[]);return i._invoke=function(e,t,n){var a="suspendedStart";return function(o,i){if("executing"===a)throw new Error("Generator is already running");if("completed"===a){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var r=n.delegate;if(r){var s=C(r,n);if(s){if(s===u)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===a)throw a="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a="executing";var l=m(e,t,n);if("normal"===l.type){if(a=n.done?"completed":"suspendedYield",l.arg===u)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(a="completed",n.method="throw",n.arg=l.arg)}}}(e,n,r),i}function m(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function p(){}function y(){}function x(){}function T(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function b(e){var t;this._invoke=function(n,o){function i(){return new Promise((function(t,i){!function t(n,o,i,r){var s=m(e[n],e,o);if("throw"!==s.type){var l=s.arg,c=l.value;return c&&"object"==typeof c&&a.call(c,"__await")?Promise.resolve(c.__await).then((function(e){t("next",e,i,r)}),(function(e){t("throw",e,i,r)})):Promise.resolve(c).then((function(e){l.value=e,i(l)}),(function(e){return t("throw",e,i,r)}))}r(s.arg)}(n,o,t,i)}))}return t=t?t.then(i,i):i()}}function C(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,C(e,t),"throw"===t.method))return u;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var a=m(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,u;var o=a.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,u):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,u)}function M(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function w(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(M,this),this.reset(!0)}function I(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n2&&void 0!==arguments[2]?arguments[2]:null;return"function"==typeof window.CustomEvent?n=new CustomEvent(t,{detail:a,cancelable:!0}):(n=document.createEvent("CustomEvent")).initCustomEvent(t,!0,!0,a),e.dispatchEvent(n)}function M(e){return e instanceof HTMLElement?e:yt.enabledElementByUID(e)}var E={UINT_16_ARRAY:0,FLOAT_32_ARRAY:1},w=E.UINT_16_ARRAY,I=E.FLOAT_32_ARRAY;function S(e,t,n){var a,o=Tt("segmentation").configuration;switch(o.arrayType){case w:a=2;break;case I:a=4;break;default:throw new Error("Unsupported Array Type ".concat(o.arrayType))}e.labelmaps3D[t]={buffer:new ArrayBuffer(n*a),labelmaps2D:[],metadata:[],activeSegmentIndex:1,colorLUTIndex:0,segmentsHidden:[],undo:[],redo:[]}}function k(){var e={};function t(t,n,a){!1===e.hasOwnProperty(t)&&(e[t]={});var o=e[t];!1===o.hasOwnProperty(n)&&(o[n]={data:[]}),o[n].data.push(a)}function n(t,n){if(!1!==e.hasOwnProperty(t)){var a=e[t];if(!1!==a.hasOwnProperty(n))return a[n]}}function a(t){!1!==e.hasOwnProperty(t)&&delete e[t]}return{get:function(e,t){var a=y.cornerstone.getEnabledElement(e);if(a.image)return n(a.image.imageId,t)},add:function(e,n,a){var o=y.cornerstone.getEnabledElement(e);o.image&&t(o.image.imageId,n,a)},clear:function(e){var t=y.cornerstone.getEnabledElement(e);t.image&&a(t.image.imageId)},getImageIdToolState:n,addImageIdToolState:t,clearImageIdToolState:a,saveImageIdToolState:function(t){return e[t]},restoreImageIdToolState:function(t,n){e[t]=n},saveToolState:function(){return e},restoreToolState:function(t){e=t},toolState:e}}var _=k();function P(e){var t=y.cornerstone.getEnabledElement(e);return void 0===t.toolStateManager&&(t.toolStateManager=_),t.toolStateManager}function D(e,t,n){var a=P(e);n.uuid=n.uuid||"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)})),a.add(e,t,n),C(e,b.MEASUREMENT_ADDED,{toolName:t,toolType:t,element:e,measurementData:n})}function O(e,t){return P(e).get(e,t)}function L(e,t,n){var a=P(e).get(e,t);if(a&&a.data&&a.data.length){for(var o=-1,i=0;i0&&void 0!==arguments[0]?arguments[0]:"".concat("cornerstoneTools",":*");return R.a.enable(e)},B=function(){return R.a.disable()},V={series:{},colorLutTables:[]},q=N("store:modules:segmentationModule:metadata");function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"increase",n=Tt("segmentation"),a=n.configuration,o=O(e,"stack"),i=o.data[0],r=i.imageIds[0],s=V.series[r];if(s){var l=s.activeLabelmapIndex,c=s.labelmaps3D[l];switch(t){case"increase":c.activeSegmentIndex++,c.activeSegmentIndex>a.segmentsPerLabelmap&&(c.activeSegmentIndex=1);break;case"decrease":c.activeSegmentIndex--,c.activeSegmentIndex<=0&&(c.activeSegmentIndex=a.segmentsPerLabelmap)}}}var j=N("store:modules:segmentationModule:segmentVisibility");var W=N("store:modules:segmentationModule:getLabelmaps3D");function G(e){var t=M(e);if(t){var n=O(t,"stack");if(n){var a,o,i=n.data[0],r=i.imageIds[0],s=V.series[r];return s&&(a=s.labelmaps3D,o=s.activeLabelmapIndex),{labelmaps3D:a,activeLabelmapIndex:o,currentImageIdIndex:i.currentImageIdIndex}}W.error("Consumers must define stacks in their application if using segmentations in cornerstoneTools.")}}function Y(e,t){var n=G(e),a=n.labelmaps3D,o=n.activeLabelmapIndex;return a[t=void 0!==t?t:o]}var X=E.UINT_16_ARRAY,K=E.FLOAT_32_ARRAY;function Z(e,t){var n=M(e);if(n){var a=G(n).labelmaps3D;if(!a)return[];var o,i,r=Tt("segmentation").configuration;switch(r.arrayType){case X:o="Uint16Array",i="2";break;case K:o="Float32Array",i="4";break;default:throw new Error("Unsupported Array Type ".concat(r.arrayType))}var s=V.colorLutTables;if(void 0!==t){var l=a[t];return l?{labelmapIndex:t,bytesPerVoxel:i,type:o,buffer:l.buffer,colorLUT:s[l.colorLUTIndex]}:void 0}for(var c=[],u=0;u4&&void 0!==arguments[4]&&arguments[4],i=function(e,t){return t*a+e};e.forEach((function(e){var a=i.apply(void 0,Q()(e));o?ee(a,t,n):t[a]=n}))}function ne(e,t,n,a){for(var o=e.detail,i=t.pixelData,r=t.segmentIndex,s=o.image,l=s.width,c=s.height,u=0;u5&&void 0!==arguments[5]?arguments[5]:"inside",r=e.detail.image.width,s=t.pixelData,l=t.segmentIndex,c=oe()(a,2),u=c[0],d=c[1],h=oe()(o,2),v=h[0],g=h[1];"outside"===i&&ne(e,t,a,o);for(var f=u;f5&&void 0!==arguments[5]?arguments[5]:"inside",r=t.pixelData,s=t.segmentIndex;if(void 0!==r&&void 0!==s){var l=e.detail.image.width,c=oe()(a,2),u=c[0],d=c[1],h=oe()(o,2),v=h[0],g=h[1];"outside"===i&&ce(e,t,a,o);for(var f=u;f2&&void 0!==arguments[2]?arguments[2]:{},a=n.onFlood||function(){},o=n.onBoundary||function(){},i=n.equals||fe,r=n.diagonals||!1,s=T(t),l=C(),c=[],u=[],d={},h={};for(c.push({currentArgs:t});c.length>0;)v(c.pop());return{flooded:u,boundaries:E()};function v(e){var t=e.currentArgs,n=e.previousArgs;g(t)||(f(t),m(t)?(p(t),x(t)):y(n))}function g(e){return!0===d[e]}function f(e){d[e]=!0}function m(e){var t=b(T,[e]);return b(i,[t,s])}function p(e){u.push(e),a.apply(void 0,Q()(e))}function y(e){h[e]=e,o.apply(void 0,Q()(e))}function x(e){for(var t=0;t3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,i=Math.floor(a),r=Math.floor(o);if(1===e)return[[i,r]];for(var s=[],l=0,c=-e;c<=e;c++){var u=r+c;if(!(u>t||u<0))for(var d=-e;d<=e;d++){var h=i+d;h>=n||h<0||d*d+c*cn.y?n.y++:n.y--:t.y===n.y?t.x>n.x?n.x++:n.x--:t.y>n.y?t.x>n.x?we(n,t):Ie(n,t):t.x>n.x?Se(n,t):ke(n,t),a.push({x:n.x,y:n.y});return a.pop(),a};function we(e,t){var n=_e(e,t);switch(De([Pe(n,Me.up),Pe(n,Me.right),Pe(n,Me.upRight)])){case 0:e.y++;break;case 1:e.x++;break;case 2:e.y++,e.x++}}function Ie(e,t){var n=_e(e,t);switch(De([Pe(n,Me.up),Pe(n,Me.left),Pe(n,Me.upLeft)])){case 0:e.y++;break;case 1:e.x--;break;case 2:e.y++,e.x--}}function Se(e,t){var n=_e(e,t);switch(De([Pe(n,Me.down),Pe(n,Me.right),Pe(n,Me.downRight)])){case 0:e.y--;break;case 1:e.x++;break;case 2:e.y--,e.x++}}function ke(e,t){var n=_e(e,t);switch(De([Pe(n,Me.down),Pe(n,Me.left),Pe(n,Me.downLeft)])){case 0:e.y--;break;case 1:e.x--;break;case 2:e.y--,e.x--}}function _e(e,t){var n=y.cornerstoneMath.point.distance(e,t);return{x:(t.x-e.x)/n,y:(t.y-e.y)/n}}function Pe(e,t){return e.x*t.x+e.y*t.y}function De(e){var t=e[0]>e[1]?0:1;return e[2]>e[t]&&(t=2),t}function Oe(e,t){var n=Tt("segmentation").getters;t=void 0===t?n.activeLabelmapIndex(e):t,y.cornerstone.triggerEvent(e,b.LABELMAP_MODIFIED,{labelmapIndex:t})}function Le(e,t){for(var n=[],a=0;a3&&void 0!==arguments[3]?arguments[3]:[],o=arguments.length>4?arguments[4]:void 0,i=arguments.length>5?arguments[5]:void 0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,s=Tt("segmentation"),l=s.configuration,c=V.series[e];c||(V.series[e]={activeLabelmapIndex:n,labelmaps3D:[]},c=V.series[e]),c.labelmaps3D[n]={buffer:t,labelmaps2D:[],metadata:a,activeSegmentIndex:1,colorLUTIndex:r,segmentsHidden:[],undo:[],redo:[]};for(var u=c.labelmaps3D[n].labelmaps2D,d=t.byteLength/o,h=0;h=0&&o=0}var Ye=N("store:modules:segmentationModule:getSegmentOfActiveLabelmapAtEvent");var Xe=N("store:modules:segmentationModule:setColorLUT");function Ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=Tt("segmentation"),a=n.configuration,o=a.segmentsPerLabelmap;t?($e(t,o),t.lengtht&&Xe.warn("segmentsPerLabelmap is set to ".concat(t,", and the provided colorLUT provides ").concat(e.length,". Using the first ").concat(t," colors from the LUT."))}function Je(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:255,t=[],n=0;n=360&&(Qe-=360),Qe}var tt=.6;function nt(){(tt+=.07)>.82&&(tt=.3+(tt-.82));return tt}function at(e){var t,n,a,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.6,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:255,s=(1-Math.abs(2*i-1))*o,l=s*(1-Math.abs(e/60%2-1)),c=i-s/2;return e<60?(t=s,n=l,a=0):e<120?(t=l,n=s,a=0):e<180?(t=0,n=s,a=l):e<240?(t=0,n=l,a=s):e<300?(t=l,n=0,a=s):e<360&&(t=s,n=0,a=l),[255*(t+c),255*(n+c),255*(a+c),r]}var ot=N("store:modules:segmentationModule:getBrushColor");var it={renderOutline:!0,renderFill:!0,shouldRenderInactiveLabelmaps:!0,radius:10,minRadius:1,maxRadius:50,fillAlpha:.2,fillAlphaInactive:.1,outlineAlpha:.7,outlineAlphaInactive:.35,outlineWidth:3,storeHistory:!0,segmentsPerLabelmap:65535,arrayType:E.UINT_16_ARRAY},rt=N("util:segmentation:labelmap3DHistory");function st(e,t,n){var a=e.labelmaps2D;t.forEach((function(e){for(var t=e.imageIdIndex,o=e.diff,i=a[t].pixelData,r=0;rr?r=e:e1&&void 0!==arguments[1]&&arguments[1],n=M(e);if(n){var a=O(n,"stack");if(a){var o,i=a.data[0],r=i.imageIds[0],s=V.series[r];if(s){var l=s.activeLabelmapIndex,c=s.labelmaps3D[l],u=c.activeSegmentIndex;o=V.colorLutTables[c.colorLUTIndex][u]}else o=V.colorLutTables[0][1];return t?"rgba(".concat(o[0],", ").concat(o[1],", ").concat(o[2],", 1.0 )"):"rgba(".concat(o[0],", ").concat(o[1],", ").concat(o[2],", 0.8 )")}ot.error("Consumers must define stacks in their application if using segmentations in cornerstoneTools.")}},labelmapBuffers:Z,activeLabelmapBuffer:function(e){var t=M(e);if(t){var n=O(t,"stack").data[0].imageIds[0],a=V.series[n];if(a)return Z(t,a.activeLabelmapIndex)}},colorLUT:Ze,colorForSegmentIndexColorLUT:function(e,t){return Ze(e)[t]}},setters:{metadata:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,o=M(e);if(o){var i=y.cornerstone,r=O(o,"stack"),s=r.data[0],l=s.imageIds[0],c=V.series[l];if(c||(V.series[l]={labelmapIndex:t,labelmaps3D:[]},c=V.series[l]),!c.labelmaps3D[t]){var u=i.getEnabledElement(o),d=u.image,h=d.rows,v=d.columns,g=s.imageIds.length,f=h*v*g;S(c,t,f)}var m=c.labelmaps3D[t];m.metadata[n]=a}},labelmap3DForElement:function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=arguments.length>4?arguments[4]:void 0,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=M(e);if(r){var s=O(r,"stack"),l=s.data[0].imageIds.length,c=s.data[0].imageIds[0];Re(c,t,n,a,l,o,i),Oe(r,n)}},labelmap3DByFirstImageId:Re,incrementActiveSegmentIndex:function(e){var t=M(e);t&&z(t,"increase")},decrementActiveSegmentIndex:function(e){var t=M(e);t&&z(t,"decrease")},activeSegmentIndex:function(e,t){var n=M(e);if(n){var a=O(n,"stack").data[0].imageIds[0],o=V.series[a];if(o){var i=o.activeLabelmapIndex,r=o.labelmaps3D[i],s=Tt("segmentation").configuration;t<=0?t=1:t>s.segmentsPerLabelmap&&(t=s.segmentsPerLabelmap),r.activeSegmentIndex=t}}},toggleSegmentVisibility:function(e,t,n){if(t){var a=M(e);if(a){var o=O(a,"stack").data[0].imageIds[0],i=V.series[o];if(i){if(n=void 0===n?i.activeLabelmapIndex:n,i.labelmaps3D[n]){var r=i.labelmaps3D[n].segmentsHidden;return r[t]=!r[t],!r[t]}j.warn("No labelmap3D of labelmap index ".concat(n," on stack."))}else j.warn("brushStackState is undefined")}}},updateSegmentsOnLabelmap2D:function(e){e.segmentsOnLabelmap=$(e.pixelData)},deleteSegment:function(e,t,n){if(t){var a=M(e);if(a){var o=O(a,"stack").data[0].imageIds[0],i=V.series[o];if(i){n=void 0===n?i.activeLabelmapIndex:n;var r=i.labelmaps3D[n];if(r){delete r.metadata[t];for(var s=r.labelmaps2D,l=0;l1&&void 0!==arguments[1]?arguments[1]:0,n=M(e);if(n){var a=y.cornerstone,o=O(n,"stack"),i=o.data[0],r=a.getEnabledElement(n),s=r.image,l=s.rows,c=s.columns,u=i.imageIds.length,d=l*c*u,h=i.imageIds[0],v=V.series[h];v?(v.activeLabelmapIndex=t,v.labelmaps3D[t]||S(v,t,d)):(V.series[h]={activeLabelmapIndex:t,labelmaps3D:[]},S(v=V.series[h],t,d)),a.updateImage(n)}},radius:function(e){var t=Tt("segmentation").configuration;t.radius=Math.min(Math.max(e,t.minRadius),t.maxRadius)},pushState:function(e,t,n){var a=Y(e,n);a.undo.push(t),a.redo=[]},undo:function(e,t){var n=Y(e,t),a=n.undo,o=n.redo;if(a.length){var i=a.pop();st(n,i,1),o.push(i),y.cornerstone.updateImage(e)}else rt.warn("No undos left.")},redo:function(e,t){var n=Y(e,t),a=n.undo,o=n.redo;if(o.length){var i=o.pop();st(n,i,2),a.push(i),y.cornerstone.updateImage(e)}else rt.warn("No redos left.")}}},ct={activeManipulators:{}};function ut(e){var t=y.cornerstone.getEnabledElement(e).uuid;delete ct.activeManipulators[t]}function dt(e){var t=ct.activeManipulators,n=t[e];"function"==typeof n&&n(),delete t[e]}function ht(e){ut(e.detail.element)}var vt={setters:{addActiveManipulatorForElement:function(e,t){var n=y.cornerstone.getEnabledElement(e).uuid;ct.activeManipulators[n]=t},removeActiveManipulatorForElement:ut,cancelActiveManipulatorsForElement:function(e){dt(y.cornerstone.getEnabledElement(e).uuid)},cancelActiveManipulators:function(){var e=ct.activeManipulators;Object.keys(e).forEach((function(e){return dt(e)}))}},state:ct,enabledElementCallback:function(e){var t=y.cornerstone.EVENTS.NEW_IMAGE;e.removeEventListener(t,ht),e.addEventListener(t,ht)},removeEnabledElementCallback:function(e){var t=y.cornerstone.EVENTS.NEW_IMAGE;e.removeEventListener(t,ht),ut(e)}},gt={iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:'\n \n \n '},ft={configuration:gt,getters:{defaultOptions:function(){return gt}},setters:{defaultOptions:function(e){Object.assign(gt,e)}}},mt={configuration:{mouseEnabled:!0,touchEnabled:!0,globalToolSyncEnabled:!1,showSVGCursors:!1,autoResizeViewports:!0,lineDash:[4,4]}},pt=(N("store:modules:storeLogger"),{globalTools:{},globalToolChangeHistory:[],enabledElements:[],tools:[],isToolLocked:!1,activeMultiPartTool:null,mousePositionImage:{},clickProximity:6,touchProximity:10,handleRadius:6,deleteIfHandleOutsideImage:!0,preventHandleOutsideImage:!1,svgCursorUrl:null}),yt={mouseTools:function(){return pt.tools.filter((function(e){return e.supportedInteractionTypes.includes("Mouse")}))},touchTools:function(){return pt.tools.filter((function(e){return e.supportedInteractionTypes.includes("Touch")}))},enabledElementByUID:function(e){return pt.enabledElements.find((function(t){return y.cornerstone.getEnabledElement(t).uuid===e}))}},xt={segmentation:lt,cursor:ft,globalConfiguration:mt,manipulatorState:vt};function Tt(e){return xt[e]}var bt={modules:xt,state:pt,getters:yt},Ct=function(e,t){return pt.tools.find((function(n){return n.element===e&&n.name===t}))},Mt=xt.globalConfiguration;function Et(e,t){if(Mt.configuration.showSVGCursors){var n=t.getIconWithPointerSVG(),a=t.mousePoint,o=window.URL.createObjectURL(n);e.style.cursor="url('".concat(o,"') ").concat(a,", auto"),pt.svgCursorUrl=o}}function wt(e){Mt.configuration.showSVGCursors&&It(e,"none")}function It(e,t){pt.svgCursorUrl&&window.URL.revokeObjectURL(pt.svgCursorUrl),pt.svgCursorUrl=null,e.style.cursor=t}var St=Tt("globalConfiguration"),kt=N("store:setToolMode"),_t=function(e,t,n,a){void 0===a&&Array.isArray(n)&&(a=n,n=null);var o=Ct(e,t);o&&(function(e,t,n,a){t.supportedInteractionTypes.forEach((function(o){if(void 0===a||a.includes(o)){var i=Vt[o];i?i(t,e,n):kt.warn("Unable to resolve input conflicts for type %s",o)}})),bt.state.tools.filter((function(t){return t.element===e&&"active"===t.mode&&t.supportedInteractionTypes.length>0})).forEach((function(t){var n=!1;t.supportedInteractionTypes.forEach((function(e){t.options["is".concat(e,"Active")]&&(n=!0)})),n||(kt.log("Setting tool %s's to PASSIVE",t.name),Ht(e,t.name))}))}(e,o,n,a),o.supportedInteractionTypes.forEach((function(e){void 0===a||a.includes(e)?n["is".concat(e,"Active")]=!0:n["is".concat(e,"Active")]=!1})),St.configuration.showSVGCursors&&o.supportedInteractionTypes.includes("Mouse")&&function(e,t,n){var a;a="number"==typeof t?[t]:t.mouseButtonMask;a.includes(1)&&(n.svgCursor?Et(n.element,n.svgCursor):n.hideDefaultCursor?wt(e):function(e){It(e,"initial")}(e))}(e,n,o)),Ut("active",null,e,t,n)};var Pt=function(e,t,n){Bt("active",e,t,n),bt.state.enabledElements.forEach((function(a){_t(a,e,t,n)}))},Dt=Ut.bind(null,"disabled",null),Ot=Nt.bind(null,"disabled",null),Lt=Ut.bind(null,"enabled",null),At=Nt.bind(null,"enabled",null),Ht=Ut.bind(null,"passive",b.TOOL_DEACTIVATED),Rt=Nt.bind(null,"passive",b.TOOL_DEACTIVATED);function Ut(e,t,n,a,o){var i,r,s=Ct(n,a);s?(o=qt(o),Array.isArray(o.mouseButtonMask)&&0!==o.mouseButtonMask.length&&Array.isArray(s.options.mouseButtonMask)&&(o.mouseButtonMask=(i=o.mouseButtonMask,r=s.options.mouseButtonMask,i.concat(r).reduce((function(e,t){return-1===e.indexOf(t)&&e.push(t),e}),[]))),s.mode=e,s.mergeOptions(o),s["".concat(e,"Callback")]&&s["".concat(e,"Callback")](n,o),t&&C(n,t,{options:o,toolName:a,toolType:a,type:t})):kt.warn('Unable to find tool "%s" for enabledElement',a)}function Nt(e,t,n,a){Bt(e,n,a),bt.state.enabledElements.forEach((function(o){Ut(e,t,o,n,a)}))}function Ft(e,t,n){var a="is".concat(e,"Active"),o=bt.state.tools.find((function(e){return e.element===n&&"active"===e.mode&&!0===e.options[a]}));o&&(kt.log("Setting tool %s's %s to false",o.name,a),o.options[a]=!1)}function Bt(e,t,n,a){if(St.configuration.globalToolSyncEnabled){var o={mode:e,args:[t,n]};a&&o.push(a),bt.state.globalToolChangeHistory.push(o);bt.state.globalToolChangeHistory.length>50&&bt.state.globalToolChangeHistory.shift();var i=bt.state.globalTools[t];if(i)if("active"===e){var r=function(e,t,n){void 0===n&&Array.isArray(t)&&(n=t,t=null);var a=[],o=bt.state.globalTools[e];if(o){var i=new o.tool(o.props);i.supportedInteractionTypes.forEach((function(e){if(void 0===n||n.includes(e))if("Mouse"===e){var o=qt(t).mouseButtonMask;Array.isArray(o)&&o.length>0?o.forEach((function(t){return a.push("".concat(e,"-").concat(t))})):Array.isArray(o)&&0===o.length&&a.push("".concat(e,"-DELETE"))}else"MultiTouch"===e?a.push("".concat(e,"-").concat(i.configuration.touchPointers)):a.push(e)}))}return a}(t,n,a);Object.keys(bt.state.globalTools).forEach((function(e){var t=bt.state.globalTools[e];t.activeBindings=t.activeBindings.filter((function(e){return!r.includes(e)}))})),r.some((function(e){return e.includes("Mouse-DELETE")}))&&(i.activeBindings=i.activeBindings.filter((function(e){return!e.includes("Mouse")})),r=r.filter((function(e){return!e.includes("Mouse")}))),i.activeBindings=i.activeBindings.concat(r)}else i.activeBindings=[];else kt.warn("setToolMode call for tool not available globally: ".concat(t))}}var Vt={Mouse:function(e,t,n){var a=qt(n).mouseButtonMask;if(Array.isArray(a)&&a.length>0){var o=bt.state.tools.find((function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isMouseActive&&Array.isArray(e.options.mouseButtonMask)&&e.options.mouseButtonMask.some((function(e){return a.includes(e)}))}));o&&(o.options.mouseButtonMask=o.options.mouseButtonMask.filter((function(e){return!a.includes(e)})),0===o.options.mouseButtonMask.length&&(o.options.isMouseActive=!1))}},MouseWheel:Ft.bind(void 0,"MouseWheel"),Touch:function(e,t){var n=bt.state.tools.find((function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isTouchActive})),a=bt.state.tools.find((function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isMultiTouchActive&&1===e.configuration.touchPointers}));n&&(kt.log("Setting tool %s's isTouchActive to false",n.name),n.options.isTouchActive=!1),a&&(kt.log("Setting tool %s's isTouchActive to false",a.name),a.options.isMultiTouchActive=!1)},TouchPinch:Ft.bind(void 0,"TouchPinch"),TouchRotate:Ft.bind(void 0,"TouchRotate"),DoubleTap:Ft.bind(void 0,"DoubleTap"),MultiTouch:function(e,t){var n,a=bt.state.tools.find((function(n){return n.element===t&&"active"===n.mode&&!0===n.options.isMultiTouchActive&&n.configuration.touchPointers===e.configuration.touchPointers}));1===e.configuration.touchPointers&&(n=bt.state.tools.find((function(e){return e.element===t&&"active"===e.mode&&!0===e.options.isTouchActive}))),a&&(kt.log("Setting tool %s's isMultiTouchActive to false",a.name),a.options.isMultiTouchActive=!1),n&&(kt.log("Setting tool %s's isTouchActive to false",n.name),n.options.isTouchActive=!1)}};function qt(e){return Array.isArray(e)?e={mouseButtonMask:e}:e!==Object(e)&&(e={mouseButtonMask:[e]}),e.hasOwnProperty("mouseButtonMask")||(e.mouseButtonMask=[]),Array.isArray(e.mouseButtonMask)||(e.mouseButtonMask=[e.mouseButtonMask]),e.mouseButtonMask=e.mouseButtonMask.filter((function(e){return"number"==typeof e&&0!==e})),e}var zt={passiveCallback:function(e){Dt(e,this.name)},enabledCallback:function(e){_t(e,this.name)}};var jt={passiveCallback:function(e){Dt(e,this.name)},activeCallback:function(e){Lt(e,this.name)}},Wt=function(e,t){e.save(),t(e),e.restore()},Gt=1,Yt=2;var Xt={setToolWidth:function(e){Gt=e},getToolWidth:function(){return Gt},setActiveWidth:function(e){Yt=e},getActiveWidth:function(){return Yt}},Kt=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=t.color,o=t.lineWidth,i=t.fillStyle,r=t.lineDash,s=t.shouldDrawLines,l=void 0===s||s;e.beginPath(),e.strokeStyle=a||e.strokeStyle,e.lineWidth=o||void 0===o&&Xt.getToolWidth()||e.lineWidth,r&&e.setLineDash(r),n(e),i&&(e.fillStyle=i,e.fill()),l&&e.stroke(),r&&e.setLineDash([])};function Zt(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel";Kt(e,o,(function(e){"pixel"===i&&(n=y.cornerstone.pixelToCanvas(t,n),a=y.cornerstone.pixelToCanvas(t,a)),e.moveTo(n.x,n.y),e.lineTo(a.x,a.y)}))}var $t=function(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel";Kt(e,o,(function(e){"pixel"===i&&(n=y.cornerstone.pixelToCanvas(t,n),a=a.map((function(e){return y.cornerstone.pixelToCanvas(t,e)}))),e.moveTo(n.x,n.y),a.forEach((function(t){var n=t.x,a=t.y;e.lineTo(n,a)}))}))},Jt=function(e,t,n,a,o,i){var r=Math.atan2(n.y-t.y,n.x-t.x),s={color:a,lineWidth:o};i&&(s.lineDash=i),Zt(e,void 0,t,n,s,"canvas"),s={color:a,lineWidth:o,fillStyle:a};var l=[{x:n.x-10*Math.cos(r-Math.PI/7),y:n.y-10*Math.sin(r-Math.PI/7)},{x:n.x-10*Math.cos(r+Math.PI/7),y:n.y-10*Math.sin(r+Math.PI/7)},n];$t(e,void 0,n,l,s,"canvas")},Qt=function(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel";"pixel"===i&&(n=y.cornerstone.pixelToCanvas(t,n)),Kt(e,o,(function(e){e.arc(n.x,n.y,a,0,2*Math.PI)}))};function en(e){var t=y.cornerstoneMath;if(e instanceof t.Vector3)return e;var n=Object.keys(e);return n.includes("x")&&n.includes("y")&&n.includes("z")?new t.Vector3(e.x,e.y,e.z):new t.Vector3(e[0],e[1],e[2])}function tn(e,t){var n=en(t.rowCosines),a=en(t.columnCosines),o=en(t.imagePositionPatient),i=e.clone().sub(o);return{x:n.dot(i)/t.columnPixelSpacing,y:a.dot(i)/t.rowPixelSpacing}}function nn(e,t){var n=en(t.rowCosines),a=en(t.columnCosines),o=en(t.imagePositionPatient),i=n.clone().multiplyScalar(e.x);i.multiplyScalar(t.columnPixelSpacing);var r=a.clone().multiplyScalar(e.y);r.multiplyScalar(t.rowPixelSpacing);var s=i.add(r);return s.add(o),s}function an(e,t){var n=en(e.rowCosines),a=en(e.columnCosines),o=en(e.imagePositionPatient),i=en(t.rowCosines),r=en(t.columnCosines),s=en(t.imagePositionPatient),l=n.clone().cross(a),c=new y.cornerstoneMath.Plane;c.setFromNormalAndCoplanarPoint(l,o);var u=i.clone().cross(r),d=new y.cornerstoneMath.Plane;d.setFromNormalAndCoplanarPoint(u,s);var h=d.clone().intersectPlane(c),v=h.origin,g=h.direction,f=nn({x:t.columns,y:t.rows},t),m=s.distanceTo(f),p=new y.cornerstoneMath.Line3;p.start=v,p.end=v.clone().add(g.multiplyScalar(m));var x=function(e,t){var n=[];return Object.keys(t).forEach((function(a){var o=t[a],i=e.intersectLine(o);i&&n.push(i)})),n}(p,function(e){var t=nn({x:0,y:0},e),n=nn({x:e.columns,y:0},e),a=nn({x:0,y:e.rows},e),o=nn({x:e.columns,y:e.rows},e);return{top:new y.cornerstoneMath.Line3(t,n),left:new y.cornerstoneMath.Line3(t,a),right:new y.cornerstoneMath.Line3(n,o),bottom:new y.cornerstoneMath.Line3(a,o)}}(t));if(2===x.length)return{start:x[0],end:x[1]}}function on(e,t,n){var a=n*(Math.PI/180);return{x:Math.cos(a)*(e.x-t.x)-Math.sin(a)*(e.y-t.y)+t.x,y:Math.sin(a)*(e.x-t.x)+Math.cos(a)*(e.y-t.y)+t.y}}var rn=function(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel",r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0;"pixel"===i&&(n=y.cornerstone.pixelToCanvas(t,n),a=y.cornerstone.pixelToCanvas(t,a));var s=y.cornerstone.getViewport(t),l=t.clientWidth,c=t.clientHeight,u=s.scale,d=s.translation,h=s.rotation-r,v={x:l/2+d.x*u,y:c/2+d.y*u};Math.abs(h)>.05&&(n=on(n,v,-h),a=on(a,v,-h));var g=Math.abs(n.x-a.x),f=Math.abs(n.y-a.y),m=Math.min(n.x,a.x),p=Math.min(n.y,a.y),x={x:m+g/2,y:p+f/2};Math.abs(h)>.05&&(x=on(x,v,h));var T=h*Math.PI/180;Kt(e,o,(function(e){e.ellipse(x.x,x.y,g/2,f/2,T,0,2*Math.PI),e.closePath()}))},sn="white",ln="greenyellow",cn="transparent";var un={setFillColor:function(e){cn=e},getFillColor:function(){return cn},setToolColor:function(e){sn=e},getToolColor:function(){return sn},setActiveColor:function(e){ln=e},getActiveColor:function(){return ln},getColorIfActive:function(e){return e.color?e.color:e.active?ln:sn}},dn=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=t.element,i=un.getToolColor();e.strokeStyle=a.color||i;for(var r=Object.keys(n),s=function(t){var i=r[t],s=n[i];if(!0===s.drawnIndependently)return"continue";if(!0===a.drawHandlesIfActive&&!s.active)return"continue";if(a.hideHandlesIfMoving&&s.moving)return"continue";var l={lineWidth:s.active?Xt.getActiveWidth():Xt.getToolWidth(),fillStyle:a.fill};a.lineDash&&(l.lineDash=a.lineDash),Kt(e,l,(function(e){var t=y.cornerstone.pixelToCanvas(o,s),n=s.radius||a.handleRadius||pt.handleRadius;e.arc(t.x,t.y,n,0,2*Math.PI)}))},l=0;l4&&void 0!==arguments[4]?arguments[4]:"pixel";Kt(e,a,(function(e){n.forEach((function(n){var a=n.start,i=n.end;if("pixel"===o){var r=y.cornerstone;a=r.pixelToCanvas(t,a),i=r.pixelToCanvas(t,i)}e.moveTo(a.x,a.y),e.lineTo(i.x,i.y)}))}))},vn=function(e,t,n,a,o,i){var r=e.length>0?y.cornerstoneMath.point.findClosestPoint(e,t):t,s=[{x:n.left+n.width/2,y:n.top},{x:n.left,y:n.top+n.height/2},{x:n.left+n.width/2,y:n.top+n.height},{x:n.left+n.width,y:n.top+n.height/2}];Zt(a,void 0,r,y.cornerstoneMath.point.findClosestPoint(s,r),{color:o,lineWidth:i,lineDash:[2,3]},"canvas")},gn=15,fn="".concat(gn,"px Arial"),mn="transparent";var pn={setFont:function(e){fn=e},getFont:function(){return fn},setFontSize:function(e){gn=e},getFontSize:function(){return gn},setBackgroundColor:function(e){mn=e},getBackgroundColor:function(){return mn}},yn=function(e,t,n,a,o){var i=pn.getFontSize();e.font=pn.getFont(),e.textBaseline="top",e.fillStyle=a,n.forEach((function(n,a){e.fillText(n,t.left+o,t.top+o+a*(i+o))}))},xn=function(e,t,n){e.fillStyle=n,e.fillRect(t.left,t.top,t.width,t.height)};function Tn(e,t,n){var a=pn.getFont(),o=e.font;a&&a!==o&&(e.font=a);var i=e.measureText(t).width;return a&&a!==o&&(e.font=o),i+2*n}var bn=function(e,t,n,a,o,i){"[object Array]"!==Object.prototype.toString.call(t)&&(t=[t]);var r=pn.getFontSize(),s=pn.getBackgroundColor(),l=0;t.forEach((function(t){var n=Tn(e,t,5);l=Math.max(l,n)}));var c={width:l,height:5+t.length*(r+5)};return Wt(e,(function(e){e.strokeStyle=o,i&&i.centering&&!0===i.centering.x&&(n-=c.width/2),i&&i.centering&&!0===i.centering.y&&(a-=c.height/2),c.left=n,c.top=a;var r=i&&!0===i.debug?"#FF0000":s;xn(e,c,r),yn(e,c,t,o,5)})),c},Cn=function(e,t,n,a,o,i,r,s,l,c){var u=y.cornerstone,d=u.pixelToCanvas(t,n);l&&(d.x+=l);var h={centering:{x:!1,y:c}};if(n.boundingBox=bn(e,a,d.x,d.y,r,h),n.hasMoved){var v=i(o).map((function(e){return u.pixelToCanvas(t,e)}));vn(v,d,n.boundingBox,e,r,s)}},Mn=function(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel",r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0;if("pixel"===i){var s=y.cornerstone;n=s.pixelToCanvas(t,n),a=s.pixelToCanvas(t,a)}var l=y.cornerstone.getViewport(t),c=t.clientWidth,u=t.clientHeight,d=l.scale,h=l.translation,v=l.rotation-r,g={x:c/2+h.x*d,y:u/2+h.y*d};Math.abs(v)>.05&&(n=on(n,g,-v),a=on(a,g,-v));var f=Math.abs(n.x-a.x),m=Math.abs(n.y-a.y);n={x:Math.min(n.x,a.x),y:Math.min(n.y,a.y)},a={x:n.x+f,y:n.y+m};var p={x:n.x+f,y:n.y},x={x:n.x,y:n.y+m};Math.abs(v)>.05&&(n=on(n,g,v),a=on(a,g,v),p=on(p,g,v),x=on(x,g,v)),Kt(e,o,(function(e){e.moveTo(n.x,n.y),e.lineTo(p.x,p.y),e.lineTo(a.x,a.y),e.lineTo(x.x,x.y),e.lineTo(n.x,n.y)}))},En=function(e){var t=e.getContext("2d");return t.setTransform(1,0,0,1,0,0),t},wn=function(e,t){return void 0===e?t:e},In=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.shadow&&(e.shadowColor=wn(t.shadowColor,"#000000"),e.shadowBlur=wn(t.shadowBlur,0),e.shadowOffsetX=wn(t.shadowOffsetX,1),e.shadowOffsetY=wn(t.shadowOffsetY,1))},Sn=function(e){return 0===Object.keys(e).length&&e.constructor===Object},kn=Tt("segmentation"),_n=kn.getters,Pn=kn.setters;function Dn(){this.handles={start:{},end:{}}}function On(e){var t=e.detail.element,n=e.detail.currentPoints.image;return Sn(this.handles.start)?this.handles.start=n:(this.handles.end=n,this._applyStrategy(e)),y.cornerstone.updateImage(t),!0}function Ln(e){var t=e.detail,n=t.element,a=t.currentPoints.image;this.handles.end=a,y.cornerstone.updateImage(n)}function An(e){e.detail.handles=this.handles;var t=e.detail.element,n=_n.labelmap2D(t),a=n.labelmap2D,o=n.labelmap3D,i=n.currentImageIdIndex,r=a.pixelData,s=r.slice(),l={points:{start:{x:this.handles.start.x,y:this.handles.start.y},end:{x:this.handles.end.x,y:this.handles.end.y}},pixelData:r,segmentIndex:o.activeSegmentIndex,segmentationMixinType:"circleSegmentationMixin"};this.applyActiveStrategy(e,l);var c={imageIdIndex:i,diff:Le(s,r)};Pn.pushState(this.element,[c]),Pn.updateSegmentsOnLabelmap2D(a),y.cornerstone.updateImage(t),this._resetHandles()}var Hn={postTouchStartCallback:On,postMouseDownCallback:On,mouseClickCallback:On,touchDragCallback:Ln,mouseDragCallback:Ln,mouseMoveCallback:Ln,touchEndCallback:An,mouseUpCallback:An,initializeMixin:Dn,renderToolData:function(e){var t=this,n=e.detail,a=n.element,o=_n.brushColor(a,!0),i=En(n.canvasContext.canvas),r=y.cornerstoneMath.point.distance;Wt(i,(function(e){if(!t.handles)return null;var n=y.cornerstone.pixelToCanvas(a,t.handles.start),i=y.cornerstone.pixelToCanvas(a,t.handles.end),s=r(n,i);Qt(e,a,t.handles.start,s,{color:o})}))},_resetHandles:Dn,_applyStrategy:An},Rn=N("tools:ScissorsTool"),Un=Tt("segmentation"),Nn=Un.getters,Fn=Un.setters;function Bn(e){var t=e.detail.element,n=e.detail.currentPoints.image,a=this.handles.points;if(!a.length)return Rn.warn("Something went wrong, empty handles detected."),null;a.push({x:n.x,y:n.y,lines:[]}),this.currentHandle+=1,y.cornerstone.updateImage(t)}function Vn(e){var t=e.detail,n=e.detail.element;this._addPoint(t),y.cornerstone.updateImage(n)}function qn(e){var t=this.handles.points,n=e.detail.element,a=Nn.labelmap2D(n),o=a.labelmap2D,i=a.labelmap3D,r=a.currentImageIdIndex,s=o.pixelData,l=s.slice(),c={points:t,pixelData:s,segmentIndex:i.activeSegmentIndex,segmentationMixinType:"freehandSegmentationMixin"};this.applyActiveStrategy(e,c);var u={imageIdIndex:r,diff:Le(l,s)};Fn.pushState(this.element,[u]),Fn.updateSegmentsOnLabelmap2D(o),y.cornerstone.updateImage(n),this._resetHandles()}function zn(){this.handles={points:[]},this.currentHandle=0}var jn={postTouchStartCallback:Bn,postMouseDownCallback:Bn,mouseClickCallback:Bn,touchDragCallback:Vn,mouseDragCallback:Vn,mouseMoveCallback:Vn,touchEndCallback:qn,mouseUpCallback:qn,initializeMixin:zn,renderToolData:function(e){var t=e.detail,n=t.element,a=Nn.brushColor(n,!0),o=En(t.canvasContext.canvas),i=this.handles.points;i.length<2||Wt(o,(function(e){for(var t=0;t1)for(var n=0;nu||v<0||v>c)){var g=i.radius,f=r.canvasContext,m=r.element,p=o.brushColor(m,this._drawing);f.setTransform(1,0,0,1,0,0);var x=g*s.scale,T=n.pixelToCanvas(m,t);f.beginPath(),f.strokeStyle=p,f.ellipse(T.x,T.y,x,x,0,0,2*Math.PI),f.stroke()}}}}},ta=function(e){return e&&"object"===T()(e)&&"[object RegExp]"!==Object.prototype.toString.call(e)&&"[object Date]"!==Object.prototype.toString.call(e)},na=function(e,t){var n;return t&&!0===t.clone&&ta(e)?ia((n=e,Array.isArray(n)?[]:{}),e,t):e},aa=function(e,t,n){var a=e.slice();return t.forEach((function(t,o){void 0===a[o]?a[o]=na(t,n):ta(t)?a[o]=ia(e[o],t,n):-1===e.indexOf(t)&&a.push(na(t,n))})),a},oa=function(e,t,n){var a={};return ta(e)&&Object.keys(e).forEach((function(t){a[t]=na(e[t],n)})),Object.keys(t).forEach((function(o){ta(t[o])&&e[o]?a[o]=ia(e[o],t[o],n):a[o]=na(t[o],n)})),a},ia=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=Array.isArray(t),o=n||{arrayMerge:aa},i=o.arrayMerge||aa;return a?Array.isArray(e)?i(e,t,n):na(t,n):oa(e,t,n)},ra=ia,sa=N("tools:base:BaseTool"),la=Tt("globalConfiguration"),ca=function(){function e(t,n){r()(this,e),this.initialConfiguration=ra(n,t);var a=this.initialConfiguration,o=a.name,i=a.strategies,s=a.defaultStrategy,l=a.configuration,c=a.supportedInteractionTypes,u=a.mixins,d=a.svgCursor;this.name=o,this.mode="disabled",this.element=void 0,this.supportedInteractionTypes=c||[],this.strategies=i||{},this.defaultStrategy=s||Object.keys(this.strategies)[0]||void 0,this.activeStrategy=this.defaultStrategy,d&&(this.svgCursor=d),this._options={},this._configuration=Object.assign({},l),this.updateOnMouseMove=!1,this.hideDefaultCursor=!1,u&&u.length&&this._applyMixins(u),this._cursors=Object.assign({},this.initialConfiguration.cursors);var h=this.defaultStrategy&&this._cursors[this.activeStrategy];h&&(this.svgCursor=h)}return l()(e,[{key:"mergeOptions",value:function(e){this._options=Object.assign({},this._options,e)}},{key:"clearOptions",value:function(){this._options={}}},{key:"applyActiveStrategy",value:function(e,t){return this.strategies[this.activeStrategy].call(this,e,t)}},{key:"_applyMixins",value:function(e){for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:{};return r()(this,t),a.configuration||(a.configuration={alwaysEraseOnClick:!1}),(n=u()(this,h()(t).call(this,e,a))).updateOnMouseMove=!0,n.hideDefaultCursor=!0,n._drawing=!1,n._drawingMouseUpCallback=n._drawingMouseUpCallback.bind(Ta()(n)),n}return g()(t,e),l()(t,[{key:"renderBrush",value:function(e){throw new Error("Method renderBrush not implemented for ".concat(this.name,"."))}},{key:"_paint",value:function(e){throw new Error("Method _paint not implemented for ".concat(this.name,"."))}},{key:"mouseDragCallback",value:function(e){var t=e.detail.currentPoints;this._lastImageCoords=t.image,this._drawing&&this._paint(e)}},{key:"preMouseDownCallback",value:function(e){var t=e.detail,n=t.element,a=t.currentPoints;return this._startPainting(e),this._lastImageCoords=a.image,this._drawing=!0,this._startListeningForMouseUp(n),this._paint(e),!0}},{key:"_startPainting",value:function(e){var t=e.detail,n=t.element,a=Ca.configuration,o=Ca.getters.labelmap2D(n),i=o.labelmap2D,r=o.labelmap3D,s=o.currentImageIdIndex,l=o.activeLabelmapIndex,c=this._isCtrlDown(t)||this.configuration.alwaysEraseOnClick;if(this.paintEventData={labelmap2D:i,labelmap3D:r,currentImageIdIndex:s,activeLabelmapIndex:l,shouldErase:c},a.storeHistory){var u=i.pixelData.slice();this.paintEventData.previousPixelData=u}}},{key:"_endPainting",value:function(e){for(var t=Ca.configuration,n=Ca.setters,a=this.paintEventData,o=a.labelmap2D,i=a.currentImageIdIndex,r=new Set(o.pixelData).values(),s=[],l=!1;!l;){var c=r.next();(l=c.done)||s.push(c.value)}if(o.segmentsOnLabelmap=s,t.storeHistory){var u={imageIdIndex:i,diff:Le(this.paintEventData.previousPixelData,o.pixelData)};n.pushState(this.element,[u])}Oe(this.element)}},{key:"mouseMoveCallback",value:function(e){var t=e.detail.currentPoints;this._lastImageCoords=t.image}},{key:"renderToolData",value:function(e){var t=e.detail.element;ba(t,this.name)&&this.renderBrush(e)}},{key:"passiveCallback",value:function(e){try{y.cornerstone.updateImage(this.element)}catch(e){return}}},{key:"_drawingMouseUpCallback",value:function(e){var t=e.detail.element;this._endPainting(e),this._drawing=!1,this._mouseUpRender=!0,this._stopListeningForMouseUp(t)}},{key:"newImageCallback",value:function(e){this._drawing&&(this._endPainting(e),this._startPainting(e))}},{key:"_startListeningForMouseUp",value:function(e){e.removeEventListener(b.MOUSE_UP,this._drawingMouseUpCallback),e.removeEventListener(b.MOUSE_CLICK,this._drawingMouseUpCallback),e.addEventListener(b.MOUSE_UP,this._drawingMouseUpCallback),e.addEventListener(b.MOUSE_CLICK,this._drawingMouseUpCallback),y.cornerstone.updateImage(e)}},{key:"_stopListeningForMouseUp",value:function(e){e.removeEventListener(b.MOUSE_UP,this._drawingMouseUpCallback),e.removeEventListener(b.MOUSE_CLICK,this._drawingMouseUpCallback),y.cornerstone.updateImage(e)}},{key:"increaseBrushSize",value:function(){var e=Ca.configuration,t=Ca.setters,n=e.radius,a=Math.floor(1.2*n);a===n&&(a+=1),t.radius(a)}},{key:"decreaseBrushSize",value:function(){var e=Ca.configuration,t=Ca.setters,n=e.radius,a=Math.floor(.8*n);t.radius(a)}},{key:"_isCtrlDown",value:function(e){return e.event&&e.event.ctrlKey||e.ctrlKey}}]),t}(ca),Ea=function(e){return e.filter((function(e){return!(e.isMultiPartTool||e instanceof ro||e instanceof Ma)}))};function wa(e,t){var n,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mouse";if("touch"===a?n=(n=ya(e,yt.touchTools())).filter((function(e){return e.options.isTouchActive})):(n=(n=ya(e,yt.mouseTools())).filter((function(e){return Array.isArray(e.options.mouseButtonMask)&&t&&e.options.mouseButtonMask.includes(t)&&e.options.isMouseActive})),pt.isMultiPartToolActive&&(n=Ea(n))),0!==n.length)return n[0]}var Ia=N("manipulators:moveAllHandles"),Sa=Tt("manipulatorState"),ka={mouse:[b.MOUSE_DRAG],touch:[b.TOUCH_DRAG]},_a={mouse:[b.MOUSE_UP,b.MOUSE_CLICK],touch:[b.TOUCH_END,b.TOUCH_DRAG_END,b.TOUCH_PINCH,b.TOUCH_PRESS,b.TAP]},Pa=function(e,t,n,a){var o=e.element,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"mouse",s=arguments.length>6?arguments[6]:void 0;i=Object.assign({deleteIfHandleOutsideImage:pt.deleteIfHandleOutsideImage,preventHandleOutsideImage:pt.preventHandleOutsideImage},i);var l=Da.bind(this,t,n,i,r),c=function e(a){La(t,n,i,r,{dragHandler:l,upOrEndHandler:e},a,s)};Sa.setters.addActiveManipulatorForElement(o,Oa.bind(null,n,i,r,{dragHandler:l,upOrEndHandler:c},o,s)),n.active=!0,pt.isToolLocked=!0,ka[r].forEach((function(e){o.addEventListener(e,l)})),_a[r].forEach((function(e){o.addEventListener(e,c)}))};function Da(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=o.detail,r=i.element,s=i.image,l=i.buttons,c=o.detail.deltaPoints.image,u=c.x,d=c.y;t.active=!0,t.invalidated=!0;for(var h=Object.keys(t.handles),v=0;v1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,o=a.dragHandler,i=a.upOrEndHandler,r=arguments.length>4?arguments[4]:void 0,s=arguments.length>5?arguments[5]:void 0;Aa(e,t,n,{dragHandler:o,upOrEndHandler:i},r,s,!1)}function La(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=o.dragHandler,r=o.upOrEndHandler,s=arguments.length>5?arguments[5]:void 0,l=arguments.length>6?arguments[6]:void 0,c=s.detail,u=c.element;Sa.setters.removeActiveManipulatorForElement(u),n.deleteIfHandleOutsideImage&&ga(c,t.handles)&&L(u,e,t),Aa(t,n,a,{dragHandler:i,upOrEndHandler:r},u,l,!0)}function Aa(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,a=arguments.length>3?arguments[3]:void 0,o=a.dragHandler,i=a.upOrEndHandler,r=arguments.length>4?arguments[4]:void 0,s=arguments.length>5?arguments[5]:void 0,l=!(arguments.length>6&&void 0!==arguments[6])||arguments[6];e.active=!1,e.invalidated=!0,pt.isToolLocked=!1,ka[n].forEach((function(e){r.removeEventListener(e,o)})),_a[n].forEach((function(e){r.removeEventListener(e,i)})),"function"==typeof t.doneMovingCallback&&(Ia.warn("`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details."),t.doneMovingCallback(l)),"function"==typeof s&&s(l),y.cornerstone.updateImage(r)}var Ha=N("manipulators:moveHandle"),Ra=Tt("manipulatorState"),Ua={value:!1},Na={mouse:[b.MOUSE_DRAG],touch:[b.TOUCH_DRAG]},Fa={mouse:[b.MOUSE_UP,b.MOUSE_CLICK],touch:[b.TOUCH_END,b.TOUCH_DRAG_END,b.TOUCH_PINCH,b.TOUCH_PRESS,b.TAP]},Ba=function(e,t,n,a){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"mouse",r=arguments.length>6?arguments[6]:void 0;o=Object.assign({deleteIfHandleOutsideImage:pt.deleteIfHandleOutsideImage,preventHandleOutsideImage:pt.preventHandleOutsideImage},o);var s=e.element,l=Va.bind(this,t,n,a,o,i),c=function s(){za(t,e,n,a,o,i,{dragHandler:l,upOrEndHandler:s},r)};if(Ra.setters.addActiveManipulatorForElement(s,qa.bind(null,t,e,n,a,o,i,{dragHandler:l,upOrEndHandler:c},r)),a.active=!0,a.moving=!0,n.active=!0,pt.isToolLocked=!0,Na[i].forEach((function(e){s.addEventListener(e,l)})),Fa[i].forEach((function(e){s.addEventListener(e,c)})),"touch"===i){Ua.value=!0;var u=y.cornerstone.getEnabledElement(s),d=-57,h={x:e.currentPoints.page.x,y:e.currentPoints.page.y+d},v=y.cornerstone.pageToPixel(s,h.x,h.y);Wa(a,Ua,u,v)}};function Va(e,t,n,a,o,i){var r=i.detail,s=r.image,l=r.currentPoints,c=r.element,u=r.buttons,d=l.page,h=y.cornerstone.pageToPixel(c,d.x,"touch"===o?d.y+-57:d.y);Ua.value=!1,n.active=!0,n.hasMoved=!0,n.x=h.x,n.y=h.y,t.invalidated=!0,a.preventHandleOutsideImage&&ma(n,s),y.cornerstone.updateImage(c);var v=wa(c,u,o);v instanceof ro&&v.updateCachedStats(s,c,t),C(c,b.MEASUREMENT_MODIFIED,{toolName:e,toolType:e,element:c,measurementData:t})}function qa(e,t,n,a){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5?arguments[5]:void 0,r=arguments.length>6?arguments[6]:void 0,s=r.dragHandler,l=r.upOrEndHandler,c=arguments.length>7?arguments[7]:void 0;ja(e,t,n,a,o,i,{dragHandler:s,upOrEndHandler:l},c,!1)}function za(e,t,n,a){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5?arguments[5]:void 0,r=arguments.length>6?arguments[6]:void 0,s=r.dragHandler,l=r.upOrEndHandler,c=arguments.length>7?arguments[7]:void 0,u=t.element;Ra.setters.removeActiveManipulatorForElement(u),ja(e,t,n,a,o,i,{dragHandler:s,upOrEndHandler:l},c,!0)}function ja(e,t,n,a){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5?arguments[5]:void 0,r=arguments.length>6?arguments[6]:void 0,s=r.dragHandler,l=r.upOrEndHandler,c=arguments.length>7?arguments[7]:void 0,u=!(arguments.length>8&&void 0!==arguments[8])||arguments[8],d=t.element;a.active=!1,a.moving=!1,n.active=!1,n.invalidated=!0,Ua.value=!1,pt.isToolLocked=!1,Na[i].forEach((function(e){d.removeEventListener(e,s)})),Fa[i].forEach((function(e){d.removeEventListener(e,l)})),o.deleteIfHandleOutsideImage&&ga(t,n.handles)&&L(d,e,n),"function"==typeof o.doneMovingCallback&&(Ha.warn("`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details."),o.doneMovingCallback(u)),"function"==typeof c&&c(u),y.cornerstone.updateImage(d)}function Wa(e,t,n,a){if(t.value){var o=Math.abs(e.y-a.y),i=o/10;if(o<1)return e.y=a.y,void(t.value=!1);e.y>a.y?e.y-=i:e.y5&&void 0!==arguments[5]?arguments[5]:"mouse",r=arguments.length>6?arguments[6]:void 0;(o=Object.assign({deleteIfHandleOutsideImage:pt.deleteIfHandleOutsideImage,preventHandleOutsideImage:pt.preventHandleOutsideImage},o)).hasMoved=!1;var s=e.element;function l(e){$a(t,n,a,o,i,e)}function c(e){Qa(t,n,a,o,i,{moveHandler:l,moveEndHandler:c},e,r)}n.active=!0,a.moving=!0,a.active=!0,pt.isToolLocked=!0,Xa[i].forEach((function(e){s.addEventListener(e,l)})),s.addEventListener(b.TOUCH_START,to),Ka[i].forEach((function(e){s.addEventListener(e,c)})),Ya.setters.addActiveManipulatorForElement(s,eo.bind(null,n,a,o,i,{moveHandler:l,moveEndHandler:c},s,r))};function $a(e,t,n,a,o,i){var r=i.detail,s=r.currentPoints,l=r.image,c=r.element,u=r.buttons;a.hasMoved=!0;var d=s.page,h=y.cornerstone.pageToPixel(c,"touch"===o?d.x+-57:d.x,"touch"===o?d.y+-57:d.y);t.invalidated=!0,n.active=!0,n.x=h.x,n.y=h.y,a&&a.preventHandleOutsideImage&&ma(n,l),y.cornerstone.updateImage(c);var v=wa(c,u,o);v instanceof ro&&v.updateCachedStats(l,c,t),C(c,b.MEASUREMENT_MODIFIED,{toolName:e,toolType:e,element:c,measurementData:t})}function Ja(e,t,n,a,o){var i=a.moveHandler,r=a.moveEndHandler,s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];Xa[e].forEach((function(e){n.removeEventListener(e,i)})),Ka[e].forEach((function(e){n.removeEventListener(e,r)})),n.removeEventListener(b.TOUCH_START,to),pt.isToolLocked=!1,"function"==typeof o&&o(s),"function"==typeof t.doneMovingCallback&&(Ga.warn("`options.doneMovingCallback` has been depricated. See https://github.com/cornerstonejs/cornerstoneTools/pull/915 for details."),t.doneMovingCallback(s)),y.cornerstone.updateImage(n)}function Qa(e,t,n,a,o,i,r,s){var l=i.moveHandler,c=i.moveEndHandler,u=r.detail,d=u.element,h=u.currentPoints;if(!1!==a.hasMoved){var v=h.page,g=y.cornerstone.pageToPixel(d,"touch"===o?v.x+-57:v.x,"touch"===o?v.y+-57:v.y);t.active=!1,t.invalidated=!0,n.active=!1,n.moving=!1,n.x=g.x,n.y=g.y,Ya.setters.removeActiveManipulatorForElement(d),a.preventHandleOutsideImage&&ma(n,r.detail.image),a.deleteIfHandleOutsideImage&&ga(r.detail,t.handles)&&(t.cancelled=!0,L(d,e,t)),Ja(o,a,d,{moveHandler:l,moveEndHandler:c},s,!0)}}function eo(e,t,n,a,o,i,r){var s=o.moveHandler,l=o.moveEndHandler;e.active=!1,e.invalidated=!0,t.active=!1,Ja(a,n,i,{moveHandler:s,moveEndHandler:l},r,!1)}function to(e){return e.stopImmediatePropagation(),!1}var no=function(e,t,n,a,o){n.active=!0,pt.isToolLocked=!0,Ba(e.detail,t.name,n,a,t.options,o),e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault()},ao=function(e,t,n,a){for(var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"mouse",i=0;i3&&void 0!==arguments[3]?arguments[3]:"mouse";n.active=!0,pt.isToolLocked=!0,Pa(e.detail,t.name,n,null,t.options,a,(function(){n.active=!1,pt.isToolLocked=!1})),e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault()},io=N("baseAnnotationTool"),ro=function(e){function t(){return r()(this,t),u()(this,h()(t).apply(this,arguments))}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){throw new Error("Method createNewMeasurement not implemented for ".concat(this.name,"."))}},{key:"pointNearTool",value:function(e,t,n){arguments.length>3&&void 0!==arguments[3]&&arguments[3];throw new Error("Method pointNearTool not implemented for ".concat(this.name,"."))}},{key:"distanceFromPoint",value:function(e,t,n){throw new Error("Method distanceFromPoint not implemented for ".concat(this.name,"."))}},{key:"renderToolData",value:function(e){throw new Error("renderToolData not implemented for ".concat(this.name,"."))}},{key:"mouseMoveCallback",value:function(e){for(var t=e.detail,n=t.element,a=t.currentPoints.canvas,o=O(n,this.name),i=!1,r=0;r3&&void 0!==arguments[3]?arguments[3]:"mouse";no(e,this,t,n,a)}},{key:"toolSelectedCallback",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mouse";oo(e,this,t,n)}},{key:"updateCachedStats",value:function(e,t,n){io.warn("updateCachedStats not implemented for ".concat(this.name,"."))}}]),t}(ca),so=function(e,t,n,a){var o=y.cornerstone,i={start:o.pixelToCanvas(e,t),end:o.pixelToCanvas(e,n)};return y.cornerstoneMath.lineSegment.distanceToPoint(i,a)},lo=function(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n},co=xt.cursor,uo=function(){function e(t,n){r()(this,e),this.iconGroupString=t,this.options=Object.assign({},co.getters.defaultOptions(),n)}return l()(e,[{key:"getIconSVG",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this._generateIconSVGString(e);return new Blob([t],{type:"image/svg+xml"})}},{key:"getIconSVGString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._generateIconSVGString(e)}},{key:"getIconWithPointerSVG",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this._generateIconWithPointerSVGString(e);return new Blob([t],{type:"image/svg+xml"})}},{key:"getIconWithPointerString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._generateIconWithPointerSVGString(e)}},{key:"_generateIconWithPointerSVGString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},this.options,e),n=t.mousePointerGroupString,a=t.iconSize,o=t.viewBox,i=a/Math.max(o.x,o.y),r=16+a,s='\n \n \n ').concat(n,'\n \n \n ').concat(this.iconGroupString,"\n \n ");return this._injectColors(s,t)}},{key:"_generateIconSVGString",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},this.options,e),n=t.iconSize,a=t.viewBox,o='\n \n ').concat(this.iconGroupString,"\n ");return this._injectColors(o,t)}},{key:"_injectColors",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.activeColor||un.getActiveColor(),a=t.toolColor||un.getToolColor(),o=t.fillColor||un.getFillColor();return e.replace(/ACTIVE_COLOR/g,"".concat(n)).replace(/TOOL_COLOR/g,"".concat(a)).replace(/FILL_COLOR/g,"".concat(o))}},{key:"mousePoint",get:function(){var e=this.options.mousePoint;return"".concat(e.x," ").concat(e.y)}}]),e}(),ho=new uo('',{viewBox:{x:1792,y:1792}}),vo=new uo('\n \n ',{viewBox:{x:24,y:24}}),go=new uo('\n \n \n \n \n \n \n ',{viewBox:{x:48,y:48}}),fo=new uo('\n \n \n \n \n ',{viewBox:{x:32,y:32}}),mo=new uo('',{viewBox:{x:32,y:32}}),po=new uo('',{viewBox:{x:32,y:32}}),yo=new uo('\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ',{viewBox:{x:18,y:18}}),xo=new uo('\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ',{viewBox:{x:18,y:18}}),To=new uo('\n \n ',{viewBox:{x:24,y:24}}),bo=new uo('',{viewBox:{x:1792,y:1792}}),Co=new uo('',{viewBox:{x:1792,y:1792}}),Mo=new uo('',{viewBox:{x:1792,y:1792}}),Eo=new uo('',{viewBox:{x:1792,y:1792}}),wo=new uo('',{viewBox:{x:2048,y:1792}}),Io=new uo('',{viewBox:{x:512,y:512}}),So=new uo('',{viewBox:{x:1792,y:1792}}),ko=new uo('',{viewBox:{x:1792,y:1792}}),_o=new uo('',{viewBox:{x:24,y:28}}),Po=new uo('',{viewBox:{x:1792,y:1792}}),Do=new uo('\n ',{viewBox:{x:18,y:18}}),Oo=new uo('\n ',{viewBox:{x:640,y:512}}),Lo={x:127,y:60},Ao=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ACTIVE_COLOR";return'')},Ho=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ACTIVE_COLOR";return'\n ')},Ro='',Uo='',No='',Fo=new uo("".concat(Ro," ").concat(Ao()),{viewBox:Lo}),Bo=new uo("".concat(Ro," ").concat(Ho()),{viewBox:Lo}),Vo=new uo("".concat(Ro," ").concat(Ao()),{viewBox:Lo}),qo=new uo("".concat(Ro," ").concat(Ho()),{viewBox:Lo}),zo=new uo("".concat(Uo," ").concat(Ao()),{viewBox:Lo}),jo=new uo("".concat(Uo," ").concat(Ho()),{viewBox:Lo}),Wo=new uo("".concat(Uo," ").concat(Ao()),{viewBox:Lo}),Go=new uo("".concat(Uo," ").concat(Ho()),{viewBox:Lo}),Yo=new uo("".concat(No," ").concat(Ao()),{viewBox:Lo}),Xo=new uo("".concat(No," ").concat(Ho()),{viewBox:Lo}),Ko=new uo("".concat(No," ").concat(Ao()),{viewBox:Lo}),Zo=new uo("".concat(No," ").concat(Ho()),{viewBox:Lo});function $o(e){var t=y.cornerstone.metaData.get("imagePlaneModule",e.imageId);return t?{rowPixelSpacing:t.rowPixelSpacing||t.rowImagePixelSpacing,colPixelSpacing:t.columnPixelSpacing||t.colImagePixelSpacing}:{rowPixelSpacing:e.rowPixelSpacing,colPixelSpacing:e.columnPixelSpacing}}var Jo=function(e){var t=T()(e);return null!==e&&("object"===t||"function"===t)};var Qo=function(e,t,n){var a,o,i,r,s,l,c=0,u=!1,d=!1,h=!0,v=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function g(t){var n=a,i=o;return a=o=void 0,c=t,r=e.apply(i,n)}function f(e,t){return v?window.requestAnimationFrame(e):setTimeout(e,t)}function m(e){return c=e,s=f(y,t),u?g(e):r}function p(e){var n=e-l;return void 0===l||n>=t||n<0||d&&e-c>=i}function y(){var e=Date.now();if(p(e))return x(e);s=f(y,function(e){var n=e-c,a=t-(e-l);return d?Math.min(a,i-n):a}(e))}function x(e){return s=void 0,h&&a?g(e):(a=o=void 0,r)}function T(){for(var e=Date.now(),n=p(e),i=arguments.length,c=new Array(i),u=0;u0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Angle",supportedInteractionTypes:["Mouse","Touch"],svgCursor:ho,configuration:{drawHandles:!0,drawHandlesOnHover:!1,hideHandlesIfMoving:!1,renderDashed:!1}};return(e=u()(this,h()(t).call(this,n,a))).preventNewMeasurement=!1,e.throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){return{visible:!0,active:!0,color:void 0,invalidated:!0,handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},middle:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}},{key:"pointNearTool",value:function(e,t,n){return!1!==t.visible&&(so(e,t.handles.start,t.handles.middle,n)<25||so(e,t.handles.middle,t.handles.end,n)<25)}},{key:"updateCachedStats",value:function(e,t,n){var a=ai(e,n.handles.middle,n.handles.start),o=ai(e,n.handles.end,n.handles.middle),i=ai(e,n.handles.end,n.handles.start),r=ni(a),s=ni(o),l=ni(i),c=Math.acos((Math.pow(r,2)+Math.pow(s,2)-Math.pow(l,2))/(2*r*s));c*=180/Math.PI,n.rAngle=lo(c,2),n.invalidated=!1}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=n.enabledElement,o=this.configuration,i=o.handleRadius,r=o.drawHandlesOnHover,s=o.hideHandlesIfMoving,l=o.renderDashed,c=O(e.currentTarget,this.name),u=Tt("globalConfiguration").configuration.lineDash;if(c)for(var d=En(n.canvasContext.canvas),h=n.image,v=n.element,g=$o(h),f=g.rowPixelSpacing,m=g.colPixelSpacing,p=Xt.getToolWidth(),x=function(e){var o=c.data[e];if(!1===o.visible)return"continue";Wt(d,(function(e){In(e,t.configuration);var c=un.getColorIfActive(o),d=y.cornerstone.pixelToCanvas(n.element,o.handles.start),g=y.cornerstone.pixelToCanvas(n.element,o.handles.middle),x={color:c};l&&(x.lineDash=u),$t(e,n.element,o.handles.start,[o.handles.middle,o.handles.end],x);var T={color:c,handleRadius:i,drawHandlesIfActive:r,hideHandlesIfMoving:s};if(t.configuration.drawHandles&&dn(e,n,o.handles,T),!0===o.invalidated&&(o.rAngle?t.throttledUpdateCachedStats(h,v,o):t.updateCachedStats(h,v,o)),o.rAngle){var C,M=function(e,t,n){var a=t&&n?"":" (isotropic)";return e.rAngle.toString()+String.fromCharCode(parseInt("00B0",16))+a}(o,f,m);if(!o.handles.textBox.hasMoved){C={x:g.x,y:g.y};var E=Tn(e,M,5);g.x0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"ArrowAnnotate",supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:ii,changeTextCallback:ri,drawHandles:!0,drawHandlesOnHover:!1,hideHandlesIfMoving:!1,arrowFirst:!0,renderDashed:!1,allowEmptyLabel:!1},svgCursor:vo};return(e=u()(this,h()(t).call(this,n,a))).preventNewMeasurement=!1,e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){return{visible:!0,active:!0,color:void 0,handles:{start:{x:e.detail.currentPoints.image.x,y:e.detail.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.detail.currentPoints.image.x,y:e.detail.currentPoints.image.y,highlight:!0,active:!1},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}},{key:"pointNearTool",value:function(e,t,n){return!1!==t.visible&&so(e,t.handles.start,t.handles.end,n)<25}},{key:"updateCachedStats",value:function(){}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=n.element,o=n.enabledElement,i=this.configuration,r=i.handleRadius,s=i.drawHandlesOnHover,l=i.hideHandlesIfMoving,c=i.renderDashed,u=O(a,this.name);if(u){var d,h=e.detail.canvasContext.canvas,v=En(h),g=Xt.getToolWidth();c&&(d=Tt("globalConfiguration").configuration.lineDash);for(var f=function(n){var i=u.data[n];if(!1===i.visible)return"continue";Wt(v,(function(n){In(n,t.configuration);var c=un.getColorIfActive(i),u=y.cornerstone.pixelToCanvas(a,i.handles.start),h=y.cornerstone.pixelToCanvas(a,i.handles.end);t.configuration.arrowFirst?Jt(n,h,u,c,g,d):Jt(n,u,h,c,g,d);var v={color:c,handleRadius:r,drawHandlesIfActive:s,hideHandlesIfMoving:l};t.configuration.drawHandles&&dn(n,e.detail,i.handles,v);var f=function(e){return e.text}(i);if(f&&""!==f){var m=Tn(n,f,5),x=pn.getFontSize()+10,T=Math.max(m,x)/2+5;if(h.x3&&void 0!==arguments[3]?arguments[3]:{};return Object.assign({x:e,y:t,index:n,drawnIndependently:!1,allowedOutsideImage:!1,highlight:!0,active:!1},a)},li=function(e){var t=e.currentPoints.image,n=t.x,a=t.y;return{toolName:this.name,toolType:this.name,isCreating:!0,visible:!0,active:!0,invalidated:!0,handles:{start:si(n,a,0),end:si(n,a,1,{active:!0}),perpendicularStart:si(n,a,2,{locked:!0}),perpendicularEnd:si(n,a,3),textBox:si(n-50,a-70,null,{highlight:!1,hasMoved:!0,active:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0})},longestDiameter:0,shortestDiameter:0}},ci=function(e,t,n,a){var o=y.cornerstone,i=y.cornerstoneMath,r={start:o.pixelToCanvas(e,t.perpendicularStart),end:o.pixelToCanvas(e,t.perpendicularEnd)};return i.lineSegment.distanceToPoint(r,n)3&&void 0!==arguments[3]?arguments[3]:"mouse",o=y.cornerstone,i=y.cornerstoneMath,r=t.handles,s={start:o.pixelToCanvas(e,r.start),end:o.pixelToCanvas(e,r.end)},l=i.lineSegment.distanceToPoint(s,n);if(ua(r.textBox,n))return!0;var c="mouse"===a?pt.clickProximity:pt.touchProximity;return!!ci(e,r,n,c)||l3&&void 0!==arguments[3]?arguments[3]:6,o=ha(e,t,n,a),i=!1;return Object.keys(t).forEach((function(e){if("textBox"!==e){var n=t[e],a=n===o;n.active!==a&&(i=!0),n.active=a}})),i}(a,s.handles,r);Object.keys(s.handles).forEach((function(e){if("textBox"!==e){var t=s.handles[e];t.hover=t.active}})),l&&(i=!0);var c=t.pointNearTool(a,s,r,"mouse"),u=c&&!s.active,d=!c&&s.active;(u||d)&&(s.active=!s.active,i=!0)},s=0;s3&&void 0!==arguments[3]?arguments[3]:"mouse";"touch"===a?this.handleSelectedTouchCallback(e):this.handleSelectedMouseCallback(e)};function bi(e,t,n,a){var o=(n.x-a.x)/t,i=(n.y-a.y)/e;return Math.sqrt(o*o+i*i)}function Ci(e,t){return{start:e,end:t}}function Mi(e,t,n){var a=y.cornerstoneMath.lineSegment,o=e.handles,i=o.start,r=o.end,s=o.perpendicularStart,l=o.perpendicularEnd,c=t.image,u=c.columnPixelSpacing,d=void 0===u?1:u,h=c.rowPixelSpacing,v=void 0===h?1:h,g=Ci(i,r),f=Ci(s,l),m=a.intersectLine(g,f);return{columnPixelSpacing:d,rowPixelSpacing:v,start:i,end:r,perpendicularStart:s,perpendicularEnd:l,longLine:g,intersection:m,distanceToFixed:bi(d,v,n,m),fixedPoint:n}}function Ei(e,t,n,a){var o=Mi(t,n,a),i=o.columnPixelSpacing,r=o.rowPixelSpacing,s=o.distanceToFixed,l=bi(i,r,a,e);if(l<=s)return!1;var c=s/l,u=function(e,t){var n=e.columnPixelSpacing,a=e.rowPixelSpacing,o=e.start,i=e.perpendicularStart,r=e.perpendicularEnd,s=e.intersection,l=e.fixedPoint,c=bi(n,a,i,s),u=bi(n,a,r,s),d=di(n,a,l,t),h=l===o?1:-1,v=h*a,g=h*n;return{start:{x:t.x+d.y*c*v,y:t.y+d.x*c*g*-1},end:{x:t.x+d.y*u*v*-1,y:t.y+d.x*u*g}}}(o,{x:a.x+(e.x-a.x)*c,y:a.y+(e.y-a.y)*c});return t.handles.perpendicularStart.x=u.start.x,t.handles.perpendicularStart.y=u.start.y,t.handles.perpendicularEnd.x=u.end.x,t.handles.perpendicularEnd.y=u.end.y,!0}function wi(e,t){return e===t}function Ii(e,t){return wi(e,t)?-1:1}var Si=n(10),ki=n.n(Si);function _i(e,t,n,a){var o,i=e.columnPixelSpacing,r=e.rowPixelSpacing,s=e.fixedPoint,l=e.perpendicularStart,c=e.perpendicularEnd,u=e.distanceToFixed,d=Ii(s,c)*u,h=function(e,t,n){return wi(e,n)?t:n}(s,l,c)===l,v=h?"start":"end",g=h?"end":"start";return o={},ki()(o,v,{x:n.start.x,y:n.start.y}),ki()(o,g,{x:t.x+a.y*r*d,y:t.y+a.x*i*d*-1}),o}function Pi(e,t,n,a){var o=y.cornerstoneMath.lineSegment,i=Mi(t,n,a),r=i.columnPixelSpacing,s=i.rowPixelSpacing,l=i.start,c=i.longLine,u=i.intersection;if(!function(e,t,n){return 0!==bi(e,t,n.start,n.end)}(r,s,c))return!1;var d=di(r,s,l,u),h=function(e,t,n){var a=e.columnPixelSpacing,o=e.rowPixelSpacing,i=e.perpendicularEnd,r=e.fixedPoint,s=Number.MAX_SAFE_INTEGER,l=Ii(r,i)*s;return{start:t,end:{x:t.x+n.y*o*l,y:t.y+n.x*a*l*-1}}}(i,e,d),v=o.intersectLine(c,h);if(!v)return!1;var g=_i(i,v,h,d);return t.handles.perpendicularStart.x=g.start.x,t.handles.perpendicularStart.y=g.start.y,t.handles.perpendicularEnd.x=g.end.x,t.handles.perpendicularEnd.y=g.end.y,!0}var Di=function(e,t,n,a){var o,i,r,s,l={},c={},u={x:t.currentPoints.image.x+a.x,y:t.currentPoints.image.y+a.y};0===e.index?Ei(u,n,t,n.handles.end)?(e.x=u.x,e.y=u.y):(t.currentPoints.image.x=e.x,t.currentPoints.image.y=e.y):1===e.index?Ei(u,n,t,n.handles.start)?(e.x=u.x,e.y=u.y):(t.currentPoints.image.x=e.x,t.currentPoints.image.y=e.y):2===e.index?(o=!1,l.start={x:n.handles.start.x,y:n.handles.start.y},l.end={x:n.handles.end.x,y:n.handles.end.y},c.start={x:n.handles.perpendicularEnd.x,y:n.handles.perpendicularEnd.y},c.end={x:u.x,y:u.y},(i=y.cornerstoneMath.lineSegment.intersectLine(l,c))||(c.end={x:n.handles.perpendicularStart.x,y:n.handles.perpendicularStart.y},i=y.cornerstoneMath.lineSegment.intersectLine(l,c),r=y.cornerstoneMath.point.distance(i,n.handles.start),s=y.cornerstoneMath.point.distance(i,n.handles.end),(!i||r<3||s<3)&&(o=!0)),!1,o||Pi(u,n,t,n.handles.perpendicularEnd)||(t.currentPoints.image.x=n.handles.perpendicularStart.x,t.currentPoints.image.y=n.handles.perpendicularStart.y)):3===e.index&&(o=!1,l.start={x:n.handles.start.x,y:n.handles.start.y},l.end={x:n.handles.end.x,y:n.handles.end.y},c.start={x:n.handles.perpendicularStart.x,y:n.handles.perpendicularStart.y},c.end={x:u.x,y:u.y},(i=y.cornerstoneMath.lineSegment.intersectLine(l,c))||(c.end={x:n.handles.perpendicularEnd.x,y:n.handles.perpendicularEnd.y},i=y.cornerstoneMath.lineSegment.intersectLine(l,c),r=y.cornerstoneMath.point.distance(i,n.handles.start),s=y.cornerstoneMath.point.distance(i,n.handles.end),(!i||r<3||s<3)&&(o=!0)),!1,o||Pi(u,n,t,n.handles.perpendicularStart)||(t.currentPoints.image.x=n.handles.perpendicularEnd.x,t.currentPoints.image.y=n.handles.perpendicularEnd.y))},Oi=function(e,t,n){var a=e[n],o=t[n];e[n]=o,t[n]=a},Li=function(e,t){Oi(e,t,"x"),Oi(e,t,"y"),Oi(e,t,"moving"),Oi(e,t,"hover"),Oi(e,t,"active"),Oi(e,t,"selected")};var Ai=function(e){var t,n=this,a=e.detail,o=a.element,i=pt.clickProximity,r=function(e){t.invalidated=!0,ga(a,t.handles)&&L(o,n.name,t),e&&(e.moving=!1,e.selected=!0),Et(n.element,n.svgCursor),y.cornerstone.updateImage(o),o.addEventListener(b.MOUSE_MOVE,n._moveCallback),o.addEventListener(b.TOUCH_START,n._moveCallback)},s=a.startPoints.canvas,l=O(e.currentTarget,this.name);if(l){for(var c=function(c){t=l.data[c];var u=[o,t.handles,s,i],d=ha.apply(void 0,u);if(d)return o.removeEventListener(b.MOUSE_MOVE,n._moveCallback),o.removeEventListener(b.TOUCH_START,n._moveCallback),t.active=!0,Hi(t.handles),d.moving=!0,(d=function(e,t,n){var a=e.image,o=a.rowPixelSpacing,i=a.columnPixelSpacing,r=t.handles,s=r.start,l=r.end,c=r.perpendicularStart,u=r.perpendicularEnd,d=(s.x-l.x)*(i||1),h=(s.y-l.y)*(o||1),v=Math.sqrt(d*d+h*h),g=(c.x-u.x)*(i||1),f=(c.y-u.y)*(o||1);return(Math.sqrt(g*g+f*f)||0)>v?(Li(s,l),Li(s,c),Li(l,u),Object.values(r).find((function(e){return!0===e.moving}))):n}(a,t,d)).hasBoundingBox||wt(n.element),function(e,t,n,a,o,i){var r=e.element,s=e.image,l=e.buttons,c={x:a.x-e.currentPoints.image.x,y:a.y-e.currentPoints.image.y},u=function(e){var o=e.detail;a.hasMoved=!0,void 0===a.index||null===a.index?(a.x=o.currentPoints.image.x+c.x,a.y=o.currentPoints.image.y+c.y):Di(a,o,n,c),i&&(a.x=Math.max(a.x,0),a.x=Math.min(a.x,o.image.width),a.y=Math.max(a.y,0),a.y=Math.min(a.y,o.image.height)),n.invalidated=!0,y.cornerstone.updateImage(r);var u=wa(r,l,"mouse");u instanceof ro&&u.updateCachedStats(s,r,n);var d={toolName:t,toolType:t,element:r,measurementData:n};y.cornerstone.triggerEvent(r,b.MEASUREMENT_MODIFIED,d)};a.active=!0,a.moving=!0,pt.isToolLocked=!0,r.addEventListener(b.MOUSE_DRAG,u),r.addEventListener(b.TOUCH_DRAG,u);var d=y.cornerstone.getImage(r),h=function(){y.cornerstone.getImage(r).imageId!==d.imageId&&v()};r.addEventListener(y.cornerstone.EVENTS.IMAGE_RENDERED,h);var v=function e(){a.active=!1,pt.isToolLocked=!1,r.removeEventListener(y.cornerstone.EVENTS.IMAGE_RENDERED,h),r.removeEventListener(b.MOUSE_DRAG,u),r.removeEventListener(b.MOUSE_UP,e),r.removeEventListener(b.MOUSE_CLICK,e),r.removeEventListener(b.TOUCH_DRAG,u),r.removeEventListener(b.TOUCH_DRAG_END,e),r.removeEventListener(b.TAP,e),y.cornerstone.updateImage(r),"function"==typeof o&&o()};r.addEventListener(b.MOUSE_UP,v),r.addEventListener(b.MOUSE_CLICK,v),r.addEventListener(b.TOUCH_DRAG_END,v),r.addEventListener(b.TAP,v)}(a,n.name,t,d,(function(){return r(d)})),Ui(e),{v:!0}},u=0;ud){var f=d;d=g,g=f}return{longestDiameter:d.toFixed(1),shortestDiameter:g.toFixed(1)}}(n,$o(e)),o=a.longestDiameter,i=a.shortestDiameter;n.longestDiameter=o,n.shortestDiameter=i,n.invalidated=!1}}}]),t}(ro),Wi=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=y.cornerstone,o=a.metaData.get("patientStudyModule",e.imageId),i=a.metaData.get("generalSeriesModule",e.imageId);if(o&&i){var r=i.modality;if("PT"===r){var s=n?t:t*e.slope+e.intercept,l=o.patientWeight;if(l){var c=a.metaData.get("petIsotopeModule",e.imageId);if(c){var u=c.radiopharmaceuticalInfo,d=u.radiopharmaceuticalStartTime,h=u.radionuclideTotalDose,v=u.radionuclideHalfLife,g=i.seriesTime;if(d&&h&&v&&g){var f=Gi(g.fractionalSeconds||0)+g.seconds+60*g.minutes+60*g.hours*60,m=Gi(d.fractionalSeconds||0)+d.seconds+60*d.minutes+60*d.hours*60,p=f-m,x=h*Math.exp(-p*Math.log(2)/v),T=s*l/x*1e3;return T}}}}}};function Gi(e){return parseFloat(".".concat(e))}var Yi=function(e,t){var n=e.width/2,a=e.height/2;if(n<=0||a<=0)return!1;var o=e.left+n,i=e.top+a,r=t.x-o,s=t.y-i;return r*r/(n*n)+s*s/(a*a)<=1},Xi=function(e,t){for(var n=0,a=0,o=0,i=0,r=null,s=null,l=t.top;l=0&&e.rotation<90&&(i.x=e.hflip?n.left.x:n.right.x,i.y=o),e.rotation>=90&&e.rotation<180&&(i.x=a,i.y=e.vflip?n.bottom.y:n.top.y),e.rotation>=180&&e.rotation<270&&(i.x=e.hflip?n.right.x:n.left.x,i.y=o),e.rotation>=270&&e.rotation<360&&(i.x=a,i.y=e.vflip?n.top.y:n.bottom.y),i}var $i=function(e){var t=e.toString().split(".");return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),t.join(".")},Ji=N("tools:annotation:CircleRoiTool"),Qi=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"CircleRoi",supportedInteractionTypes:["Mouse","Touch"],svgCursor:mo,configuration:{renderDashed:!1,hideHandlesIfMoving:!1}};return(e=u()(this,h()(t).call(this,n,a))).throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image)return{visible:!0,active:!0,color:void 0,invalidated:!0,handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},initialRotation:e.viewport.rotation,textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}};Ji.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"))}},{key:"pointNearTool",value:function(e,t,n,a){var o=t&&t.handles&&t.handles.start&&t.handles.end,i=y.cornerstoneMath.point.distance;if(o||Ji.warn("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool")),!o||!1===t.visible)return!1;var r="mouse"===a?15:25,s=y.cornerstone.pixelToCanvas(e,t.handles.start),l=y.cornerstone.pixelToCanvas(e,t.handles.end),c=i(s,n),u=i(s,l);return c>u-r/2&&c2&&void 0!==arguments[2]?arguments[2]:{},a=n.area,o=n.mean,i=n.stdDev,r=n.min,s=n.max,l=n.meanStdDevSUV,c=arguments.length>3?arguments[3]:void 0,u=arguments.length>4?arguments[4]:void 0,d=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},h=d.showMinMax||!1,v=[],g=[];if(!t){var f=l&&0!==l.mean,m=er(c,d.showHounsfieldUnits),p="Mean: ".concat($i(o.toFixed(2))," ").concat(m),y="Std Dev: ".concat($i(i.toFixed(2))," ").concat(m);if(f){for(var x=" SUV: ",T="".concat(x).concat($i(l.mean.toFixed(2))),b="".concat(x).concat($i(l.stdDev.toFixed(2))),C=Math.floor(e.measureText("".concat(y," ")).width);e.measureText(p).width0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"CobbAngle",supportedInteractionTypes:["Mouse","Touch"],svgCursor:fo,configuration:{drawHandles:!0,drawHandlesOnHover:!1,hideHandlesIfMoving:!1,renderDashed:!1}};return(e=u()(this,h()(t).call(this,n,a))).hasIncomplete=!1,e.throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){return this.hasIncomplete=!0,{visible:!0,active:!0,color:void 0,invalidated:!0,complete:!1,value:"",handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},start2:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1,drawnIndependently:!0},end2:{x:e.currentPoints.image.x+1,y:e.currentPoints.image.y,highlight:!0,active:!1,drawnIndependently:!0},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}},{key:"pointNearTool",value:function(e,t,n){return!1!==t.visible&&(!this.hasIncomplete&&(so(e,t.handles.start,t.handles.end,n)<25||so(e,t.handles.start2,t.handles.end2,n)<25))}},{key:"updateCachedStats",value:function(e,t,n){var a=$o(e),o=a.rowPixelSpacing,i=a.colPixelSpacing,r=(Math.ceil(n.handles.start.x)-Math.ceil(n.handles.end.x))*(i||1),s=(Math.ceil(n.handles.start.y)-Math.ceil(n.handles.end.y))*(o||1),l=(Math.ceil(n.handles.start2.x)-Math.ceil(n.handles.end2.x))*(i||1),c=(Math.ceil(n.handles.start2.y)-Math.ceil(n.handles.end2.y))*(o||1),u=Math.acos(Math.abs((r*l+s*c)/(Math.sqrt(r*r+s*s)*Math.sqrt(l*l+c*c))));u*=180/Math.PI,n.rAngle=lo(u,2),n.invalidated=!1}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=this.configuration,o=a.handleRadius,i=a.drawHandlesOnHover,r=a.hideHandlesIfMoving,s=a.renderDashed,l=O(e.currentTarget,this.name);if(l)for(var c=En(n.canvasContext.canvas),u=Xt.getToolWidth(),d=Tt("globalConfiguration").configuration.lineDash,h=pn.getFont(),v=function(e){var a=l.data[e];if(!1===a.visible)return"continue";Wt(c,(function(e){In(e,t.configuration);var l=un.getColorIfActive(a),c={color:l};s&&(c.lineDash=d),Zt(e,n.element,a.handles.start,a.handles.end,c),a.complete&&Zt(e,n.element,a.handles.start2,a.handles.end2,c);var v={color:l,handleRadius:o,drawHandlesIfActive:i,hideHandlesIfMoving:r};t.configuration.drawHandles&&dn(e,n,a.handles,v),e.fillStyle=l;var g=a.value;if(!a.handles.textBox.hasMoved){var m={x:(a.handles.start.x+a.handles.end.x)/2,y:(a.handles.start.y+a.handles.end.y)/2-10};e.font=h,a.handles.textBox.x=m.x,a.handles.textBox.y=m.y}Cn(e,n.element,a.handles.textBox,g,a.handles,f,l,u,0,!0)}))},g=0;g0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"EllipticalRoi",supportedInteractionTypes:["Mouse","Touch"],configuration:{drawHandlesOnHover:!1,hideHandlesIfMoving:!1,renderDashed:!1},svgCursor:po};return(e=u()(this,h()(t).call(this,n,a))).throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image)return{visible:!0,active:!0,color:void 0,invalidated:!0,handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},initialRotation:e.viewport.rotation,textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}};or.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"))}},{key:"pointNearTool",value:function(e,t,n,a){var o=t&&t.handles&&t.handles.start&&t.handles.end;if(o||or.warn("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool")),!o||!1===t.visible)return!1;if(ha(e,t.handles,n,6))return!0;var i="mouse"===a?15:25,r=y.cornerstone.pixelToCanvas(e,t.handles.start),s=y.cornerstone.pixelToCanvas(e,t.handles.end),l={left:Math.min(r.x,s.x)+i/2,top:Math.min(r.y,s.y)+i/2,width:Math.abs(r.x-s.x)-i,height:Math.abs(r.y-s.y)-i},c={left:Math.min(r.x,s.x)-i/2,top:Math.min(r.y,s.y)-i/2,width:Math.abs(r.x-s.x)+i,height:Math.abs(r.y-s.y)+i},u=Yi(l,n);return!(!Yi(c,n)||u)}},{key:"updateCachedStats",value:function(e,t,n){var a=(y.cornerstone.metaData.get("generalSeriesModule",e.imageId)||{}).modality,o=$o(e),i=function(e,t,n,a,o){var i,r=cr(n.start,n.end),s=y.cornerstone.getPixels(t,r.left,r.top,r.width,r.height),l=Xi(s,r);"PT"===a&&(i={mean:Wi(e,l.mean,!0)||0,stdDev:Wi(e,l.stdDev,!0)||0});return{area:Math.PI*(r.width*(o.colPixelSpacing||1)/2)*(r.height*(o.rowPixelSpacing||1)/2)||0,count:l.count||0,mean:l.mean||0,variance:l.variance||0,stdDev:l.stdDev||0,min:l.min||0,max:l.max||0,meanStdDevSUV:i}}(e,t,n.handles,a,o);n.cachedStats=i,n.invalidated=!1}},{key:"renderToolData",value:function(e){var t=this,n=O(e.currentTarget,this.name);if(n){var a=e.detail,o=a.image,i=a.element,r=Xt.getToolWidth(),s=Tt("globalConfiguration").configuration.lineDash,l=this.configuration,c=l.handleRadius,u=l.drawHandlesOnHover,d=l.hideHandlesIfMoving,h=l.renderDashed,v=En(a.canvasContext.canvas),g=$o(o),f=g.rowPixelSpacing,m=g.colPixelSpacing,p=(y.cornerstone.metaData.get("generalSeriesModule",o.imageId)||{}).modality,x=f&&m;Wt(v,(function(e){for(var l=0;l2&&void 0!==arguments[2]?arguments[2]:{},a=n.area,o=n.mean,i=n.stdDev,r=n.min,s=n.max,l=n.meanStdDevSUV,c=arguments.length>3?arguments[3]:void 0,u=arguments.length>4?arguments[4]:void 0,d=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},h=d.showMinMax||!1,v=[],g=[];if(!t){var f=l&&0!==l.mean,m=rr(c,d.showHounsfieldUnits),p="Mean: ".concat($i(o.toFixed(2))," ").concat(m),y="Std Dev: ".concat($i(i.toFixed(2))," ").concat(m);if(f){for(var x=" SUV: ",T="".concat(x).concat($i(l.mean.toFixed(2))),b="".concat(x).concat($i(l.stdDev.toFixed(2))),C=Math.floor(e.measureText("".concat(y," ")).width);e.measureText(p).widthe.x&&n.x>e.x)return!0;if(t.x===n.x)return e.xn.x){var a=t;t=n,n=a}var o=function(e,t,n){var a=(n.y-t.y)/(n.x-t.x);return{value:t.y+a*(e.x-t.x),gradient:a}}(e,t,n);return Math.sign(o.gradient)*e.y>Math.sign(o.gradient)*o.value}(e,t,n));var a,o,i}function hr(e,t,n,a){ur(e,t)&&(n.value+=a,n.squared+=a*a,n.count++)}var vr=function e(t,n){r()(this,e),this.toolIndex=t,this.handleIndexArray=n},gr=function e(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];r()(this,e),this.x=t.x,this.y=t.y,this.highlight=n,this.active=a,this.lines=[]};function fr(e,t,n,a){for(var o=e.length-1,i=0;i0?1:2}function xr(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}var Tr={newHandle:function(e,t){var n=t.length-1;return fr(t,pr(t[n]),pr(e),[n])},end:function(e){var t=e.length-1;return fr(e,pr(e[t]),pr(e[0]),[t,0])},modify:function(e,t){var n=pr(e[t]),a=t-1;0===t&&(a=e.length-1);var o=pr(e[a]);return!!fr(e,n,o,[t,a])||fr(e,n,o=pr(e[a=t===e.length-1?0:t+1]),[t,a])}},br=function(){function e(t,n){r()(this,e),this._eventData=t,this._toolName=n}return l()(e,[{key:"findLine",value:function(){var e=this.findTool();if(null===e)return null;var t=this._getCloseLinesInTool(e);return t?this._findCorrectLine(e,t):null}},{key:"findTool",value:function(){return this._toolData=O(this._eventData.element,this._toolName),this._mousePoint=this._eventData.currentPoints.canvas,this._toolData?this._nearestHandleToPointAllTools().toolIndex:null}},{key:"_nearestHandleToPointAllTools",value:function(){for(var e=this._toolData,t={toolIndex:null,handleIndex:null,distance:1/0},n=0;n0&&d0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"FreehandRoi",supportedInteractionTypes:["Mouse","Touch"],configuration:{mouseLocation:{handles:{start:{highlight:!0,active:!0}}},spacing:1,activeHandleRadius:3,completeHandleRadius:6,completeHandleRadiusTouch:28,alwaysShowHandles:!1,invalidColor:"crimson",currentHandle:0,currentTool:-1,drawHandles:!0,renderDashed:!1},svgCursor:yo};return(e=u()(this,h()(t).call(this,n,a))).isMultiPartTool=!0,e._drawing=!1,e._dragging=!1,e._modifying=!1,e._drawingMouseDownCallback=e._drawingMouseDownCallback.bind(Ta()(e)),e._drawingMouseMoveCallback=e._drawingMouseMoveCallback.bind(Ta()(e)),e._drawingMouseDragCallback=e._drawingMouseDragCallback.bind(Ta()(e)),e._drawingMouseUpCallback=e._drawingMouseUpCallback.bind(Ta()(e)),e._drawingMouseDoubleClickCallback=e._drawingMouseDoubleClickCallback.bind(Ta()(e)),e._editMouseUpCallback=e._editMouseUpCallback.bind(Ta()(e)),e._editMouseDragCallback=e._editMouseDragCallback.bind(Ta()(e)),e._drawingTouchStartCallback=e._drawingTouchStartCallback.bind(Ta()(e)),e._drawingTouchDragCallback=e._drawingTouchDragCallback.bind(Ta()(e)),e._drawingDoubleTapClickCallback=e._drawingDoubleTapClickCallback.bind(Ta()(e)),e._editTouchDragCallback=e._editTouchDragCallback.bind(Ta()(e)),e.throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image){var t={visible:!0,active:!0,invalidated:!0,color:void 0,handles:{points:[]}};return t.handles.textBox={active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0},t}Ir.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"))}},{key:"pointNearTool",value:function(e,t,n){var a=t&&t.handles&&t.handles.points;if(!a)throw new Error("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool"));return!(!a||!1===t.visible)&&void 0!==this._pointNearHandle(e,t,n)}},{key:"distanceFromPoint",value:function(e,t,n){for(var a=1/0,o=0;o3&&void 0!==arguments[3]?arguments[3]:"mouse",o=e.detail.element,i=O(o,this.name);if(n.hasBoundingBox)no(e,this,t,n,a);else{var r=this.configuration;r.dragOrigin={x:n.x,y:n.y};for(var s=0;s=2){var o=n.currentHandle;a.polyBoundingBox={},this._endDrawing(e,o)}}}},{key:"_drawingMouseDoubleClickCallback",value:function(e){var t=e.detail.element;this.completeDrawing(t),Lr(e)}},{key:"_drawingDoubleTapClickCallback",value:function(e){var t=e.detail.element;this.completeDrawing(t),Lr(e)}},{key:"_editMouseDragCallback",value:function(e){var t=e.detail,n=t.element,a=t.buttons;if(this.options.mouseButtonMask.includes(a)){var o,i=O(n,this.name),r=this.configuration,s=i.data[r.currentTool],l=r.currentHandle,c=s.handles.points;if(this._getMouseLocation(t),s.handles.invalidHandlePlacement=Pr.modify(c,l),s.active=!0,s.highlight=!0,c[l].x=r.mouseLocation.handles.start.x,c[l].y=r.mouseLocation.handles.start.y,o=this._getPrevHandleIndex(l,c),l>=0){var u=c[o].lines.length-1,d=c[o].lines[u];d.x=r.mouseLocation.handles.start.x,d.y=r.mouseLocation.handles.start.y}y.cornerstone.updateImage(n)}}},{key:"_editTouchDragCallback",value:function(e){var t,n=e.detail,a=n.element,o=O(a,this.name),i=this.configuration,r=o.data[i.currentTool],s=i.currentHandle,l=r.handles.points;if(this._getMouseLocation(n),r.handles.invalidHandlePlacement=Pr.modify(l,s),r.active=!0,r.highlight=!0,l[s].x=i.mouseLocation.handles.start.x,l[s].y=i.mouseLocation.handles.start.y,t=this._getPrevHandleIndex(s,l),s>=0){var c=l[t].lines.length-1,u=l[t].lines[c];u.x=i.mouseLocation.handles.start.x,u.y=i.mouseLocation.handles.start.y}y.cornerstone.updateImage(a)}},{key:"_getPrevHandleIndex",value:function(e,t){return 0===e?t.length-1:e-1}},{key:"_editMouseUpCallback",value:function(e){var t=e.detail,n=t.element,a=O(n,this.name);this._deactivateModify(n),this._dropHandle(t,a),this._endDrawing(n),y.cornerstone.updateImage(n)}},{key:"_dropHandle",value:function(e,t){var n=this.configuration,a=n.currentTool,o=t.data[a].handles,i=o.points;if(o.invalidHandlePlacement){var r,s=n.currentHandle,l=i[s];if(0===s)r=i[i.length-1];else r=i[s-1];l.x=n.dragOrigin.x,l.y=n.dragOrigin.y,r.lines[0]=l,o.invalidHandlePlacement=!1}}},{key:"_startDrawing",value:function(e){var t,n=e.detail,a=this.createNewMeasurement(n),o=n.element,i=this.configuration;e.type===b.MOUSE_DOWN_ACTIVATE?t="Mouse":e.type===b.TOUCH_START_ACTIVE&&(t="Touch"),this._activateDraw(o,t),this._getMouseLocation(n),D(o,this.name,a);var r=O(o,this.name);i.currentTool=r.data.length-1,this._activeDrawingToolReference=r.data[i.currentTool]}},{key:"_addPoint",value:function(e){var t=e.currentPoints,n=e.element,a=O(n,this.name),o=this.configuration,i=a.data[o.currentTool];if(!i.handles.invalidHandlePlacement){var r=new Dr(t.image);i.handles.points.length&&i.handles.points[o.currentHandle-1].lines.push(t.image),i.handles.points.push(r),o.currentHandle+=1,y.cornerstone.updateImage(n),this.fireModifiedEvent(n,i)}}},{key:"_addPointPencilMode",value:function(e,t){var n=this,a=this.configuration,o=e.element,i=a.mouseLocation.handles.start;t.every((function(e){return n._isDistanceLargerThanSpacing(o,e,i)}))&&this._addPoint(e)}},{key:"_endDrawing",value:function(e,t){var n=O(e,this.name),a=this.configuration,o=n.data[a.currentTool];if(o.active=!1,o.highlight=!1,o.handles.invalidHandlePlacement=!1,void 0!==t){var i=o.handles.points;i[a.currentHandle-1].lines.push(i[0])}this._modifying&&(this._modifying=!1,o.invalidated=!0),a.currentHandle=0,a.currentTool=-1,o.canComplete=!1,this._drawing&&this._deactivateDraw(e),y.cornerstone.updateImage(e),this.fireModifiedEvent(e,o),this.fireCompletedEvent(e,o)}},{key:"_pointNearHandle",value:function(e,t,n){if(void 0!==t.handles&&void 0!==t.handles.points&&!1!==t.visible){for(var a=0;a2?(e.canComplete=!0,r=!1):r=Pr.newHandle(o,i),r}},{key:"_checkHandlesPencilMode",value:function(e,t){var n=this.configuration.mouseLocation.handles.start,a=e.handles.points,o=Pr.newHandle(n,a);return!1===o&&(o=this._invalidHandlePencilMode(e,t)),o}},{key:"_invalidHandlePencilMode",value:function(e,t){var n=this.configuration,a=t.element,o=n.mouseLocation.handles.start,i=e.handles.points;if(this._isDistanceSmallerThanCompleteSpacingCanvas(a,i[0],o))return e.canComplete=!0,!1;e.canComplete=!1;for(var r=1;r")}},{key:"_compareDistanceToSpacing",value:function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:">",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.configuration.spacing;return">"===a?y.cornerstoneMath.point.distance(t,n)>o:y.cornerstoneMath.point.distance(t,n)1&&void 0!==arguments[1]?arguments[1]:"Mouse";this._drawing=!0,this._drawingInteractionType=t,pt.isMultiPartToolActive=!0,wt(this.element),e.addEventListener(b.MOUSE_DOWN,this._drawingMouseDownCallback),e.addEventListener(b.MOUSE_MOVE,this._drawingMouseMoveCallback),e.addEventListener(b.MOUSE_DOUBLE_CLICK,this._drawingMouseDoubleClickCallback),e.addEventListener(b.MOUSE_DRAG,this._drawingMouseDragCallback),e.addEventListener(b.MOUSE_UP,this._drawingMouseUpCallback),e.addEventListener(b.TOUCH_START,this._drawingMouseMoveCallback),e.addEventListener(b.TOUCH_START,this._drawingTouchStartCallback),e.addEventListener(b.TOUCH_DRAG,this._drawingTouchDragCallback),e.addEventListener(b.TOUCH_END,this._drawingMouseUpCallback),e.addEventListener(b.DOUBLE_TAP,this._drawingDoubleTapClickCallback),y.cornerstone.updateImage(e)}},{key:"_deactivateDraw",value:function(e){this._drawing=!1,pt.isMultiPartToolActive=!1,this._activeDrawingToolReference=null,this._drawingInteractionType=null,Et(this.element,this.svgCursor),e.removeEventListener(b.MOUSE_DOWN,this._drawingMouseDownCallback),e.removeEventListener(b.MOUSE_MOVE,this._drawingMouseMoveCallback),e.removeEventListener(b.MOUSE_DOUBLE_CLICK,this._drawingMouseDoubleClickCallback),e.removeEventListener(b.MOUSE_DRAG,this._drawingMouseDragCallback),e.removeEventListener(b.MOUSE_UP,this._drawingMouseUpCallback),e.removeEventListener(b.TOUCH_START,this._drawingTouchStartCallback),e.removeEventListener(b.TOUCH_DRAG,this._drawingTouchDragCallback),e.removeEventListener(b.TOUCH_START,this._drawingMouseMoveCallback),e.removeEventListener(b.TOUCH_END,this._drawingMouseUpCallback),y.cornerstone.updateImage(e)}},{key:"_activateModify",value:function(e){pt.isToolLocked=!0,e.addEventListener(b.MOUSE_UP,this._editMouseUpCallback),e.addEventListener(b.MOUSE_DRAG,this._editMouseDragCallback),e.addEventListener(b.MOUSE_CLICK,this._editMouseUpCallback),e.addEventListener(b.TOUCH_END,this._editMouseUpCallback),e.addEventListener(b.TOUCH_DRAG,this._editTouchDragCallback),y.cornerstone.updateImage(e)}},{key:"_deactivateModify",value:function(e){pt.isToolLocked=!1,e.removeEventListener(b.MOUSE_UP,this._editMouseUpCallback),e.removeEventListener(b.MOUSE_DRAG,this._editMouseDragCallback),e.removeEventListener(b.MOUSE_CLICK,this._editMouseUpCallback),e.removeEventListener(b.TOUCH_END,this._editMouseUpCallback),e.removeEventListener(b.TOUCH_DRAG,this._editTouchDragCallback),y.cornerstone.updateImage(e)}},{key:"passiveCallback",value:function(e){this._closeToolIfDrawing(e)}},{key:"enabledCallback",value:function(e){this._closeToolIfDrawing(e)}},{key:"disabledCallback",value:function(e){this._closeToolIfDrawing(e)}},{key:"_closeToolIfDrawing",value:function(e){if(this._drawing){var t=this.configuration.currentHandle;this._endDrawing(e,t),y.cornerstone.updateImage(e)}}},{key:"fireModifiedEvent",value:function(e,t){C(e,b.MEASUREMENT_MODIFIED,{toolName:this.name,toolType:this.name,element:e,measurementData:t})}},{key:"fireCompletedEvent",value:function(e,t){C(e,b.MEASUREMENT_COMPLETED,{toolName:this.name,toolType:this.name,element:e,measurementData:t})}},{key:"cancelDrawing",value:function(e){if(this._drawing){var t=O(e,this.name),n=this.configuration,a=t.data[n.currentTool];a.active=!1,a.highlight=!1,a.handles.invalidHandlePlacement=!1,n.currentHandle=0,n.currentTool=-1,a.canComplete=!1,L(e,this.name,a),this._deactivateDraw(e),y.cornerstone.updateImage(e)}}},{key:"newImageCallback",value:function(e){var t=this.configuration;if(this._drawing&&this._activeDrawingToolReference){var n=e.detail.element,a=this._activeDrawingToolReference;a.active=!1,a.highlight=!1,a.handles.invalidHandlePlacement=!1;var o=a.handles.points;o[t.currentHandle-1].lines.push(o[0]),t.currentHandle=0,t.currentTool=-1,a.canComplete=!1,this._deactivateDraw(n),y.cornerstone.updateImage(n)}}},{key:"spacing",get:function(){return this.configuration.spacing},set:function(e){if("number"!=typeof e)throw new Error("Attempting to set freehand spacing to a value other than a number.");this.configuration.spacing=e,y.cornerstone.updateImage(this.element)}},{key:"activeHandleRadius",get:function(){return this.configuration.activeHandleRadius},set:function(e){if("number"!=typeof e)throw new Error("Attempting to set freehand activeHandleRadius to a value other than a number.");this.configuration.activeHandleRadius=e,y.cornerstone.updateImage(this.element)}},{key:"completeHandleRadius",get:function(){return this.configuration.completeHandleRadius},set:function(e){if("number"!=typeof e)throw new Error("Attempting to set freehand completeHandleRadius to a value other than a number.");this.configuration.completeHandleRadius=e,y.cornerstone.updateImage(this.element)}},{key:"alwaysShowHandles",get:function(){return this.configuration.alwaysShowHandles},set:function(e){if("boolean"!=typeof e)throw new Error("Attempting to set freehand alwaysShowHandles to a value other than a boolean.");this.configuration.alwaysShowHandles=e,y.cornerstone.updateImage(this.element)}},{key:"invalidColor",get:function(){return this.configuration.invalidColor},set:function(e){this.configuration.invalidColor=e,y.cornerstone.updateImage(this.element)}}]),t}(ro);function Lr(e){e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault()}var Ar=N("tools:annotation:LengthTool"),Hr=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Length",supportedInteractionTypes:["Mouse","Touch"],svgCursor:To,configuration:{drawHandles:!0,drawHandlesOnHover:!1,hideHandlesIfMoving:!1,renderDashed:!1}};return(e=u()(this,h()(t).call(this,n,a))).throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image){var t=e.currentPoints.image,n=t.x,a=t.y;return{visible:!0,active:!0,color:void 0,invalidated:!0,handles:{start:{x:n,y:a,highlight:!0,active:!1},end:{x:n,y:a,highlight:!0,active:!0},textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}}}Ar.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"))}},{key:"pointNearTool",value:function(e,t,n){return t&&t.handles&&t.handles.start&&t.handles.end?!1!==t.visible&&so(e,t.handles.start,t.handles.end,n)<25:(Ar.warn("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool")),!1)}},{key:"updateCachedStats",value:function(e,t,n){var a=$o(e),o=a.rowPixelSpacing,i=a.colPixelSpacing,r=(n.handles.end.x-n.handles.start.x)*(i||1),s=(n.handles.end.y-n.handles.start.y)*(o||1),l=Math.sqrt(r*r+s*s);n.length=l,n.invalidated=!1}},{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=this.configuration,o=a.handleRadius,i=a.drawHandlesOnHover,r=a.hideHandlesIfMoving,s=a.renderDashed,l=O(e.currentTarget,this.name);if(l)for(var c=En(n.canvasContext.canvas),u=n.image,d=n.element,h=$o(u),v=h.rowPixelSpacing,g=h.colPixelSpacing,f=Xt.getToolWidth(),m=Tt("globalConfiguration").configuration.lineDash,p=function(e){var a=l.data[e];if(!1===a.visible)return"continue";Wt(c,(function(e){In(e,t.configuration);var l=un.getColorIfActive(a),c={color:l};s&&(c.lineDash=m),Zt(e,d,a.handles.start,a.handles.end,c);var h={color:l,handleRadius:o,drawHandlesIfActive:i,hideHandlesIfMoving:r};if(t.configuration.drawHandles&&dn(e,n,a.handles,h),!a.handles.textBox.hasMoved){var p={x:Math.max(a.handles.start.x,a.handles.end.x)};p.x===a.handles.start.x?p.y=a.handles.start.y:p.y=a.handles.end.y,a.handles.textBox.x=p.x,a.handles.textBox.y=p.y}!0===a.invalidated&&(a.length?t.throttledUpdateCachedStats(u,d,a):t.updateCachedStats(u,d,a));var y=function(e,t,n){var a=(o=e.length,i=Number(o),isNaN(i)?void 0:i);var o,i;if(!a)return"";var r="mm";t&&n||(r="pixels");return e.unit=r,"".concat(a.toFixed(2)," ").concat(r)}(a,v,g);Cn(e,d,a.handles.textBox,y,a.handles,x,l,f,10,!0)}))},y=0;y0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Probe",supportedInteractionTypes:["Mouse","Touch"],svgCursor:bo,configuration:{drawHandles:!0,renderDashed:!1}};return(e=u()(this,h()(t).call(this,n,a))).throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image)return{visible:!0,active:!0,color:void 0,invalidated:!0,handles:{end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0}}};Ur.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"))}},{key:"pointNearTool",value:function(e,t,n){var a=t&&t.handles&&t.handles.end;if(a||Ur.warn("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool")),!a||!1===t.visible)return!1;var o=y.cornerstone.pixelToCanvas(e,t.handles.end);return y.cornerstoneMath.point.distance(o,n)<5}},{key:"updateCachedStats",value:function(e,t,n){var a=Math.round(n.handles.end.x),o=Math.round(n.handles.end.y),i={};a>=0&&o>=0&&a=0&&m>=0&&f0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"RectangleRoi",supportedInteractionTypes:["Mouse","Touch"],configuration:{drawHandles:!0,drawHandlesOnHover:!1,hideHandlesIfMoving:!1,renderDashed:!1},svgCursor:Co};return(e=u()(this,h()(t).call(this,n,a))).throttledUpdateCachedStats=ei(e.updateCachedStats,110),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){if(e&&e.currentPoints&&e.currentPoints.image)return{visible:!0,active:!0,color:void 0,invalidated:!0,handles:{start:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!1},end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0},initialRotation:e.viewport.rotation,textBox:{active:!1,hasMoved:!1,movesIndependently:!1,drawnIndependently:!0,allowedOutsideImage:!0,hasBoundingBox:!0}}};Fr.error("required eventData not supplied to tool ".concat(this.name,"'s createNewMeasurement"))}},{key:"pointNearTool",value:function(e,t,n,a){var o=t&&t.handles&&t.handles.start&&t.handles.end;if(o||Fr.warn("invalid parameters supplied to tool ".concat(this.name,"'s pointNearTool")),!o||!1===t.visible)return!1;var i="mouse"===a?15:25,r=y.cornerstone.pixelToCanvas(e,t.handles.start),s=y.cornerstone.pixelToCanvas(e,t.handles.end),l={left:Math.min(r.x,s.x),top:Math.min(r.y,s.y),width:Math.abs(r.x-s.x),height:Math.abs(r.y-s.y)};return y.cornerstoneMath.rect.distanceToPoint(l,n)5&&void 0!==arguments[5]?arguments[5]:{},h=d.showMinMax||!1,v=[],g=[];if(!t){var f=u&&0!==u.mean,m=zr(a,d.showHounsfieldUnits),p="Mean: ".concat($i(r.toFixed(2))," ").concat(m),y="Std Dev: ".concat($i(s.toFixed(2))," ").concat(m);if(f){for(var x=" SUV: ",T="".concat(x).concat($i(u.mean.toFixed(2))),b="".concat(x).concat($i(u.stdDev.toFixed(2))),C=Math.floor(e.measureText("".concat(y," ")).width);e.measureText(p).width0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"TextMarker",supportedInteractionTypes:["Mouse","Touch"],configuration:{markers:[],current:"",ascending:!0,loop:!1,changeTextCallback:Gr},svgCursor:Mo};return(e=u()(this,h()(t).call(this,n,a))).touchPressCallback=e._changeText.bind(Ta()(e)),e.doubleClickCallback=e._changeText.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"createNewMeasurement",value:function(e){var t=this.configuration;if(t.current){var n={visible:!0,active:!0,text:t.current,color:void 0,handles:{end:{x:e.currentPoints.image.x,y:e.currentPoints.image.y,highlight:!0,active:!0,hasBoundingBox:!0}}},a={left:0,top:0,width:e.image.width,height:e.image.height};if(y.cornerstoneMath.point.insideRect(n.handles.end,a)){var o=t.markers.indexOf(t.current);return(o+=t.ascending?1:-1)>=t.markers.length?o=t.loop?0:-1:o<0&&(o=t.loop?t.markers.length:-1),t.current=t.markers[o],n}}}},{key:"pointNearTool",value:function(e,t,n){if(!1===t.visible)return!1;if(t.handles.end.boundingBox){var a=y.cornerstoneMath.rect.distanceToPoint(t.handles.end.boundingBox,n),o=ua(t.handles.end,n);return a<10||o}}},{key:"updateCachedStats",value:function(){}},{key:"renderToolData",value:function(e){var t=e.detail,n=this.configuration,a=O(t.element,this.name);if(a)for(var o=En(t.canvasContext.canvas),i=function(e){var i=a.data[e];if(!1===i.visible)return"continue";var r=un.getColorIfActive(i);Wt(o,(function(e){In(e,n);var a=y.cornerstone.pixelToCanvas(t.element,i.handles.end);i.handles.end.boundingBox=bn(e,i.text,a.x,a.y-10,r,{centering:{x:!0,y:!0}})}))},r=0;r0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Brush",supportedInteractionTypes:["Mouse","Touch"],configuration:{},mixins:["renderBrushMixin"]};return(e=u()(this,h()(t).call(this,n,a))).touchDragCallback=e._paint.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_paint",value:function(e){var t=Yr.configuration,n=e.detail,a=(n.element,n.image),o=a.rows,i=a.columns,r=n.currentPoints.image,s=r.x,l=r.y;if(!(s<0||s>i||l<0||l>o)){var c=be(t.radius,o,i,s,l),u=this.paintEventData,d=u.labelmap2D,h=u.labelmap3D,v=u.shouldErase;te(c,d.pixelData,h.activeSegmentIndex,i,v),y.cornerstone.updateImage(e.detail.element)}}}]),t}(Ma),Kr=N("tools:SphericalBrushTool"),Zr=Tt("segmentation"),$r=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"SphericalBrush",supportedInteractionTypes:["Mouse","Touch"],configuration:{alwaysEraseOnClick:!1},mixins:["renderBrushMixin"]};return(e=u()(this,h()(t).call(this,n,a))).touchDragCallback=e._paint.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_startPainting",value:function(e){var t,n=Zr.configuration,a=Zr.getters,o=e.detail,i=o.element,r=o.image,s=y.cornerstone,l=n.radius,c=r.rows,u=r.columns,d=Math.max(r.rowPixelSpacing,r.columnPixelSpacing),h=O(i,"stack").data[0].imageIds,v=a.labelmap2D(i),g=v.labelmap2D,f=v.labelmap3D,m=v.currentImageIdIndex,p=v.activeLabelmapIndex,x=this._isCtrlDown(o)||this.configuration.alwaysEraseOnClick,T=s.metaData.get("imagePlaneModule",r.imageId);if(T){var b=T.imagePositionPatient;t=this._getImagesInRange(m,b,h,l,d)}else Kr.warn("No imagePlane metadata found for image, defaulting to circle brush application."),t=[{imageIdIndex:m,radiusOnImage:l}];if(this.paintEventData={labelmap2D:g,labelmap3D:f,currentImageIdIndex:m,activeLabelmapIndex:p,shouldErase:x,imagesInRange:t},n.storeHistory){for(var C=[],M=0;Mi||l<0||l>o)){for(var c=this.paintEventData,u=c.labelmap3D,d=c.imagesInRange,h=c.shouldErase,v=0;v=0;c--){var u=this._getRadiusOnImage(n[c],t,i,o);if(!u)break;r.push({imageIdIndex:c,radiusOnImage:u})}return r}},{key:"_getRadiusOnImage",value:function(e,t,n,a){var o=y.cornerstone.metaData.get("imagePlaneModule",e);if(o){var i=o.imagePositionPatient,r=Math.sqrt(Math.pow(i[0]-t[0],2)+Math.pow(i[1]-t[1],2)+Math.pow(i[2]-t[2],2));if(!(r>n))return Math.floor(Math.sqrt(Math.pow(n,2)-Math.pow(r,2))/a)}else Kr.warn("Can't find imagePlane metadata for image, cancelling spherical brushing on: ".concat(e,","))}},{key:"_endPainting",value:function(e){for(var t=this.paintEventData,n=t.labelmap3D,a=t.imagesInRange,o=[],i=Zr.configuration,r=Zr.setters,s=0;s=E||e=I||te.xMax&&(e.xMax=n),ae.yMax&&(e.yMax=a)}function ts(e,t,n,a,o){for(var i=ge(a,[e.x,e.y]).flooded,r=0;ra!=u>a&&n<(c-s)*(a-l)/(u-l)+s&&(o=!o)}return o}var os=N("util:segmentation:operations:eraseInsideFreehand");function is(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=t.points,o=t.segmentationMixinType;if("freehandSegmentationMixin"===o){var i=e.detail.image,r=a.map((function(e){return[e.x,e.y]})),s=Te(r,i),l=oe()(s,2),c=l[0],u=l[1];n?se(e,t,(function(e){return as([e.x,e.y],r)}),c,u):le(e,t,(function(e){return as([e.x,e.y],r)}),c,u)}else os.error("eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ".concat(o))}function rs(e,t){is(e,t,!0)}function ss(e,t){is(e,t,!1)}var ls=N("util:segmentation:operations:eraseInsideRectangle");function cs(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=t.points,o=t.segmentationMixinType;if("rectangleSegmentationMixin"===o){var i=e.detail,r=i.image,s=a.map((function(e){return[e.x,e.y]})),l=Te(s,r),c=oe()(l,2),u=c[0],d=c[1];n?se(e,t,(function(){return!0}),u,d):ne(e,t,u,d)}else ls.error("eraseInsideRectangle operation requires rectangleSegmentationMixin operationData, recieved ".concat(o))}function us(e,t){cs(e,t,!0)}function ds(e,t){cs(e,t,!1)}var hs=N("util:segmentation:operations:fillInsideFreehand");function vs(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=t.points,o=t.segmentationMixinType;if("freehandSegmentationMixin"===o){var i=e.detail.image,r=a.map((function(e){return[e.x,e.y]})),s=Te(r,i),l=oe()(s,2),c=l[0],u=l[1];n?he(e,t,(function(e){return as([e.x,e.y],r)}),c,u):ve(e,t,(function(e){return as([e.x,e.y],r)}),c,u)}else hs.error("eraseInsideFreehand operation requires freehandSegmentationMixin operationData, recieved ".concat(o))}function gs(e,t){vs(e,t,!0)}function fs(e,t){vs(e,t,!1)}var ms=N("util:segmentation:operations:fillInsideRectangle");function ps(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=t.points,o=t.segmentationMixinType;if("rectangleSegmentationMixin"===o){var i=e.detail.image,r=a.map((function(e){return[e.x,e.y]})),s=Te(r,i),l=oe()(s,2),c=l[0],u=l[1];n?he(e,t,(function(){return!0}),c,u):ce(e,t,c,u)}else ms.error("eraseInsideRectangle operation requires rectangleSegmentationMixin operationData, recieved ".concat(o))}function ys(e,t){ps(e,t,!0)}function xs(e,t){ps(e,t,!1)}var Ts=N("util:segmentation:operations:fillCircle");function bs(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=t.segmentationMixinType;if("circleSegmentationMixin"===a){var o=e.detail,i=xe(e),r=oe()(i,2),s=r[0],l=r[1],c=ye(o.handles.start,o.handles.end);n?he(e,t,(function(e){return Yi(c,e)}),s,l):ve(e,t,(function(e){return Yi(c,e)}),s,l)}else Ts.error("fillInsideCircle operation requires circleSegmentationMixin operationData, recieved ".concat(a))}function Cs(e,t){bs(e,t,!0)}function Ms(e,t){bs(e,t,!1)}var Es=N("util:segmentation:operations:eraseInsideCircle");function ws(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],a=t.segmentationMixinType;if("circleSegmentationMixin"===a){var o=e.detail,i=xe(e),r=oe()(i,2),s=r[0],l=r[1],c=ye(o.handles.start,o.handles.end);n?se(e,t,(function(e){return Yi(c,e)}),s,l):le(e,t,(function(e){return Yi(c,e)}),s,l)}else Es.error("eraseInsideCircle operation requires circleSegmentationMixin operationData, recieved ".concat(a))}function Is(e,t){ws(e,t,!0)}function Ss(e,t){ws(e,t,!1)}var ks=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"FreehandScissors",strategies:{FILL_INSIDE:gs,FILL_OUTSIDE:fs,ERASE_OUTSIDE:ss,ERASE_INSIDE:rs},cursors:{FILL_INSIDE:Bo,FILL_OUTSIDE:qo,ERASE_OUTSIDE:Vo,ERASE_INSIDE:Fo},defaultStrategy:"FILL_INSIDE",supportedInteractionTypes:["Mouse","Touch"],svgCursor:Bo,mixins:["freehandSegmentationMixin"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),t}(ca),_s=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"RectangleScissors",strategies:{FILL_INSIDE:ys,FILL_OUTSIDE:xs,ERASE_OUTSIDE:ds,ERASE_INSIDE:us},cursors:{FILL_INSIDE:jo,FILL_OUTSIDE:Go,ERASE_OUTSIDE:Wo,ERASE_INSIDE:zo},defaultStrategy:"FILL_INSIDE",supportedInteractionTypes:["Mouse","Touch"],mixins:["rectangleSegmentationMixin"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),t}(ca),Ps=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"CircleScissors",strategies:{FILL_INSIDE:Cs,FILL_OUTSIDE:Ms,ERASE_OUTSIDE:Ss,ERASE_INSIDE:Is},cursors:{FILL_INSIDE:Xo,FILL_OUTSIDE:Zo,ERASE_OUTSIDE:Ko,ERASE_INSIDE:Yo},defaultStrategy:"FILL_INSIDE",supportedInteractionTypes:["Mouse","Touch"],svgCursor:Xo,mixins:["circleSegmentationMixin"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),t}(ca),Ds=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"CorrectionScissors",strategies:{CORRECTION:Qr},cursors:{CORRECTION:Bo},defaultStrategy:"CORRECTION",supportedInteractionTypes:["Mouse","Touch"],svgCursor:Bo,mixins:["polylineSegmentationMixin"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),t}(ca),Os={},Ls={},As={};function Hs(e){if(!e)return"DEFAULT";var t=y.cornerstone.getEnabledElement(e).uuid;if(!t)throw new Error("Something went wrong when getting uuid from element");return t}var Rs={setStartLoadHandler:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!e)throw new Error("The Handler function must be defined");var n=Hs(t);Os[n]=e},getStartLoadHandler:function(e){var t=Hs(e);return Os[t]||Os.DEFAULT},setEndLoadHandler:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!e)throw new Error("The Handler function must be defined");var n=Hs(t);Ls[n]=e},getEndLoadHandler:function(e){var t=Hs(e);return Ls[t]||Ls.DEFAULT},setErrorLoadingHandler:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(!e)throw new Error("The Handler function must be defined");var n=Hs(t);As[n]=e},getErrorLoadingHandler:function(e){var t=Hs(e);return As[t]||As.DEFAULT},removeHandlers:function(e){var t=Hs(e);delete Os[t],delete Ls[t],delete As[t]}},Us={};function Ns(e,t){if(!Us[e])return{};var n=Us[e].find((function(e){return e.element===t}));return n?n.options:{}}function Fs(e,t,n){if(Us[e]){var a=Us[e].findIndex((function(e){return e.element===t}));if(-1===a)Us[e].push({element:t,options:n});else{var o=Us[e][a].options||{};Us[e][a].options=Object.assign(o,n)}}else Us[e]=[{element:t,options:n}]}var Bs=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Crosshairs",supportedInteractionTypes:["Mouse","Touch"],svgCursor:Eo};return(e=u()(this,h()(t).call(this,n,a))).mouseDownCallback=e._chooseLocation.bind(Ta()(e)),e.mouseDragCallback=e._chooseLocation.bind(Ta()(e)),e.touchDragCallback=e._chooseLocation.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_chooseLocation",value:function(e){var t=e.detail,n=t.element;e.stopImmediatePropagation();var a=O(n,this.name);if(a){var o=n,i=y.cornerstone.getEnabledElement(o).image.imageId,r=y.cornerstone.metaData.get("imagePlaneModule",i);if(r){var s=nn(t.currentPoints.image,r);a.data[0].synchronizationContext.getSourceElements().forEach((function(e){if(e!==o){var t=Number.MAX_VALUE,n=-1,a=O(e,"stack");if(void 0!==a){var i=a.data[0];if(i.imageIds.forEach((function(e,a){var o=y.cornerstone.metaData.get("imagePlaneModule",e);if(o&&o.imagePositionPatient&&o.rowCosines&&o.columnCosines){var i=en(o.imagePositionPatient),r=en(o.rowCosines),l=en(o.columnCosines).clone().cross(r.clone()),c=Math.abs(l.clone().dot(i)-l.clone().dot(s));c0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"DoubleTapFitToWindow",supportedInteractionTypes:["DoubleTap"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"doubleTapCallback",value:function(e){var t=e.detail;y.cornerstone.fitToWindow(t.element)}}]),t}(ca),qs=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"DragProbe",strategies:{default:zs,minimal:js},defaultStrategy:"default",supportedInteractionTypes:["Mouse","Touch"],svgCursor:bo};return(e=u()(this,h()(t).call(this,n,a))).touchDragCallback=e._movingEventCallback.bind(Ta()(e)),e.touchEndCallback=e._endMovingEventCallback.bind(Ta()(e)),e.mouseDragCallback=e._movingEventCallback.bind(Ta()(e)),e.mouseUpCallback=e._endMovingEventCallback.bind(Ta()(e)),e.dragEventData={},e}return g()(t,e),l()(t,[{key:"_movingEventCallback",value:function(e){var t=e.detail,n=t.element;this.dragEventData=t,y.cornerstone.updateImage(n)}},{key:"_endMovingEventCallback",value:function(e){var t=e.detail.element;this.dragEventData={},y.cornerstone.updateImage(t)}},{key:"renderToolData",value:function(e){this.dragEventData.currentPoints&&e&&e.detail&&Boolean(Object.keys(this.dragEventData.currentPoints).length)&&(e.detail.currentPoints=this.dragEventData.currentPoints,this.applyActiveStrategy(e))}}]),t}(ca);function zs(e){var t=this.configuration,n=y.cornerstone,a=e.detail,o=a.element,i=a.image,r=a.currentPoints,s=a.canvasContext,l=En(s.canvas),c=un.getActiveColor(),u=pn.getFontSize(),d=Math.round(r.image.x),h=Math.round(r.image.y);d<0||h<0||d>=i.columns||h>=i.rows||Wt(l,(function(e){In(e,t);var a,s,l="".concat(d,", ").concat(h);if(i.color)a=Rr(o,d,h,1,1),s="R: ".concat(a[0]," G: ").concat(a[1]," B: ").concat(a[2]," A: ").concat(a[3]);else{var v=(a=n.getStoredPixels(o,d,h,1,1))[0],g=v*i.slope+i.intercept,f=Wi(i,v);s="SP: ".concat(v," MO: ").concat(parseFloat(g.toFixed(3))),f&&(s+=" SUV: ".concat(parseFloat(f.toFixed(3))))}var m={x:r.canvas.x+5,y:r.canvas.y-5};bn(e,s,m.x,m.y+u+5,c),bn(e,l,m.x,m.y,c)}))}function js(e){var t=this.configuration,n=y.cornerstone,a=e.detail,o=a.element,i=a.image,r=a.currentPoints,s=a.canvasContext,l=a.isTouchEvent,c=En(s.canvas),u=un.getActiveColor(),d=r.page.y-pn.getFontSize()/2;l&&(d=r.page.y-4*pn.getFontSize());var h=n.pageToPixel(o,r.page.x,d);h.x<0||h.y<0||h.x>=i.columns||h.y>=i.rows||Wt(c,(function(e){In(e,t);var a,r=n.metaData.get("generalSeriesModule",i.imageId),s=r&&r.modality,c="";if(i.color)a=Rr(o,h.x,h.y,1,1),c="R: ".concat(a[0]," G: ").concat(a[1]," B: ").concat(a[2]);else{var d=(a=n.getStoredPixels(o,h.x,h.y,1,1))[0],v=d*i.slope+i.intercept,g=parseFloat(v.toFixed(2));if("CT"===s)c+="HU: ".concat(g);else if("PT"===s){c+=g;var f=Wi(i,d);f&&(c+=" SUV: ".concat(parseFloat(f.toFixed(2))))}else c+=g}var m=n.pixelToCanvas(o,h),p={x:12,y:-(pn.getFontSize()+10)/2},y=Tn(e,c,5);l&&(p={x:-y/2,y:-pn.getFontSize()-10-12}),Qt(e,o,m,6,{color:u},"canvas"),bn(e,c,m.x+p.x,m.y+p.y,u)}))}var Ws=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Eraser",supportedInteractionTypes:["Mouse","Touch"],svgCursor:wo};return(e=u()(this,h()(t).call(this,n,a))).preMouseDownCallback=e._deleteAllNearbyTools.bind(Ta()(e)),e.preTouchStartCallback=e._deleteAllNearbyTools.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_deleteAllNearbyTools",value:function(e){var t=e.detail.currentPoints.canvas,n=e.detail.element;pt.tools.forEach((function(e){var a=O(n,e.name);a&&a.data.forEach((function(a){"function"==typeof e.pointNearTool&&e.pointNearTool(n,a,t)&&(L(n,e.name,a),y.cornerstone.updateImage(n))}))}));return!0}}]),t}(ca),Gs=wr.FreehandHandleData,Ys=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"FreehandRoiSculptor",referencedToolName:"FreehandRoi",supportedInteractionTypes:["Mouse","Touch","DoubleTap"],mixins:["activeOrDisabledBinaryTool"],configuration:Xs(),svgCursor:xo};return(e=u()(this,h()(t).call(this,n,a))).updateOnMouseMove=!0,e.isMultiPartTool=!0,e.referencedToolName=e.initialConfiguration.referencedToolName,e._active=!1,e.activeMouseUpCallback=e.activeMouseUpCallback.bind(Ta()(e)),e.activeTouchEndCallback=e.activeTouchEndCallback.bind(Ta()(e)),e.activeMouseDragCallback=e.activeMouseDragCallback.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"renderToolData",value:function(e){var t=e.detail;if(null===this.configuration.currentTool)return!1;var n=t.element,a=this.configuration;if(!O(n,this.referencedToolName).data[a.currentTool])return!1;if(this._active){var o=t.canvasContext.canvas.getContext("2d"),i={color:this.configuration.dragColor,fill:null,handleRadius:this._toolSizeCanvas};dn(o,t,this.configuration.mouseLocation.handles,i)}else this.configuration.showCursorOnHover&&!this._recentTouchEnd&&this._renderHoverCursor(e)}},{key:"doubleClickCallback",value:function(e){var t=e.detail;this._selectFreehandTool(t),y.cornerstone.updateImage(t.element)}},{key:"doubleTapCallback",value:function(e){var t=e.detail;this._selectFreehandTool(t),y.cornerstone.updateImage(t.element)}},{key:"preTouchStartCallback",value:function(e){return this._initialiseSculpting(e),!0}},{key:"preMouseDownCallback",value:function(e){if(this.options.mouseButtonMask.includes(e.detail.buttons))return this._initialiseSculpting(e),!0}},{key:"activeMouseDragCallback",value:function(e){var t=this.configuration;if(this._active){var n=e.detail,a=O(n.element,this.referencedToolName);if(a){var o=a.data[t.currentTool].handles.points;this._getMouseLocation(n),this._sculpt(n,o),y.cornerstone.updateImage(n.element)}}}},{key:"activeMouseUpCallback",value:function(e){this._activeEnd(e)}},{key:"activeTouchEndCallback",value:function(e){this._activeEnd(e),this._deselectAllTools(e),this._recentTouchEnd=!0}},{key:"_activeEnd",value:function(e){var t=e.detail,n=t.element,a=this.configuration;this._active=!1,pt.isMultiPartToolActive=!1,this._getMouseLocation(t),this._invalidateToolData(t),a.mouseUpRender=!0,this._deactivateSculpt(n),y.cornerstone.updateImage(t.element),function(e){e.stopImmediatePropagation(),e.stopPropagation(),e.preventDefault()}(e)}},{key:"_renderHoverCursor",value:function(e){var t,n=e.detail,a=n.element,o=n.canvasContext.canvas.getContext("2d"),i=O(a,this.referencedToolName).data[this.configuration.currentTool];this._recentTouchEnd=!1,this.configuration.mouseUpRender?(t=this.configuration.mouseLocation.handles.start,this.configuration.mouseUpRender=!1):t=pt.mousePositionImage;var r=Ct(a,this.referencedToolName).distanceFromPointCanvas(a,i,t);if(this.configuration.mouseLocation.handles.start.x=t.x,this.configuration.mouseLocation.handles.start.y=t.y,this.configuration.limitRadiusOutsideRegion){var s=r;r=this._limitCursorRadiusCanvas(n,r),s>this.configuration.hoverCursorFadeDistance*r&&(o.globalAlpha=this.configuration.hoverCursorFadeAlpha)}var l={fill:null,color:this.configuration.hoverColor,handleRadius:r};dn(o,n,this.configuration.mouseLocation.handles,l),this.configuration.limitRadiusOutsideRegion&&(o.globalAlpha=1)}},{key:"newImageCallback",value:function(e){this._deselectAllTools(e)}},{key:"enabledCallback",value:function(e){this._deselectAllTools(e)}},{key:"passiveCallback",value:function(e){this._deselectAllTools(e)}},{key:"disabledCallback",value:function(e){this._deselectAllTools(e)}},{key:"_selectFreehandTool",value:function(e){var t=this.configuration,n=e.element,a=this._getClosestFreehandToolOnElement(n,e);void 0!==a&&(t.currentTool=a,wt(n))}},{key:"_activateFreehandTool",value:function(e,t){var n=O(e,this.referencedToolName).data;this.configuration.currentTool=t;for(var a=0;aa||(this._pushOneHandle(i,r),void 0===o.first?(o.first=i,o.last=i):o.last=i)}return o}},{key:"_pushOneHandle",value:function(e,t){var n=this._sculptData,a=n.points,o=n.mousePoint,i=n.toolSize,r=n.image,s=a[e],l=(s.x-o.x)/t,c=(s.y-o.y)/t,u={x:o.x+i*l,y:o.y+i*c};ma(u,r),s.x=u.x,s.y=u.y;var d=this.constructor._getPreviousHandleIndex(e,a.length);a[d].lines.pop(),a[d].lines.push(s)}},{key:"_insertNewHandles",value:function(e){for(var t=this._findNewHandleIndicies(e),n=0,a=0;aa&&n.push(e)}},{key:"_insertHandleRadially",value:function(e){var t=this._sculptData.points,n=e-1,a=this.constructor._getNextHandleIndexBeforeInsert(e,t.length),o=this._getInsertPosition(e,n,a),i=new Gs(o);t.splice(e,0,i),t[n].lines.pop(),t[n].lines.push(t[e]),wr.addLine(t,e)}},{key:"_consolidateHandles",value:function(){if(!(this._sculptData.points.length<=3)){var e=this._findCloseHandlePairs();this._mergeCloseHandles(e)}}},{key:"_findCloseHandlePairs",value:function(){for(var e=this._sculptData,t=e.points,n=e.minSpacing,a=[],o=t.length,i=0;i2&&void 0!==arguments[2]&&arguments[2],a=e.element,o=e.image,i=this.configuration,r=O(a,this.referencedToolName),s=r.data[i.currentTool],l=1;if(n){var c=y.cornerstone.pixelToCanvas(a,{x:0,y:0}),u=y.cornerstone.pixelToCanvas(a,{x:o.width,y:o.height}),d=(u.x-c.x)*(u.y-c.y);l=d/(o.width*o.height)}var h=s.area*l,v=Math.pow(h/Math.PI,.5);return Math.min(t,v)}},{key:"_getClosestFreehandToolOnElement",value:function(e,t){var n=Ct(e,this.referencedToolName),a=O(e,this.referencedToolName);if(a){for(var o=a.data,i=t.currentPoints.image,r={distance:1/0,toolIndex:null},s=0;s0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Magnify",supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:300,magnificationLevel:2},svgCursor:Io};return(e=u()(this,h()(t).call(this,n,a))).zoomCanvas=void 0,e.zoomElement=void 0,e.activeCallback=e._createMagnificationCanvas.bind(Ta()(e)),e.enabledCallback=e._createMagnificationCanvas.bind(Ta()(e)),e.disabledCallback=e._destroyMagnificationCanvas.bind(Ta()(e)),e.postTouchStartCallback=e._addMagnifyingGlass.bind(Ta()(e)),e.touchDragCallback=e._updateMagnifyingGlass.bind(Ta()(e)),e.touchEndCallback=e._removeMagnifyingGlass.bind(Ta()(e)),e.touchDragEndCallback=e._removeMagnifyingGlass.bind(Ta()(e)),e.postMouseDownCallback=e._addMagnifyingGlass.bind(Ta()(e)),e.mouseDragCallback=e._updateMagnifyingGlass.bind(Ta()(e)),e.mouseUpCallback=e._removeMagnifyingGlass.bind(Ta()(e)),e.mouseClickCallback=e._removeMagnifyingGlass.bind(Ta()(e)),e.newImageCallback=e._drawMagnificationTool.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_addMagnifyingGlass",value:function(e){var t=this;this._removeZoomElement(),this._drawZoomedElement(e),window.requestAnimationFrame((function(){return t._drawMagnificationTool(e)})),wt(e.detail.element),e.preventDefault(),e.stopPropagation()}},{key:"_updateMagnifyingGlass",value:function(e){this._drawMagnificationTool(e),e.preventDefault(),e.stopPropagation()}},{key:"_removeMagnifyingGlass",value:function(e){var t=e.detail.element;Et(this.element,this.svgCursor),t.querySelector(".magnifyTool").style.display="none",this._removeZoomElement()}},{key:"_drawMagnificationTool",value:function(e){var t=e.detail.element,n=t.querySelector(".magnifyTool");if(n||this._createMagnificationCanvas(t),void 0!==this.zoomCanvas){var a=t.querySelector("canvas:not(.magnifyTool)"),o=En(n),i=y.cornerstone.pixelToCanvas(e.detail.element,e.detail.currentPoints.image),r=Math.min(this.configuration.magnifySize,a.width,a.height),s=this.configuration.magnificationLevel;n.width=r,n.height=r,i.x=Math.max(i.x,.5*r/s),i.x=Math.min(i.x,a.width-.5*r/s),i.y=Math.max(i.y,.5*r/s),i.y=Math.min(i.y,a.height-.5*r/s);var l={x:i.x*s-.5*r,y:i.y*s-.5*r};l.x=Math.max(l.x,0),l.y=Math.max(l.y,0),o.drawImage(this.zoomCanvas,l.x,l.y,r,r,0,0,r,r);var c=e.detail.isTouchEvent?120:0,u={top:Math.max(i.y-.5*r-c,0),left:Math.max(i.x-.5*r,0)},d=n.getBoundingClientRect();u.top=Math.min(u.top,a.height-d.height),u.left=Math.min(u.left,a.width-d.width),n.style.top="".concat(u.top,"px"),n.style.left="".concat(u.left,"px"),n.style.display="block"}}},{key:"_drawZoomedElement",value:function(e){var t=e.detail.element,n=e.detail.enabledElement;void 0===n&&(n=y.cornerstone.getEnabledElement(t));var a=this.configuration.magnificationLevel,o=n.canvas,i=n.image;this.zoomElement||(this.zoomElement=document.createElement("div"),this.zoomElement.width=o.width*a,this.zoomElement.height=o.height*a,y.cornerstone.enable(this.zoomElement,n.options));var r=y.cornerstone.getEnabledElement(this.zoomElement),s=y.cornerstone.getViewport(n.element);this.zoomCanvas=r.canvas,this.zoomCanvas.width=o.width*a,this.zoomCanvas.height=o.height*a,r.viewport=Object.assign({},s),s.scale*=a,y.cornerstone.displayImage(this.zoomElement,i),y.cornerstone.setViewport(this.zoomElement,s)}},{key:"_removeZoomElement",value:function(){void 0!==this.zoomElement&&(y.cornerstone.disable(this.zoomElement),this.zoomElement=void 0,this.zoomCanvas=void 0)}},{key:"_createMagnificationCanvas",value:function(e){if(null===e.querySelector(".magnifyTool")){var t=document.createElement("canvas");t.classList.add("magnifyTool"),t.width=this.configuration.magnifySize,t.height=this.configuration.magnifySize,t.style.position="absolute",t.style.display="none",e.appendChild(t)}}},{key:"_destroyMagnificationCanvas",value:function(e){var t=e.querySelector(".magnifyTool");t&&e.removeChild(t)}}]),t}(ca),Zs=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Overlay",configuration:{},mixins:["enabledOrDisabledBinaryTool"]},o=Object.assign(a,n);return(e=u()(this,h()(t).call(this,o))).initialConfiguration=o,e}return g()(t,e),l()(t,[{key:"enabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"disabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"forceImageUpdate",value:function(e){y.cornerstone.getEnabledElement(e).image&&y.cornerstone.updateImage(e)}},{key:"renderToolData",value:function(e){var t=e.detail,n=t.enabledElement,a=t.image,o=t.viewport,i=t.canvasContext;if(t&&n&&a){var r=y.cornerstone.metaData.get("overlayPlaneModule",a.imageId);if(r&&r.overlays&&r.overlays.length){var s=o.displayedArea.columnPixelSpacing||1,l=o.displayedArea.rowPixelSpacing||1,c=Math.abs(o.displayedArea.brhc.x-o.displayedArea.tlhc.x)*s,u=Math.abs(o.displayedArea.brhc.y-o.displayedArea.tlhc.y)*l;r.overlays.forEach((function(e){if(!1!==e.visible){var t=document.createElement("canvas");t.width=c,t.height=u;var n=t.getContext("2d");n.fillStyle=e.fillStyle||"white","R"===e.type&&(n.fillRect(0,0,t.width,t.height),n.globalCompositeOperation="xor");for(var a=0,o=0;o0&&n.fillRect(r,o,1,1);var s=!isNaN(parseFloat(e.x))&&isFinite(e.x)?e.x:0,l=!isNaN(parseFloat(e.y))&&isFinite(e.y)?e.y:0;i.drawImage(t,s,l)}}))}}}}]),t}(ca),$s={getOrientationString:function(e){for(var t=en(e),n="",a=t.x<0?"R":"L",o=t.y<0?"A":"P",i=t.z<0?"F":"H",r=new y.cornerstoneMath.Vector3(Math.abs(t.x),Math.abs(t.y),Math.abs(t.z)),s=1e-4,l=0;l<3;l++)if(r.x>s&&r.x>r.y&&r.x>r.z)n+=a,r.x=0;else if(r.y>s&&r.y>r.x&&r.y>r.z)n+=o,r.y=0;else if(r.z>s&&r.z>r.x&&r.z>r.y)n+=i,r.z=0;else if(r.x>s&&r.y>s&&r.x===r.y)n+=a+o,r.x=0,r.y=0;else if(r.x>s&&r.z>s&&r.x===r.z)n+=a+i,r.x=0,r.z=0;else{if(!(r.y>s&&r.z>s&&r.y===r.z))break;n+=o+i,r.y=0,r.z=0}return n},invertOrientationString:function(e){var t=e.replace("H","f");return t=(t=(t=(t=(t=(t=t.replace("F","h")).replace("R","l")).replace("L","r")).replace("A","p")).replace("P","a")).toUpperCase()}},Js=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"OrientationMarkers",configuration:{drawAllMarkers:!0},mixins:["enabledOrDisabledBinaryTool"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"enabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"disabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"forceImageUpdate",value:function(e){var t=y.cornerstone;t.getEnabledElement(e).image&&t.updateImage(e)}},{key:"renderToolData",value:function(e){var t=e.detail,n=En(t.canvasContext.canvas),a=t.element,o=tl(a);if(o){var i=nl(a,o),r=un.getToolColor(),s={top:Tn(n,o.top,0),left:Tn(n,o.left,0),right:Tn(n,o.right,0),bottom:Tn(n,o.bottom,0),height:Tn(n,"M",0)};Qs(n,o,i,s,r),this.configuration.drawAllMarkers&&el(n,o,i,s,r)}}}]),t}(ca),Qs=function(e,t,n,a,o){bn(e,t.top,n.top.x-a.top/2,n.top.y,o),bn(e,t.left,n.left.x-a.left/2,n.left.y,o)},el=function(e,t,n,a,o){bn(e,t.right,n.right.x-a.right,n.right.y,o),bn(e,t.bottom,n.bottom.x-a.bottom/2,n.bottom.y-a.height,o)},tl=function(e){var t=y.cornerstone,n=t.getEnabledElement(e),a=t.metaData.get("imagePlaneModule",n.image.imageId);if(a&&a.rowCosines&&a.columnCosines){var o=$s.getOrientationString(a.rowCosines),i=$s.getOrientationString(a.columnCosines),r=$s.invertOrientationString(o);return{top:$s.invertOrientationString(i),bottom:i,left:r,right:o}}},nl=function(e){var t=y.cornerstone.getEnabledElement(e);return{top:y.cornerstone.pixelToCanvas(e,{x:t.image.width/2,y:5}),bottom:y.cornerstone.pixelToCanvas(e,{x:t.image.width/2,y:t.image.height-15}),left:y.cornerstone.pixelToCanvas(e,{x:5,y:t.image.height/2}),right:y.cornerstone.pixelToCanvas(e,{x:t.image.width-10,y:t.image.height/2})}},al=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"PanMultiTouch",supportedInteractionTypes:["MultiTouch"],configuration:{touchPointers:2}};return(e=u()(this,h()(t).call(this,n,a))).multiTouchDragCallback=e._dragCallback.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_dragCallback",value:function(e){var t=e.detail,n=t.element,a=t.viewport;if(t.numPointers===this.configuration.touchPointers){var o=this._getTranslation(t);this._applyTranslation(a,o),y.cornerstone.setViewport(n,a)}}},{key:"_getTranslation",value:function(e){var t=e.viewport,n=e.image,a=e.deltaPoints,o=t.scale,i=t.scale;return n.rowPixelSpacing0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"Pan",supportedInteractionTypes:["Mouse","Touch"],svgCursor:So};return(e=u()(this,h()(t).call(this,n,a))).touchDragCallback=e._dragCallback.bind(Ta()(e)),e.mouseDragCallback=e._dragCallback.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_dragCallback",value:function(e){var t=e.detail,n=t.element,a=t.viewport,o=this._getTranslation(t);this._applyTranslation(a,o),y.cornerstone.setViewport(n,a)}},{key:"_getTranslation",value:function(e){var t=e.viewport,n=e.image,a=e.deltaPoints,o=t.scale,i=t.scale;return n.rowPixelSpacing0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"ReferenceLines",mixins:["enabledOrDisabledBinaryTool"],configuration:{renderer:cl}};return(e=u()(this,h()(t).call(this,n,a))).renderer=null,e.synchronizationContext=null,e}var n;return g()(t,e),l()(t,[{key:"enabledCallback",value:(n=ll()(rl.a.mark((function e(t){var n,a,o,i=arguments;return rl.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=i.length>1&&void 0!==i[1]?i[1]:{},a=n.synchronizationContext,o=this.configuration.renderer,e.next=4,dl(t);case 4:if(e.sent&&o&&a){e.next=8;break}return hl.warn("Unable to enable ".concat(this.name,". Exiting enable callback. Tool will be enabled, but will not render.")),e.abrupt("return");case 8:this.renderer=o,this.synchronizationContext=a,this.forceImageUpdate(t);case 11:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"disabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"forceImageUpdate",value:function(e){y.cornerstone.getEnabledElement(e).image&&y.cornerstone.updateImage(e)}},{key:"renderToolData",value:function(e){var t=this,n=e.detail;if(this.renderer&&this.synchronizationContext){var a=this.synchronizationContext.getSourceElements(),o=En(n.canvasContext.canvas);y.cornerstone.setToPixelCoordinateSystem(n.enabledElement,o),a.forEach((function(a){a!==e.currentTarget&&t.renderer(o,n,e.currentTarget,a)}))}}}]),t}(ca),gl=function(e,t,n){var a=Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)),o=Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2)),i=Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2));return{angle:180*Math.acos((Math.pow(a,2)+Math.pow(o,2)-Math.pow(i,2))/(2*a*o))/Math.PI,direction:(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x)}},fl=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"Rotate",strategies:{default:ml,horizontal:pl,vertical:yl},defaultStrategy:"default",supportedInteractionTypes:["Mouse","Touch"],configuration:{roundAngles:!1,flipHorizontal:!1,flipVertical:!1},svgCursor:ko};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"touchDragCallback",value:function(e){this.dragCallback(e)}},{key:"mouseDragCallback",value:function(e){this.dragCallback(e)}},{key:"postMouseDownCallback",value:function(e){this.initialRotation=e.detail.viewport.rotation}},{key:"dragCallback",value:function(e){e.detail.viewport.initialRotation=this.initialRotation,this.applyActiveStrategy(e),y.cornerstone.setViewport(e.detail.element,e.detail.viewport)}}]),t}(ca);function ml(e){var t=this.configuration.roundAngles,n=e.detail,a=n.element,o=n.viewport,i=o.initialRotation,r=a.getBoundingClientRect(a),s=a.clientWidth,l=a.clientHeight,c={x:n.startPoints.client.x,y:n.startPoints.client.y},u=o.scale,d=o.translation,h={x:r.left+s/2+d.x*u,y:r.top+l/2+d.y*u},v={x:n.currentPoints.client.x,y:n.currentPoints.client.y},g=gl(h,c,v);t&&(g.angle=Math.ceil(g.angle)),g.direction<0&&(g.angle=-g.angle),o.rotation=i+g.angle}function pl(e){var t=this.configuration,n=t.roundAngles,a=t.flipHorizontal,o=e.detail,i=o.viewport,r=o.deltaPoints.page.x/i.scale;n&&(r=Math[r>0?"ceil":"floor"](r)),a&&(r=-r),i.rotation+=r}function yl(e){var t=this.configuration,n=t.roundAngles,a=t.flipVertical,o=e.detail,i=o.viewport,r=o.deltaPoints.page.y/i.scale;n&&(r=Math[r>0?"ceil":"floor"](r)),a&&(r=-r),i.rotation+=r}var xl,Tl=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"RotateTouch",supportedInteractionTypes:["TouchRotate"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"touchRotateCallback",value:function(e){var t=e.detail,n=t.element,a=t.viewport,o=t.rotation;a.rotation+=o,y.cornerstone.setViewport(n,a)}}]),t}(ca),bl=N("tools:ScaleOverlayTool"),Cl=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"ScaleOverlay",configuration:{minorTickLength:12.5,majorTickLength:25},mixins:["enabledOrDisabledBinaryTool"]};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"enabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"disabledCallback",value:function(e){this.forceImageUpdate(e)}},{key:"forceImageUpdate",value:function(e){y.cornerstone.getEnabledElement(e).image&&y.cornerstone.updateImage(e)}},{key:"renderToolData",value:function(e){var t=e.detail,n=En(t.canvasContext.canvas),a=t.image,o=t.viewport,i=t.element,r=a.rowPixelSpacing,s=a.columnPixelSpacing,l=y.cornerstone.metaData.get("imagePlaneModule",a.imageId);if(l&&(r=l.rowPixelSpacing||l.rowImagePixelSpacing,s=l.columnPixelSpacing||l.colImagePixelSpacing),r&&s){var c={width:n.canvas.width,height:n.canvas.height},u=10/r*o.scale,d=10/s*o.scale,h=Ml(c,.25,.05),v=Ml(c,.05,.15);if(c.width&&c.height&&h&&v){var g=un.getToolColor(),f=Xt.getToolWidth(),m=Object.assign({},{hscaleBounds:h,vscaleBounds:v,verticalMinorTick:u,horizontalMinorTick:d,verticalLine:{start:{x:v.bottomRight.x,y:v.topLeft.y},end:{x:v.bottomRight.x,y:v.bottomRight.y}},horizontalLine:{start:{x:h.topLeft.x,y:h.bottomRight.y},end:{x:h.bottomRight.x,y:h.bottomRight.y}},color:g,lineWidth:f},this.configuration);Wt(n,(function(e){In(e,m),Zt(e,i,m.verticalLine.start,m.verticalLine.end,{color:m.color,lineWidth:m.lineWidth},"canvas"),El(e,i,m),Zt(e,i,m.horizontalLine.start,m.horizontalLine.end,{color:m.color,lineWidth:m.lineWidth},"canvas"),wl(e,i,m)}))}}else bl.warn("unable to define rowPixelSpacing or colPixelSpacing from data on ".concat(this.name,"'s renderToolData"))}}]),t}(ca),Ml=function(e,t,n){var a=t*Math.min(1e3,e.width),o=n*Math.min(1e3,e.height),i={left:a,top:o,width:e.width-2*a,height:e.height-2*o};return{topLeft:{x:i.left,y:i.top},bottomRight:{x:i.left+i.width,y:i.top+i.height}}},El=function(e,t,n){for(var a=0;n.verticalLine.start.y+a*n.verticalMinorTick<=n.vscaleBounds.bottomRight.y;){var o=n.color,i=n.lineWidth,r={x:n.verticalLine.start.x,y:n.verticalLine.start.y+a*n.verticalMinorTick},s={x:0,y:n.verticalLine.start.y+a*n.verticalMinorTick};s.x=a%5==0?n.verticalLine.start.x-n.majorTickLength:n.verticalLine.start.x-n.minorTickLength,Zt(e,t,r,s,{color:o,lineWidth:i},"canvas"),a++}},wl=function(e,t,n){for(var a=0;n.horizontalLine.start.x+a*n.horizontalMinorTick<=n.hscaleBounds.bottomRight.x;){var o=n.color,i=n.lineWidth,r={x:n.horizontalLine.start.x+a*n.horizontalMinorTick,y:n.horizontalLine.start.y},s={x:n.horizontalLine.start.x+a*n.horizontalMinorTick,y:0};s.y=a%5==0?n.horizontalLine.start.y-n.majorTickLength:n.horizontalLine.start.y-n.minorTickLength,Zt(e,t,r,s,{color:o,lineWidth:i},"canvas"),a++}},Il={default:6,IE:{9:6,10:8,default:8},Firefox:{default:6},Opera:{10:8,11:6,12:6,default:6},Chrome:{default:6},Safari:{default:6}};function Sl(){var e,t=navigator.userAgent,n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(n[1])?(e=/\brv[ :]+(\d+)/g.exec(t)||[],"IE ".concat(e[1]||"")):"Chrome"===n[1]&&null!==(e=t.match(/\b(OPR|Edge)\/(\d+)/))?e.slice(1).join(" ").replace("OPR","Opera"):(n=n[2]?[n[1],n[2]]:[navigator.appName,navigator.appVersion,"-?"],null!==(e=t.match(/version\/(\d+)/i))&&n.splice(1,1,e[1]),n.join(" "))}function kl(){return xl||_l()}function _l(){var e=Sl().split(" "),t=e[0],n=e[1],a=Il[t];return a?a[n]?a[n]:a.default:Il.default}var Pl={interaction:[],thumbnail:[],prefetch:[]},Dl={interaction:0,thumbnail:0,prefetch:0},Ol={interaction:6,thumbnail:6,prefetch:5},Ll=!1;function Al(){Ll&&setTimeout((function(){Rl()}),20)}function Hl(e){var t=y.cornerstone,n=e.type;Dl[n]++,Ll=!0;var a=e.imageId,o=e.doneCallback,i=e.failCallback,r=t.imageCache.getImageLoadObject(a);if(r)r.promise.then((function(e){Dl[n]--,o(e),Al()}),(function(e){Dl[n]--,i(e),Al()}));else{var s=function(e){return"prefetch"===e.type?-5:"interactive"===e.type?0:"thumbnail"===e.type?5:void 0}(e);(!0===e.preventCache?t.loadImage(a,{priority:s,type:e.type}):t.loadAndCacheImage(a,{priority:s,type:e.type})).then((function(e){Dl[n]--,o(e),Al()}),(function(e){Dl[n]--,i(e),Al()}))}}function Rl(){var e=kl();Ol={interaction:Math.max(e,1),thumbnail:Math.max(e-2,1),prefetch:Math.max(e-1,1)};for(var t=e-(Dl.interaction+Dl.thumbnail+Dl.prefetch),n=0;n1){var i=O(e,"stackRenderer");i&&i.data&&i.data.length&&(a=i.data[0])}var r=n.data[0];t<0&&(t+=r.imageIds.length);var s=Rs.getStartLoadHandler(e),l=Rs.getEndLoadHandler(e),c=Rs.getErrorLoadingHandler(e);if(t!==r.currentImageIdIndex){s&&s(e);var u={newImageIdIndex:t,direction:t-r.currentImageIdIndex};r.currentImageIdIndex=t;var d=r.imageIds[t];(Boolean(r.preventCache)?o.loadImage(d):o.loadAndCacheImage(d)).then((function(i){if(r.currentImageIdIndex===t){try{o.getEnabledElement(e)}catch(e){return}a?(a.currentImageIdIndex=t,a.render(e,n.data)):o.displayImage(e,i),l&&l(e,i)}}),(function(n){var a=r.imageIds[t];c&&c(e,a,n)})),Nl.startGrabbing(),C(e,b.STACK_SCROLL,u)}}},Bl=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=O(e,"stack");if(o&&o.data&&o.data.length){var i=o.data[0];i.pending||(i.pending=[]);var r=i.currentImageIdIndex+t;if(n){var s=i.imageIds.length;r%=s}else r=pa(r,0,i.imageIds.length-1);if(a)Fl(e,r);else{var l={index:r};i.pending.push(l),Vl(i,l,e)}}};function Vl(e,t,n){if(e.pending[0]===t){if(e.currentImageIdIndex===t.index)return e.pending.splice(e.pending.indexOf(t),1),void(e.pending.length>0&&Vl(e,e.pending[0],n));n.addEventListener(y.cornerstone.EVENTS.NEW_IMAGE,(function a(o){e.imageIds.indexOf(o.detail.image.imageId)===t.index&&(e.pending.splice(e.pending.indexOf(t),1),n.removeEventListener(y.cornerstone.EVENTS.NEW_IMAGE,a),e.pending.length>0&&Vl(e,e.pending[0],n))})),Fl(n,t.index)}}var ql=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"StackScrollMouseWheel",supportedInteractionTypes:["MouseWheel"],configuration:{loop:!1,allowSkipping:!0,invert:!1}};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"mouseWheelCallback",value:function(e){var t=e.detail,n=t.direction,a=t.element,o=this.configuration,i=o.loop,r=o.allowSkipping,s=o.invert;Bl(a,s?-n:n,i,r)}}]),t}(ca),zl=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"StackScrollMultiTouch",supportedInteractionTypes:["MultiTouch"],configuration:{loop:!1,allowSkipping:!0,touchPointers:3}};return(e=u()(this,h()(t).call(this,n,a))).multiTouchDragCallback=e._dragCallback.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_dragCallback",value:function(e){var t=e.detail;if(t.numPointers===this.configuration.touchPointers){var n=t.element,a=t.deltaPoints,o=this.configuration,i=o.loop,r=o.allowSkipping,s=Ns(this.name,n),l=this._getPixelPerImage(n),c=this._getDeltaY(n,a.page.y);if(!l)return;if(Math.abs(c)>=l){var u=Math.round(c/l);Bl(n,u,i,r),s.deltaY=c%l}else s.deltaY=c;Fs(this.name,n,s)}}},{key:"_getDeltaY",value:function(e,t){return(Ns(this.name,e).deltaY||0)+t}},{key:"_getPixelPerImage",value:function(e){var t=O(e,"stack");if(t&&t.data&&t.data.length){var n=t.data[0];return this.configuration.stackScrollSpeed||Math.max(2,e.offsetHeight/Math.max(n.imageIds.length,8))}}}]),t}(ca),jl=function(e){function t(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"StackScroll",supportedInteractionTypes:["Mouse","Touch"],configuration:{loop:!1,allowSkipping:!0},svgCursor:_o};return(e=u()(this,h()(t).call(this,n,a))).mouseDragCallback=e._dragCallback.bind(Ta()(e)),e.touchDragCallback=e._dragCallback.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"_dragCallback",value:function(e){var t=e.detail,n=t.element,a=t.deltaPoints,o=this.configuration,i=o.loop,r=o.allowSkipping,s=Ns(this.name,n),l=this._getPixelPerImage(n),c=this._getDeltaY(n,a.page.y);if(l){if(Math.abs(c)>=l){var u=Math.round(c/l);Bl(n,u,i,r),s.deltaY=c%l}else s.deltaY=c;Fs(this.name,n,s)}}},{key:"_getDeltaY",value:function(e,t){return(Ns(this.name,e).deltaY||0)+t}},{key:"_getPixelPerImage",value:function(e){var t=O(e,"stack");if(t&&t.data&&t.data.length){var n=t.data[0];return this.configuration.stackScrollSpeed||Math.max(2,e.offsetHeight/Math.max(n.imageIds.length,8))}}}]),t}(ca),Wl=function(e,t,n,a,o){if(!e)throw new Error("getLuminance: parameter element must not be undefined");t=Math.round(t),n=Math.round(n);var i,r,s,l=y.cornerstone.getEnabledElement(e).image,c=[],u=0,d=l.getPixelData();if(l.color)for(r=0;r0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var a={name:"WwwcRegion",supportedInteractionTypes:["Mouse","Touch"],configuration:{minWindowWidth:10},svgCursor:Po};return(e=u()(this,h()(t).call(this,n,a)))._resetHandles(),e.postTouchStartCallback=e._startOutliningRegion.bind(Ta()(e)),e.touchDragCallback=e._setHandlesAndUpdate.bind(Ta()(e)),e.touchEndCallback=e._applyStrategy.bind(Ta()(e)),e.postMouseDownCallback=e._startOutliningRegion.bind(Ta()(e)),e.mouseClickCallback=e._startOutliningRegion.bind(Ta()(e)),e.mouseDragCallback=e._setHandlesAndUpdate.bind(Ta()(e)),e.mouseMoveCallback=e._setHandlesAndUpdate.bind(Ta()(e)),e.mouseUpCallback=e._applyStrategy.bind(Ta()(e)),e}return g()(t,e),l()(t,[{key:"renderToolData",value:function(e){var t=this,n=e.detail,a=n.element,o=un.getColorIfActive({active:!0}),i=En(n.canvasContext.canvas);Wt(i,(function(e){Mn(e,a,t.handles.start,t.handles.end,{color:o})}))}},{key:"_startOutliningRegion",value:function(e){var t=e.detail.element,n=e.detail.currentPoints.image;return Yl(this.handles.start)?this.handles.start=n:(this.handles.end=n,this._applyStrategy(e)),y.cornerstone.updateImage(t),!0}},{key:"_setHandlesAndUpdate",value:function(e){var t=e.detail.element,n=e.detail.currentPoints.image;this.handles.end=n,y.cornerstone.updateImage(t)}},{key:"_applyStrategy",value:function(e){Yl(this.handles.start)||Yl(this.handles.end)||(e.detail.handles=this.handles,Xl(e,this.configuration),this._resetHandles())}},{key:"_resetHandles",value:function(){this.handles={start:{},end:{}}}}]),t}(ca),Yl=function(e){return 0===Object.keys(e).length&&e.constructor===Object},Xl=function(e,t){var n=e.detail,a=n.image,o=n.element,i=e.detail.handles,r=i.start,s=i.end,l=Math.min(r.x,s.x),c=Math.min(r.y,s.y),u=Math.abs(r.x-s.x),d=Math.abs(r.y-s.y);l=pa(l,0,a.width),c=pa(c,0,a.height),u=Math.floor(Math.min(u,Math.abs(a.width-l))),d=Math.floor(Math.min(d,Math.abs(a.height-c)));var h=Wl(o,l,c,u,d),v=Kl(h,a.minPixelValue,a.maxPixelValue),g=n.viewport;void 0===t.minWindowWidth&&(t.minWindowWidth=10),g.voi.windowWidth=Math.max(Math.abs(v.max-v.min),t.minWindowWidth),g.voi.windowCenter=v.mean,g.voiLUT=void 0,y.cornerstone.setViewport(o,g),y.cornerstone.updateImage(o)},Kl=function(e,t,n){var a=e.length,o=n,i=t,r=0;if(a<2)return{min:o,max:i,mean:(t+n)/2};for(var s=0;s0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"Wwwc",strategies:{basicLevelingStrategy:$l},supportedInteractionTypes:["Mouse","Touch"],configuration:{orientation:0},svgCursor:Do};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"mouseDragCallback",value:function(e){this.applyActiveStrategy(e),y.cornerstone.setViewport(e.detail.element,e.detail.viewport)}},{key:"touchDragCallback",value:function(e){e.stopImmediatePropagation(),this.applyActiveStrategy(e),y.cornerstone.setViewport(e.detail.element,e.detail.viewport)}}]),t}(ca);function $l(e){var t=this.configuration.orientation,n=e.detail,a=(n.image.maxPixelValue*n.image.slope+n.image.intercept-(n.image.minPixelValue*n.image.slope+n.image.intercept))/1024,o=n.deltaPoints.page.x*a,i=n.deltaPoints.page.y*a;0===t?(n.viewport.voi.windowWidth+=o,n.viewport.voi.windowCenter+=i):(n.viewport.voi.windowWidth+=i,n.viewport.voi.windowCenter+=o),n.viewport.voiLUT=void 0}var Jl=function(e,t,n){var a=n.maxScale,o=n.minScale,i=Math.log(e.scale)/Math.log(1.7)+t,r=Math.pow(1.7,i);return e.scale=a&&r>a?a:o&&r0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"ZoomMouseWheel",supportedInteractionTypes:["MouseWheel"],configuration:{minScale:.25,maxScale:20,invert:!1}};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"mouseWheelCallback",value:function(e){var t=e.detail,n=t.element,a=t.viewport,o=t.spinY,i=this.configuration,r=i.invert,s=i.maxScale,l=i.minScale,c=Jl(a,r?o/4:-o/4,{maxScale:s,minScale:l});y.cornerstone.setViewport(n,c)}}]),t}(ca),tc=Ql.correctShift,nc=Ql.changeViewportScale,ac=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"Zoom",strategies:{default:ic,translate:rc,zoomToCenter:sc},defaultStrategy:"default",supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,preventZoomOutsideImage:!1,minScale:.25,maxScale:20},svgCursor:Oo};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"touchDragCallback",value:function(e){oc.call(this,e)}},{key:"mouseDragCallback",value:function(e){oc.call(this,e)}}]),t}(ca),oc=function(e){if(!e.detail.deltaPoints.page.y)return!1;this.applyActiveStrategy(e,this.configuration),y.cornerstone.setViewport(e.detail.element,e.detail.viewport)};function ic(e){var t=this.configuration,n=t.invert,a=t.maxScale,o=t.minScale,i=e.detail.deltaPoints.page.y,r=n?-i/100:i/100,s=e.detail,l=s.element,c=s.viewport,u=[e.detail.startPoints.page.x,e.detail.startPoints.page.y,e.detail.startPoints.image.x,e.detail.startPoints.image.y],d=u[0],h=u[1],v=u[2],g=u[3],f=nc(c,r,{maxScale:a,minScale:o});y.cornerstone.setViewport(l,f);var m=y.cornerstone.pageToPixel(l,d,h),p={x:v-m.x,y:g-m.y};p=tc(p,f),c.translation.x-=p.x,c.translation.y-=p.y}function rc(e){var t=this.configuration,n=t.invert,a=t.preventZoomOutsideImage,o=t.maxScale,i=t.minScale,r=e.detail.deltaPoints.page.y,s=n?-r/100:r/100,l=e.detail.image,c=e.detail.viewport,u=[e.detail.startPoints.image.x,e.detail.startPoints.image.y],d=u[0],h=u[1],v=nc(c,s,{maxScale:o,minScale:i}),g={x:0,y:0};if(s<0)v.scale<3&&(Math.abs(v.translation.x)<.01?v.translation.x=0:g.x=v.translation.x/8,Math.abs(v.translation.y)<.01?v.translation.y=0:g.y=v.translation.y/8);else{a&&ma(e.detail.startPoints.image,l);var f={x:l.width/2-d,y:l.height/2-h};f=tc(f,v);var m={x:v.translation.x-f.x,y:v.translation.y-f.y};Math.abs(m.x)<.01?v.translation.x=f.x:g.x=m.x/8,Math.abs(m.y)<.01?v.translation.y=f.y:g.y=m.y/8}v.translation.x-=g.x,v.translation.y-=g.y}function sc(e){var t=this.configuration,n=t.invert,a=t.maxScale,o=t.minScale,i=e.detail.deltaPoints.page.y,r=n?-i/100:i/100,s=e.detail.viewport;nc(s,r,{maxScale:a,minScale:o})}var lc=Ql.correctShift,cc=function(e){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r()(this,t);var n={name:"ZoomTouchPinch",supportedInteractionTypes:["TouchPinch"],configuration:{minScale:.25,maxScale:20}};return u()(this,h()(t).call(this,e,n))}return g()(t,e),l()(t,[{key:"touchPinchCallback",value:function(e){var t=e.detail,n=t.element,a=t.viewport,o=t.scaleChange,i=[e.detail.startPoints.page.x,e.detail.startPoints.page.y,e.detail.startPoints.image.x,e.detail.startPoints.image.y],r=i[0],s=i[1],l=i[2],c=i[3],u=this.configuration,d=u.maxScale,h=u.minScale;a.scale+=o*a.scale,d&&a.scale>d?a.scale=d:h&&a.scale0&&void 0!==arguments[0]?arguments[0]:{},t=e.x,n=e.y;return{x:t,y:n}}var hc,vc=N("eventListeners:mouseEventListeners"),gc=!0;function fc(e){if("number"==typeof e.buttons)return e.buttons;switch(e.which){case 0:return 0;case 1:return 1;case 2:return 4;case 3:return 2}return 0}function mc(){gc=!1}function pc(e){var t=e.currentTarget,n=y.cornerstone.getEnabledElement(t);if(n.image){var a=b.MOUSE_DOUBLE_CLICK,o={page:y.cornerstoneMath.point.pageToPoint(e),image:y.cornerstone.pageToPixel(t,e.pageX,e.pageY),client:{x:e.clientX,y:e.clientY}};o.canvas=y.cornerstone.pixelToCanvas(t,o.image);var i=uc(o);vc.log("double-click: %o",fc(e)),C(t,a,{event:e,buttons:fc(e),viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:o,lastPoints:i,currentPoints:o,deltaPoints:{x:0,y:0},type:a})}}function yc(e){var t=e.currentTarget,n=y.cornerstone.getEnabledElement(t);if(n.image){hc=setTimeout(mc,200),t.removeEventListener("mousemove",xc);var a={page:y.cornerstoneMath.point.pageToPoint(e),image:y.cornerstone.pageToPixel(t,e.pageX,e.pageY),client:{x:e.clientX,y:e.clientY}};a.canvas=y.cornerstone.pixelToCanvas(t,a.image);var o=uc(a),i={event:e,buttons:fc(e),viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:a,lastPoints:o,currentPoints:a,deltaPoints:{x:0,y:0},type:b.MOUSE_DOWN};C(i.element,b.MOUSE_DOWN,i)&&(i.type=b.MOUSE_DOWN_ACTIVATE,C(i.element,b.MOUSE_DOWN_ACTIVATE,i)),document.addEventListener("mousemove",r),document.addEventListener("mouseup",(function e(i){clearTimeout(hc);var s=b.MOUSE_UP;gc&&(s=b.MOUSE_CLICK);var l={page:y.cornerstoneMath.point.pageToPoint(i),image:y.cornerstone.pageToPixel(t,i.pageX,i.pageY),client:{x:i.clientX,y:i.clientY}};l.canvas=y.cornerstone.pixelToCanvas(t,l.image);var c={page:y.cornerstoneMath.point.subtract(l.page,o.page),image:y.cornerstoneMath.point.subtract(l.image,o.image),client:y.cornerstoneMath.point.subtract(l.client,o.client),canvas:y.cornerstoneMath.point.subtract(l.canvas,o.canvas)};vc.log("mouseup: %o",fc(i));var u={event:i,buttons:fc(i),viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:a,lastPoints:o,currentPoints:l,deltaPoints:c,type:s};C(u.element,s,u),document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",e),t.addEventListener("mousemove",xc),gc=!0}))}function r(e){var i=b.MOUSE_DRAG,r={page:y.cornerstoneMath.point.pageToPoint(e),image:y.cornerstone.pageToPixel(t,e.pageX,e.pageY),client:{x:e.clientX,y:e.clientY}};r.canvas=y.cornerstone.pixelToCanvas(t,r.image);var s={page:y.cornerstoneMath.point.subtract(r.page,o.page),image:y.cornerstoneMath.point.subtract(r.image,o.image),client:y.cornerstoneMath.point.subtract(r.client,o.client),canvas:y.cornerstoneMath.point.subtract(r.canvas,o.canvas)};vc.log("mousemove: %o",fc(e));var l={buttons:fc(e),viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:a,lastPoints:o,currentPoints:r,deltaPoints:s,type:i,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey};C(l.element,i,l),o=uc(r)}}function xc(e){var t=e.currentTarget,n=y.cornerstone.getEnabledElement(t);if(n.image){var a=b.MOUSE_MOVE,o={page:y.cornerstoneMath.point.pageToPoint(e),image:y.cornerstone.pageToPixel(t,e.pageX,e.pageY),client:{x:e.clientX,y:e.clientY}};o.canvas=y.cornerstone.pixelToCanvas(t,o.image);var i=uc(o),r={page:y.cornerstoneMath.point.pageToPoint(e),image:y.cornerstone.pageToPixel(t,e.pageX,e.pageY),client:{x:e.clientX,y:e.clientY}};r.canvas=y.cornerstone.pixelToCanvas(t,r.image);var s={page:y.cornerstoneMath.point.subtract(r.page,i.page),image:y.cornerstoneMath.point.subtract(r.image,i.image),client:y.cornerstoneMath.point.subtract(r.client,i.client),canvas:y.cornerstoneMath.point.subtract(r.canvas,i.canvas)};C(t,a,{viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:o,lastPoints:i,currentPoints:r,deltaPoints:s,type:a}),i=uc(r)}}function Tc(e){e.removeEventListener("mousedown",yc),e.removeEventListener("mousemove",xc),e.removeEventListener("dblclick",pc)}var bc={enable:function(e){Tc(e),e.addEventListener("mousedown",yc),e.addEventListener("mousemove",xc),e.addEventListener("dblclick",pc)},disable:Tc};function Cc(e){var t=e.currentTarget,n=y.cornerstone.getEnabledElement(t);if(n.image&&!(e.deltaY>-1&&e.deltaY<1)){e.preventDefault();var a=e.pageX,o=e.pageY,i=y.cornerstone.pageToPixel(t,a,o),r=function(e){var t=0,n=0,a=0,o=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),a=10*t,o=10*n,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(a=e.deltaX),(a||o)&&e.deltaMode&&(1===e.deltaMode?(a*=40,o*=40):(a*=800,o*=800)),a&&!t&&(t=a<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:a,pixelY:o}}(e),s=r.spinX,l=r.spinY,c=r.pixelX,u=r.pixelY,d=l<0?-1:1,h={element:t,viewport:y.cornerstone.getViewport(t),detail:e,image:n.image,direction:d,spinX:s,spinY:l,pixelX:c,pixelY:u,pageX:a,pageY:o,imageX:i.x,imageY:i.y};C(t,b.MOUSE_WHEEL,h)}}function Mc(e){e.removeEventListener("wheel",Cc,{passive:!1})}var Ec,wc,Ic={enable:function(e){Mc(e),e.addEventListener("wheel",Cc,{passive:!1})},disable:Mc},Sc=0,kc=1;function _c(e,t){var n=Date.now();if(e!==Ec){if(n-wc<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;Ec=e}wc=n}var Pc=_c.bind(null,Sc),Dc=_c.bind(null,kc);function Oc(e,t,n){var a=n?Pc:Dc;t.forEach((function(t){e.addEventListener(t,a,{passive:!1})}))}function Lc(e,t,n){var a=n?Pc:Dc;t.forEach((function(t){e.removeEventListener(t,a)}))}var Ac=["mousedown","mouseup"],Hc=["touchstart","touchend"];function Rc(e){Lc(e,Ac,Sc),Lc(e,Hc,kc)}var Uc,Nc,Fc,Bc,Vc,qc,zc,jc,Wc,Gc={enable:function(e){Rc(e),Oc(e,Ac,Sc),Oc(e,Hc,kc)},disable:Rc},Yc=1,Xc=0,Kc=!1,Zc=!1;function $c(e){var t=e.currentTarget||e.srcEvent.currentTarget,n=y.cornerstone.getEnabledElement(t);if(n.image){var a,o,i,r;switch(e.preventDefault(),(e.pointers&&e.pointers.length>1||e.touches&&e.touches.length>1)&&(Zc=!1,clearTimeout(zc)),e.type){case"tap":Zc=!1,clearTimeout(zc),(Nc={page:y.cornerstoneMath.point.pageToPoint(e.pointers[0]),image:y.cornerstone.pageToPixel(t,e.pointers[0].pageX,e.pointers[0].pageY),client:{x:e.pointers[0].clientX,y:e.pointers[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Nc.image),a=b.TAP,Vc={event:e,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,currentPoints:Nc,type:a,isTouchEvent:!0},C(t,a,Vc);break;case"doubletap":Zc=!1,clearTimeout(zc),(Nc={page:y.cornerstoneMath.point.pageToPoint(e.pointers[0]),image:y.cornerstone.pageToPixel(t,e.pointers[0].pageX,e.pointers[0].pageY),client:{x:e.pointers[0].clientX,y:e.pointers[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Nc.image),a=b.DOUBLE_TAP,Vc={event:e,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,currentPoints:Nc,type:a,isTouchEvent:!0},C(t,a,Vc);break;case"pinchstart":Zc=!1,clearTimeout(zc),Yc=1;break;case"pinchmove":if(Zc=!1,clearTimeout(zc),!0===Kc){Yc=e.scale,Kc=!1;break}o=(e.scale-Yc)/Yc,(Uc={page:e.center,image:y.cornerstone.pageToPixel(t,e.center.x,e.center.y)}).canvas=y.cornerstone.pixelToCanvas(t,Uc.image),a=b.TOUCH_PINCH,Vc={event:e,startPoints:Uc,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,direction:e.scale<1?1:-1,scaleChange:o,type:a,isTouchEvent:!0},C(t,a,Vc),Yc=e.scale;break;case"touchstart":Yc=1,clearTimeout(zc),clearTimeout(qc),qc=setTimeout((function(){(Uc={page:y.cornerstoneMath.point.pageToPoint(e.touches[0]),image:y.cornerstone.pageToPixel(t,e.touches[0].pageX,e.touches[0].pageY),client:{x:e.touches[0].clientX,y:e.touches[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Uc.image),a=b.TOUCH_START,e.touches.length>1&&(a=b.MULTI_TOUCH_START),Vc={event:e,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:Uc,currentPoints:Uc,type:a,isTouchEvent:!0},!0===C(t,a,Vc)&&(a=b.TOUCH_START_ACTIVE,e.touches.length>1&&(a=b.MULTI_TOUCH_START_ACTIVE),Vc.type=a,C(t,a,Vc)),Fc=uc(Uc)}),50),Zc=!0,jc=0,zc=setTimeout((function(){Zc&&((Nc={page:y.cornerstoneMath.point.pageToPoint(e.touches[0]),image:y.cornerstone.pageToPixel(t,e.touches[0].pageX,e.touches[0].pageY),client:{x:e.touches[0].clientX,y:e.touches[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Uc.image),a=b.TOUCH_PRESS,Vc={event:e,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,currentPoints:Nc,type:a,isTouchEvent:!0},C(t,a,Vc))}),700);break;case"touchend":Yc=1,Zc=!1,clearTimeout(zc),setTimeout((function(){(Uc={page:y.cornerstoneMath.point.pageToPoint(e.changedTouches[0]),image:y.cornerstone.pageToPixel(t,e.changedTouches[0].pageX,e.changedTouches[0].pageY),client:{x:e.changedTouches[0].clientX,y:e.changedTouches[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Uc.image),a=b.TOUCH_END,Vc={event:e,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:Uc,currentPoints:Uc,type:a,isTouchEvent:!0},C(t,a,Vc)}),50);break;case"panmove":i={x:e.deltaX-Wc.x,y:e.deltaY-Wc.y},Wc={x:e.deltaX,y:e.deltaY},(Nc={page:{x:Fc.page.x+i.x,y:Fc.page.y+i.y},image:y.cornerstone.pageToPixel(t,Fc.page.x+i.x,Fc.page.y+i.y),client:{x:Fc.client.x+i.x,y:Fc.client.y+i.y}}).canvas=y.cornerstone.pixelToCanvas(t,Nc.image),Bc={page:y.cornerstoneMath.point.subtract(Nc.page,Fc.page),image:y.cornerstoneMath.point.subtract(Nc.image,Fc.image),client:y.cornerstoneMath.point.subtract(Nc.client,Fc.client),canvas:y.cornerstoneMath.point.subtract(Nc.canvas,Fc.canvas)},(jc+=Math.sqrt(Bc.page.x*Bc.page.x+Bc.page.y*Bc.page.y))>5&&(Zc=!1,clearTimeout(zc)),a=b.TOUCH_DRAG,e.pointers.length>1&&(a=b.MULTI_TOUCH_DRAG),Vc={viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:Uc,lastPoints:Fc,currentPoints:Nc,deltaPoints:Bc,numPointers:e.pointers.length,type:a,isTouchEvent:!0},C(t,a,Vc),Fc=uc(Nc);break;case"panstart":Wc={x:e.deltaX,y:e.deltaY},(Nc={page:y.cornerstoneMath.point.pageToPoint(e.pointers[0]),image:y.cornerstone.pageToPixel(t,e.pointers[0].pageX,e.pointers[0].pageY),client:{x:e.pointers[0].clientX,y:e.pointers[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Nc.image),Fc=uc(Nc);break;case"panend":if(Zc=!1,clearTimeout(zc),!Fc)return!1;(Nc={page:y.cornerstoneMath.point.pageToPoint(e.pointers[0]),image:y.cornerstone.pageToPixel(t,e.pointers[0].pageX,e.pointers[0].pageY),client:{x:e.pointers[0].clientX,y:e.pointers[0].clientY}}).canvas=y.cornerstone.pixelToCanvas(t,Nc.image),Bc={page:y.cornerstoneMath.point.subtract(Nc.page,Fc.page),image:y.cornerstoneMath.point.subtract(Nc.image,Fc.image),client:y.cornerstoneMath.point.subtract(Nc.client,Fc.client),canvas:y.cornerstoneMath.point.subtract(Nc.canvas,Fc.canvas)},a=b.TOUCH_DRAG_END,Vc={event:e.srcEvent,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,startPoints:Uc,lastPoints:Fc,currentPoints:Nc,deltaPoints:Bc,type:a,isTouchEvent:!0},C(t,a,Vc),2===e.pointers.length-e.changedPointers.length&&(Kc=!0);break;case"rotatemove":Zc=!1,clearTimeout(zc),r=e.rotation-Xc,Xc=e.rotation,a=b.TOUCH_ROTATE,Vc={event:e.srcEvent,viewport:y.cornerstone.getViewport(t),image:n.image,element:t,rotation:r,type:a},C(t,a,Vc)}return!1}}function Jc(e){Gc.disable(e);["touchstart","touchend"].forEach((function(t){e.removeEventListener(t,$c)}));var t=Ns("touchInput",e).hammer;t&&t.off("tap doubletap panstart panmove panend pinchstart pinchmove rotatemove",$c)}var Qc={enable:function(e){Jc(e);var t=y.Hammer,n={inputClass:t.SUPPORT_POINTER_EVENTS?t.PointerEventInput:t.TouchInput},a=new t.Manager(e,n),o={pointers:0,direction:t.DIRECTION_ALL,threshold:0},i=new t.Pan(o),r=new t.Pinch({threshold:0}),s=new t.Rotate({threshold:0});r.recognizeWith(i),r.recognizeWith(s),s.recognizeWith(i);var l=new t.Tap({event:"doubletap",taps:2,interval:1500,threshold:50,posThreshold:50});l.recognizeWith(i),a.add([l,i,s,r]),a.on("tap doubletap panstart panmove panend pinchstart pinchmove rotatemove",$c),Gc.enable(e),["touchstart","touchend"].forEach((function(t){e.addEventListener(t,$c,{passive:!1})}));var c=Ns("touchInput",e);c.hammer=a,Fs("touchInput",e,c)},disable:Jc},eu=Tt("segmentation");function tu(e,t,n,a,o){!function(e,t,n){var a=eu.configuration,o=e.detail,i=En(o.canvasContext.canvas),r=y.cornerstone.pixelToCanvas(o.element,{x:0,y:0}),s=y.cornerstone.pixelToCanvas(o.element,{x:o.image.width,y:0}),l=y.cornerstone.pixelToCanvas(o.element,{x:o.image.width,y:o.image.height}),c=y.cornerstoneMath.point.distance(r,s),u=y.cornerstoneMath.point.distance(s,l),d=o.canvasContext.canvas,h=o.viewport,v=i.imageSmoothingEnabled,g=i.globalAlpha;i.imageSmoothingEnabled=!1,i.globalAlpha=n?a.fillAlpha:a.fillAlphaInactive,function(e,t,n){if(n.hflip||n.vflip||n.rotation){var a={x:t.width/2+n.translation.x*n.scale,y:t.height/2+n.translation.y*n.scale};e.translate(a.x,a.y),n.rotation&&e.rotate(n.rotation*Math.PI/180),n.vflip&&e.scale(1,-1),n.hflip&&e.scale(-1,1),e.translate(-a.x,-a.y)}}(i,d,h);var f=function(e){var t=e.viewport,n=e.image,a=t.scale,o=t.scale;n.rowPixelSpacing3&&void 0!==arguments[3])||arguments[3],o=nu.configuration,i=nu.state,r=e.detail,s=r.element,l=r.canvasContext,c=o.outlineWidth||1,u=En(l.canvas),d=i.colorLutTables[n],h=u.globalAlpha;u.globalAlpha=a?o.outlineAlpha:o.outlineAlphaInactive,Wt(u,(function(e){for(var n=1;n=0,r=e.y+1=0,l=e.x+13&&void 0!==arguments[3]?arguments[3]:"mouse",o="mouse"===a?pt.clickProximity:pt.touchProximity;return t.filter((function(t){for(var a=O(e,t.name),i=0;i0}))},wu=function(e){if(!pt.isToolLocked){var t=e.detail,n=e.detail.element,a=e.detail.currentPoints.canvas,o=Mu(n,yt.mouseTools()),i=o.filter((function(e){return"active"===e.mode&&Array.isArray(e.options.mouseButtonMask)&&e.options.mouseButtonMask.includes(t.buttons)&&e.options.isMouseActive}));if(pt.isMultiPartToolActive&&(i=Ea(i)),i.length>0){var r=i.find((function(e){return"function"==typeof e.preMouseDownCallback}));if(r)if(r.preMouseDownCallback(e))return}if(!pt.isMultiPartToolActive){var s=Eu(n,o),l=Cu(n,s,a,"mouse");if(l.length>0){var c=l[0],u=O(n,c.name),d=ao(n,u,c.name,a),h=d.handle,v=d.data;c.handleSelectedCallback(e,v,h,"mouse")}else{var g=o.filter((function(e){var t=O(n,e.name);return t&&t.data&&e.pointNearTool&&t.data.some((function(t){return e.pointNearTool(n,t,a,"mouse")}))}));if(g.length>0){var f=g[0],m=O(n,f.name).data.find((function(e){return f.pointNearTool(n,e,a)}));f.toolSelectedCallback(e,m,"mouse")}else if(i.length>0){var p=i.find((function(e){return"function"==typeof e.postMouseDownCallback}));if(p)if(p.postMouseDownCallback(e))return}}}}},Iu=N("eventDispatchers:mouseEventHandlers"),Su=function(e){if(!pt.isToolLocked){var t=e.detail,n=wa(t.element,t.buttons,"mouse");if(n){if("function"==typeof n.preMouseDownActivateCallback)if(n.preMouseDownActivateCallback(e))return;pt.isMultiPartToolActive||(n.addNewMeasurement?n.addNewMeasurement(e,"mouse"):n instanceof ro&&function(e,t){Iu.log("addNewMeasurement"),e.preventDefault(),e.stopPropagation();var n=e.detail,a=n.element,o=t.createNewMeasurement(n);o&&(D(a,t.name,o),y.cornerstone.updateImage(a),(1===Object.keys(o.handles).length?Ba:Za)(n,t.name,o,o.handles.end,t.options,"mouse",(function(e){if(!o.cancelled)if(e){var n=b.MEASUREMENT_COMPLETED,i={toolName:t.name,toolType:t.name,element:a,measurementData:o};C(a,n,i)}else L(a,t.name,o)})))}(e,n))}}},ku=function(e){if(!pt.isToolLocked){var t,n=e.detail,a=n.element;if(t=(t=(t=ya(a,yt.mouseTools())).filter((function(e){return Array.isArray(e.options.mouseButtonMask)&&e.options.mouseButtonMask.includes(n.buttons)&&e.options.isMouseActive}))).filter((function(e){return"function"==typeof e.mouseDragCallback})),pt.isMultiPartToolActive&&(t=Ea(t)),0!==t.length)t[0].mouseDragCallback(e)}},_u=function(e){if(!pt.isToolLocked&&!pt.isMultiPartToolActive){var t,n=e.detail,a=n.element,o=n.currentPoints;pt.mousePositionImage=o.image;var i=(t=Mu(a,yt.mouseTools())).filter((function(e){return"active"===e.mode&&e.options.isMouseActive})),r=!1;i.length>0&&(r=i.some((function(e){return e.updateOnMouseMove}))),t=Eu(a,t);for(var s=0;s0){var i=o[0],r=O(n,i.name),s=r.data.find((function(e){return void 0!==ha(n,e.handles,a,28)}));return r.data.active=!0,s.active=!0,y.cornerstone.updateImage(n),Ba(e.detail,i.name,r.data,s,i.options,"touch",(function(){return qu(r)})),e.stopImmediatePropagation(),void e.preventDefault()}var l=t.filter((function(e){var t=O(n,e.name);return t&&t.data&&e.pointNearTool&&t.data.some((function(t){return e.pointNearTool(n,t,a)}))}));if(l.length>0){var c=l[0],u=O(n,c.name),d=u.data.find((function(e){return c.pointNearTool(n,e,a)}));return d.active=!0,y.cornerstone.updateImage(n),Pa(e.detail,c.name,d,null,c.options,"touch",(function(){return qu(u)})),e.stopImmediatePropagation(),void e.preventDefault()}var h=ya(n,yt.touchTools());return h.length>0&&h[0].touchStartActiveCallback?h[0].touchStartActiveCallback(e):Vu(e),!1}},Wu=function(e){if(!pt.isToolLocked){var t=e.detail,n=t.element,a=t.startPoints.canvas,o=Mu(n,yt.touchTools()),i=o.filter((function(e){return"active"===e.mode&&e.options.isTouchActive}));if(pt.isMultiPartToolActive&&(i=Ea(i)),i.length>0){var r=i.find((function(e){return"function"==typeof e.preTouchStartCallback}));if(r)if(r.preTouchStartCallback(e))return}if(!pt.isMultiPartToolActive){var s=Eu(n,o),l=Cu(n,s,a,"touch");if(l.length>0){var c=l[0],u=O(n,c.name),d=ao(n,u,c.name,a,"touch"),h=d.handle,v=d.data;c.handleSelectedCallback(e,v,h,"touch")}else{var g=s.filter((function(e){var t=O(n,e.name);return t&&t.data&&e.pointNearTool&&t.data.some((function(t){return e.pointNearTool(n,t,a,"touch")}))}));if(g.length>0){var f=g[0],m=O(n,f.name).data.find((function(e){return f.pointNearTool(n,e,a)}));f.toolSelectedCallback(e,m,"touch")}else if(i.length>0){var p=i.find((function(e){return"function"==typeof e.postTouchStartCallback}));if(p)if(p.postTouchStartCallback(e))return}}}}},Gu=bu.bind(null,"DoubleTap","doubleTapCallback"),Yu=bu.bind(null,"Touch","touchDragCallback"),Xu=bu.bind(null,"Touch","touchEndCallback"),Ku=bu.bind(null,"TouchPinch","touchPinchCallback"),Zu=bu.bind(null,"Touch","touchPressCallback"),$u=bu.bind(null,"TouchRotate","touchRotateCallback"),Ju=function(e){e.addEventListener(b.TAP,ju),e.addEventListener(b.TOUCH_START,Wu,{passive:!1}),e.addEventListener(b.TOUCH_DRAG,Yu,{passive:!1}),e.addEventListener(b.TOUCH_END,Xu),e.addEventListener(b.TOUCH_START_ACTIVE,Vu),e.addEventListener(b.TOUCH_PRESS,Zu),e.addEventListener(b.DOUBLE_TAP,Gu),e.addEventListener(b.TOUCH_PINCH,Ku),e.addEventListener(b.TOUCH_ROTATE,$u),e.addEventListener(b.MULTI_TOUCH_DRAG,Fu)},Qu=function(e){e.removeEventListener(b.TAP,ju),e.removeEventListener(b.TOUCH_START,Wu),e.removeEventListener(b.TOUCH_DRAG,Yu),e.removeEventListener(b.TOUCH_END,Xu),e.removeEventListener(b.TOUCH_START_ACTIVE,Vu),e.removeEventListener(b.TOUCH_PRESS,Zu),e.removeEventListener(b.DOUBLE_TAP,Gu),e.removeEventListener(b.TOUCH_PINCH,Ku),e.removeEventListener(b.TOUCH_ROTATE,$u),e.removeEventListener(b.MULTI_TOUCH_DRAG,Fu)},ed=N("addTool"),td=function(e,t,n){var a=new t(n);Ct(e,a.name)?ed.warn("%s has already been added to the target element",a.name):(a.element=e,bt.state.tools.push(a))},nd=function(e,t){ad(e,t),bt.state.enabledElements.forEach((function(n){td(n,e,t)}))},ad=function(e,t){if(Tt("globalConfiguration").configuration.globalToolSyncEnabled){var n=new e(t);void 0!==bt.state.globalTools[n.name]?ed.warn("%s has already been added globally",n.name):bt.state.globalTools[n.name]={tool:e,props:t,activeBindings:[]}}},od=N("internals:addEnabledElement"),id=function(e){od.log("EVENT:ELEMENT_ENABLED");var t=e.detail.element;xu(t),Uu(t);var n=Tt("globalConfiguration").configuration;n.mouseEnabled&&(bc.enable(t),Ic.enable(t),Au(t)),n.touchEnabled&&(Qc.enable(t),Ju(t)),rd(t)},rd=function(e){bt.state.enabledElements.push(e),bt.modules&&function(e){var t=bt.modules;Object.keys(t).forEach((function(n){"function"==typeof t[n].enabledElementCallback&&t[n].enabledElementCallback(e)}))}(e),function(e){if(!Tt("globalConfiguration").configuration.globalToolSyncEnabled)return;Object.keys(bt.state.globalTools).forEach((function(t){var n=bt.state.globalTools[t],a=n.tool,o=n.props;td(e,a,o)}))}(e),function(e){if(!Tt("globalConfiguration").configuration.globalToolSyncEnabled)return;var t={active:_t,passive:Ht,enabled:Lt,disabled:Dt};bt.state.globalToolChangeHistory.forEach((function(n){var a=n.args.slice(0);a.unshift(e),t[n.mode].apply(null,a)}))}(e)};var sd=N("internals:removeEnabledElement"),ld=function(e){sd.log("EVENT:ELEMENT_DISABLED");var t=e.detail.element,n=Tt("globalConfiguration").configuration;Tu(t),Nu(t),n.mouseEnabled&&(bc.disable(t),Ic.disable(t),Hu(t)),n.touchEnabled&&(Qc.disable(t),Qu(t)),cd(t),ud(t),dd(t)},cd=function(e){bt.state.tools.forEach((function(t){t.element===e&&Dt(t.element,t.name)})),bt.state.tools=bt.state.tools.filter((function(t){return t.element!==e}))},ud=function(e){bt.modules&&function(e){var t=bt.modules;Object.keys(t).forEach((function(n){"function"==typeof t[n].removeEnabledElementCallback&&t[n].removeEnabledElementCallback(e)}))}(e);var t=bt.state.enabledElements.findIndex((function(t){return t===e}));t>-1?bt.state.enabledElements.splice(t,1):sd.warn("unable to remove element")},dd=function(e){Rs.removeHandlers(e)};var hd,vd=function(){window.removeEventListener("resize",gd,!1)};function gd(){hd||(hd=setTimeout((function(){hd=null,fd()}),66))}var fd=function(){pt.enabledElements.forEach((function(e){y.cornerstone.resize(e)}))},md=function(){vd(),window.addEventListener("resize",gd,!1)},pd=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};yd(),xd();var t=Tt("globalConfiguration");Array.isArray(e)?e.forEach((function(e){var t=e.moduleName,n=e.configuration,a=Tt(t);a&&(a.configuration=Object.assign({},a.configuration,n))})):t.configuration=Object.assign({},t.configuration,e),t.configuration.autoResizeViewports&&md()};function yd(){!function(){var e=y.cornerstone,t=e.EVENTS.ELEMENT_ENABLED,n=e.EVENTS.ELEMENT_DISABLED;e.events.removeEventListener(t,id),e.events.removeEventListener(n,ld)}();var e=y.cornerstone,t=e.EVENTS.ELEMENT_ENABLED,n=e.EVENTS.ELEMENT_DISABLED;e.events.addEventListener(t,id),e.events.addEventListener(n,ld)}function xd(){var e=bt.modules;Object.keys(e).forEach((function(t){"function"==typeof e[t].onRegisterCallback&&e[t].onRegisterCallback()}))}var Td,bd=N("stackTools:stackPrefetch"),Cd={maxImagesToPrefetch:1/0,preserveExistingPool:!1};function Md(e,t){e=Math.round(e)||0;var n=[],a=(t=Math.round(t)||0)-e+1;if(a<=0)return n;for(;a--;)n[a]=t--;return n}var Ed=function(e){return Math.max.apply(null,e)},wd=function(e){return Math.min.apply(null,e)};function Id(e){var t=O(e,"stack");if(t&&t.data&&t.data.length){var n=t.data[0],a=O(e,"stackPrefetch");if(a){var o=a.data[0]||{};if(o.indicesToRequest&&o.indicesToRequest.length||(o.enabled=!1),!1!==o.enabled)if(a.data[0].indicesToRequest.sort((function(e,t){return e-t})),o.indicesToRequest.slice().forEach((function(e){var t=n.imageIds[e];t&&(y.cornerstone.imageCache.getImageLoadObject(t)&&E(e))})),o.indicesToRequest.length){Cd.preserveExistingPool||Nl.clearRequestStack("prefetch");for(var i,r,s=function(e,t){var n=[],a=[];return e.forEach((function(e){et&&a.push(e)})),{low:e.indexOf(Ed(n)),high:e.indexOf(wd(a))}}(o.indicesToRequest,n.currentImageIdIndex),l=Rs.getErrorLoadingHandler(e),c=s.low,u=s.high,d=[];c>=0||uCd.maxImagesToPrefetch)&&c>=0,g=!(o.indicesToRequest[u]-h>Cd.maxImagesToPrefetch)&&u-1&&o.indicesToRequest.splice(t,1)}function w(t){bd.log("prefetch done: %s",t.imageId);var a=n.imageIds.indexOf(t.imageId);E(a),C(e,b.STACK_PREFETCH_IMAGE_LOADED,{element:e,imageId:t.imageId,imageIndex:a,stackPrefetch:o,stack:n}),o.indicesToRequest&&o.indicesToRequest.length>0||C(e,b.STACK_PREFETCH_DONE,{element:e,stackPrefetch:o,stack:n})}function I(t){bd.log("prefetch errored: %o",t),l&&l(e,i,t,"stackPrefetch")}}function Sd(e){return function(t){var n,a=t.detail;try{n=O(e,"stack")}catch(e){return}if(n&&n.data&&n.data.length){var o=n.data[0].imageIds.indexOf(a.imageId);if(!(o<0)){var i=O(e,"stackPrefetch");i&&i.data&&i.data.length&&i.data[0].indicesToRequest.push(o)}}}}function kd(e){clearTimeout(Td),Td=setTimeout((function(){var t=e.target;try{Id(t)}catch(e){return}}),10)}var _d={enable:function(e){O(e,"stackPrefetch").data=[];var t=O(e,"stack");if(t&&t.data&&t.data.length){var n=t.data[0];if(!0!==n.preventCache){var a={indicesToRequest:Md(0,n.imageIds.length-1),enabled:!0,direction:1},o=a.indicesToRequest.indexOf(n.currentImageIdIndex);a.indicesToRequest.splice(o,1),D(e,"stackPrefetch",a),Id(e),e.removeEventListener(y.cornerstone.EVENTS.NEW_IMAGE,kd),e.addEventListener(y.cornerstone.EVENTS.NEW_IMAGE,kd);var i=Sd(e);y.cornerstone.events.removeEventListener(y.cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED,i),y.cornerstone.events.addEventListener(y.cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED,i)}else bd.warn("A stack that should not be cached was given the stackPrefetch")}},disable:function(e){clearTimeout(Td),e.removeEventListener(y.cornerstone.EVENTS.NEW_IMAGE,kd);var t=Sd(e);y.cornerstone.events.removeEventListener(y.cornerstone.EVENTS.IMAGE_CACHE_PROMISE_REMOVED,t);var n=O(e,"stackPrefetch");n&&n.data.length&&(n.data[0].enabled=!1,Nl.clearRequestStack("prefetch"))},getConfiguration:function(){return Cd},setConfiguration:function(e){var t;Cd=e,e.maxSimultaneousRequests&&(t=e.maxSimultaneousRequests,xl=t)}},Pd=function(){function e(){r()(this,e),this.currentImageIdIndex=0,this.layerIds=[],this.findImageFn=void 0}return l()(e,[{key:"render",value:function(e,t){var n=this;if(!Number.isInteger(this.currentImageIdIndex))throw new Error("FusionRenderer: render - Image ID Index is not an integer");if(!this.findImageFn)throw new Error("No findImage function has been defined");t||(t=O(e,"stack").data);var a=y.cornerstone,o=t[0],i=o.imageIds[this.currentImageIdIndex],r=t.slice(1,t.length);a.loadAndCacheImage(i).then((function(t){var s=n.layerIds[0];s?a.setLayerImage(e,t,s):(s=a.addLayer(e,t,o.options),n.layerIds.push(s)),a.displayImage(e,t),r.forEach((function(t,o){var r=n.findImageFn(t.imageIds,i),l=o+1,c=n.layerIds[l];c||(c=a.addLayer(e,void 0,t.options),n.layerIds.push(c)),r?a.loadAndCacheImage(r).then((function(t){a.setLayerImage(e,t,c),a.updateImage(e)})):(a.setLayerImage(e,void 0,c),a.setActiveLayer(e,s),a.updateImage(e))}))}))}}]),e}(),Dd={};Dd.FusionRenderer=Pd;var Od=Dd;function Ld(e){var t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}function Ad(e,t){var n,a;if(void 0===e)throw new Error("playClip: element must not be undefined");var o=O(e,"stack");if(o&&o.data&&o.data.length){var i,r=y.cornerstone;if(o.data.length>1){var s=O(e,"stackRenderer");s&&s.data&&s.data.length&&(i=s.data[0])}var l=o.data[0],c=O(e,"playClip");c&&c.data&&c.data.length?Ld(n=c.data[0]):D(e,"playClip",n={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,frameRate:0,frameTimeVector:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,speed:1,reverse:!1,loop:!0}),(t<0||t>0)&&(n.framesPerSecond=Number(t),n.reverse=n.framesPerSecond<0,n.ignoreFrameTimeVector=!0),!0!==n.ignoreFrameTimeVector&&n.frameTimeVector&&n.frameTimeVector.length===l.imageIds.length&&(a=function(e,t){var n,a,o,i=0,r=e.length,s=[];for(s.isTimeVarying=!1,("number"!=typeof t||t<=0)&&(t=1),n=1;n0&&(o=s.isTimeVarying?i/s.length|0:s[0],s.push(o)),s}(n.frameTimeVector,n.speed));var u=function(){var t,a,s,c=l.currentImageIdIndex,u=l.imageIds.length;if(n.reverse?c--:c++,!n.loop&&(c<0||c>=u))return Ld(n),void function(e){C(e,b.CLIP_STOPPED,{element:e})}(e);c>=u&&(c=0),c<0&&(c=u-1),c!==l.currentImageIdIndex&&(t=Rs.getStartLoadHandler(e),a=Rs.getEndLoadHandler(e),s=Rs.getErrorLoadingHandler(e),t&&t(e),(!0===l.preventCache?r.loadImage(l.imageIds[c]):r.loadAndCacheImage(l.imageIds[c])).then((function(t){try{l.currentImageIdIndex=c,i?(i.currentImageIdIndex=c,i.render(e,o.data)):r.displayImage(e,t),a&&a(e,t)}catch(e){return}}),(function(t){var n=l.imageIds[c];s&&s(e,n,t)})))};a&&a.length>0&&a.isTimeVarying?(n.usingFrameTimeVector=!0,n.intervalId=setTimeout((function e(){n.intervalId=setTimeout(e,a[l.currentImageIdIndex]),u()}),0)):(n.usingFrameTimeVector=!1,n.intervalId=setInterval(u,1e3/Math.abs(n.framesPerSecond)))}}function Hd(e){var t=O(e,"playClip");t&&t.data&&t.data.length&&Ld(t.data[0])}var Rd=function(e,t){var n=bt.state.tools.findIndex((function(n){return n.element===e&&n.name===t}));n>=0&&bt.state.tools.splice(n,1)},Ud=function(e){Nd(e),bt.state.enabledElements.forEach((function(t){Rd(t,e)}))},Nd=function(e){Tt("globalConfiguration").configuration.globalToolSyncEnabled&&bt.state.globalTools[e]&&delete bt.state.globalTools[e]},Fd=function(e,t,n){var a=Ct(e,t);a&&a.mergeOptions(n)},Bd=function(e,t){pt.enabledElements.forEach((function(n){Fd(n,e,t)}))};function Vd(e,t){var n={};return{get:function(a,o){return e.indexOf(o)>=0?(!1===n.hasOwnProperty(o)&&(n[o]={data:[]}),n[o]):t.get(a,o)},add:function(a,o,i){if(!(e.indexOf(o)>=0))return t.add(a,o,i);!1===n.hasOwnProperty(o)&&(n[o]={data:[]}),n[o].data.push(i)},saveToolState:function(){return n},restoreToolState:function(e){n=e},toolState:n}}var qd=[];function zd(e,t){var n=P(e);n||(n=_);var a=["stack","stackPrefetch","playClip","volume","slab","referenceLines","crosshairs","stackRenderer"];t&&(a=a.concat(t));var o=Vd(a,n);qd.push(o),H(e,o)}var jd={newStackSpecificToolStateManager:Vd,addStackStateManager:zd};function Wd(){var e={};return{get:function(t,n){if(!1!==e.hasOwnProperty(t)){var a=e[t];if(!1!==a.hasOwnProperty(n))return a[n]}},add:function(t,n,a){!1===e.hasOwnProperty(t)&&(e[t]={});var o=e[t];!1===o.hasOwnProperty(n)&&(o[n]={data:[]}),o[n].data.push(a)},remove:function(t,n,a){if(!1!==e.hasOwnProperty(t)){var o=e[t];if(!1!==o.hasOwnProperty(n)){for(var i=o[n],r=-1,s=0;s2&&void 0!==arguments[2]?arguments[2]:"image/png",a=e.querySelector("canvas");if(a.msToBlob){var o=a.msToBlob();return window.navigator.msSaveBlob(o,t)}var i=document.createElement("a");if(i.download=t,i.href=a.toDataURL(n,1),document.createEvent){var r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),i.dispatchEvent(r)}else i.fireEvent&&i.fireEvent("onclick")},Xd=N("thirdParty:registerModule"),Kd=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=Zd(e);!a||n?(a&&Xd.warn("Overwriting module %s",e),xt[e]=t,"function"==typeof xt[e].onRegisterCallback&&xt[e].onRegisterCallback()):Xd.warn("A module with the name %s is already registered",e)};function Zd(e){return void 0!==xt[e]}var $d={"base/BaseTool":ca,"base/BaseAnnotationTool":ro,"base/BaseBrushTool":Ma,"tools/cursors/MouseCursor":uo,"tools/cursors":o,"manipulators/anyHandlesOutsideImage":ga,"manipulators/getHandleNearImagePoint":ha,"manipulators/handleActivator":va,"manipulators/moveAllHandles":Pa,"manipulators/moveHandle":Ba,"manipulators/moveNewHandle":Za,"manipulators/moveHandleNearImagePoint":no,"manipulators/findHandleDataNearImagePoint":ao,"manipulators/moveAnnotation":oo,"mixins/activeOrDisabledBinaryTool":ea.activeOrDisabledBinaryTool,"mixins/enabledOrDisabledBinaryTool":ea.enabledOrDisabledBinaryTool,"drawing/getNewContext":En,"drawing/draw":Wt,"drawing/path":Kt,"drawing/setShadow":In,"drawing/drawLine":Zt,"drawing/drawLines":hn,"drawing/drawJoinedLines":$t,"drawing/drawCircle":Qt,"drawing/drawEllipse":rn,"drawing/drawRect":Mn,"drawing/fillOutsideRect":function(e,t,n,a,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"pixel";if("pixel"===i){var r=y.cornerstone;n=r.pixelToCanvas(t,n),a=r.pixelToCanvas(t,a)}var s=Math.min(n.x,a.x),l=Math.min(n.y,a.y),c=Math.abs(n.x-a.x),u=Math.abs(n.y-a.y);Kt(e,o,(function(e){e.rect(0,0,e.canvas.clientWidth,e.canvas.clientHeight),e.rect(s+c,l,-c,u)}))},"drawing/drawTextBox":bn,"drawing/drawArrow":Jt,"drawing/fillBox":xn,"drawing/fillTextLines":yn,"drawing/drawLink":vn,"drawing/drawLinkedTextBox":Cn,"drawing/drawHandles":dn,"drawing/textBoxWidth":Tn,"util/getLuminance":Wl,"util/getROITextBoxCoords":Zi,"util/copyPoints":uc,"util/calculateSUV":Wi,"util/setContextToDisplayFontSize":function(e,t,n){return y.cornerstone.setToPixelCoordinateSystem(e,t,.1),{fontSize:n/e.viewport.scale/.1,lineHeight:n/e.viewport.scale/.1,fontScale:.1}},"util/scrollToIndex":Fl,"util/scroll":Bl,"util/roundToDecimal":lo,"util/projectPatientPointToImagePlane":tn,"util/imagePointToPatientPoint":nn,"util/planePlaneIntersection":an,"util/pointInsideBoundingBox":ua,"util/makeUnselectable":function(e,t){e.style.webkitUserSelect="none",e.style.webkitTouchCallout="none",e.style.mozUserSelect="none",e.style.msUserSelect="none",e.style.oUserSelect="none",e.style.khtmlUserSelect="none",e.style.userSelect="none",e.unselectable="on",e.oncontextmenu=function(){return!1},!0===t&&(e.style.pointerEvents="none")},"util/getRGBPixels":Rr,"util/getDefaultSimultaneousRequests":_l,"util/getMaxSimultaneousRequests":kl,"util/getBrowserInfo":Sl,"util/isMobileDevice":function(){return new RegExp("Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini").test(navigator.userAgent)},"util/angleBetweenPoints":gl,"util/numbersWithCommas":$i,"util/lineSegDistance":so,"util/triggerEvent":C,"util/convertToVector3":en,"util/clip":fa,"util/clipToBox":ma,"util/debounce":Qo,"util/deepmerge":ra,"util/getDefault":wn,"util/getPixelSpacing":$o,"util/isEmptyObject":Sn,"util/isObject":Jo,"util/isPointInImage":Ge,"util/isPointInPolygon":as,"util/getLogger":N,"util/throttle":ei,"util/wait":ul,"util/waitForEnabledElementImageToLoad":dl,"util/getKeyPressData":function(e){var t=y.cornerstone,n=e.currentTarget,a=t.getEnabledElement(n);if(a&&a.image){var o=bt.state.mousePositionImage;return{event:window.event||e,element:n,viewport:t.getViewport(n),image:a.image,currentPoints:{image:o,canvas:t.pixelToCanvas(n,o)},keyCode:e.keyCode,which:e.which}}},"util/ellipseUtils":Ki,"util/freehandUtils":wr,"util/segmentationUtils":a,"util/zoomUtils":Ql},Jd=N("thirdParty:registerMixin"),Qd=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=eh(e);!a||n?(a&&Jd.warn("Overwriting mixins/%s",e),ea[e]=t,$d["mixins/".concat(e)]=ea[e]):Jd.warn("mixins/%s is already registered",e)};function eh(e){return void 0!==ea[e]}var th=N("thirdParty:registerType"),nh=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o="".concat(e,"/").concat(t),i=ah(o);!i||a?(i&&th.warn("Overwriting %s",o),$d[o]=n):th.warn("%s is already registered",o)};function ah(e){return void 0!==$d[e]}var oh=N("thirdParty:register"),ih=function(e,t,n){var a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(rh(e,t,n))switch(e){case"module":Kd(t,n,a);break;case"mixin":Qd(t,n,a);break;default:nh(e,t,n,a)}};function rh(e,t,n){return e?t?"object"===T()(n)||"function"==typeof n||(oh.warn("The %s is a %s, it should be an Object or a function.",n,T()(n)),!1):(oh.warn("The %s must have a name in order to register.",e),!1):(oh.warn("The type must be given in order to register."),!1)}var sh=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.forEach((function(e){var n=e.type,a=e.name,o=e.item;ih(n,a,o,t)}))},lh=function(e,t,n){if(n!==t){var a=y.cornerstone,o=a.getViewport(t),i=a.getViewport(n);i.voi.windowWidth===o.voi.windowWidth&&i.voi.windowCenter===o.voi.windowCenter&&i.invert===o.invert||(i.voi.windowWidth=o.voi.windowWidth,i.voi.windowCenter=o.voi.windowCenter,i.invert=o.invert,e.setViewport(n,i))}},ch=function(e,t,n){n!==t&&y.cornerstone.updateImage(n)};function uh(e){return e.filter((function(e,t,n){return n.indexOf(e)===t}))}var dh=function(e,t){var n=y.cornerstone,a=this,o=[],i=[],r=!1,s={},l=t;function c(e){var t=e.detail.element;a.remove(t),function(e){for(var t in Us)Us[t]=Us[t].filter((function(t){return t.element!==e}))}(t)}this.enabled=!0,this.setHandler=function(e){l=e},this.getHandler=function(){return l},this.getDistances=function(){o.length&&i.length&&(s.distances={},s.imageIds={sourceElements:[],targetElements:[]},o.forEach((function(e){var t=n.getEnabledElement(e);if(t&&t.image){var a=t.image.imageId,o=n.metaData.get("imagePlaneModule",a);if(o&&o.imagePositionPatient){var r=en(o.imagePositionPatient);s.hasOwnProperty(t)||(s.distances[a]={},s.imageIds.sourceElements.push(a),i.forEach((function(t){var o=n.getEnabledElement(t);if(o&&o.image){var i=o.image.imageId;if(s.imageIds.targetElements.push(i),e!==t&&a!==i&&!s.distances[a].hasOwnProperty(i)){var l=n.metaData.get("imagePlaneModule",i);if(l&&l.imagePositionPatient){var c=en(l.imagePositionPatient);s.distances[a][i]=c.clone().sub(r)}}}})),Object.keys(s.distances[a]).length||delete s.distances[a])}}})))},this.fireEvent=function(e,t){var n=!a.enabled,c=!o.length||!i.length;n||c||(r=!0,i.forEach((function(n){var r=i.indexOf(n);if(-1!==r){var c=s.imageIds.targetElements[r],u=o.indexOf(e);if(-1!==u){var d,h=s.imageIds.sourceElements[u];h===c?d=0:void 0!==s.distances[h]&&(d=s.distances[h][c]),l(a,e,n,t,d)}}})),r=!1)},this.onEvent=function(e){var t=e.detail;!0!==r&&a.fireEvent(e.currentTarget,t)},this.addSource=function(t){-1===o.indexOf(t)&&(o.push(t),e.split(" ").forEach((function(e){t.addEventListener(e,a.onEvent)})),a.getDistances(),a.updateDisableHandlers())},this.addTarget=function(e){-1===i.indexOf(e)&&(i.push(e),a.getDistances(),l(a,e,e,0),a.updateDisableHandlers())},this.add=function(e){a.addSource(e),a.addTarget(e)},this.removeSource=function(t){var n=o.indexOf(t);-1!==n&&(o.splice(n,1),e.split(" ").forEach((function(e){t.removeEventListener(e,a.onEvent)})),a.getDistances(),a.fireEvent(t),a.updateDisableHandlers())},this.removeTarget=function(e){var t=i.indexOf(e);-1!==t&&(i.splice(t,1),a.getDistances(),l(a,e,e,0),a.updateDisableHandlers())},this.remove=function(e){a.removeTarget(e),a.removeSource(e)},this.getSourceElements=function(){return o},this.getTargetElements=function(){return i},this.displayImage=function(e,t,a){r=!0,n.displayImage(e,t,a),r=!1},this.setViewport=function(e,t){r=!0,n.setViewport(e,t),r=!1},this.updateDisableHandlers=function(){uh(o.concat(i)).forEach((function(e){e.removeEventListener(y.cornerstone.EVENTS.ELEMENT_DISABLED,c),e.addEventListener(y.cornerstone.EVENTS.ELEMENT_DISABLED,c)}))},this.destroy=function(){uh(o.concat(i)).forEach((function(e){a.remove(e)}))}},hh=function(e,t,n,a){if(t!==n&&a&&a.direction){var o=y.cornerstone,i=O(n,"stack").data[0],r=i.currentImageIdIndex+a.direction;if(r=pa(r,0,i.imageIds.length-1),i.currentImageIdIndex!==r){var s=Rs.getStartLoadHandler(n),l=Rs.getEndLoadHandler(n),c=Rs.getErrorLoadingHandler(n);i.currentImageIdIndex=r;var u=i.imageIds[r];s&&s(n),(!0===i.preventCache?o.loadImage(u):o.loadAndCacheImage(u)).then((function(t){var a=o.getViewport(n);i.currentImageIdIndex===r&&(e.displayImage(n,t,a),l&&l(n,t))}),(function(e){var t=i.imageIds[r];c&&c(n,t,e)}))}}},vh=function(e,t,n){if(n!==t){var a=y.cornerstone,o=O(t,"stack").data[0],i=o.imageIds[o.currentImageIdIndex],r=a.metaData.get("imagePlaneModule",i);if(void 0!==r&&void 0!==r.imagePositionPatient){var s=en(r.imagePositionPatient),l=O(n,"stack").data[0],c=Number.MAX_VALUE,u=-1;if(l.imageIds.forEach((function(e,t){var n=a.metaData.get("imagePlaneModule",e);if(void 0!==n&&void 0!==n.imagePositionPatient){var o=en(n.imagePositionPatient).distanceToSquared(s);o= 0) hot._disposeHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ // Management API +/******/ check: hotCheck, +/******/ apply: hotApply, +/******/ status: function(l) { +/******/ if (!l) return hotStatus; +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ addStatusHandler: function(l) { +/******/ hotStatusHandlers.push(l); +/******/ }, +/******/ removeStatusHandler: function(l) { +/******/ var idx = hotStatusHandlers.indexOf(l); +/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ //inherit from previous dispose call +/******/ data: hotCurrentModuleData[moduleId] +/******/ }; +/******/ hotCurrentChildModule = undefined; +/******/ return hot; +/******/ } +/******/ +/******/ var hotStatusHandlers = []; +/******/ var hotStatus = "idle"; +/******/ +/******/ function hotSetStatus(newStatus) { +/******/ hotStatus = newStatus; +/******/ for (var i = 0; i < hotStatusHandlers.length; i++) +/******/ hotStatusHandlers[i].call(null, newStatus); +/******/ } +/******/ +/******/ // while downloading +/******/ var hotWaitingFiles = 0; +/******/ var hotChunksLoading = 0; +/******/ var hotWaitingFilesMap = {}; +/******/ var hotRequestedFilesMap = {}; +/******/ var hotAvailableFilesMap = {}; +/******/ var hotDeferred; +/******/ +/******/ // The update info +/******/ var hotUpdate, hotUpdateNewHash; +/******/ +/******/ function toModuleId(id) { +/******/ var isNumber = +id + "" === id; +/******/ return isNumber ? +id : id; +/******/ } +/******/ +/******/ function hotCheck(apply) { +/******/ if (hotStatus !== "idle") { +/******/ throw new Error("check() is only allowed in idle status"); +/******/ } +/******/ hotApplyOnUpdate = apply; +/******/ hotSetStatus("check"); +/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) { +/******/ if (!update) { +/******/ hotSetStatus("idle"); +/******/ return null; +/******/ } +/******/ hotRequestedFilesMap = {}; +/******/ hotWaitingFilesMap = {}; +/******/ hotAvailableFilesMap = update.c; +/******/ hotUpdateNewHash = update.h; +/******/ +/******/ hotSetStatus("prepare"); +/******/ var promise = new Promise(function(resolve, reject) { +/******/ hotDeferred = { +/******/ resolve: resolve, +/******/ reject: reject +/******/ }; +/******/ }); +/******/ hotUpdate = {}; +/******/ var chunkId = "cornerstoneWADOImageLoader"; +/******/ // eslint-disable-next-line no-lone-blocks +/******/ { +/******/ /*globals chunkId */ +/******/ hotEnsureUpdateChunk(chunkId); +/******/ } +/******/ if ( +/******/ hotStatus === "prepare" && +/******/ hotChunksLoading === 0 && +/******/ hotWaitingFiles === 0 +/******/ ) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ return promise; +/******/ }); +/******/ } +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ function hotAddUpdateChunk(chunkId, moreModules) { +/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId]) +/******/ return; +/******/ hotRequestedFilesMap[chunkId] = false; +/******/ for (var moduleId in moreModules) { +/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ hotUpdate[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) { +/******/ hotUpdateDownloaded(); +/******/ } +/******/ } +/******/ +/******/ function hotEnsureUpdateChunk(chunkId) { +/******/ if (!hotAvailableFilesMap[chunkId]) { +/******/ hotWaitingFilesMap[chunkId] = true; +/******/ } else { +/******/ hotRequestedFilesMap[chunkId] = true; +/******/ hotWaitingFiles++; +/******/ hotDownloadUpdateChunk(chunkId); +/******/ } +/******/ } +/******/ +/******/ function hotUpdateDownloaded() { +/******/ hotSetStatus("ready"); +/******/ var deferred = hotDeferred; +/******/ hotDeferred = null; +/******/ if (!deferred) return; +/******/ if (hotApplyOnUpdate) { +/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to +/******/ // avoid triggering uncaught exception warning in Chrome. +/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666 +/******/ Promise.resolve() +/******/ .then(function() { +/******/ return hotApply(hotApplyOnUpdate); +/******/ }) +/******/ .then( +/******/ function(result) { +/******/ deferred.resolve(result); +/******/ }, +/******/ function(err) { +/******/ deferred.reject(err); +/******/ } +/******/ ); +/******/ } else { +/******/ var outdatedModules = []; +/******/ for (var id in hotUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ outdatedModules.push(toModuleId(id)); +/******/ } +/******/ } +/******/ deferred.resolve(outdatedModules); +/******/ } +/******/ } +/******/ +/******/ function hotApply(options) { +/******/ if (hotStatus !== "ready") +/******/ throw new Error("apply() is only allowed in ready status"); +/******/ options = options || {}; +/******/ +/******/ var cb; +/******/ var i; +/******/ var j; +/******/ var module; +/******/ var moduleId; +/******/ +/******/ function getAffectedStuff(updateModuleId) { +/******/ var outdatedModules = [updateModuleId]; +/******/ var outdatedDependencies = {}; +/******/ +/******/ var queue = outdatedModules.map(function(id) { +/******/ return { +/******/ chain: [id], +/******/ id: id +/******/ }; +/******/ }); +/******/ while (queue.length > 0) { +/******/ var queueItem = queue.pop(); +/******/ var moduleId = queueItem.id; +/******/ var chain = queueItem.chain; +/******/ module = installedModules[moduleId]; +/******/ if (!module || module.hot._selfAccepted) continue; +/******/ if (module.hot._selfDeclined) { +/******/ return { +/******/ type: "self-declined", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ if (module.hot._main) { +/******/ return { +/******/ type: "unaccepted", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ for (var i = 0; i < module.parents.length; i++) { +/******/ var parentId = module.parents[i]; +/******/ var parent = installedModules[parentId]; +/******/ if (!parent) continue; +/******/ if (parent.hot._declinedDependencies[moduleId]) { +/******/ return { +/******/ type: "declined", +/******/ chain: chain.concat([parentId]), +/******/ moduleId: moduleId, +/******/ parentId: parentId +/******/ }; +/******/ } +/******/ if (outdatedModules.indexOf(parentId) !== -1) continue; +/******/ if (parent.hot._acceptedDependencies[moduleId]) { +/******/ if (!outdatedDependencies[parentId]) +/******/ outdatedDependencies[parentId] = []; +/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); +/******/ continue; +/******/ } +/******/ delete outdatedDependencies[parentId]; +/******/ outdatedModules.push(parentId); +/******/ queue.push({ +/******/ chain: chain.concat([parentId]), +/******/ id: parentId +/******/ }); +/******/ } +/******/ } +/******/ +/******/ return { +/******/ type: "accepted", +/******/ moduleId: updateModuleId, +/******/ outdatedModules: outdatedModules, +/******/ outdatedDependencies: outdatedDependencies +/******/ }; +/******/ } +/******/ +/******/ function addAllToSet(a, b) { +/******/ for (var i = 0; i < b.length; i++) { +/******/ var item = b[i]; +/******/ if (a.indexOf(item) === -1) a.push(item); +/******/ } +/******/ } +/******/ +/******/ // at begin all updates modules are outdated +/******/ // the "outdated" status can propagate to parents if they don't accept the children +/******/ var outdatedDependencies = {}; +/******/ var outdatedModules = []; +/******/ var appliedUpdate = {}; +/******/ +/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module" +/******/ ); +/******/ }; +/******/ +/******/ for (var id in hotUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) { +/******/ moduleId = toModuleId(id); +/******/ /** @type {TODO} */ +/******/ var result; +/******/ if (hotUpdate[id]) { +/******/ result = getAffectedStuff(moduleId); +/******/ } else { +/******/ result = { +/******/ type: "disposed", +/******/ moduleId: id +/******/ }; +/******/ } +/******/ /** @type {Error|false} */ +/******/ var abortError = false; +/******/ var doApply = false; +/******/ var doDispose = false; +/******/ var chainInfo = ""; +/******/ if (result.chain) { +/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); +/******/ } +/******/ switch (result.type) { +/******/ case "self-declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of self decline: " + +/******/ result.moduleId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of declined dependency: " + +/******/ result.moduleId + +/******/ " in " + +/******/ result.parentId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "unaccepted": +/******/ if (options.onUnaccepted) options.onUnaccepted(result); +/******/ if (!options.ignoreUnaccepted) +/******/ abortError = new Error( +/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo +/******/ ); +/******/ break; +/******/ case "accepted": +/******/ if (options.onAccepted) options.onAccepted(result); +/******/ doApply = true; +/******/ break; +/******/ case "disposed": +/******/ if (options.onDisposed) options.onDisposed(result); +/******/ doDispose = true; +/******/ break; +/******/ default: +/******/ throw new Error("Unexception type " + result.type); +/******/ } +/******/ if (abortError) { +/******/ hotSetStatus("abort"); +/******/ return Promise.reject(abortError); +/******/ } +/******/ if (doApply) { +/******/ appliedUpdate[moduleId] = hotUpdate[moduleId]; +/******/ addAllToSet(outdatedModules, result.outdatedModules); +/******/ for (moduleId in result.outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call( +/******/ result.outdatedDependencies, +/******/ moduleId +/******/ ) +/******/ ) { +/******/ if (!outdatedDependencies[moduleId]) +/******/ outdatedDependencies[moduleId] = []; +/******/ addAllToSet( +/******/ outdatedDependencies[moduleId], +/******/ result.outdatedDependencies[moduleId] +/******/ ); +/******/ } +/******/ } +/******/ } +/******/ if (doDispose) { +/******/ addAllToSet(outdatedModules, [result.moduleId]); +/******/ appliedUpdate[moduleId] = warnUnexpectedRequire; +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Store self accepted outdated modules to require them later by the module system +/******/ var outdatedSelfAcceptedModules = []; +/******/ for (i = 0; i < outdatedModules.length; i++) { +/******/ moduleId = outdatedModules[i]; +/******/ if ( +/******/ installedModules[moduleId] && +/******/ installedModules[moduleId].hot._selfAccepted && +/******/ // removed self-accepted modules should not be required +/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire +/******/ ) { +/******/ outdatedSelfAcceptedModules.push({ +/******/ module: moduleId, +/******/ errorHandler: installedModules[moduleId].hot._selfAccepted +/******/ }); +/******/ } +/******/ } +/******/ +/******/ // Now in "dispose" phase +/******/ hotSetStatus("dispose"); +/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) { +/******/ if (hotAvailableFilesMap[chunkId] === false) { +/******/ hotDisposeChunk(chunkId); +/******/ } +/******/ }); +/******/ +/******/ var idx; +/******/ var queue = outdatedModules.slice(); +/******/ while (queue.length > 0) { +/******/ moduleId = queue.pop(); +/******/ module = installedModules[moduleId]; +/******/ if (!module) continue; +/******/ +/******/ var data = {}; +/******/ +/******/ // Call dispose handlers +/******/ var disposeHandlers = module.hot._disposeHandlers; +/******/ for (j = 0; j < disposeHandlers.length; j++) { +/******/ cb = disposeHandlers[j]; +/******/ cb(data); +/******/ } +/******/ hotCurrentModuleData[moduleId] = data; +/******/ +/******/ // disable module (this disables requires from this module) +/******/ module.hot.active = false; +/******/ +/******/ // remove module from cache +/******/ delete installedModules[moduleId]; +/******/ +/******/ // when disposing there is no need to call dispose handler +/******/ delete outdatedDependencies[moduleId]; +/******/ +/******/ // remove "parents" references from all children +/******/ for (j = 0; j < module.children.length; j++) { +/******/ var child = installedModules[module.children[j]]; +/******/ if (!child) continue; +/******/ idx = child.parents.indexOf(moduleId); +/******/ if (idx >= 0) { +/******/ child.parents.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ +/******/ // remove outdated dependency from module children +/******/ var dependency; +/******/ var moduleOutdatedDependencies; +/******/ for (moduleId in outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId) +/******/ ) { +/******/ module = installedModules[moduleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) { +/******/ dependency = moduleOutdatedDependencies[j]; +/******/ idx = module.children.indexOf(dependency); +/******/ if (idx >= 0) module.children.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Now in "apply" phase +/******/ hotSetStatus("apply"); +/******/ +/******/ hotCurrentHash = hotUpdateNewHash; +/******/ +/******/ // insert new code +/******/ for (moduleId in appliedUpdate) { +/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) { +/******/ modules[moduleId] = appliedUpdate[moduleId]; +/******/ } +/******/ } +/******/ +/******/ // call accept handlers +/******/ var error = null; +/******/ for (moduleId in outdatedDependencies) { +/******/ if ( +/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId) +/******/ ) { +/******/ module = installedModules[moduleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId]; +/******/ var callbacks = []; +/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) { +/******/ dependency = moduleOutdatedDependencies[i]; +/******/ cb = module.hot._acceptedDependencies[dependency]; +/******/ if (cb) { +/******/ if (callbacks.indexOf(cb) !== -1) continue; +/******/ callbacks.push(cb); +/******/ } +/******/ } +/******/ for (i = 0; i < callbacks.length; i++) { +/******/ cb = callbacks[i]; +/******/ try { +/******/ cb(moduleOutdatedDependencies); +/******/ } catch (err) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "accept-errored", +/******/ moduleId: moduleId, +/******/ dependencyId: moduleOutdatedDependencies[i], +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Load self accepted modules +/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) { +/******/ var item = outdatedSelfAcceptedModules[i]; +/******/ moduleId = item.module; +/******/ hotCurrentParents = [moduleId]; +/******/ try { +/******/ __webpack_require__(moduleId); +/******/ } catch (err) { +/******/ if (typeof item.errorHandler === "function") { +/******/ try { +/******/ item.errorHandler(err); +/******/ } catch (err2) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-error-handler-errored", +/******/ moduleId: moduleId, +/******/ error: err2, +/******/ originalError: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err2; +/******/ } +/******/ if (!error) error = err; +/******/ } +/******/ } else { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-errored", +/******/ moduleId: moduleId, +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ if (!error) error = err; +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // handle errors in accept handlers and self accepted module load +/******/ if (error) { +/******/ hotSetStatus("fail"); +/******/ return Promise.reject(error); +/******/ } +/******/ +/******/ hotSetStatus("idle"); +/******/ return new Promise(function(resolve) { +/******/ resolve(outdatedModules); +/******/ }); +/******/ } +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {}, +/******/ hot: hotCreateModule(moduleId), +/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp), +/******/ children: [] +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId)); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // __webpack_hash__ +/******/ __webpack_require__.h = function() { return hotCurrentHash; }; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return hotCreateRequire("./imageLoader/index.js")(__webpack_require__.s = "./imageLoader/index.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "../codecs/charLS-FixedMemory-browser.js": +/*!***********************************************!*\ + !*** ../codecs/charLS-FixedMemory-browser.js ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/*! CharLS.js - v2.0.1 - 2016-06-08 | (c) 2016 Chris Hafey | https://github.com/chafey/charls */ + +// Notes: +// - Had to patch parsejsfunc +var CharLS = function(Module) { + Module = Module || {}; + + var Module;if(!Module)Module=(typeof CharLS!=="undefined"?CharLS:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||4e8;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+59744;__ATINIT__.push({func:(function(){__GLOBAL__I_000101()})},{func:(function(){__GLOBAL__sub_I_jpegls_cpp()})},{func:(function(){__GLOBAL__sub_I_iostream_cpp()})});allocate([0,0,0,0,0,0,0,0,84,144,0,0,31,194,0,0,216,0,0,0,0,0,0,0,84,144,0,0,237,191,0,0,48,0,0,0,0,0,0,0,44,144,0,0,41,192,0,0,84,144,0,0,55,192,0,0,48,0,0,0,0,0,0,0,84,144,0,0,115,192,0,0,48,0,0,0,0,0,0,0,84,144,0,0,175,192,0,0,152,3,0,0,0,0,0,0,84,144,0,0,241,192,0,0,216,3,0,0,0,0,0,0,84,144,0,0,55,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,95,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,135,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,175,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,216,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,241,193,0,0,48,0,0,0,0,0,0,0,44,144,0,0,13,194,0,0,84,144,0,0,80,194,0,0,216,0,0,0,0,0,0,0,84,144,0,0,44,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,139,194,0,0,48,0,0,0,0,0,0,0,84,144,0,0,179,194,0,0,48,0,0,0,0,0,0,0,84,144,0,0,219,194,0,0,48,0,0,0,0,0,0,0,84,144,0,0,3,195,0,0,48,0,0,0,0,0,0,0,84,144,0,0,103,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,157,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,211,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,8,196,0,0,216,0,0,0,0,0,0,0,84,144,0,0,71,196,0,0,216,0,0,0,0,0,0,0,84,144,0,0,138,196,0,0,160,1,0,0,0,0,0,0,44,144,0,0,120,196,0,0,84,144,0,0,187,196,0,0,160,1,0,0,0,0,0,0,84,144,0,0,246,196,0,0,160,1,0,0,0,0,0,0,84,144,0,0,49,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,103,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,157,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,210,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,17,198,0,0,160,1,0,0,0,0,0,0,84,144,0,0,86,198,0,0,72,3,0,0,0,0,0,0,84,144,0,0,162,198,0,0,56,2,0,0,0,0,0,0,44,144,0,0,182,198,0,0,84,144,0,0,196,198,0,0,56,2,0,0,0,0,0,0,84,144,0,0,112,199,0,0,96,2,0,0,0,0,0,0,44,144,0,0,125,199,0,0,84,144,0,0,138,199,0,0,96,2,0,0,0,0,0,0,44,144,0,0,156,199,0,0,84,144,0,0,169,199,0,0,96,2,0,0,0,0,0,0,84,144,0,0,181,199,0,0,120,2,0,0,0,0,0,0,84,144,0,0,214,199,0,0,144,2,0,0,0,0,0,0,84,144,0,0,28,200,0,0,144,2,0,0,0,0,0,0,84,144,0,0,248,199,0,0,176,2,0,0,0,0,0,0,84,144,0,0,62,200,0,0,160,2,0,0,0,0,0,0,84,144,0,0,99,200,0,0,160,2,0,0,0,0,0,0,84,144,0,0,182,221,0,0,160,3,0,0,0,0,0,0,84,144,0,0,245,221,0,0,160,3,0,0,0,0,0,0,84,144,0,0,13,222,0,0,152,3,0,0,0,0,0,0,84,144,0,0,38,222,0,0,152,3,0,0,0,0,0,0,44,144,0,0,62,222,0,0,84,144,0,0,87,222,0,0,104,2,0,0,0,0,0,0,44,144,0,0,110,222,0,0,84,144,0,0,135,222,0,0,72,3,0,0,0,0,0,0,84,144,0,0,161,222,0,0,56,3,0,0,0,0,0,0,44,144,0,0,187,222,0,0,84,144,0,0,205,222,0,0,112,3,0,0,0,0,0,0,84,144,0,0,247,222,0,0,112,3,0,0,0,0,0,0,44,144,0,0,33,223,0,0,44,144,0,0,82,223,0,0,124,144,0,0,131,223,0,0,0,0,0,0,1,0,0,0,120,3,0,0,3,244,255,255,124,144,0,0,178,223,0,0,0,0,0,0,1,0,0,0,136,3,0,0,3,244,255,255,124,144,0,0,225,223,0,0,0,0,0,0,1,0,0,0,120,3,0,0,3,244,255,255,124,144,0,0,16,224,0,0,0,0,0,0,1,0,0,0,136,3,0,0,3,244,255,255,84,144,0,0,63,224,0,0,80,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,144,0,0,187,224,0,0,48,3,0,0,0,0,0,0,124,144,0,0,209,224,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,64,10,0,0,2,0,0,0,124,144,0,0,227,224,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,124,144,0,0,5,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,124,144,0,0,40,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,84,144,0,0,75,225,0,0,144,4,0,0,0,0,0,0,84,144,0,0,109,225,0,0,144,4,0,0,0,0,0,0,124,144,0,0,144,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,84,144,0,0,178,225,0,0,32,4,0,0,0,0,0,0,84,144,0,0,200,225,0,0,32,4,0,0,0,0,0,0,84,144,0,0,220,225,0,0,32,4,0,0,0,0,0,0,124,144,0,0,240,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,64,10,0,0,2,0,0,0,84,144,0,0,2,226,0,0,32,4,0,0,0,0,0,0,84,144,0,0,23,226,0,0,32,4,0,0,0,0,0,0,124,144,0,0,44,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,80,10,0,0,0,0,0,0,124,144,0,0,112,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,104,10,0,0,0,0,0,0,124,144,0,0,180,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,128,10,0,0,0,0,0,0,124,144,0,0,248,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,152,10,0,0,0,0,0,0,124,144,0,0,60,227,0,0,0,0,0,0,3,0,0,0,32,4,0,0,2,0,0,0,176,10,0,0,2,0,0,0,184,10,0,0,0,8,0,0,124,144,0,0,129,227,0,0,0,0,0,0,3,0,0,0,32,4,0,0,2,0,0,0,176,10,0,0,2,0,0,0,192,10,0,0,0,8,0,0,124,144,0,0,198,227,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,200,10,0,0,0,8,0,0,124,144,0,0,11,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,200,10,0,0,0,8,0,0,124,144,0,0,80,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,108,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,136,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,164,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,192,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,216,10,0,0,0,0,0,0,124,144,0,0,6,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,224,10,0,0,0,0,0,0,124,144,0,0,76,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,232,10,0,0,0,0,0,0,124,144,0,0,146,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,240,10,0,0,0,0,0,0,124,144,0,0,216,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,248,10,0,0,2,0,0,0,124,144,0,0,237,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,248,10,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,144,0,0,73,233,0,0,44,144,0,0,50,233,0,0,124,144,0,0,28,233,0,0,0,0,0,0,1,0,0,0,8,11,0,0,0,0,0,0,124,144,0,0,237,232,0,0,0,0,0,0,1,0,0,0,8,11,0,0,0,0,0,0,124,144,0,0,215,232,0,0,0,0,0,0,1,0,0,0,0,11,0,0,0,0,0,0,124,144,0,0,168,232,0,0,0,0,0,0,1,0,0,0,0,11,0,0,0,0,0,0,44,144,0,0,149,232,0,0,44,144,0,0,115,232,0,0,44,144,0,0,81,232,0,0,44,144,0,0,60,232,0,0,44,144,0,0,39,232,0,0,44,144,0,0,14,232,0,0,44,144,0,0,245,231,0,0,44,144,0,0,220,231,0,0,44,144,0,0,195,231,0,0,44,144,0,0,171,231,0,0,44,144,0,0,190,232,0,0,44,144,0,0,3,233],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([156,143,0,0,0,0,0,0,8,2,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,248,1,0,0,3,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,232,1,0,0,5,0,0,0,6,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,216,1,0,0,7,0,0,0,8,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,200,1,0,0,9,0,0,0,10,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,184,1,0,0,11,0,0,0,12,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,168,1,0,0,13,0,0,0,14,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,144,1,0,0,15,0,0,0,16,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,128,1,0,0,17,0,0,0,18,0,0,0,9,0,0,0,1,0,0,0,9,0,0,0,0,0,0,0,112,1,0,0,19,0,0,0,20,0,0,0,10,0,0,0,2,0,0,0,10,0,0,0,0,0,0,0,96,1,0,0,21,0,0,0,22,0,0,0,11,0,0,0,3,0,0,0,11,0,0,0,0,0,0,0,80,1,0,0,23,0,0,0,24,0,0,0,12,0,0,0,4,0,0,0,12,0,0,0,0,0,0,0,64,1,0,0,25,0,0,0,26,0,0,0,13,0,0,0,5,0,0,0,13,0,0,0,0,0,0,0,240,0,0,0,27,0,0,0,28,0,0,0,14,0,0,0,6,0,0,0,14,0,0,0,0,0,0,0,224,0,0,0,29,0,0,0,30,0,0,0,15,0,0,0,7,0,0,0,15,0,0,0,0,0,0,0,16,0,0,0,31,0,0,0,32,0,0,0,16,0,0,0,8,0,0,0,16,0,0,0,0,0,0,0,200,0,0,0,33,0,0,0,34,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,184,0,0,0,33,0,0,0,35,0,0,0,3,0,0,0,4,0,0,0,56,0,0,0,0,0,0,0,216,3,0,0,36,0,0,0,37,0,0,0,200,255,255,255,200,255,255,255,216,3,0,0,38,0,0,0,39,0,0,0,56,0,0,0,0,0,0,0,104,0,0,0,40,0,0,0,41,0,0,0,200,255,255,255,200,255,255,255,104,0,0,0,42,0,0,0,43,0,0,0,0,0,0,0,88,0,0,0,44,0,0,0,45,0,0,0,17,0,0,0,1,0,0,0,1,0,0,0,5,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,17,0,0,0,3,0,0,0,18,0,0,0,104,141,0,0,64,141,0,0,84,141,0,0,124,141,0,0,0,0,0,0,32,0,0,0,46,0,0,0,47,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,56,0,0,0,48,0,0,0,49,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,72,0,0,0,50,0,0,0,51,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,120,0,0,0,52,0,0,0,53,0,0,0,12,0,0,0,13,0,0,0,0,0,0,0,136,0,0,0,54,0,0,0,55,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,152,0,0,0,56,0,0,0,57,0,0,0,16,0,0,0,17,0,0,0,0,0,0,0,168,0,0,0,58,0,0,0,59,0,0,0,18,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,216,0,0,0,60,0,0,0,61,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,62,0,0,0,63,0,0,0,20,0,0,0,21,0,0,0,0,0,0,0,16,1,0,0,64,0,0,0,65,0,0,0,22,0,0,0,23,0,0,0,0,0,0,0,32,1,0,0,66,0,0,0,67,0,0,0,24,0,0,0,25,0,0,0,0,0,0,0,48,1,0,0,68,0,0,0,69,0,0,0,26,0,0,0,27,0,0,0,0,0,0,0,160,1,0,0,70,0,0,0,71,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,24,2,0,0,72,0,0,0,73,0,0,0,5,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,0,0,0,0,40,2,0,0,74,0,0,0,75,0,0,0,18,0,0,0,0,0,0,0,64,2,0,0,76,0,0,0,77,0,0,0,19,0,0,0,2,0,0,0,0,0,0,0,80,2,0,0,78,0,0,0,79,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,104,2,0,0,80,0,0,0,81,0,0,0,7,0,0,0,0,0,0,0,128,2,0,0,82,0,0,0,83,0,0,0,8,0,0,0,0,0,0,0,160,2,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,6,0,0,0,2,0,0,0,9,0,0,0,28,0,0,0,0,0,0,0,208,2,0,0,84,0,0,0,88,0,0,0,86,0,0,0,87,0,0,0,6,0,0,0,3,0,0,0,10,0,0,0,29,0,0,0,0,0,0,0,224,2,0,0,84,0,0,0,89,0,0,0,86,0,0,0,87,0,0,0,6,0,0,0,4,0,0,0,11,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,1,203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,192,3,0,0,192,4,0,0,192,5,0,0,192,6,0,0,192,7,0,0,192,8,0,0,192,9,0,0,192,10,0,0,192,11,0,0,192,12,0,0,192,13,0,0,192,14,0,0,192,15,0,0,192,16,0,0,192,17,0,0,192,18,0,0,192,19,0,0,192,20,0,0,192,21,0,0,192,22,0,0,192,23,0,0,192,24,0,0,192,25,0,0,192,26,0,0,192,27,0,0,192,28,0,0,192,29,0,0,192,30,0,0,192,31,0,0,192,0,0,0,179,1,0,0,195,2,0,0,195,3,0,0,195,4,0,0,195,5,0,0,195,6,0,0,195,7,0,0,195,8,0,0,195,9,0,0,195,10,0,0,195,11,0,0,195,12,0,0,195,13,0,0,211,14,0,0,195,15,0,0,195,0,0,12,187,1,0,12,195,2,0,12,195,3,0,12,195,4,0,12,211,88,146,0,0,200,146,0,0,56,147,0,0,56,147,0,0,120,187,0,0,168,155,0,0,168,149,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,9,0,0,0,159,219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,9,0,0,0,151,215,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,9,0,0,0,143,211,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+35640);allocate([1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+39844);allocate([240,2,0,0,90,0,0,0,91,0,0,0,20,0,0,0,12,0,0,0,5,0,0,0,31,0,0,0,10,0,0,0,11,0,0,0,13,0,0,0,12,0,0,0,13,0,0,0,19,0,0,0,14,0,0,0,20,0,0,0,0,0,0,0,0,3,0,0,90,0,0,0,92,0,0,0,21,0,0,0,12,0,0,0,5,0,0,0,31,0,0,0,14,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,16,0,0,0,21,0,0,0,15,0,0,0,22,0,0,0,0,0,0,0,16,3,0,0,93,0,0,0,94,0,0,0,22,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,17,0,0,0,2,0,0,0,2,0,0,0,18,0,0,0,4,0,0,0,23,0,0,0,16,0,0,0,24,0,0,0,0,0,0,0,32,3,0,0,93,0,0,0,95,0,0,0,23,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,19,0,0,0,20,0,0,0,25,0,0,0,3,0,0,0,26,0,0,0,0,0,0,0,56,3,0,0,96,0,0,0,97,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,3,0,0,93,0,0,0,98,0,0,0,17,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,18,0,0,0,4,0,0,0,23,0,0,0,3,0,0,0,26,0,0,0,0,0,0,0,160,3,0,0,90,0,0,0,99,0,0,0,24,0,0,0,12,0,0,0,5,0,0,0,31,0,0,0,14,0,0,0,11,0,0,0,13,0,0,0,12,0,0,0,13,0,0,0,19,0,0,0,15,0,0,0,22,0,0,0,8,0,0,0,0,0,0,0,168,3,0,0,100,0,0,0,101,0,0,0,248,255,255,255,248,255,255,255,168,3,0,0,102,0,0,0,103,0,0,0,8,0,0,0,0,0,0,0,192,3,0,0,104,0,0,0,105,0,0,0,248,255,255,255,248,255,255,255,192,3,0,0,106,0,0,0,107,0,0,0,4,0,0,0,0,0,0,0,216,3,0,0,36,0,0,0,37,0,0,0,252,255,255,255,252,255,255,255,216,3,0,0,38,0,0,0,39,0,0,0,4,0,0,0,0,0,0,0,240,3,0,0,108,0,0,0,109,0,0,0,252,255,255,255,252,255,255,255,240,3,0,0,110,0,0,0,111,0,0,0,0,0,0,0,96,3,0,0,112,0,0,0,113,0,0,0,7,0,0,0,0,0,0,0,112,3,0,0,114,0,0,0,115,0,0,0,0,0,0,0,8,4,0,0,72,0,0,0,116,0,0,0,21,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,117,0,0,0,118,0,0,0,119,0,0,0,1,0,0,0,33,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,5,0,0,120,0,0,0,121,0,0,0,119,0,0,0,2,0,0,0,34,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,5,0,0,122,0,0,0,123,0,0,0,119,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,5,0,0,124,0,0,0,125,0,0,0,119,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,5,0,0,126,0,0,0,127,0,0,0,119,0,0,0,3,0,0,0,4,0,0,0,23,0,0,0,5,0,0,0,24,0,0,0,1,0,0,0,2,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,5,0,0,128,0,0,0,129,0,0,0,119,0,0,0,7,0,0,0,8,0,0,0,25,0,0,0,9,0,0,0,26,0,0,0,3,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,5,0,0,130,0,0,0,131,0,0,0,119,0,0,0,22,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,1,0,0,0,248,255,255,255,224,5,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,132,0,0,0,133,0,0,0,119,0,0,0,30,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,2,0,0,0,248,255,255,255,8,6,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,6,0,0,134,0,0,0,135,0,0,0,119,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,6,0,0,136,0,0,0,137,0,0,0,119,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,6,0,0,138,0,0,0,139,0,0,0,119,0,0,0,38,0,0,0,39,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,40,0,0,0,29,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,6,0,0,140,0,0,0,141,0,0,0,119,0,0,0,41,0,0,0,42,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,43,0,0,0,35,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,6,0,0,142,0,0,0,143,0,0,0,119,0,0,0,44,0,0,0,45,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,46,0,0,0,41,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,6,0,0,144,0,0,0,145,0,0,0,119,0,0,0,47,0,0,0,48,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,49,0,0,0,47,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,6,0,0,146,0,0,0,147,0,0,0,119,0,0,0,3,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,7,0,0,148,0,0,0,149,0,0,0,119,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,7,0,0,150,0,0,0,151,0,0,0,119,0,0,0,1,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,7,0,0,152,0,0,0,153,0,0,0,119,0,0,0,2,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,7,0,0,154,0,0,0,155,0,0,0,119,0,0,0,19,0,0,0,7,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,7,0,0,156,0,0,0,157,0,0,0,119,0,0,0,20,0,0,0,8,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,4,0,0,158,0,0,0,159,0,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,5,0,0,160,0,0,0,161,0,0,0,119,0,0,0,27,0,0,0,21,0,0,0,28,0,0,0,22,0,0,0,29,0,0,0,9,0,0,0,23,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,4,0,0,162,0,0,0,163,0,0,0,119,0,0,0,3,0,0,0,4,0,0,0,12,0,0,0,50,0,0,0,51,0,0,0,13,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,5,0,0,164,0,0,0,165,0,0,0,119,0,0,0,53,0,0,0,54,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,0,0,0,0,80,5,0,0,166,0,0,0,167,0,0,0,119,0,0,0,55,0,0,0,56,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,0,0,0,0,32,4,0,0,168,0,0,0,169,0,0,0,119,0,0,0,0,0,0,0,48,4,0,0,168,0,0,0,170,0,0,0,119,0,0,0,24,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,30,0,0,0,25,0,0,0,31,0,0,0,26,0,0,0,32,0,0,0,13,0,0,0,27,0,0,0,14,0,0,0,0,0,0,0,80,4,0,0,168,0,0,0,171,0,0,0,119,0,0,0,5,0,0,0,6,0,0,0,15,0,0,0,57,0,0,0,58,0,0,0,16,0,0,0,59,0,0,0,0,0,0,0,112,4,0,0,168,0,0,0,172,0,0,0,119,0,0,0,7,0,0,0,8,0,0,0,17,0,0,0,60,0,0,0,61,0,0,0,18,0,0,0,62,0,0,0,0,0,0,0,144,4,0,0,168,0,0,0,173,0,0,0,119,0,0,0,9,0,0,0,10,0,0,0,19,0,0,0,63,0,0,0,64,0,0,0,20,0,0,0,65,0,0,0,0,0,0,0,176,4,0,0,168,0,0,0,174,0,0,0,119,0,0,0,9,0,0,0,10,0,0,0,19,0,0,0,63,0,0,0,64,0,0,0,20,0,0,0,65,0,0,0,0,0,0,0,192,4,0,0,168,0,0,0,175,0,0,0,119,0,0,0,9,0,0,0,10,0,0,0,19,0,0,0,63,0,0,0,64,0,0,0,20,0,0,0,65,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,37,0,0,0,89,0,0,0,45,0,0,0,37,0,0,0,109,0,0,0,45,0,0,0,37,0,0,0,100,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,114,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,102,0,0,0,97,0,0,0,108,0,0,0,115,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,110,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,114,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,117,0,0,0,114,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,114,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,99,0,0,0,104,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,105,0,0,0,108,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,101,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,121,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,117,0,0,0,115,0,0,0,116,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,116,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,111,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,77,0,0,0,0,0,0,0,80,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,97,0,0,0,32,0,0,0,37,0,0,0,98,0,0,0,32,0,0,0,37,0,0,0,100,0,0,0,32,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,3,32,2,32,2,32,2,32,2,32,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,1,96,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,213,8,213,8,213,8,213,8,213,8,213,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,4,192,4,192,4,192,4,192,4,192,4,192,8,214,8,214,8,214,8,214,8,214,8,214,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,4,192,4,192,4,192,4,192,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,97,119,83,116,114,101,97,109,32,111,114,32,114,97,119,68,97,116,97,32,110,101,101,100,115,32,116,111,32,114,101,102,101,114,101,110,99,101,32,116,111,32,115,111,109,101,116,104,105,110,103,0,119,105,100,116,104,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,49,44,32,54,53,53,51,53,93,0,104,101,105,103,104,116,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,49,44,32,54,53,53,51,53,93,0,98,105,116,115,112,101,114,115,97,109,112,108,101,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,50,44,32,49,54,93,0,105,110,116,101,114,108,101,97,118,101,77,111,100,101,32,110,101,101,100,115,32,116,111,32,98,101,32,115,101,116,32,116,111,32,97,32,118,97,108,117,101,32,111,102,32,123,78,111,110,101,44,32,83,97,109,112,108,101,44,32,76,105,110,101,125,0,99,111,109,112,111,110,101,110,116,115,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,49,44,32,50,53,53,93,0,117,110,99,111,109,112,114,101,115,115,101,100,32,115,105,122,101,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,119,105,116,104,32,116,104,101,32,111,116,104,101,114,32,112,97,114,97,109,101,116,101,114,115,0,105,110,116,101,114,108,101,97,118,101,77,111,100,101,32,99,97,110,110,111,116,32,98,101,32,115,101,116,32,116,111,32,83,97,109,112,108,101,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,99,111,109,112,111,110,101,110,116,115,32,61,32,52,0,105,110,116,101,114,108,101,97,118,101,77,111,100,101,32,99,97,110,32,111,110,108,121,32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,99,111,109,112,111,110,101,110,116,115,32,61,32,49,0,67,111,108,111,114,32,116,114,97,110,115,102,111,114,109,97,116,105,111,110,32,0,78,111,32,109,111,114,101,32,98,121,116,101,115,32,97,118,97,105,108,97,98,108,101,32,105,110,32,105,110,112,117,116,32,98,117,102,102,101,114,44,32,115,116,105,108,108,32,110,101,101,100,101,100,105,110,103,32,0,65,110,32,111,100,100,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,40,0,41,32,99,97,110,110,111,116,32,98,101,32,115,119,97,112,112,101,100,46,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,54,84,114,97,110,115,102,111,114,109,83,104,105,102,116,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,51,73,116,69,69,69,0,49,49,80,114,111,99,101,115,115,76,105,110,101,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,54,84,114,97,110,115,102,111,114,109,83,104,105,102,116,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,50,73,116,69,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,54,84,114,97,110,115,102,111,114,109,83,104,105,102,116,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,49,73,116,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,105,110,103,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,57,98,97,115,105,99,95,111,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,51,73,116,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,50,73,116,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,49,73,116,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,51,84,114,97,110,115,102,111,114,109,78,111,110,101,73,116,69,69,0,50,50,80,111,115,116,80,114,111,99,101,115,83,105,110,103,108,101,83,116,114,101,97,109,0,50,53,80,111,115,116,80,114,111,99,101,115,83,105,110,103,108,101,67,111,109,112,111,110,101,110,116,0,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,116,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,55,84,114,105,112,108,101,116,73,116,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,51,73,104,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,50,73,104,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,49,73,104,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,51,84,114,97,110,115,102,111,114,109,78,111,110,101,73,104,69,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,55,84,114,105,112,108,101,116,73,104,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,54,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,50,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,104,76,105,56,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,55,84,114,105,112,108,101,116,73,104,69,76,105,56,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,104,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,116,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,55,84,114,105,112,108,101,116,73,116,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,55,84,114,105,112,108,101,116,73,104,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,54,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,50,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,104,76,105,56,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,55,84,114,105,112,108,101,116,73,104,69,76,105,56,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,104,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,67,104,97,114,76,83,32,101,114,114,111,114,0,99,104,97,114,108,115,0,49,53,99,104,97,114,108,115,95,99,97,116,101,103,111,114,121,0,112,97,114,97,109,115,46,88,116,104,117,109,98,110,97,105,108,32,105,115,32,62,32,48,32,98,117,116,32,112,97,114,97,109,115,46,116,104,117,109,98,110,97,105,108,32,61,61,32,110,117,108,108,95,112,116,114,0,49,55,74,112,101,103,77,97,114,107,101,114,83,101,103,109,101,110,116,0,49,49,74,112,101,103,83,101,103,109,101,110,116,0,50,48,74,112,101,103,73,109,97,103,101,68,97,116,97,83,101,103,109,101,110,116,0,69,120,112,101,99,116,101,100,32,74,80,69,71,32,77,97,114,107,101,114,32,115,116,97,114,116,32,98,121,116,101,32,48,120,70,70,32,98,117,116,32,116,104,101,32,98,121,116,101,32,118,97,108,117,101,32,119,97,115,32,48,120,0,74,80,69,71,32,101,110,99,111,100,105,110,103,32,119,105,116,104,32,109,97,114,107,101,114,32,0,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,85,110,107,110,111,119,110,32,74,80,69,71,32,109,97,114,107,101,114,32,0,32,101,110,99,111,117,110,116,101,114,101,100,46,0,109,114,102,120,0,83,116,57,98,97,100,95,97,108,108,111,99,0,83,116,57,101,120,99,101,112,116,105,111,110,0,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,0,83,116,57,116,121,112,101,95,105,110,102,111,0,83,116,56,98,97,100,95,99,97,115,116,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,99,104,97,102,101,121,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,49,46,51,53,46,48,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,115,116,114,105,110,103,0,95,95,116,104,114,111,119,95,108,101,110,103,116,104,95,101,114,114,111,114,0,33,34,118,101,99,116,111,114,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,99,104,97,102,101,121,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,49,46,51,53,46,48,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,118,101,99,116,111,114,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,116,104,114,101,119,32,97,110,32,101,120,99,101,112,116,105,111,110,0,115,116,100,58,58,98,97,100,95,99,97,115,116,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+42396);allocate([32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,105,110,102,105,110,105,116,121,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,80,79,83,73,88],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+52636);allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,119,69,69,0,117,110,115,117,112,112,111,114,116,101,100,32,108,111,99,97,108,101,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,52,95,95,115,104,97,114,101,100,95,99,111,117,110,116,69,0,78,83,116,51,95,95,49,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,0,78,83,116,51,95,95,49,49,52,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,78,83,116,51,95,95,49,49,50,95,95,100,111,95,109,101,115,115,97,103,101,69,0,58,32,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,55,102,97,105,108,117,114,101,69,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,57,95,95,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,69,0,105,111,115,95,98,97,115,101,58,58,99,108,101,97,114,0,105,111,115,116,114,101,97,109,0,117,110,115,112,101,99,105,102,105,101,100,32,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,65,66,67,68,69,70,120,88,43,45,112,80,105,73,110,78,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,102,97,99,101,116,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,99,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,115,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,105,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,119,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,95,95,105,109,112,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,99,69,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,119,69,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,119,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,99,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,119,69,69,0,37,112,0,67,0,37,0,0,0,0,0,108,0,108,108,0,0,76,0,37,112,0,0,0,0,37,72,58,37,77,58,37,83,37,109,47,37,100,47,37,121,37,89,45,37,109,45,37,100,37,73,58,37,77,58,37,83,32,37,112,37,72,58,37,77,37,72,58,37,77,58,37,83,108,111,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,48,49,50,51,52,53,54,55,56,57,0,37,76,102,0,109,111,110,101,121,95,103,101,116,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,0,37,46,48,76,102,0,116,114,117,101,0,102,97,108,115,101,0,83,117,110,100,97,121,0,77,111,110,100,97,121,0,84,117,101,115,100,97,121,0,87,101,100,110,101,115,100,97,121,0,84,104,117,114,115,100,97,121,0,70,114,105,100,97,121,0,83,97,116,117,114,100,97,121,0,83,117,110,0,77,111,110,0,84,117,101,0,87,101,100,0,84,104,117,0,70,114,105,0,83,97,116,0,74,97,110,117,97,114,121,0,70,101,98,114,117,97,114,121,0,77,97,114,99,104,0,65,112,114,105,108,0,77,97,121,0,74,117,110,101,0,74,117,108,121,0,65,117,103,117,115,116,0,83,101,112,116,101,109,98,101,114,0,79,99,116,111,98,101,114,0,78,111,118,101,109,98,101,114,0,68,101,99,101,109,98,101,114,0,74,97,110,0,70,101,98,0,77,97,114,0,65,112,114,0,74,117,110,0,74,117,108,0,65,117,103,0,83,101,112,0,79,99,116,0,78,111,118,0,68,101,99,0,65,77,0,80,77,0,37,109,47,37,100,47,37,121,0,37,72,58,37,77,58,37,83,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,37,73,58,37,77,58,37,83,32,37,112,0,78,83,116,51,95,95,49,49,51,109,101,115,115,97,103,101,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,112,117,116,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,119,69,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,99,69,69,0,78,83,116,51,95,95,49,57,116,105,109,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,112,117,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,103,101,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,111,100,101,99,118,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,99,116,121,112,101,95,98,97,115,101,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+56215);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function _atexit(func,arg){__ATEXIT__.unshift({func:func,arg:arg})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}Module["_i64Subtract"]=_i64Subtract;function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall("vi",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["setTempRet0"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr}Module["_memset"]=_memset;var _BDtoILow=true;var _emscripten_resume=true;function ___gxx_personality_v0(){}var _emscripten_landingpad=true;function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?Pointer_stringify(tm_zone):""};var pattern=Pointer_stringify(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":(function(date){return WEEKDAYS[date.tm_wday].substring(0,3)}),"%A":(function(date){return WEEKDAYS[date.tm_wday]}),"%b":(function(date){return MONTHS[date.tm_mon].substring(0,3)}),"%B":(function(date){return MONTHS[date.tm_mon]}),"%C":(function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)}),"%d":(function(date){return leadingNulls(date.tm_mday,2)}),"%e":(function(date){return leadingSomething(date.tm_mday,2," ")}),"%g":(function(date){return getWeekBasedYear(date).toString().substring(2)}),"%G":(function(date){return getWeekBasedYear(date)}),"%H":(function(date){return leadingNulls(date.tm_hour,2)}),"%I":(function(date){return leadingNulls(date.tm_hour<13?date.tm_hour:date.tm_hour-12,2)}),"%j":(function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)}),"%m":(function(date){return leadingNulls(date.tm_mon+1,2)}),"%M":(function(date){return leadingNulls(date.tm_min,2)}),"%n":(function(){return"\n"}),"%p":(function(date){if(date.tm_hour>0&&date.tm_hour<13){return"AM"}else{return"PM"}}),"%S":(function(date){return leadingNulls(date.tm_sec,2)}),"%t":(function(){return"\t"}),"%u":(function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7}),"%U":(function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"}),"%V":(function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)}),"%Z":(function(date){return date.tm_zone}),"%%":(function(){return"%"})};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _abort(){Module["abort"]()}function _free(){}Module["_free"]=_free;function ___cxa_free_exception(ptr){try{return _free(ptr)}catch(e){}}function ___cxa_end_catch(){if(___cxa_end_catch.rethrown){___cxa_end_catch.rethrown=false;return}asm["setThrew"](0);var ptr=EXCEPTIONS.caught.pop();if(ptr){EXCEPTIONS.decRef(EXCEPTIONS.deAdjust(ptr));EXCEPTIONS.last=0}}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Runtime.dynCall("v",func);_pthread_once.seen[ptr]=1}function ___lock(){}function ___unlock(){}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}var _fabs=Math_abs;var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}var PATH=undefined;function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(!window["setImmediate"]){var setImmediates=[];var emscriptenMainLoopMessageId="__emcc";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener("message",Browser_setImmediate_messageHandler,true);window["setImmediate"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window["setImmediate"](Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["_i64Add"]=_i64Add;Module["_bitshift64Lshr"]=_bitshift64Lshr;function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}var _BDtoIHigh=true;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cond_broadcast(){return 0}function ___cxa_guard_acquire(variable){if(!HEAP8[variable>>0]){HEAP8[variable>>0]=1;return 1}return 0}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function ___cxa_guard_release(){}function ___cxa_begin_catch(ptr){__ZSt18uncaught_exceptionv.uncaught_exception--;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}function _llvm_eh_typeid_for(type){return type}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_mutex_lock(){}var _emscripten_postinvoke=true;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}Module["_bitshift64Shl"]=_bitshift64Shl;function ___cxa_guard_abort(){}Module["_memmove"]=_memmove;var _emscripten_preinvoke=true;var _BItoD=true;function _pthread_cond_wait(){return 0}function ___cxa_rethrow(){___cxa_end_catch.rethrown=true;var ptr=EXCEPTIONS.caught.pop();EXCEPTIONS.last=ptr;throw ptr}function _pthread_mutex_unlock(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer)___syscall146.buffer=[];var buffer=___syscall146.buffer;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function $b(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function ac(a){a=a|0;D=a}function bc(){return D|0}function cc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+128|0;p=w+44|0;s=w+8|0;l=w+4|0;n=w;q=e+4|0;r=e+8|0;o=0;Aa(35,c[e>>2]|0,c[q>>2]|0,c[r>>2]|0,f|0);m=o;o=0;if(!(m&1)){j=p;h=j+84|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(h|0));f=p+12|0;if((c[f>>2]|0)==0?(k=$(((c[p+8>>2]|0)+7|0)/8|0,c[p>>2]|0)|0,c[f>>2]=k,(c[p+24>>2]|0)!=0):0)c[f>>2]=$(c[p+16>>2]|0,k)|0;o=0;ha(176,s|0);m=o;o=0;if(!(m&1)){f=p+56|0;do if(c[f>>2]|0){o=0;f=ka(66,f|0)|0;m=o;o=0;if(!(m&1)){c[l>>2]=f;h=s+28|0;j=c[h>>2]|0;if(j>>>0<(c[s+32>>2]|0)>>>0){c[j>>2]=f;c[h>>2]=j+4;c[l>>2]=0;t=19;break}o=0;ia(57,s+24|0,l|0);m=o;o=0;if(m&1){h=Na(824,0)|0;f=D;j=c[l>>2]|0;c[l>>2]=0;if(!j)break;Bb[c[(c[j>>2]|0)+4>>2]&255](j);break}else{f=c[l>>2]|0;c[l>>2]=0;if(!f){t=19;break}Bb[c[(c[f>>2]|0)+4>>2]&255](f);t=19;break}}else t=15}else t=19;while(0);a:do if((t|0)==19){j=p+4|0;k=p+8|0;l=p+16|0;o=0;f=va(14,c[p>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;m=o;o=0;if(!(m&1)){c[n>>2]=f;m=s+28|0;h=c[m>>2]|0;do if(h>>>0>=(c[s+32>>2]|0)>>>0){o=0;ia(57,s+24|0,n|0);h=o;o=0;if(h&1){h=Na(824,0)|0;f=D;j=c[n>>2]|0;c[n>>2]=0;if(!j)break a;Bb[c[(c[j>>2]|0)+4>>2]&255](j);break a}else{f=c[n>>2]|0;c[n>>2]=0;if(!f)break;Bb[c[(c[f>>2]|0)+4>>2]&255](f);break}}else{c[h>>2]=f;c[m>>2]=h+4;c[n>>2]=0}while(0);f=c[p+28>>2]|0;if((f|0)!=0?(o=0,ia(58,s|0,f|0),t=o,o=0,t&1):0){t=15;break}b:do if(!(c[p+24>>2]|0)){f=$(c[j>>2]|0,c[p>>2]|0)|0;f=$(f,((c[k>>2]|0)+7|0)/8|0)|0;if((c[l>>2]|0)>0){j=0;while(1){o=0;wa(4,s|0,e|0,p|0);t=o;o=0;if(t&1)break;h=c[q>>2]|0;if(h){c[q>>2]=h+f;c[r>>2]=(c[r>>2]|0)-f}j=j+1|0;if((j|0)>=(c[l>>2]|0))break b}h=Na(824,0)|0;f=D;t=16;break a}}else{o=0;wa(4,s|0,e|0,p|0);t=o;o=0;if(t&1){t=15;break a}}while(0);o=0;ra(33,s|0,b|0)|0;t=o;o=0;if(!(t&1)){c[d>>2]=c[s+16>>2];if(g)a[g>>0]=0;j=s+24|0;f=c[j>>2]|0;if(f){h=c[m>>2]|0;if((h|0)!=(f|0)){do{g=h+-4|0;c[m>>2]=g;h=c[g>>2]|0;c[g>>2]=0;if(h)Bb[c[(c[h>>2]|0)+4>>2]&255](h);h=c[m>>2]|0}while((h|0)!=(f|0));f=c[j>>2]|0}cj(f)}g=0;i=w;return g|0}else t=15}else t=15}while(0);if((t|0)==15){h=Na(824,0)|0;f=D;t=16}m=s+24|0;j=c[m>>2]|0;if(j){l=s+28|0;k=c[l>>2]|0;if((k|0)!=(j|0)){do{s=k+-4|0;c[l>>2]=s;k=c[s>>2]|0;c[s>>2]=0;if(k)Bb[c[(c[k>>2]|0)+4>>2]&255](k);k=c[l>>2]|0}while((k|0)!=(j|0));j=c[m>>2]|0}cj(j)}}else t=5}else t=5;if((t|0)==5){h=Na(824,0)|0;f=D}s=(f|0)==(Ta(824)|0);k=Va(h|0)|0;f=(g|0)==0;if(!s){if(!f)a[g>>0]=0;Xa();g=14;i=w;return g|0}j=k+12|0;do if(!f){f=c[j>>2]|0;o=0;h=ua(1)|0;s=o;o=0;if(!(s&1))if((f|0)==(h|0)){ml(g,Eb[c[(c[k>>2]|0)+8>>2]&127](k)|0)|0;t=60;break}else{a[g>>0]=0;t=60;break}}else t=60;while(0);if((t|0)==60?(u=c[j>>2]|0,o=0,v=ua(1)|0,g=o,o=0,!(g&1)):0){g=(u|0)==(v|0)?c[k+8>>2]|0:13;Xa();i=w;return g|0}f=Na()|0;o=0;xa(3);w=o;o=0;if(w&1){w=Na(0)|0;ec(w)}else Ya(f|0);return 0}function dc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;l=i;i=i+112|0;g=l+96|0;k=l+84|0;m=l+72|0;n=l+60|0;p=l+48|0;q=l+36|0;r=l+24|0;s=l+12|0;t=l;j=(b|0)==0;if((a|0)==0&j){f=Ma(16)|0;o=0;wa(5,g|0,48504,52);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,g|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(g);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}h=c[e>>2]|0;if((h+-1|0)>>>0>65534){f=Ma(16)|0;o=0;wa(5,k|0,48557,41);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,k|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(k);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}g=c[e+4>>2]|0;if((g+-1|0)>>>0>65534){f=Ma(16)|0;o=0;wa(5,m|0,48599,42);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,m|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(m);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}f=c[e+8>>2]|0;if((f+-2|0)>>>0>14){f=Ma(16)|0;o=0;wa(5,n|0,48642,46);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,n|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(n);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}a=c[e+24>>2]|0;if(a>>>0>=3){f=Ma(16)|0;o=0;wa(5,p|0,48689,65);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,p|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(p);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}b=c[e+16>>2]|0;if((b+-1|0)>>>0>254){f=Ma(16)|0;o=0;wa(5,q|0,48755,44);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,q|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(q);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}if(!j?(q=$(g,h)|0,($($(q,(f|0)>8?2:1)|0,b)|0)>>>0>d>>>0):0){f=Ma(16)|0;o=0;wa(5,r|0,48800,58);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,r|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(r);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}switch(b|0){case 4:{if((a|0)!=2){i=l;return}f=Ma(16)|0;o=0;wa(5,s|0,48859,73);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,s|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(s);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}case 3:{i=l;return}default:{if(!a){i=l;return}f=Ma(16)|0;o=0;wa(5,t|0,48933,73);s=o;o=0;if(!(s&1)){o=0;b=ua(1)|0;s=o;o=0;if(!(s&1)?(o=0,Aa(36,f|0,1,b|0,t|0),s=o,o=0,!(s&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(t);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}}}function ec(a){a=a|0;Va(a|0)|0;jj()}function fc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;h=n+116|0;j=n;o=0;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];ia(59,j|0,h|0);g=o;o=0;if(!(g&1)){if(e){g=j+16|0;d=g+84|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(d|0))}o=0;c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];ia(60,j|0,h|0);j=o;o=0;if(!(j&1)){if(f)a[f>>0]=0;m=0;i=n;return m|0}}b=Na(824,0)|0;j=D;j=(j|0)==(Ta(824)|0);b=Va(b|0)|0;d=(f|0)==0;if(!j){if(!d)a[f>>0]=0;Xa();m=14;i=n;return m|0}g=b+12|0;do if(!d){d=c[g>>2]|0;o=0;e=ua(1)|0;j=o;o=0;if(!(j&1))if((d|0)==(e|0)){ml(f,Eb[c[(c[b>>2]|0)+8>>2]&127](b)|0)|0;m=10;break}else{a[f>>0]=0;m=10;break}}else m=10;while(0);if((m|0)==10?(k=c[g>>2]|0,o=0,l=ua(1)|0,m=o,o=0,!(m&1)):0){m=(k|0)==(l|0)?c[b+8>>2]|0:13;Xa();i=n;return m|0}d=Na()|0;o=0;xa(3);n=o;o=0;if(n&1){n=Na(0)|0;ec(n)}else Ya(d|0);return 0}function gc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+128|0;g=l+116|0;f=l;o=0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];ia(59,f|0,g|0);g=o;o=0;if((!(g&1)?(o=0,ha(177,f|0),g=o,o=0,!(g&1)):0)?(o=0,ia(61,f|0,1),g=o,o=0,!(g&1)):0){b=f+16|0;f=d+84|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(f|0));if(e)a[e>>0]=0;e=0;i=l;return e|0}g=Na(824,0)|0;d=D;d=(d|0)==(Ta(824)|0);g=Va(g|0)|0;b=(e|0)==0;if(!d){if(!b)a[e>>0]=0;Xa();e=14;i=l;return e|0}d=g+12|0;do if(!b){b=c[d>>2]|0;o=0;f=ua(1)|0;m=o;o=0;if(!(m&1))if((b|0)==(f|0)){ml(e,Eb[c[(c[g>>2]|0)+8>>2]&127](g)|0)|0;k=13;break}else{a[e>>0]=0;k=13;break}}else k=13;while(0);if((k|0)==13?(h=c[d>>2]|0,o=0,j=ua(1)|0,m=o,o=0,!(m&1)):0){m=(h|0)==(j|0)?c[g+8>>2]|0:13;Xa();i=l;return m|0}b=Na()|0;o=0;xa(3);m=o;o=0;if(m&1){m=Na(0)|0;ec(m)}else Ya(b|0);return 0}function hc(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;k=n+36|0;j=n+24|0;l=n+12|0;m=n;if(!((a|0)!=0&(d|0)!=0&(e|0)!=0&(g|0)!=0)){f=1;i=n;return f|0}c[l>>2]=0;c[l+4>>2]=a;c[l+8>>2]=b;c[m>>2]=0;c[m+4>>2]=e;c[m+8>>2]=f;c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];f=cc(j,d,k,g,h)|0;i=n;return f|0}function ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+32|0;g=f+12|0;h=f;j=h;c[j>>2]=0;c[j+4>>2]=0;c[h+4>>2]=a;c[h+8>>2]=b;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];d=gc(g,d,e)|0;i=f;return d|0}function jc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+48|0;j=h+36|0;k=h+24|0;m=h+12|0;l=h;c[m>>2]=0;c[m+4>>2]=a;c[m+8>>2]=b;c[l>>2]=0;c[l+4>>2]=d;c[l+8>>2]=e;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];e=fc(k,j,f,g)|0;i=h;return e|0}function kc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=a+4|0;d=c[a>>2]|0;f=((c[k>>2]|0)-d>>2)+1|0;if(f>>>0>1073741823){$i(a);d=c[a>>2]|0}l=a+8|0;e=(c[l>>2]|0)-d|0;if(e>>2>>>0<536870911){e=e>>1;e=e>>>0>>0?f:e;d=(c[k>>2]|0)-d>>2;if(!e){g=0;h=0}else i=6}else{e=1073741823;d=(c[k>>2]|0)-d>>2;i=6}if((i|0)==6){g=e;h=bj(e<<2)|0}f=h+(d<<2)|0;e=f;j=h+(g<<2)|0;i=c[b>>2]|0;c[b>>2]=0;c[f>>2]=i;i=h+(d+1<<2)|0;h=c[a>>2]|0;d=c[k>>2]|0;if((d|0)==(h|0)){f=a;g=k}else{do{d=d+-4|0;b=c[d>>2]|0;c[d>>2]=0;c[f+-4>>2]=b;f=e+-4|0;e=f}while((d|0)!=(h|0));d=e;f=a;g=k;e=d;h=c[a>>2]|0;d=c[k>>2]|0}c[f>>2]=e;c[g>>2]=i;c[l>>2]=j;f=h;if((d|0)!=(f|0))do{d=d+-4|0;e=c[d>>2]|0;c[d>>2]=0;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e)}while((d|0)!=(f|0));if(!h)return;cj(h);return}function lc(){if(a[8]|0)return 35648;if(!(Ha(8)|0))return 35648;kb(72,35648,n|0)|0;Pa(8);return 35648}function mc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;l=n;Ei(l,(1<>2]|0;m=h+1|0;e=m<<1;c[b>>2]=0;j=b+4|0;c[j>>2]=0;c[b+8>>2]=0;a:do if(m){if(!((h|0)<-1?(o=0,ha(178,b|0),k=o,o=0,k&1):0))f=4;if((f|0)==4?(o=0,g=ka(67,e|0)|0,k=o,o=0,!(k&1)):0){c[j>>2]=g;c[b>>2]=g;c[b+8>>2]=g+e;d=g;while(1){a[d>>0]=0;d=(c[j>>2]|0)+1|0;c[j>>2]=d;e=e+-1|0;if(!e)break a}}e=Na()|0;d=c[b>>2]|0;if(!d)Ya(e|0);if((c[j>>2]|0)!=(d|0))c[j>>2]=d;cj(d);Ya(e|0)}while(0);d=~h;if((h|0)<(d|0)){i=n;return}j=l+12|0;k=l+8|0;h=l+4|0;g=d;do{d=c[j>>2]|0;if((g|0)>(0-d|0)){e=c[k>>2]|0;if((g|0)>(0-e|0)){f=c[h>>2]|0;if((g|0)>(0-f|0))if((g|0)>=0)if((g|0)>0)if((f|0)<=(g|0))if((e|0)>(g|0))d=2;else d=(d|0)>(g|0)?3:4;else d=1;else d=0;else d=-1;else d=-2}else d=-3}else d=-4;a[(c[b>>2]|0)+(g+m)>>0]=d;g=g+1|0}while((g|0)<(m|0));i=n;return}function nc(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=c[f+16>>2]|0;switch(q|0){case 64:case 0:{o=0;d=ra(34,d|0,e|0)|0;e=o;o=0;if(e&1)r=16;else g=d;break}default:{h=(1<>2])+-1|0;p=c[e+20>>2]|0;n=p<<1;n=((n+h|0)/(n|1|0)|0)+1|0;d=0;while(1)if((1<>2]|0;o=0;g=ka(67,4624)|0;m=o;o=0;if(m&1)r=16;else{i=((j|0)<8?8:j)+j<<1;k=g+4|0;l=e;m=k+84|0;do{c[k>>2]=c[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));k=g+88|0;m=k+40|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));c[g>>2]=35660;c[g+128>>2]=h;c[g+132>>2]=n;c[g+136>>2]=p;c[g+140>>2]=d;c[g+144>>2]=j;c[g+148>>2]=i;c[g+152>>2]=q;d=g+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+172>>2]=c[e>>2];c[g+176>>2]=0;c[g+180>>2]=0;c[g+184>>2]=0;d=g+4568|0;h=g+188|0;do{c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;b[h+10>>1]=1;h=h+12|0}while((h|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1}}}if((r|0)==16){r=Na()|0;Ya(r|0)}if(!g)return g|0;o=0;ia(c[(c[g>>2]|0)+12>>2]|0,g|0,f|0);r=o;o=0;if(!(r&1))return g|0;d=Na()|0;if(!g){r=d;Ya(r|0)}Bb[c[(c[g>>2]|0)+4>>2]&255](g);r=d;Ya(r|0);return 0}function oc(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=(c[e+24>>2]|0)==2;if(f?(c[e+16>>2]|0)!=3:0){e=0;return e|0}n=c[e+20>>2]|0;d=c[e+8>>2]|0;a:do if(!n){if(f){if((d|0)!=8)break;g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35688;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}switch(d|0){case 8:{g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35716;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}case 12:{g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35744;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}case 16:{g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35772;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}default:break a}}while(0);m=(1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35800;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35660;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}}if((d|0)>=17){e=0;return e|0}i=n<<1;i=((i+m|0)/(i|1|0)|0)+1|0;if(f){d=0;while(1)if((1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35828;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35856;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}return 0}function pc(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=c[f+16>>2]|0;switch(q|0){case 64:case 0:{o=0;d=ra(35,d|0,e|0)|0;e=o;o=0;if(e&1)r=16;else g=d;break}default:{h=(1<>2])+-1|0;p=c[e+20>>2]|0;n=p<<1;n=((n+h|0)/(n|1|0)|0)+1|0;d=0;while(1)if((1<>2]|0;o=0;g=ka(67,4632)|0;m=o;o=0;if(m&1)r=16;else{i=((j|0)<8?8:j)+j<<1;c[g+4>>2]=0;k=g+8|0;l=e;m=k+84|0;do{c[k>>2]=c[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;m=g+116|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[g>>2]=35884;c[g+136>>2]=h;c[g+140>>2]=n;c[g+144>>2]=p;c[g+148>>2]=d;c[g+152>>2]=j;c[g+156>>2]=i;c[g+160>>2]=q;d=g+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+180>>2]=c[e>>2];c[g+184>>2]=0;c[g+188>>2]=0;c[g+192>>2]=0;d=g+4576|0;h=g+196|0;do{c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;b[h+10>>1]=1;h=h+12|0}while((h|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1}}}if((r|0)==16){r=Na()|0;Ya(r|0)}if(!g)return g|0;o=0;ia(c[(c[g>>2]|0)+8>>2]|0,g|0,f|0);r=o;o=0;if(!(r&1))return g|0;d=Na()|0;if(!g){r=d;Ya(r|0)}Bb[c[(c[g>>2]|0)+4>>2]&255](g);r=d;Ya(r|0);return 0}function qc(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=(c[e+24>>2]|0)==2;if(f?(c[e+16>>2]|0)!=3:0){e=0;return e|0}n=c[e+20>>2]|0;d=c[e+8>>2]|0;a:do if(!n){if(f){if((d|0)!=8)break;g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35912;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}switch(d|0){case 8:{g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35940;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}case 12:{g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35968;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}case 16:{g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35996;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}default:break a}}while(0);m=(1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=36024;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=35884;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}}if((d|0)>=17){e=0;return e|0}i=n<<1;i=((i+m|0)/(i|1|0)|0)+1|0;if(f){d=0;while(1)if((1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=36052;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=36080;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}return 0}function rc(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0;a=2832;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=4880);iw(2832,0,2048)|0;a=0;do{h=2832+(a+128<<3)|0;c[h>>2]=0;c[h+4>>2]=1;a=a+1|0}while((a|0)!=128);a=3088;c[a>>2]=1;c[a+4>>2]=3;a=3096;c[a>>2]=1;c[a+4>>2]=3;a=3104;c[a>>2]=1;c[a+4>>2]=3;a=3112;c[a>>2]=1;c[a+4>>2]=3;a=3120;c[a>>2]=1;c[a+4>>2]=3;a=3128;c[a>>2]=1;c[a+4>>2]=3;a=3136;c[a>>2]=1;c[a+4>>2]=3;a=3144;c[a>>2]=1;c[a+4>>2]=3;a=3152;c[a>>2]=1;c[a+4>>2]=3;a=3160;c[a>>2]=1;c[a+4>>2]=3;a=3168;c[a>>2]=1;c[a+4>>2]=3;a=3176;c[a>>2]=1;c[a+4>>2]=3;a=3184;c[a>>2]=1;c[a+4>>2]=3;a=3192;c[a>>2]=1;c[a+4>>2]=3;a=3200;c[a>>2]=1;c[a+4>>2]=3;a=3208;c[a>>2]=1;c[a+4>>2]=3;a=3216;c[a>>2]=1;c[a+4>>2]=3;a=3224;c[a>>2]=1;c[a+4>>2]=3;a=3232;c[a>>2]=1;c[a+4>>2]=3;a=3240;c[a>>2]=1;c[a+4>>2]=3;a=3248;c[a>>2]=1;c[a+4>>2]=3;a=3256;c[a>>2]=1;c[a+4>>2]=3;a=3264;c[a>>2]=1;c[a+4>>2]=3;a=3272;c[a>>2]=1;c[a+4>>2]=3;a=3280;c[a>>2]=1;c[a+4>>2]=3;a=3288;c[a>>2]=1;c[a+4>>2]=3;a=3296;c[a>>2]=1;c[a+4>>2]=3;a=3304;c[a>>2]=1;c[a+4>>2]=3;a=3312;c[a>>2]=1;c[a+4>>2]=3;a=3320;c[a>>2]=1;c[a+4>>2]=3;a=3328;c[a>>2]=1;c[a+4>>2]=3;a=3336;c[a>>2]=1;c[a+4>>2]=3;a=2896;c[a>>2]=2;c[a+4>>2]=5;a=2904;c[a>>2]=2;c[a+4>>2]=5;a=2912;c[a>>2]=2;c[a+4>>2]=5;a=2920;c[a>>2]=2;c[a+4>>2]=5;a=2928;c[a>>2]=2;c[a+4>>2]=5;a=2936;c[a>>2]=2;c[a+4>>2]=5;a=2944;c[a>>2]=2;c[a+4>>2]=5;a=2952;c[a>>2]=2;c[a+4>>2]=5;a=2848;c[a>>2]=3;c[a+4>>2]=7;a=2856;c[a>>2]=3;c[a+4>>2]=7;a=0;do{h=2832+(a+64<<3)|0;c[h>>2]=-1;c[h+4>>2]=2;a=a+1|0}while((a|0)!=64);a=2960;c[a>>2]=-2;c[a+4>>2]=4;a=2968;c[a>>2]=-2;c[a+4>>2]=4;a=2976;c[a>>2]=-2;c[a+4>>2]=4;a=2984;c[a>>2]=-2;c[a+4>>2]=4;a=2992;c[a>>2]=-2;c[a+4>>2]=4;a=3e3;c[a>>2]=-2;c[a+4>>2]=4;a=3008;c[a>>2]=-2;c[a+4>>2]=4;a=3016;c[a>>2]=-2;c[a+4>>2]=4;a=3024;c[a>>2]=-2;c[a+4>>2]=4;a=3032;c[a>>2]=-2;c[a+4>>2]=4;a=3040;c[a>>2]=-2;c[a+4>>2]=4;a=3048;c[a>>2]=-2;c[a+4>>2]=4;a=3056;c[a>>2]=-2;c[a+4>>2]=4;a=3064;c[a>>2]=-2;c[a+4>>2]=4;a=3072;c[a>>2]=-2;c[a+4>>2]=4;a=3080;c[a>>2]=-2;c[a+4>>2]=4;a=2864;c[a>>2]=-3;c[a+4>>2]=6;a=2872;c[a>>2]=-3;c[a+4>>2]=6;a=2880;c[a>>2]=-3;c[a+4>>2]=6;a=2888;c[a>>2]=-3;c[a+4>>2]=6;a=2840;c[a>>2]=-4;c[a+4>>2]=8;a=4880;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=6928);iw(4880,0,2048)|0;d=2;a=0;f=0;g=0;while(1){d=d<<16>>16;b=8-d|0;e=1<>2]=f;c[h+4>>2]=d;b=b+1|0}while((b|0)<(e|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==7){b=2;f=1;g=-1;h=-1;break}else{d=(a>>1)+2|0;f=b>>16}}while(1){d=b<<16>>16;a=8-d|0;e=1<>2]=g;c[f+4>>2]=d;b=b+1|0}while((b|0)<(e|0))}a=(h<<16)+-65536|0;f=a>>31^a>>15;b=(f>>1)+2|0;if((b|0)>8){a=6928;break}else{g=a>>16;h=h+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=8976);iw(6928,0,2048)|0;f=3;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==12){f=3;b=1;e=-1;g=-1;break}else{f=(a>>2)+3|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>2)+3|0;if((f|0)>8){a=8976;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=11024);iw(8976,0,2048)|0;f=4;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==20){f=4;b=1;e=-1;g=-1;break}else{f=(a>>3)+4|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>3)+4|0;if((f|0)>8){a=11024;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=13072);iw(11024,0,2048)|0;f=5;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==32){f=5;b=1;e=-1;g=-1;break}else{f=(a>>4)+5|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>4)+5|0;if((f|0)>8){a=13072;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=15120);iw(13072,0,2048)|0;f=6;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==48){f=6;b=1;e=-1;g=-1;break}else{f=(a>>5)+6|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>5)+6|0;if((f|0)>8){a=15120;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=17168);iw(15120,0,2048)|0;f=7;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==64){f=7;b=1;e=-1;g=-1;break}else{f=(a>>6)+7|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>6)+7|0;if((f|0)>8){a=17168;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=19216);iw(17168,0,2048)|0;f=8;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==64){g=8;e=1;f=-1;h=-1;break}else{f=(a>>7)+8|0;e=b>>16}}while(1){a=8-g|0;d=1<>2]=f;c[e+4>>2]=g;b=b+1|0}while((b|0)<(d|0))}b=(h<<16)+-65536|0;e=b>>31^b>>15;a=e>>7;if((a|0)>0){a=19216;break}else{g=a+8|0;f=b>>16;h=h+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=21264);iw(19216,0,2048)|0;a=21264;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=23312);iw(21264,0,2048)|0;a=23312;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=25360);iw(23312,0,2048)|0;a=25360;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=27408);iw(25360,0,2048)|0;a=27408;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=29456);iw(27408,0,2048)|0;a=29456;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=31504);iw(29456,0,2048)|0;a=31504;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=33552);iw(31504,0,2048)|0;a=33552;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=35600);iw(33552,0,2048)|0;mc(35600,8);kb(179,35600,n|0)|0;mc(35612,10);kb(179,35612,n|0)|0;mc(35624,12);kb(179,35624,n|0)|0;mc(35636,16);kb(179,35636,n|0)|0;return}function sc(a){a=a|0;var b=0;b=c[a>>2]|0;if(!b)return;a=a+4|0;if((c[a>>2]|0)!=(b|0))c[a>>2]=b;cj(b);return}function tc(a){a=a|0;var b=0,d=0;c[a>>2]=36080;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function uc(a){a=a|0;var b=0,d=0;c[a>>2]=36080;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function vc(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;he(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function wc(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35856;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];Yd(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;Yd(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function xc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function yc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36460;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36436;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function Ac(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36412;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function Bc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36388;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function Cc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=b+32|0;Jm(i,d)|0;h=b+44|0;c[h>>2]=0;j=b+48|0;g=c[j>>2]|0;if(g&8){d=a[i>>0]|0;if(!(d&1)){d=((d&255)>>>1)+(i+1)|0;c[h>>2]=d;e=i+1|0;f=i+1|0}else{d=(c[b+40>>2]|0)+(c[b+36>>2]|0)|0;c[h>>2]=d;f=c[b+40>>2]|0;e=f}c[b+8>>2]=e;c[b+12>>2]=f;c[b+16>>2]=d}if(!(g&16))return;d=a[i>>0]|0;if(!(d&1)){g=(d&255)>>>1;c[h>>2]=i+1+g;d=10;h=g}else{g=c[b+36>>2]|0;c[h>>2]=(c[b+40>>2]|0)+g;d=(c[i>>2]&-2)+-1|0;h=g}Mm(i,d,0);d=a[i>>0]|0;if(!(d&1)){g=i+1|0;f=(d&255)>>>1;e=i+1|0}else{e=c[b+40>>2]|0;g=e;f=c[b+36>>2]|0}d=b+24|0;c[d>>2]=e;c[b+20>>2]=e;c[b+28>>2]=g+f;if(!(c[j>>2]&3))return;c[d>>2]=e+h;return}function Dc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+32|0;j=q+16|0;p=q+8|0;k=q;o=0;ia(65,p|0,b|0);m=o;o=0;a:do if(m&1){e=Na(0)|0;f=b;g=b}else{do if(a[p>>0]|0){f=c[(c[b>>2]|0)+-12>>2]|0;c[k>>2]=c[b+(f+24)>>2];l=b+f|0;m=c[b+(f+4)>>2]|0;g=d+e|0;f=b+(f+76)|0;e=c[f>>2]|0;do if((e|0)==-1){o=0;e=ka(68,l|0)|0;r=o;o=0;if(r&1)n=13;else{c[j>>2]=e;o=0;e=ra(37,j|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,h=ra(c[(c[e>>2]|0)+28>>2]|0,e|0,32)|0,r=o,o=0,!(r&1)):0){Gs(j);e=h<<24>>24;c[f>>2]=e;n=9;break}e=Na(0)|0;Gs(j)}}else n=9;while(0);if((n|0)==9){o=0;c[j>>2]=c[k>>2];e=ja(39,j|0,d|0,((m&176|0)==32?g:d)|0,g|0,l|0,e&255|0)|0;r=o;o=0;if(!(r&1)){if(e)break;r=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+r|0,c[b+(r+16)>>2]|5|0);r=o;o=0;if(!(r&1))break;else n=13}else n=13}if((n|0)==13)e=Na(0)|0;ho(p);f=b;g=b;break a}while(0);ho(p);i=q;return b|0}while(0);Va(e|0)|0;o=0;ha(181,f+(c[(c[g>>2]|0)+-12>>2]|0)|0);r=o;o=0;if(!(r&1)){Xa();i=q;return b|0}e=Na()|0;o=0;xa(3);r=o;o=0;if(r&1){r=Na(0)|0;ec(r)}else Ya(e|0);return 0}function Ec(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[d+48>>2]|0;if(e&16){e=d+44|0;f=c[e>>2]|0;g=c[d+24>>2]|0;if(f>>>0>>0)c[e>>2]=g;else g=f;f=c[d+20>>2]|0;h=g-f|0;if(h>>>0>4294967279)_i(b);if(h>>>0<11){a[b>>0]=h<<1;e=b+1|0}else{d=h+16&-16;e=bj(d)|0;c[b+8>>2]=e;c[b>>2]=d|1;c[b+4>>2]=h}if((f|0)!=(g|0)){d=e;while(1){a[d>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(g|0))break;else d=d+1|0}e=e+h|0}a[e>>0]=0;return}if(!(e&8)){c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}f=c[d+8>>2]|0;d=c[d+16>>2]|0;h=d-f|0;if(h>>>0>4294967279)_i(b);if(h>>>0<11){a[b>>0]=h<<1;e=b+1|0}else{g=h+16&-16;e=bj(g)|0;c[b+8>>2]=e;c[b>>2]=g|1;c[b+4>>2]=h}if((f|0)!=(d|0)){g=e;while(1){a[g>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(d|0))break;else g=g+1|0}e=e+h|0}a[e>>0]=0;return}function Fc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;c[b>>2]=36364;c[b+4>>2]=e;p=b+8|0;i=c[e>>2]|0;m=e+16|0;h=c[m>>2]|0;l=$(h,i)|0;c[p>>2]=0;q=b+12|0;c[q>>2]=0;c[b+16>>2]=0;do if(l){if(!((l|0)<0?(o=0,ha(178,p|0),i=o,o=0,i&1):0))n=4;if((n|0)==4?(j=l<<1,o=0,k=ka(67,j|0)|0,i=o,o=0,!(i&1)):0){c[p>>2]=k;i=k+(l<<1)|0;c[b+16>>2]=i;iw(k|0,0,j|0)|0;c[q>>2]=i;i=c[e>>2]|0;h=c[m>>2]|0;break}j=Na()|0;g=c[p>>2]|0;h=g;if(g){i=c[q>>2]|0;if((i|0)!=(g|0))c[q>>2]=i+(~((i+-2-h|0)>>>1)<<1);cj(g)}q=j;Ya(q|0)}while(0);j=b+20|0;h=$(i<<1,h)|0;c[j>>2]=0;k=b+24|0;c[k>>2]=0;c[b+28>>2]=0;if(!h){q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}if(!((h|0)<0?(o=0,ha(178,j|0),m=o,o=0,m&1):0))n=13;if((n|0)==13?(o=0,g=ka(67,h|0)|0,n=o,o=0,!(n&1)):0){c[k>>2]=g;c[j>>2]=g;c[b+28>>2]=g+h;do{a[g>>0]=0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;h=h+-1|0}while((h|0)!=0);q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}i=Na()|0;g=c[j>>2]|0;if(g){if((c[k>>2]|0)!=(g|0))c[k>>2]=g;cj(g)}g=c[p>>2]|0;if(!g){q=i;Ya(q|0)}h=c[q>>2]|0;if((h|0)!=(g|0))c[q>>2]=h+(~((h+-2-g|0)>>>1)<<1);cj(g);q=i;Ya(q|0)}function Gc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;c[b>>2]=36340;c[b+4>>2]=e;p=b+8|0;i=c[e>>2]|0;m=e+16|0;h=c[m>>2]|0;l=$(h,i)|0;c[p>>2]=0;q=b+12|0;c[q>>2]=0;c[b+16>>2]=0;do if(l){if(!((l|0)<0?(o=0,ha(178,p|0),i=o,o=0,i&1):0))n=4;if((n|0)==4?(j=l<<1,o=0,k=ka(67,j|0)|0,i=o,o=0,!(i&1)):0){c[p>>2]=k;i=k+(l<<1)|0;c[b+16>>2]=i;iw(k|0,0,j|0)|0;c[q>>2]=i;i=c[e>>2]|0;h=c[m>>2]|0;break}j=Na()|0;g=c[p>>2]|0;h=g;if(g){i=c[q>>2]|0;if((i|0)!=(g|0))c[q>>2]=i+(~((i+-2-h|0)>>>1)<<1);cj(g)}q=j;Ya(q|0)}while(0);j=b+20|0;h=$(i<<1,h)|0;c[j>>2]=0;k=b+24|0;c[k>>2]=0;c[b+28>>2]=0;if(!h){q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}if(!((h|0)<0?(o=0,ha(178,j|0),m=o,o=0,m&1):0))n=13;if((n|0)==13?(o=0,g=ka(67,h|0)|0,n=o,o=0,!(n&1)):0){c[k>>2]=g;c[j>>2]=g;c[b+28>>2]=g+h;do{a[g>>0]=0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;h=h+-1|0}while((h|0)!=0);q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}i=Na()|0;g=c[j>>2]|0;if(g){if((c[k>>2]|0)!=(g|0))c[k>>2]=g;cj(g)}g=c[p>>2]|0;if(!g){q=i;Ya(q|0)}h=c[q>>2]|0;if((h|0)!=(g|0))c[q>>2]=h+(~((h+-2-g|0)>>>1)<<1);cj(g);q=i;Ya(q|0)}function Hc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;c[b>>2]=36316;c[b+4>>2]=e;p=b+8|0;i=c[e>>2]|0;m=e+16|0;h=c[m>>2]|0;l=$(h,i)|0;c[p>>2]=0;q=b+12|0;c[q>>2]=0;c[b+16>>2]=0;do if(l){if(!((l|0)<0?(o=0,ha(178,p|0),i=o,o=0,i&1):0))n=4;if((n|0)==4?(j=l<<1,o=0,k=ka(67,j|0)|0,i=o,o=0,!(i&1)):0){c[p>>2]=k;i=k+(l<<1)|0;c[b+16>>2]=i;iw(k|0,0,j|0)|0;c[q>>2]=i;i=c[e>>2]|0;h=c[m>>2]|0;break}j=Na()|0;g=c[p>>2]|0;h=g;if(g){i=c[q>>2]|0;if((i|0)!=(g|0))c[q>>2]=i+(~((i+-2-h|0)>>>1)<<1);cj(g)}q=j;Ya(q|0)}while(0);j=b+20|0;h=$(i<<1,h)|0;c[j>>2]=0;k=b+24|0;c[k>>2]=0;c[b+28>>2]=0;if(!h){q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}if(!((h|0)<0?(o=0,ha(178,j|0),m=o,o=0,m&1):0))n=13;if((n|0)==13?(o=0,g=ka(67,h|0)|0,n=o,o=0,!(n&1)):0){c[k>>2]=g;c[j>>2]=g;c[b+28>>2]=g+h;do{a[g>>0]=0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;h=h+-1|0}while((h|0)!=0);q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}i=Na()|0;g=c[j>>2]|0;if(g){if((c[k>>2]|0)!=(g|0))c[k>>2]=g;cj(g)}g=c[p>>2]|0;if(!g){q=i;Ya(q|0)}h=c[q>>2]|0;if((h|0)!=(g|0))c[q>>2]=h+(~((h+-2-g|0)>>>1)<<1);cj(g);q=i;Ya(q|0)}function Ic(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36316;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Jc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36316;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Kc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+48|0;if(!(c[g>>2]|0)){j=b+52|0;Pc(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Pc(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Lc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+48>>2]|0;if(!f){f=a+52|0;Mc(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Nc(a,f,b,d,e);return}}function Mc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=d+4|0;j=c[m>>2]|0;do if(!(a[j+32>>0]|0))n=f;else{k=d+8|0;lw(c[k>>2]|0,f|0,h*6|0)|0;j=c[m>>2]|0;l=c[j+16>>2]|0;if((h|0)<=0){n=c[k>>2]|0;break}f=c[k>>2]|0;j=f;k=0;while(1){n=j+4|0;o=b[j>>1]|0;b[j>>1]=b[n>>1]|0;b[n>>1]=o;k=k+1|0;if((k|0)==(h|0))break;else j=j+(l<<1)|0}n=f;j=c[m>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:if((c[j+24>>2]|0)==2){if((h|0)<=0)return;j=d+32|0;f=0;do{o=c[j>>2]|0;m=e[n+(f*6|0)+2>>1]<>1]<>1]<>1]=(m+49152+((d+i|0)>>>2)&65535)>>>o;b[g+(f*6|0)+2>>1]=d>>>o;b[g+(f*6|0)+4>>1]=i>>>o;f=f+1|0}while((f|0)!=(h|0));return}else{k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;j=c[d+32>>2]|0;f=0;do{h=e[n+(f*6|0)+2>>1]<>1]<>1]<>1]=(h+49152+((d+o|0)>>>2)&65535)>>>j;b[g+(f+i<<1)>>1]=d>>>j;b[g+(f+l<<1)>>1]=o>>>j;f=f+1|0}while((f|0)!=(k|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;m=i*3|0;j=c[d+32>>2]|0;f=0;do{o=b[n+(f<<3)+6>>1]|0;p=e[n+(f<<3)+2>>1]<>1]<>1]<>1]=(p+49152+((h+d|0)>>>2)&65535)>>>j;b[g+(f+i<<1)>>1]=h>>>j;b[g+(f+l<<1)>>1]=d>>>j;b[g+(f+m<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}default:return}}function Nc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Mc(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Mc(b,t,e,f,g);i=q;return}function Oc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;g=i;i=i+176|0;e=g+152|0;l=g+16|0;j=g;if(!(d&1)){e=(d|0)/4|0;if((d|0)>3){f=0;do{l=b+(f<<2)|0;k=c[l>>2]|0;c[l>>2]=k>>>8&16711935|k<<8&-16711936;f=f+1|0}while((f|0)<(e|0))}if(!(d&3)){i=g;return}j=b+(d+-2)|0;l=b+(d+-1)|0;k=a[j>>0]|0;a[j>>0]=a[l>>0]|0;a[l>>0]=k;i=g;return}k=l+56|0;h=l+4|0;c[l>>2]=36160;c[k>>2]=36180;o=0;ia(62,l+56|0,h|0);g=o;o=0;if(g&1){l=Na()|0;fn(k);Ya(l|0)}c[l+128>>2]=0;c[l+132>>2]=-1;c[l>>2]=36200;c[l+56>>2]=36220;o=0;ha(180,h|0);g=o;o=0;do if(g&1)e=Na()|0;else{c[h>>2]=36236;g=l+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[l+52>>2]=16;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;o=0;ia(63,h|0,e|0);b=o;o=0;if(b&1){l=Na()|0;Im(e);Im(g);nn(h);e=l;break}Im(e);o=0;e=ma(28,l|0,49087,24)|0;b=o;o=0;if((!(b&1)?(o=0,f=ra(36,e|0,d|0)|0,d=o,o=0,!(d&1)):0)?(o=0,ma(28,f|0,49112,20)|0,d=o,o=0,!(d&1)):0){b=Ma(16)|0;o=0;ia(64,j|0,h|0);d=o;o=0;if(!(d&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,b|0,1,35648,j|0);d=o;o=0;if(d&1)f=1;else{o=0;wa(6,b|0,824,96);o=0;f=0}e=Na()|0;Im(j);if(!f){j=e;c[l>>2]=36200;c[k>>2]=36220;c[h>>2]=36236;Im(g);nn(h);fn(k);Ya(j|0)}}else e=Na()|0;La(b|0);j=e;c[l>>2]=36200;c[k>>2]=36220;c[h>>2]=36236;Im(g);nn(h);fn(k);Ya(j|0)}j=Na()|0;c[l>>2]=36200;c[k>>2]=36220;c[h>>2]=36236;Im(g);nn(h);fn(k);Ya(j|0)}while(0);l=e;fn(k);Ya(l|0)}function Pc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;n=d+4|0;j=c[n>>2]|0;a:do switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)<=0)break a;j=d+40|0;d=0;do{i=c[j>>2]|0;l=e[f+(d*6|0)+2>>1]<>1]<>1]<>2)+16384|0;b[g+(d*6|0)>>1]=(k+32768+m&65535)>>>i;b[g+(d*6|0)+2>>1]=(m&65535)>>>i;b[g+(d*6|0)+4>>1]=(l+32768+m&65535)>>>i;d=d+1|0}while((d|0)!=(h|0))}else{k=(h|0)<(i|0)?h:i;if((k|0)<=0)break a;l=i<<1;j=d+40|0;d=0;do{m=c[j>>2]|0;p=e[f+(d+i<<1)>>1]<>1]<>1]<>2)+16384|0;b[g+(d*6|0)>>1]=(q+32768+o&65535)>>>m;b[g+(d*6|0)+2>>1]=(o&65535)>>>m;b[g+(d*6|0)+4>>1]=(p+32768+o&65535)>>>m;d=d+1|0}while((d|0)!=(k|0))}break}case 4:{if((c[j+24>>2]|0)==1?(m=(h|0)<(i|0)?h:i,(m|0)>0):0){l=i<<1;j=d+40|0;d=i*3|0;k=0;do{q=c[j>>2]|0;p=e[f+(k+i<<1)>>1]<>1]<>1]<>2)+16384|0;r=b[f+(k+d<<1)>>1]|0;t=mw((o&65535)>>>q&65535|0,0,16)|0;p=(p+32768+o&65535)>>>q|D;r=mw(r&65535|0,0,48)|0;r=t|(s+32768+o&65535)>>>q&65535|r;p=p&65535|D;q=g+(k<<3)|0;o=q;b[o>>1]=r;b[o+2>>1]=r>>>16;q=q+4|0;b[q>>1]=p;b[q+2>>1]=p>>>16;k=k+1|0}while((k|0)!=(m|0))}break}default:{}}while(0);j=c[n>>2]|0;if(!(a[j+32>>0]|0))return;k=c[j+16>>2]|0;if((h|0)<=0)return;j=g;d=0;while(1){t=j+4|0;s=b[j>>1]|0;b[j>>1]=b[t>>1]|0;b[t>>1]=s;d=d+1|0;if((d|0)==(h|0))break;else j=j+(k<<1)|0}return}function Qc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36340;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Rc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36340;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Sc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+48|0;if(!(c[g>>2]|0)){j=b+52|0;Wc(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Wc(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Tc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+48>>2]|0;if(!f){f=a+52|0;Uc(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Vc(a,f,b,d,e);return}}function Uc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=d+4|0;j=c[m>>2]|0;do if(!(a[j+32>>0]|0))n=f;else{k=d+8|0;lw(c[k>>2]|0,f|0,h*6|0)|0;j=c[m>>2]|0;l=c[j+16>>2]|0;if((h|0)<=0){n=c[k>>2]|0;break}f=c[k>>2]|0;j=f;k=0;while(1){n=j+4|0;o=b[j>>1]|0;b[j>>1]=b[n>>1]|0;b[n>>1]=o;k=k+1|0;if((k|0)==(h|0))break;else j=j+(l<<1)|0}n=f;j=c[m>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:if((c[j+24>>2]|0)==2){if((h|0)<=0)return;j=d+32|0;f=0;do{i=c[j>>2]|0;m=e[n+(f*6|0)>>1]<>1]<>1]<>>1)&65535)>>>i&65535;b[g+(f*6|0)>>1]=(m+32768-d&65535)>>>i;b[g+(f*6|0)+2>>1]=(d&65535)>>>i;b[g+(f*6|0)+4>>1]=o;f=f+1|0}while((f|0)!=(h|0));return}else{k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;j=c[d+32>>2]|0;f=0;do{h=e[n+(f*6|0)>>1]<>1]<>1]<>>1)&65535)>>>j&65535;b[g+(f<<1)>>1]=(h+32768-d&65535)>>>j;b[g+(f+i<<1)>>1]=(d&65535)>>>j;b[g+(f+l<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;m=i*3|0;j=c[d+32>>2]|0;f=0;do{o=b[n+(f<<3)+6>>1]|0;p=e[n+(f<<3)>>1]<>1]<>1]<>>1)&65535)>>>j&65535;b[g+(f<<1)>>1]=(p+32768-h&65535)>>>j;b[g+(f+i<<1)>>1]=(h&65535)>>>j;b[g+(f+l<<1)>>1]=d;b[g+(f+m<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}default:return}}function Vc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Uc(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Uc(b,t,e,f,g);i=q;return}function Wc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=d+4|0;j=c[n>>2]|0;a:do switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)<=0)break a;j=d+40|0;d=0;do{m=c[j>>2]|0;l=e[f+(d*6|0)+2>>1]<>1]<>1]<>>1)&65535)>>>m&65535;b[g+(d*6|0)>>1]=k>>>m;b[g+(d*6|0)+2>>1]=l>>>m;b[g+(d*6|0)+4>>1]=i;d=d+1|0}while((d|0)!=(h|0))}else{k=(h|0)<(i|0)?h:i;if((k|0)<=0)break a;l=i<<1;j=d+40|0;d=0;do{o=c[j>>2]|0;p=e[f+(d+i<<1)>>1]<>1]<>1]<>>1)&65535)>>>o&65535;b[g+(d*6|0)>>1]=q>>>o;b[g+(d*6|0)+2>>1]=p>>>o;b[g+(d*6|0)+4>>1]=m;d=d+1|0}while((d|0)!=(k|0))}break}case 4:{if((c[j+24>>2]|0)==1?(m=(h|0)<(i|0)?h:i,(m|0)>0):0){l=i<<1;j=d+40|0;d=i*3|0;k=0;do{o=c[j>>2]|0;q=e[f+(k+i<<1)>>1]<>1]<>1]<>>1)&65535)>>>o;r=b[f+(k+d<<1)>>1]|0;q=mw(q>>>o&65535|0,0,16)|0;p=D|p;r=mw(r&65535|0,0,48)|0;r=s>>>o&65535|q|r;p=p&65535|D;q=g+(k<<3)|0;o=q;b[o>>1]=r;b[o+2>>1]=r>>>16;q=q+4|0;b[q>>1]=p;b[q+2>>1]=p>>>16;k=k+1|0}while((k|0)!=(m|0))}break}default:{}}while(0);j=c[n>>2]|0;if(!(a[j+32>>0]|0))return;k=c[j+16>>2]|0;if((h|0)<=0)return;j=g;d=0;while(1){s=j+4|0;r=b[j>>1]|0;b[j>>1]=b[s>>1]|0;b[s>>1]=r;d=d+1|0;if((d|0)==(h|0))break;else j=j+(k<<1)|0}return}function Xc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36364;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Yc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36364;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+48|0;if(!(c[g>>2]|0)){j=b+52|0;bd(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;bd(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function _c(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+48>>2]|0;if(!f){f=a+52|0;$c(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{ad(a,f,b,d,e);return}}function $c(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;m=d+4|0;j=c[m>>2]|0;do if(!(a[j+32>>0]|0))n=f;else{k=d+8|0;lw(c[k>>2]|0,f|0,h*6|0)|0;j=c[m>>2]|0;l=c[j+16>>2]|0;if((h|0)<=0){n=c[k>>2]|0;break}f=c[k>>2]|0;j=f;k=0;while(1){n=j+4|0;o=b[j>>1]|0;b[j>>1]=b[n>>1]|0;b[n>>1]=o;k=k+1|0;if((k|0)==(h|0))break;else j=j+(l<<1)|0}n=f;j=c[m>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:if((c[j+24>>2]|0)==2){if((h|0)<=0)return;j=d+32|0;f=0;do{i=c[j>>2]|0;d=e[n+(f*6|0)+2>>1]<>1]<>>i&65535;b[g+(f*6|0)>>1]=((e[n+(f*6|0)>>1]<>>i;b[g+(f*6|0)+2>>1]=(d&65535)>>>i;b[g+(f*6|0)+4>>1]=o;f=f+1|0}while((f|0)!=(h|0));return}else{k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;j=c[d+32>>2]|0;f=0;do{d=e[n+(f*6|0)+2>>1]<>1]<>>j&65535;b[g+(f<<1)>>1]=((e[n+(f*6|0)>>1]<>>j;b[g+(f+i<<1)>>1]=(d&65535)>>>j;b[g+(f+l<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;l=(i|0)<(h|0)?i:h;if((l|0)<=0)return;m=i<<1;k=i*3|0;j=c[d+32>>2]|0;f=0;do{o=b[n+(f<<3)+6>>1]|0;h=e[n+(f<<3)+2>>1]<>1]<>>j&65535;b[g+(f<<1)>>1]=((e[n+(f<<3)>>1]<>>j;b[g+(f+i<<1)>>1]=(h&65535)>>>j;b[g+(f+m<<1)>>1]=d;b[g+(f+k<<1)>>1]=o;f=f+1|0}while((f|0)!=(l|0));return}default:return}}function ad(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;$c(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;$c(b,t,e,f,g);i=q;return}function bd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=d+4|0;j=c[n>>2]|0;a:do switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)<=0)break a;j=d+40|0;d=0;do{m=c[j>>2]|0;l=e[f+(d*6|0)+2>>1]<>1]<>>m&65535;b[g+(d*6|0)>>1]=((e[f+(d*6|0)>>1]<>>m;b[g+(d*6|0)+2>>1]=(l&65535)>>>m;b[g+(d*6|0)+4>>1]=i;d=d+1|0}while((d|0)!=(h|0))}else{k=(h|0)<(i|0)?h:i;if((k|0)<=0)break a;l=i<<1;j=d+40|0;d=0;do{o=c[j>>2]|0;p=e[f+(d+i<<1)>>1]<>1]<>>o&65535;b[g+(d*6|0)>>1]=((e[f+(d<<1)>>1]<>>o;b[g+(d*6|0)+2>>1]=(p&65535)>>>o;b[g+(d*6|0)+4>>1]=m;d=d+1|0}while((d|0)!=(k|0))}break}case 4:{if((c[j+24>>2]|0)==1?(m=(h|0)<(i|0)?h:i,(m|0)>0):0){l=i<<1;j=d+40|0;d=i*3|0;k=0;do{q=c[j>>2]|0;s=e[f+(k+i<<1)>>1]<>1]<>>q;o=(s+32768+(e[f+(k+l<<1)>>1]<>>q;r=b[f+(k+d<<1)>>1]|0;q=mw((s&65535)>>>q&65535|0,0,16)|0;o=o|D;r=mw(r&65535|0,0,48)|0;r=q|p&65535|r;o=o&65535|D;p=g+(k<<3)|0;q=p;b[q>>1]=r;b[q+2>>1]=r>>>16;p=p+4|0;b[p>>1]=o;b[p+2>>1]=o>>>16;k=k+1|0}while((k|0)!=(m|0))}break}default:{}}while(0);j=c[n>>2]|0;if(!(a[j+32>>0]|0))return;k=c[j+16>>2]|0;if((h|0)<=0)return;j=g;d=0;while(1){s=j+4|0;r=b[j>>1]|0;b[j>>1]=b[s>>1]|0;b[s>>1]=r;d=d+1|0;if((d|0)==(h|0))break;else j=j+(k<<1)|0}return}function cd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0;p=i;i=i+16|0;m=p;n=c[b>>2]|0;if(!n){b=0;i=p;return b|0}q=d;k=f-q|0;l=g+12|0;j=c[l>>2]|0;k=(j|0)>(k|0)?j-k|0:0;j=e;g=j-q|0;if((g|0)>0?(Gb[c[(c[n>>2]|0)+48>>2]&63](n,d,g)|0)!=(g|0):0){c[b>>2]=0;q=0;i=p;return q|0}do if((k|0)>0){Hm(m,k,h);o=0;g=ma(c[(c[n>>2]|0)+48>>2]|0,n|0,((a[m>>0]&1)==0?m+1|0:c[m+8>>2]|0)|0,k|0)|0;q=o;o=0;if(q&1){q=Na()|0;Im(m);Ya(q|0)}if((g|0)==(k|0)){Im(m);break}c[b>>2]=0;Im(m);q=0;i=p;return q|0}while(0);f=f-j|0;if((f|0)>0?(Gb[c[(c[n>>2]|0)+48>>2]&63](n,e,f)|0)!=(f|0):0){c[b>>2]=0;q=0;i=p;return q|0}c[l>>2]=0;q=n;i=p;return q|0}function dd(a){a=a|0;c[a>>2]=36236;Im(a+32|0);nn(a);return}function ed(a){a=a|0;c[a>>2]=36236;Im(a+32|0);nn(a);cj(a);return}function fd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;i=d+44|0;j=c[i>>2]|0;l=d+24|0;m=c[l>>2]|0;if(j>>>0>>0){c[i>>2]=m;j=m}k=j;i=h&24;if(!i){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}if((g|0)==1&(i|0)==24){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}a:do switch(g|0){case 0:{i=0;g=0;break}case 1:if(!(h&8)){g=m-(c[d+20>>2]|0)|0;i=g;g=((g|0)<0)<<31>>31;break a}else{g=(c[d+12>>2]|0)-(c[d+8>>2]|0)|0;i=g;g=((g|0)<0)<<31>>31;break a}case 2:{i=d+32|0;if(!(a[i>>0]&1))i=i+1|0;else i=c[d+40>>2]|0;g=j-i|0;i=g;g=((g|0)<0)<<31>>31;break}default:{d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}}while(0);g=jw(i|0,g|0,e|0,f|0)|0;e=D;if((e|0)>=0){i=d+32|0;if(!(a[i>>0]&1))i=i+1|0;else i=c[d+40>>2]|0;f=j-i|0;j=((f|0)<0)<<31>>31;if(!((j|0)<(e|0)|(j|0)==(e|0)&f>>>0>>0)){i=h&8;if(!((g|0)==0&(e|0)==0)){if((i|0)!=0?(c[d+12>>2]|0)==0:0){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}if((h&16|0)!=0&(m|0)==0){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}}if(i){c[d+12>>2]=(c[d+8>>2]|0)+g;c[d+16>>2]=k}if(h&16)c[l>>2]=(c[d+20>>2]|0)+g;d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=g;c[d+4>>2]=e;return}}d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}function gd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;d=d+8|0;Ib[c[(c[b>>2]|0)+16>>2]&15](a,b,c[d>>2]|0,c[d+4>>2]|0,0,e);return}function hd(a){a=a|0;var b=0,e=0,f=0,g=0;b=a+44|0;e=c[b>>2]|0;f=c[a+24>>2]|0;if(e>>>0>>0){c[b>>2]=f;e=f}if(!(c[a+48>>2]&8)){a=-1;return a|0}g=a+16|0;b=c[g>>2]|0;f=a+12|0;if(b>>>0>>0){f=c[f>>2]|0;c[g>>2]=e;b=e}else f=c[f>>2]|0;if(f>>>0>=b>>>0){a=-1;return a|0}a=d[f>>0]|0;return a|0}function id(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=b+44|0;e=c[f>>2]|0;g=c[b+24>>2]|0;if(e>>>0>>0){c[f>>2]=g;e=g}j=b+8|0;f=c[j>>2]|0;k=b+12|0;h=c[k>>2]|0;i=f;if(f>>>0>=h>>>0){b=-1;return b|0}if((d|0)==-1){c[j>>2]=f;c[k>>2]=h+-1;c[b+16>>2]=e;b=0;return b|0}if(!(c[b+48>>2]&16)){g=d&255;f=h+-1|0;if(g<<24>>24!=(a[f>>0]|0)){b=-1;return b|0}}else{g=d&255;f=h+-1|0}c[j>>2]=i;c[k>>2]=f;c[b+16>>2]=e;a[f>>0]=g;b=d;return b|0}function jd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+16|0;n=t;if((d|0)==-1){b=0;i=t;return b|0}p=b+12|0;q=b+8|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;s=b+24|0;e=c[s>>2]|0;m=b+28|0;f=c[m>>2]|0;do if((e|0)==(f|0)){k=b+48|0;if(!(c[k>>2]&16)){b=-1;i=t;return b|0}l=b+20|0;j=c[l>>2]|0;g=e-j|0;h=b+44|0;j=(c[h>>2]|0)-j|0;f=b+32|0;o=0;ia(67,f|0,0);e=o;o=0;if(!(e&1)){if(!(a[f>>0]&1))e=10;else e=(c[f>>2]&-2)+-1|0;o=0;wa(8,f|0,e|0,0);e=o;o=0;if(!(e&1)){e=a[f>>0]|0;if(!(e&1)){f=f+1|0;e=(e&255)>>>1}else{f=c[b+40>>2]|0;e=c[b+36>>2]|0}u=f+e|0;c[l>>2]=f;c[m>>2]=u;l=f+g|0;c[s>>2]=l;e=f+j|0;c[h>>2]=e;f=u;break}}u=Na(0)|0;Va(u|0)|0;Xa();u=-1;i=t;return u|0}else{u=b+44|0;k=b+48|0;h=u;l=e;e=c[u>>2]|0}while(0);j=l+1|0;c[n>>2]=j;g=c[(j>>>0>>0?h:n)>>2]|0;c[h>>2]=g;if(c[k>>2]&8){e=b+32|0;if(!(a[e>>0]&1))e=e+1|0;else e=c[b+40>>2]|0;c[q>>2]=e;c[p>>2]=e+r;c[b+16>>2]=g}if((l|0)==(f|0)){u=Lb[c[(c[b>>2]|0)+52>>2]&63](b,d&255)|0;i=t;return u|0}else{c[s>>2]=j;a[l>>0]=d;u=d&255;i=t;return u|0}return 0}function kd(a){a=a|0;var b=0,d=0;c[a>>2]=36200;b=a+56|0;c[b>>2]=36220;d=a+4|0;c[d>>2]=36236;Im(a+36|0);nn(d);fn(b);return}function ld(a){a=a|0;var b=0,d=0;c[a>>2]=36200;b=a+56|0;c[b>>2]=36220;d=a+4|0;c[d>>2]=36236;Im(a+36|0);nn(d);fn(b);cj(a);return}function md(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;c[b>>2]=36200;d=a+(f+56)|0;c[d>>2]=36220;e=a+(f+4)|0;c[e>>2]=36236;Im(a+(f+36)|0);nn(e);fn(d);cj(b);return}function nd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36388;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function od(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36388;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function pd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;td(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;td(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function qd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;rd(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{sd(a,f,b,d,e);return}}function rd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;l=d+4|0;j=c[l>>2]|0;do if(!(a[j+32>>0]|0))m=f;else{d=d+8|0;lw(c[d>>2]|0,f|0,h*6|0)|0;j=c[l>>2]|0;k=c[j+16>>2]|0;if((h|0)<=0){m=c[d>>2]|0;break}d=c[d>>2]|0;j=d;f=0;while(1){m=j+4|0;n=b[j>>1]|0;b[j>>1]=b[m>>1]|0;b[m>>1]=n;f=f+1|0;if((f|0)==(h|0))break;else j=j+(k<<1)|0}m=d;j=c[l>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)>0)j=0;else return;do{l=e[m+(j*6|0)+2>>1]|0;i=32768-l+(e[m+(j*6|0)+4>>1]|0)|0;n=(e[m+(j*6|0)>>1]|0)-l+32768|0;b[g+(j*6|0)>>1]=l+49152+(((i&65535)+(n&65535)|0)>>>2);b[g+(j*6|0)+2>>1]=i;b[g+(j*6|0)+4>>1]=n;j=j+1|0}while((j|0)!=(h|0));return}j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=0;do{l=e[m+(f*6|0)+2>>1]|0;h=32768-l+(e[m+(f*6|0)+4>>1]|0)|0;n=(e[m+(f*6|0)>>1]|0)-l+32768|0;b[g+(f<<1)>>1]=l+49152+(((h&65535)+(n&65535)|0)>>>2);b[g+(f+i<<1)>>1]=h;b[g+(f+d<<1)>>1]=n;f=f+1|0}while((f|0)!=(j|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=i*3|0;k=0;do{n=b[m+(k<<3)+6>>1]|0;o=e[m+(k<<3)+2>>1]|0;l=32768-o+(e[m+(k<<3)+4>>1]|0)|0;h=(e[m+(k<<3)>>1]|0)-o+32768|0;b[g+(k<<1)>>1]=o+49152+(((l&65535)+(h&65535)|0)>>>2);b[g+(k+i<<1)>>1]=l;b[g+(k+d<<1)>>1]=h;b[g+(k+f<<1)>>1]=n;k=k+1|0}while((k|0)!=(j|0));return}default:return}}function sd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;rd(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;rd(b,t,e,f,g);i=q;return}function td(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=e[f+(d*6|0)+2>>1]|0;k=e[f+(d*6|0)+4>>1]|0;i=(e[f+(d*6|0)>>1]|0)-((k+l|0)>>>2)+16384|0;b[g+(d*6|0)>>1]=k+32768+i;b[g+(d*6|0)+2>>1]=i;b[g+(d*6|0)+4>>1]=l+32768+i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=e[f+(k+i<<1)>>1]|0;o=e[f+(k+j<<1)>>1]|0;l=(e[f+(k<<1)>>1]|0)-((o+n|0)>>>2)+16384|0;b[g+(k*6|0)>>1]=o+32768+l;b[g+(k*6|0)+2>>1]=l;b[g+(k*6|0)+4>>1]=n+32768+l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{n=e[f+(k+i<<1)>>1]|0;p=e[f+(k+d<<1)>>1]|0;o=(e[f+(k<<1)>>1]|0)-((p+n|0)>>>2)+16384|0;q=b[f+(k+j<<1)>>1]|0;r=mw(o&65535|0,0,16)|0;n=n+32768+o|D;q=mw(q&65535|0,0,48)|0;q=r|p+32768+o&65535|q;n=n&65535|D;o=g+(k<<3)|0;p=o;b[p>>1]=q;b[p+2>>1]=q>>>16;o=o+4|0;b[o>>1]=n;b[o+2>>1]=n>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){r=d+4|0;q=b[d>>1]|0;b[d>>1]=b[r>>1]|0;b[r>>1]=q;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function ud(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36412;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function vd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36412;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function wd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;Ad(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Ad(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function xd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;yd(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{zd(a,f,b,d,e);return}}function yd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=d+4|0;j=c[l>>2]|0;do if(!(a[j+32>>0]|0))m=f;else{d=d+8|0;lw(c[d>>2]|0,f|0,h*6|0)|0;j=c[l>>2]|0;k=c[j+16>>2]|0;if((h|0)<=0){m=c[d>>2]|0;break}d=c[d>>2]|0;j=d;f=0;while(1){m=j+4|0;n=b[j>>1]|0;b[j>>1]=b[m>>1]|0;b[m>>1]=n;f=f+1|0;if((f|0)==(h|0))break;else j=j+(k<<1)|0}m=d;j=c[l>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)>0)j=0;else return;do{k=e[m+(j*6|0)>>1]|0;i=b[m+(j*6|0)+2>>1]|0;l=i&65535;n=(e[m+(j*6|0)+4>>1]|0)+32768-((l+k|0)>>>1)&65535;b[g+(j*6|0)>>1]=k+32768-l;b[g+(j*6|0)+2>>1]=i;b[g+(j*6|0)+4>>1]=n;j=j+1|0}while((j|0)!=(h|0));return}j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=0;do{h=b[m+(f*6|0)+2>>1]|0;k=e[m+(f*6|0)>>1]|0;l=h&65535;n=(e[m+(f*6|0)+4>>1]|0)+32768-((l+k|0)>>>1)&65535;b[g+(f<<1)>>1]=k+32768-l;b[g+(f+i<<1)>>1]=h;b[g+(f+d<<1)>>1]=n;f=f+1|0}while((f|0)!=(j|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=i*3|0;k=0;do{l=b[m+(k<<3)+2>>1]|0;n=b[m+(k<<3)+6>>1]|0;p=e[m+(k<<3)>>1]|0;o=l&65535;h=(e[m+(k<<3)+4>>1]|0)+32768-((o+p|0)>>>1)&65535;b[g+(k<<1)>>1]=p+32768-o;b[g+(k+i<<1)>>1]=l;b[g+(k+d<<1)>>1]=h;b[g+(k+f<<1)>>1]=n;k=k+1|0}while((k|0)!=(j|0));return}default:return}}function zd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;yd(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;yd(b,t,e,f,g);i=q;return}function Ad(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=b[f+(d*6|0)+2>>1]|0;i=l&65535;k=(e[f+(d*6|0)>>1]|0)+32768+i|0;i=(e[f+(d*6|0)+4>>1]|0)+32768+(((k&65535)+i|0)>>>1)&65535;b[g+(d*6|0)>>1]=k;b[g+(d*6|0)+2>>1]=l;b[g+(d*6|0)+4>>1]=i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=b[f+(k+i<<1)>>1]|0;l=n&65535;o=(e[f+(k<<1)>>1]|0)+32768+l|0;l=(e[f+(k+j<<1)>>1]|0)+32768+(((o&65535)+l|0)>>>1)&65535;b[g+(k*6|0)>>1]=o;b[g+(k*6|0)+2>>1]=n;b[g+(k*6|0)+4>>1]=l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{o=b[f+(k+i<<1)>>1]|0;n=o&65535;p=(e[f+(k<<1)>>1]|0)+32768+n&65535;n=(e[f+(k+d<<1)>>1]|0)+32768+((p+n|0)>>>1)|0;q=b[f+(k+j<<1)>>1]|0;o=mw(o&65535|0,0,16)|0;n=D|n;q=mw(q&65535|0,0,48)|0;q=p|o|q;n=n&65535|D;o=g+(k<<3)|0;p=o;b[p>>1]=q;b[p+2>>1]=q>>>16;o=o+4|0;b[o>>1]=n;b[o+2>>1]=n>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){q=d+4|0;p=b[d>>1]|0;b[d>>1]=b[q>>1]|0;b[q>>1]=p;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function Bd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36436;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Cd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36436;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Dd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;Hd(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Hd(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Ed(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Fd(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Gd(a,f,b,d,e);return}}function Fd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;l=d+4|0;j=c[l>>2]|0;do if(!(a[j+32>>0]|0))m=f;else{d=d+8|0;lw(c[d>>2]|0,f|0,h*6|0)|0;j=c[l>>2]|0;k=c[j+16>>2]|0;if((h|0)<=0){m=c[d>>2]|0;break}d=c[d>>2]|0;j=d;f=0;while(1){m=j+4|0;n=b[j>>1]|0;b[j>>1]=b[m>>1]|0;b[m>>1]=n;f=f+1|0;if((f|0)==(h|0))break;else j=j+(k<<1)|0}m=d;j=c[l>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)>0)j=0;else return;do{i=b[m+(j*6|0)+2>>1]|0;l=i&65535;n=32768-l+(e[m+(j*6|0)+4>>1]|0)&65535;b[g+(j*6|0)>>1]=(e[m+(j*6|0)>>1]|0)+32768-l;b[g+(j*6|0)+2>>1]=i;b[g+(j*6|0)+4>>1]=n;j=j+1|0}while((j|0)!=(h|0));return}j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=0;do{h=b[m+(f*6|0)+2>>1]|0;l=h&65535;n=32768-l+(e[m+(f*6|0)+4>>1]|0)&65535;b[g+(f<<1)>>1]=(e[m+(f*6|0)>>1]|0)+32768-l;b[g+(f+i<<1)>>1]=h;b[g+(f+d<<1)>>1]=n;f=f+1|0}while((f|0)!=(j|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=i*3|0;k=0;do{l=b[m+(k<<3)+2>>1]|0;n=b[m+(k<<3)+6>>1]|0;o=l&65535;h=32768-o+(e[m+(k<<3)+4>>1]|0)&65535;b[g+(k<<1)>>1]=(e[m+(k<<3)>>1]|0)+32768-o;b[g+(k+i<<1)>>1]=l;b[g+(k+d<<1)>>1]=h;b[g+(k+f<<1)>>1]=n;k=k+1|0}while((k|0)!=(j|0));return}default:return}}function Gd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Fd(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Fd(b,t,e,f,g);i=q;return}function Hd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=b[f+(d*6|0)+2>>1]|0;k=l&65535;i=k+32768+(e[f+(d*6|0)+4>>1]|0)&65535;b[g+(d*6|0)>>1]=(e[f+(d*6|0)>>1]|0)+32768+k;b[g+(d*6|0)+2>>1]=l;b[g+(d*6|0)+4>>1]=i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=b[f+(k+i<<1)>>1]|0;o=n&65535;l=o+32768+(e[f+(k+j<<1)>>1]|0)&65535;b[g+(k*6|0)>>1]=(e[f+(k<<1)>>1]|0)+32768+o;b[g+(k*6|0)+2>>1]=n;b[g+(k*6|0)+4>>1]=l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{o=b[f+(k+i<<1)>>1]|0;n=o&65535;p=(e[f+(k<<1)>>1]|0)+32768+n|0;n=n+32768+(e[f+(k+d<<1)>>1]|0)|0;q=b[f+(k+j<<1)>>1]|0;o=mw(o&65535|0,0,16)|0;n=D|n;q=mw(q&65535|0,0,48)|0;q=p&65535|o|q;n=n&65535|D;o=g+(k<<3)|0;p=o;b[p>>1]=q;b[p+2>>1]=q>>>16;o=o+4|0;b[o>>1]=n;b[o+2>>1]=n>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){q=d+4|0;p=b[d>>1]|0;b[d>>1]=b[q>>1]|0;b[q>>1]=p;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function Id(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36460;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Jd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36460;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Kd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;Od(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Od(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Ld(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Md(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Nd(a,f,b,d,e);return}}function Md(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;k=d+4|0;i=c[k>>2]|0;do if(!(a[i+32>>0]|0))l=e;else{d=d+8|0;lw(c[d>>2]|0,e|0,g*6|0)|0;i=c[k>>2]|0;j=c[i+16>>2]|0;if((g|0)<=0){l=c[d>>2]|0;break}d=c[d>>2]|0;i=d;e=0;while(1){l=i+4|0;m=b[i>>1]|0;b[i>>1]=b[l>>1]|0;b[l>>1]=m;e=e+1|0;if((e|0)==(g|0))break;else i=i+(j<<1)|0}l=d;i=c[k>>2]|0}while(0);switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{h=b[l+(i*6|0)+2>>1]|0;m=b[l+(i*6|0)+4>>1]|0;b[f+(i*6|0)>>1]=b[l+(i*6|0)>>1]|0;b[f+(i*6|0)+2>>1]=h;b[f+(i*6|0)+4>>1]=m;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;d=h<<1;e=0;do{g=b[l+(e*6|0)+2>>1]|0;m=b[l+(e*6|0)+4>>1]|0;b[f+(e<<1)>>1]=b[l+(e*6|0)>>1]|0;b[f+(e+h<<1)>>1]=g;b[f+(e+d<<1)>>1]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;d=h<<1;e=h*3|0;j=0;do{k=b[l+(j<<3)+2>>1]|0;g=b[l+(j<<3)+4>>1]|0;m=b[l+(j<<3)+6>>1]|0;b[f+(j<<1)>>1]=b[l+(j<<3)>>1]|0;b[f+(j+h<<1)>>1]=k;b[f+(j+d<<1)>>1]=g;b[f+(j+e<<1)>>1]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function Nd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Md(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Md(b,t,e,f,g);i=q;return}function Od(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=b[f+(d*6|0)+2>>1]|0;i=b[f+(d*6|0)+4>>1]|0;b[g+(d*6|0)>>1]=b[f+(d*6|0)>>1]|0;b[g+(d*6|0)+2>>1]=l;b[g+(d*6|0)+4>>1]=i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=b[f+(k+i<<1)>>1]|0;l=b[f+(k+j<<1)>>1]|0;b[g+(k*6|0)>>1]=b[f+(k<<1)>>1]|0;b[g+(k*6|0)+2>>1]=n;b[g+(k*6|0)+4>>1]=l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{n=b[f+(k<<1)>>1]|0;q=b[f+(k+j<<1)>>1]|0;o=e[f+(k+d<<1)>>1]|0;p=mw(e[f+(k+i<<1)>>1]|0,0,16)|0;o=D|o;q=mw(q&65535|0,0,48)|0;q=p|n&65535|q;o=o&65535|D;n=g+(k<<3)|0;p=n;b[p>>1]=q;b[p+2>>1]=q>>>16;n=n+4|0;b[n>>1]=o;b[n+2>>1]=o>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){q=d+4|0;p=b[d>>1]|0;b[d>>1]=b[q>>1]|0;b[q>>1]=p;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function Pd(a){a=a|0;return}function Qd(a){a=a|0;cj(a);return}function Rd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;e=$(c[b+8>>2]|0,e)|0;b=c[b+4>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,d,e)|0)==(e|0))return;f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,3,35648);b=o;o=0;if(b&1){b=Na()|0;La(f|0);Ya(b|0)}else lb(f|0,824,96)}function Sd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,p=0;p=i;i=i+16|0;m=p;l=b+8|0;g=c[l>>2]|0;f=$(g,e)|0;do if(f){j=b+4|0;h=f;while(1){g=c[j>>2]|0;g=Gb[c[(c[g>>2]|0)+32>>2]&63](g,d,h)|0;if(!g)break;f=h-g|0;if((h|0)==(g|0)){k=11;break}else h=f}if((k|0)==11){g=c[l>>2]|0;h=f;break}f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,3,35648);b=o;o=0;if(b&1){b=Na()|0;La(f|0);Ya(b|0)}else lb(f|0,824,96)}else h=0;while(0);if((g|0)==2){Oc(d,e<<1);g=c[l>>2]|0}f=c[b+12>>2]|0;if((f|0)<=($(g,e)|0)){i=p;return}b=c[b+4>>2]|0;Ib[c[(c[b>>2]|0)+16>>2]&15](m,b,f-h|0,0,1,24);i=p;return}function Td(a){a=a|0;cj(a);return}function Ud(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=a+4|0;lw(c[e>>2]|0,b|0,$(c[a+8>>2]|0,d)|0)|0;c[e>>2]=(c[e>>2]|0)+(c[a+12>>2]|0);return}function Vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=a+4|0;lw(b|0,c[e>>2]|0,$(c[a+8>>2]|0,d)|0)|0;c[e>>2]=(c[e>>2]|0)+(c[a+12>>2]|0);return}function Wd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c[b+112>>2]=0;c[b+108>>2]=0;l=c[d>>2]|0;g=l;do if(l){i=b+92|0;l=b+96|0;j=c[l>>2]|0;k=c[i>>2]|0;e=k;f=j-e|0;if(f>>>0>=4e4)if(f>>>0>4e4?(h=k+4e4|0,(j|0)!=(h|0)):0){c[l>>2]=h;h=e}else h=e;else{Xd(i,4e4-f|0);h=c[i>>2]|0;g=c[d>>2]|0}e=b+116|0;c[e>>2]=h;j=b+124|0;c[j>>2]=h;k=b+104|0;c[k>>2]=g;f=g;if(g){if((c[f+12>>2]|0)==(c[f+16>>2]|0)){d=(Eb[c[(c[g>>2]|0)+36>>2]&127](f)|0)==-1;f=c[j>>2]|0;if(d)break;g=c[e>>2]|0}else{f=h;g=h}i=f-g|0;if(i>>>0<=64){h=b+92|0;if((f|0)==(g|0))f=g;else{f=g;g=0;do{a[(c[h>>2]|0)+g>>0]=a[f+g>>0]|0;g=g+1|0;f=c[e>>2]|0}while(g>>>0>>0);g=c[j>>2]|0}h=c[h>>2]|0;d=h;m=d-f|0;c[e>>2]=h;f=g+m|0;c[j>>2]=f;h=b+120|0;c[h>>2]=(c[h>>2]|0)+m;k=c[k>>2]|0;f=Gb[c[(c[k>>2]|0)+32>>2]&63](k,f,(c[l>>2]|0)-(d+i)|0)|0;f=(c[j>>2]|0)+f|0;c[j>>2]=f}}else f=h}else{c[b+104>>2]=0;f=c[d+4>>2]|0;e=b+116|0;c[e>>2]=f;f=f+(c[d+8>>2]|0)|0;c[b+124>>2]=f}while(0);e=c[e>>2]|0;if(e>>>0>=f>>>0){l=e;m=b+120|0;c[m>>2]=l;ge(b);return}while(1){if((a[e>>0]|0)==-1){f=20;break}e=e+1|0;if(e>>>0>=f>>>0){f=20;break}}if((f|0)==20){m=b+120|0;c[m>>2]=e;ge(b);return}}function Xd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=b+8|0;g=c[k>>2]|0;l=b+4|0;e=c[l>>2]|0;f=e;if((g-f|0)>>>0>=d>>>0){do{a[e>>0]=0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;d=d+-1|0}while((d|0)!=0);return}e=c[b>>2]|0;h=f-e+d|0;if((h|0)<0){$i(b);g=c[k>>2]|0;e=c[b>>2]|0}f=g-e|0;if(f>>>0<1073741823){f=f<<1;f=f>>>0>>0?h:f;e=(c[l>>2]|0)-e|0;if(!f){g=0;i=0;h=e}else j=8}else{f=2147483647;e=(c[l>>2]|0)-e|0;j=8}if((j|0)==8){g=f;i=bj(f)|0;h=e}e=i+h|0;g=i+g|0;f=e;do{a[f>>0]=0;f=e+1|0;e=f;d=d+-1|0}while((d|0)!=0);d=c[b>>2]|0;f=(c[l>>2]|0)-d|0;j=i+(h-f)|0;lw(j|0,d|0,f|0)|0;c[b>>2]=j;c[l>>2]=e;c[k>>2]=g;if(!d)return;cj(d);return}function Yd(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+32|0;x=v+12|0;u=v;r=a+180|0;s=(c[r>>2]|0)+4|0;if((c[a+32>>2]|0)==1)t=c[a+24>>2]|0;else t=1;d=$(t<<1,s)|0;c[x>>2]=0;y=x+4|0;c[y>>2]=0;c[x+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,x|0),w=o,o=0,w&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,w=o,o=0,!(w&1)):0){c[x>>2]=f;w=f+(d<<1)|0;c[x+8>>2]=w;iw(f|0,0,e|0)|0;c[y>>2]=w;break}f=Na()|0;d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[u>>2]=0;w=u+4|0;c[w>>2]=0;c[u+8>>2]=0;do if(!t)j=18;else{if(!(t>>>0>1073741823?(o=0,ha(178,u|0),q=o,o=0,q&1):0))j=16;if((j|0)==16?(g=t<<2,o=0,h=ka(67,g|0)|0,q=o,o=0,!(q&1)):0){c[u>>2]=h;j=h+(t<<2)|0;c[u+8>>2]=j;iw(h|0,0,g|0)|0;c[w>>2]=j;j=18;break}f=Na()|0;d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+12|0;a:do if((c[h>>2]|0)>0){j=a+4604|0;k=($(t,s)|0)+1|0;l=a+4608|0;m=a+92|0;n=(t|0)>0;p=a+4600|0;q=0;b:while(1){e=c[x>>2]|0;d=e+2|0;c[j>>2]=d;e=e+(k<<1)|0;c[l>>2]=e;if(!(q&1))d=e;else{c[j>>2]=e;c[l>>2]=d}g=c[m>>2]|0;o=0;Aa(c[(c[g>>2]|0)+12>>2]|0,g|0,d|0,c[r>>2]|0,s|0);g=o;o=0;if(g&1){j=28;break}if(n){d=c[j>>2]|0;e=c[l>>2]|0;f=c[u>>2]|0;g=0;do{c[p>>2]=c[f+(g<<2)>>2];f=c[r>>2]|0;b[d+(f<<1)>>1]=b[d+(f+-1<<1)>>1]|0;b[e+-2>>1]=b[d>>1]|0;o=0;ia(68,a|0,0);f=o;o=0;if(f&1){j=27;break b}f=c[u>>2]|0;c[f+(g<<2)>>2]=c[p>>2];d=(c[j>>2]|0)+(s<<1)|0;c[j>>2]=d;e=(c[l>>2]|0)+(s<<1)|0;c[l>>2]=e;g=g+1|0}while((g|0)<(t|0))}q=q+1|0;if((q|0)>=(c[h>>2]|0)){j=40;break a}}if((j|0)==27){f=Na()|0;break}else if((j|0)==28){f=Na()|0;break}}else j=40;while(0);do if((j|0)==40){o=0;ha(182,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[u>>2]|0;e=d;if(d){f=c[w>>2]|0;if((f|0)!=(d|0))c[w>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[x>>2]|0;if(!d){i=v;return}e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=v;return}while(0);d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function Zd(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4604|0;f=c[p>>2]|0;s=d+180|0;if((c[s>>2]|0)<=0)return;q=d+4608|0;r=d+4612|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(ce(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=be(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function _d(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=b+104|0;if((c[g>>2]|0)>>>0<4)$d(b);h=b+100|0;i=b+112|0;j=b+96|0;k=b+108|0;l=b+116|0;d=c[h>>2]|0;f=0;do{e=a[i>>0]|0;if((d|0)>31)break;d=c[j>>2]|0;if(!(e<<24>>24)){a[c[k>>2]>>0]=d>>>24;c[j>>2]=c[j>>2]<<8;d=(c[h>>2]|0)+8|0}else{a[c[k>>2]>>0]=d>>>25;c[j>>2]=c[j>>2]<<7;d=(c[h>>2]|0)+7|0}c[h>>2]=d;m=c[k>>2]|0;e=(a[m>>0]|0)==-1&1;a[i>>0]=e;c[k>>2]=m+1;c[g>>2]=(c[g>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+1;f=f+1|0}while((f|0)<4);if(!(e<<24>>24))ae(b,0,(d|0)%8|0);else ae(b,0,(d+-1|0)%8|0);if((c[g>>2]|0)>>>0<4)$d(b);d=c[h>>2]|0;e=0;do{if((d|0)>31)break;d=c[j>>2]|0;if(!(a[i>>0]|0)){a[c[k>>2]>>0]=d>>>24;c[j>>2]=c[j>>2]<<8;d=(c[h>>2]|0)+8|0}else{a[c[k>>2]>>0]=d>>>25;c[j>>2]=c[j>>2]<<7;d=(c[h>>2]|0)+7|0}c[h>>2]=d;m=c[k>>2]|0;a[i>>0]=(a[m>>0]|0)==-1&1;c[k>>2]=m+1;c[g>>2]=(c[g>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+1;e=e+1|0}while((e|0)<4);if(!(c[b+132>>2]|0))return;$d(b);return}function $d(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b+132>>2]|0;if(!d){d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,4,35648);b=o;o=0;if(!(b&1))lb(d|0,824,96);b=Na()|0;La(d|0);Ya(b|0)}e=b+108|0;f=b+120|0;h=c[f>>2]|0;g=(c[e>>2]|0)-h|0;if((Gb[c[(c[d>>2]|0)+48>>2]&63](d,h,g)|0)==(g|0)){h=c[f>>2]|0;c[e>>2]=h;c[b+104>>2]=(c[b+124>>2]|0)-h;return}d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,4,35648);h=o;o=0;if(!(h&1))lb(d|0,824,96);h=Na()|0;La(d|0);Ya(h|0)}function ae(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=b+100|0;e=(c[l>>2]|0)-e|0;c[l>>2]=e;if((e|0)>-1){m=b+96|0;c[m>>2]=c[m>>2]|d<>2]=c[m>>2]|d>>0-e;k=b+104|0;if((c[k>>2]|0)>>>0<4){$d(b);e=c[l>>2]|0}h=b+112|0;i=b+108|0;j=b+116|0;f=0;while(1){if((e|0)>31)break;e=c[m>>2]|0;if(!(a[h>>0]|0)){a[c[i>>2]>>0]=e>>>24;c[m>>2]=c[m>>2]<<8;e=(c[l>>2]|0)+8|0}else{a[c[i>>2]>>0]=e>>>25;c[m>>2]=c[m>>2]<<7;e=(c[l>>2]|0)+7|0}c[l>>2]=e;n=c[i>>2]|0;a[h>>0]=(a[n>>0]|0)==-1&1;c[i>>2]=n+1;c[k>>2]=(c[k>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+1;f=f+1|0;if((f|0)>=4){g=11;break}}a:do if((g|0)==11)if((e|0)<0){c[m>>2]=c[m>>2]|d>>0-e;if((c[k>>2]|0)>>>0<4){$d(b);e=c[l>>2]|0;f=0}else f=0;do{if((e|0)>31)break a;e=c[m>>2]|0;if(!(a[h>>0]|0)){a[c[i>>2]>>0]=e>>>24;c[m>>2]=c[m>>2]<<8;e=(c[l>>2]|0)+8|0}else{a[c[i>>2]>>0]=e>>>25;c[m>>2]=c[m>>2]<<7;e=(c[l>>2]|0)+7|0}c[l>>2]=e;n=c[i>>2]|0;a[h>>0]=(a[n>>0]|0)==-1&1;c[i>>2]=n+1;c[k>>2]=(c[k>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+1;f=f+1|0}while((f|0)<4)}while(0);c[m>>2]=c[m>>2]|d<>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;fe(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&65535;return r|0}r=g&~(d>>31);r=r&65535;return r|0}function ce(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=(c[a+180>>2]|0)-d|0;m=c[a+4608>>2]|0;n=c[a+4604>>2]|0;h=b[m+(d+-1<<1)>>1]|0;k=h&65535;f=c[a+144>>2]|0;i=0;while(1){g=m+(i+d<<1)|0;j=(e[g>>1]|0)-k|0;if((((j|0)>-1?j:0-j|0)|0)>(f|0))break;b[g>>1]=h;i=i+1|0;if((i|0)==(l|0)){i=l;break}}h=(i|0)==(l|0);j=a+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(i|0))f=i;else{f=i;do{ae(a,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]=de(a,e[d>>1]|0,k,e[n+(l<<1)>>1]|0)|0;a=c[j>>2]|0;c[j>>2]=(a|0)<1?0:a+-1|0;a=i+1|0;return a|0}if(!f){a=l;return a|0}ae(a,1,1);a=l;return a|0}function de(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=d-e|0;j=a+136|0;h=a+144|0;f=c[h>>2]|0;if((((i|0)>-1?i:0-i|0)|0)>(f|0)){g=e-d>>31|1;b=$(g,b-e|0)|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;d=((b|0)<0?f:0)+b|0;f=d-((d|0)<((f+1|0)/2|0|0)?0:f)|0;ee(a,a+4576|0,f);f=$(f,g)|0;g=c[h>>2]|0;h=g<<1|1;f=($(f,h)|0)+e|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&65535;return j|0}j=b&~(f>>31);j=j&65535;return j|0}else{b=b-d|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;g=((b|0)<0?f:0)+b|0;f=g-((g|0)<((f+1|0)/2|0|0)?0:f)|0;ee(a,a+4588|0,f);g=c[h>>2]|0;h=g<<1|1;f=($(h,f)|0)+d|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&65535;return j|0}j=b&~(f>>31);j=j&65535;return j|0}return 0}function ee(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;fe(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function fe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>2]|0;l=b+120|0;if(e>>>0<((c[l>>2]|0)+-3|0)>>>0){l=b+112|0;j=c[l>>2]|0;b=b+108|0;c[b>>2]=(d[e+1>>0]<<16|d[e>>0]<<24|d[e+2>>0]<<8|d[e+3>>0])>>>j|c[b>>2];b=32-j>>3;c[k>>2]=e+b;c[l>>2]=(b<<3)+j;return}j=b+104|0;f=c[j>>2]|0;do if(f){if((c[f+12>>2]|0)==(c[f+16>>2]|0)){if((Eb[c[(c[f>>2]|0)+36>>2]&127](f)|0)==-1)break;e=c[k>>2]|0}h=b+124|0;f=c[h>>2]|0;i=f-e|0;if(i>>>0<=64){g=b+92|0;if((f|0)==(e|0))f=e;else{f=0;do{a[(c[g>>2]|0)+f>>0]=a[e+f>>0]|0;f=f+1|0;e=c[k>>2]|0}while(f>>>0>>0);f=e;e=c[h>>2]|0}p=c[g>>2]|0;g=p;m=g-f|0;c[k>>2]=p;f=e+m|0;c[h>>2]=f;c[l>>2]=(c[l>>2]|0)+m;j=c[j>>2]|0;j=Gb[c[(c[j>>2]|0)+32>>2]&63](j,f,(c[b+96>>2]|0)-(g+i)|0)|0;c[h>>2]=(c[h>>2]|0)+j}}while(0);j=b+112|0;i=b+108|0;b=c[b+124>>2]|0;h=b+-1|0;e=c[k>>2]|0;while(1){if(e>>>0>=b>>>0){f=14;break}g=a[e>>0]|0;f=g&255;g=g<<24>>24==-1;if(g){if((e|0)==(h|0)){f=25;break}e=e+1|0;if((a[e>>0]|0)<0){f=25;break}}else e=e+1|0;p=c[j>>2]|0;c[i>>2]=f<<24-p|c[i>>2];c[k>>2]=e;p=p+(g?7:8)|0;c[j>>2]=p;if((p|0)>=24){f=33;break}}if((f|0)==14){if((c[j>>2]|0)>=1)return;e=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,e|0,5,35648);p=o;o=0;if(!(p&1))lb(e|0,824,96);p=Na()|0;La(e|0);Ya(p|0)}else if((f|0)==25){if((c[j>>2]|0)>=1)return;e=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,e|0,5,35648);p=o;o=0;if(!(p&1))lb(e|0,824,96);p=Na()|0;La(e|0);Ya(p|0)}else if((f|0)==33){a:do if(e>>>0>>0)do{if((a[e>>0]|0)==-1)break a;e=e+1|0}while(e>>>0>>0);while(0);c[l>>2]=e;return}}function he(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+144|0;a:do if(!(c[o>>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function ie(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=b+8|0;g=c[k>>2]|0;l=b+4|0;e=c[l>>2]|0;f=e;if((g-f|0)>>>0>=d>>>0){do{a[e>>0]=0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;d=d+-1|0}while((d|0)!=0);return}e=c[b>>2]|0;h=f-e+d|0;if((h|0)<0){$i(b);g=c[k>>2]|0;e=c[b>>2]|0}f=g-e|0;if(f>>>0<1073741823){f=f<<1;f=f>>>0>>0?h:f;e=(c[l>>2]|0)-e|0;if(!f){g=0;i=0;h=e}else j=8}else{f=2147483647;e=(c[l>>2]|0)-e|0;j=8}if((j|0)==8){g=f;i=bj(f)|0;h=e}e=i+h|0;g=i+g|0;f=e;do{a[f>>0]=0;f=e+1|0;e=f;d=d+-1|0}while((d|0)!=0);d=c[b>>2]|0;f=(c[l>>2]|0)-d|0;j=i+(h-f)|0;lw(j|0,d|0,f|0)|0;c[b>>2]=j;c[l>>2]=e;c[k>>2]=g;if(!d)return;cj(d);return}function je(a){a=a|0;var b=0,d=0;c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function ke(a){a=a|0;var b=0,d=0;c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function le(a){a=a|0;var b=0,d=0;c[a>>2]=36052;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function me(a){a=a|0;var b=0,d=0;c[a>>2]=36052;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function ne(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;xe(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function oe(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35828;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];qe(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;qe(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0} + function pe(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function qe(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;w=u+12|0;t=u;q=a+180|0;r=(c[q>>2]|0)+4|0;if((c[a+32>>2]|0)==1)s=c[a+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;do if(d){if(!(d>>>0>715827882?(o=0,ha(178,w|0),v=o,o=0,v&1):0))j=6;if((j|0)==6?(o=0,e=ka(67,d*6|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;f=e+(d*6|0)|0;c[w+8>>2]=f;while(1){b[e>>1]=0;b[e+2>>1]=0;b[e+4>>1]=0;d=d+-1|0;if(!d)break;else e=e+6|0}c[x>>2]=f;break}f=Na()|0;d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)j=20;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))j=18;if((j|0)==18?(g=s<<2,o=0,h=ka(67,g|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=h;j=h+(s<<2)|0;c[t+8>>2]=j;iw(h|0,0,g|0)|0;c[v>>2]=j;j=20;break}f=Na()|0;d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==20){g=a+12|0;a:do if((c[g>>2]|0)>0){h=a+4604|0;j=($(s,r)|0)+1|0;k=a+4608|0;l=a+92|0;m=(s|0)>0;n=a+4600|0;p=0;b:while(1){e=c[w>>2]|0;d=e+6|0;c[h>>2]=d;e=e+(j*6|0)|0;c[k>>2]=e;if(!(p&1))d=e;else{c[h>>2]=e;c[k>>2]=d}f=c[l>>2]|0;o=0;Aa(c[(c[f>>2]|0)+12>>2]|0,f|0,d|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){j=30;break}if(m){d=c[t>>2]|0;e=c[h>>2]|0;f=0;do{c[n>>2]=c[d+(f<<2)>>2];y=c[q>>2]|0;d=e+(y*6|0)|0;e=e+((y+-1|0)*6|0)|0;b[d>>1]=b[e>>1]|0;b[d+2>>1]=b[e+2>>1]|0;b[d+4>>1]=b[e+4>>1]|0;e=(c[k>>2]|0)+-6|0;d=c[h>>2]|0;b[e>>1]=b[d>>1]|0;b[e+2>>1]=b[d+2>>1]|0;b[e+4>>1]=b[d+4>>1]|0;o=0;ia(69,a|0,0);e=o;o=0;if(e&1){j=29;break b}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[n>>2];e=(c[h>>2]|0)+(r*6|0)|0;c[h>>2]=e;c[k>>2]=(c[k>>2]|0)+(r*6|0);f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(182,a|0);y=o;o=0;if(y&1){f=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);i=u;return}while(0);d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}function re(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;B=d+180|0;if((c[B>>2]|0)<=0)return;C=d+4608|0;D=d+4604|0;E=d+4612|0;A=0;while(1){x=A+-1|0;j=c[C>>2]|0;k=c[D>>2]|0;f=A+1|0;i=e[k+(A*6|0)>>1]|0;z=c[E>>2]|0;l=e[k+(x*6|0)>>1]|0;m=i-l|0;n=e[j+(x*6|0)>>1]|0;o=l-n|0;p=((((a[z+((e[k+(f*6|0)>>1]|0)-i)>>0]|0)*9|0)+(a[z+m>>0]|0)|0)*9|0)+(a[z+o>>0]|0)|0;h=e[k+(A*6|0)+2>>1]|0;q=e[k+(x*6|0)+2>>1]|0;r=h-q|0;s=e[j+(x*6|0)+2>>1]|0;t=q-s|0;u=((((a[z+((e[k+(f*6|0)+2>>1]|0)-h)>>0]|0)*9|0)+(a[z+r>>0]|0)|0)*9|0)+(a[z+t>>0]|0)|0;g=e[k+(A*6|0)+4>>1]|0;v=e[k+(x*6|0)+4>>1]|0;w=g-v|0;x=e[j+(x*6|0)+4>>1]|0;y=v-x|0;z=((((a[z+((e[k+(f*6|0)+4>>1]|0)-g)>>0]|0)*9|0)+(a[z+w>>0]|0)|0)*9|0)+(a[z+y>>0]|0)|0;if(!(u|p|z))f=(se(d,A,0)|0)+A|0;else{k=e[j+(A*6|0)>>1]|0;j=i-n>>31;if((j^o|0)>=0)if((j^m|0)<0)i=n;else i=n-l+i|0;k=te(d,p,k,i,0)|0;j=e[(c[C>>2]|0)+(A*6|0)+2>>1]|0;i=h-s>>31;if((i^t|0)>=0)if((i^r|0)<0)h=s;else h=s-q+h|0;i=te(d,u,j,h,0)|0;j=e[(c[C>>2]|0)+(A*6|0)+4>>1]|0;h=g-x>>31;if((h^y|0)>=0)if((h^w|0)<0)g=x;else g=x-v+g|0;y=te(d,z,j,g,0)|0;z=c[C>>2]|0;b[z+(A*6|0)>>1]=k;b[z+(A*6|0)+2>>1]=i;b[z+(A*6|0)+4>>1]=y}if((f|0)<(c[B>>2]|0))A=f;else break}return}function se(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=i;i=i+48|0;r=B+30|0;q=B+24|0;p=B+18|0;s=B+12|0;x=B+6|0;y=B;z=(c[a+180>>2]|0)-d|0;A=c[a+4608>>2]|0;t=c[a+4604>>2]|0;w=d+-1|0;u=b[A+(w*6|0)>>1]|0;v=b[A+(w*6|0)+2>>1]|0;w=b[A+(w*6|0)+4>>1]|0;f=u&65535;g=a+144|0;h=v&65535;j=w&65535;o=0;while(1){m=o+d|0;k=A+(m*6|0)|0;l=A+(m*6|0)+2|0;m=A+(m*6|0)+4|0;C=(e[k>>1]|0)-f|0;n=c[g>>2]|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(e[l>>1]|0)-h|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(e[m>>1]|0)-j|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;b[k>>1]=u;b[l>>1]=v;b[m>>1]=w;o=o+1|0;if((o|0)==(z|0)){o=z;break}}h=(o|0)==(z|0);j=a+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(o|0))f=o;else{f=o;do{ae(a,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]=b[C>>1]|0;b[x+2>>1]=b[C+2>>1]|0;b[x+4>>1]=b[C+4>>1]|0;b[y>>1]=u;b[y+2>>1]=v;b[y+4>>1]=w;d=t+(d*6|0)|0;b[p>>1]=b[x>>1]|0;b[p+2>>1]=b[x+2>>1]|0;b[p+4>>1]=b[x+4>>1]|0;b[q>>1]=b[y>>1]|0;b[q+2>>1]=b[y+2>>1]|0;b[q+4>>1]=b[y+4>>1]|0;b[r>>1]=b[d>>1]|0;b[r+2>>1]=b[d+2>>1]|0;b[r+4>>1]=b[d+4>>1]|0;ve(s,a,p,q,r);b[C>>1]=b[s>>1]|0;b[C+2>>1]=b[s+2>>1]|0;b[C+4>>1]=b[s+4>>1]|0;C=c[j>>2]|0;c[j>>2]=(C|0)<1?0:C+-1|0;C=o+1|0;i=B;return C|0}if(!f){C=z;i=B;return C|0}ae(a,1,1);C=z;i=B;return C|0}function te(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=d>>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;ue(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&65535;return r|0}r=g&~(d>>31);r=r&65535;return r|0}function ue(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>1]|0;p=o-(e[g>>1]|0)>>31|1;i=$(p,(e[f>>1]|0)-o|0)|0;m=d+144|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;w=d+140|0;l=c[w>>2]|0;k=((i|0)<0?l:0)+i|0;l=k-((k|0)<((l+1|0)/2|0|0)?0:l)|0;k=d+4576|0;we(d,k,l);t=e[h+2>>1]|0;u=t-(e[g+2>>1]|0)>>31|1;i=$(u,(e[f+2>>1]|0)-t|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;q=c[w>>2]|0;v=((i|0)<0?q:0)+i|0;q=v-((v|0)<((q+1|0)/2|0|0)?0:q)|0;we(d,k,q);v=e[h+4>>1]|0;s=v-(e[g+4>>1]|0)>>31|1;i=$(s,(e[f+4>>1]|0)-v|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;n=c[w>>2]|0;i=((i|0)<0?n:0)+i|0;n=i-((i|0)<((n+1|0)/2|0|0)?0:n)|0;we(d,k,n);k=c[m>>2]|0;m=k<<1|1;i=($($(m,l)|0,p)|0)+o|0;f=0-k|0;if((i|0)>=(f|0)){j=c[r>>2]|0;if((j+k|0)<(i|0)){i=i-($(c[w>>2]|0,m)|0)|0;g=j}else g=j}else{i=($(c[w>>2]|0,m)|0)+i|0;g=c[r>>2]|0}if((i&g|0)!=(i|0))i=g&~(i>>31);h=i&65535;i=($($(m,q)|0,u)|0)+t|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)!=(i|0))i=g&~(i>>31);j=i&65535;i=($($(m,n)|0,s)|0)+v|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)==(i|0)){w=i;w=w&65535;b[a>>1]=h;v=a+2|0;b[v>>1]=j;a=a+4|0;b[a>>1]=w;return}w=g&~(i>>31);w=w&65535;b[a>>1]=h;v=a+2|0;b[v>>1]=j;a=a+4|0;b[a>>1]=w;return}function we(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;ue(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function xe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+144|0;a:do if(!(c[o>>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function ye(a){a=a|0;var b=0,d=0;c[a>>2]=36024;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function ze(a){a=a|0;var b=0,d=0;c[a>>2]=36024;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Ae(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;pf(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function Be(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35800;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function Ce(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function De(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36712;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function Ee(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36688;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function Fe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36664;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function Ge(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36640;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function He(a){a=a|0;var b=0,d=0;c[a>>2]=36640;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function Ie(a){a=a|0;var b=0,d=0;c[a>>2]=36640;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;Ne(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;Ne(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function Ke(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Le(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Me(a,f,b,d,e);return}}function Le(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=b+4|0;i=c[k>>2]|0;if(!(a[i+32>>0]|0))k=e;else{j=b+8|0;lw(c[j>>2]|0,e|0,g*3|0)|0;i=c[k>>2]|0;e=c[i+16>>2]|0;if((g|0)>0){i=c[j>>2]|0;b=0;while(1){l=i+2|0;m=a[i>>0]|0;a[i>>0]=a[l>>0]|0;a[l>>0]=m;b=b+1|0;if((b|0)==(g|0))break;else i=i+e|0}i=c[k>>2]|0}k=c[j>>2]|0}switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{j=d[k+(i*3|0)+1>>0]|0;h=128-j+(d[k+(i*3|0)+2>>0]|0)|0;l=(d[k+(i*3|0)>>0]|0)-j+128|0;m=f+(i*3|0)|0;a[m>>0]=j+192+(((h&255)+(l&255)|0)>>>2);a[m+1>>0]=h;a[m+2>>0]=l;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=0;do{g=d[k+(e*3|0)+1>>0]|0;l=128-g+(d[k+(e*3|0)+2>>0]|0)|0;m=(d[k+(e*3|0)>>0]|0)-g+128|0;a[f+e>>0]=g+192+(((l&255)+(m&255)|0)>>>2);a[f+(e+h)>>0]=l;a[f+(e+b)>>0]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=h*3|0;j=0;do{m=a[k+(j<<2)+3>>0]|0;n=d[k+(j<<2)+1>>0]|0;g=128-n+(d[k+(j<<2)+2>>0]|0)|0;l=(d[k+(j<<2)>>0]|0)-n+128|0;a[f+j>>0]=n+192+(((g&255)+(l&255)|0)>>>2);a[f+(j+h)>>0]=g;a[f+(j+b)>>0]=l;a[f+(j+e)>>0]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function Me(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;Le(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){Le(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function Ne(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=d[e+(b*3|0)+1>>0]|0;i=d[e+(b*3|0)+2>>0]|0;k=(d[e+(b*3|0)>>0]|0)-((i+j|0)>>>2)+64|0;h=f+(b*3|0)|0;a[h>>0]=i+128+k;a[h+1>>0]=k;a[h+2>>0]=j+128+k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=d[e+(j+h)>>0]|0;o=d[e+(j+i)>>0]|0;m=(d[e+j>>0]|0)-((o+n|0)>>>2)+64|0;k=f+(j*3|0)|0;a[k>>0]=o+128+m;a[k+1>>0]=m;a[k+2>>0]=n+128+m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{m=d[e+(j+h)>>0]|0;p=d[e+(j+b)>>0]|0;n=(d[e+j>>0]|0)-((p+m|0)>>>2)+64|0;o=f+(j<<2)|0;n=n<<8&65280|d[e+(j+i)>>0]<<24|p+128+n&255|m+128+n<<16&16711680;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){p=b+2|0;o=a[b>>0]|0;a[b>>0]=a[p>>0]|0;a[p>>0]=o;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function Oe(a){a=a|0;var b=0,d=0;c[a>>2]=36664;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function Pe(a){a=a|0;var b=0,d=0;c[a>>2]=36664;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Qe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;Ue(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;Ue(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function Re(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Se(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Te(a,f,b,d,e);return}}function Se(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=b+4|0;i=c[k>>2]|0;if(!(a[i+32>>0]|0))k=e;else{j=b+8|0;lw(c[j>>2]|0,e|0,g*3|0)|0;i=c[k>>2]|0;e=c[i+16>>2]|0;if((g|0)>0){i=c[j>>2]|0;b=0;while(1){l=i+2|0;m=a[i>>0]|0;a[i>>0]=a[l>>0]|0;a[l>>0]=m;b=b+1|0;if((b|0)==(g|0))break;else i=i+e|0}i=c[k>>2]|0}k=c[j>>2]|0}switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{e=d[k+(i*3|0)>>0]|0;h=a[k+(i*3|0)+1>>0]|0;j=h&255;l=(d[k+(i*3|0)+2>>0]|0)+128-((j+e|0)>>>1)&255;m=f+(i*3|0)|0;a[m>>0]=e+128-j;a[m+1>>0]=h;a[m+2>>0]=l;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=0;do{l=a[k+(e*3|0)+1>>0]|0;j=d[k+(e*3|0)>>0]|0;g=l&255;m=(d[k+(e*3|0)+2>>0]|0)+128-((g+j|0)>>>1)&255;a[f+e>>0]=j+128-g;a[f+(e+h)>>0]=l;a[f+(e+b)>>0]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=h*3|0;j=0;do{g=a[k+(j<<2)+1>>0]|0;m=a[k+(j<<2)+3>>0]|0;o=d[k+(j<<2)>>0]|0;n=g&255;l=(d[k+(j<<2)+2>>0]|0)+128-((n+o|0)>>>1)&255;a[f+j>>0]=o+128-n;a[f+(j+h)>>0]=g;a[f+(j+b)>>0]=l;a[f+(j+e)>>0]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function Te(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;Se(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){Se(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function Ue(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=a[e+(b*3|0)+1>>0]|0;k=j&255;i=(d[e+(b*3|0)>>0]|0)+128+k|0;k=(d[e+(b*3|0)+2>>0]|0)+128+(((i&255)+k|0)>>>1)&255;h=f+(b*3|0)|0;a[h>>0]=i;a[h+1>>0]=j;a[h+2>>0]=k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=a[e+(j+h)>>0]|0;m=n&255;o=(d[e+j>>0]|0)+128+m|0;m=(d[e+(j+i)>>0]|0)+128+(((o&255)+m|0)>>>1)&255;k=f+(j*3|0)|0;a[k>>0]=o;a[k+1>>0]=n;a[k+2>>0]=m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{n=d[e+(j+h)>>0]|0;m=(d[e+j>>0]|0)+128+n&255;o=f+(j<<2)|0;n=m|n<<8|d[e+(j+i)>>0]<<24|(d[e+(j+b)>>0]|0)+128+((m+n|0)>>>1)<<16&16711680;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){o=b+2|0;n=a[b>>0]|0;a[b>>0]=a[o>>0]|0;a[o>>0]=n;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function Ve(a){a=a|0;var b=0,d=0;c[a>>2]=36688;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function We(a){a=a|0;var b=0,d=0;c[a>>2]=36688;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Xe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;$e(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;$e(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function Ye(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Ze(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{_e(a,f,b,d,e);return}}function Ze(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=b+4|0;i=c[k>>2]|0;if(!(a[i+32>>0]|0))k=e;else{j=b+8|0;lw(c[j>>2]|0,e|0,g*3|0)|0;i=c[k>>2]|0;e=c[i+16>>2]|0;if((g|0)>0){i=c[j>>2]|0;b=0;while(1){l=i+2|0;m=a[i>>0]|0;a[i>>0]=a[l>>0]|0;a[l>>0]=m;b=b+1|0;if((b|0)==(g|0))break;else i=i+e|0}i=c[k>>2]|0}k=c[j>>2]|0}switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{h=a[k+(i*3|0)+1>>0]|0;j=h&255;l=128-j+(d[k+(i*3|0)+2>>0]|0)&255;m=f+(i*3|0)|0;a[m>>0]=(d[k+(i*3|0)>>0]|0)+128-j;a[m+1>>0]=h;a[m+2>>0]=l;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=0;do{l=a[k+(e*3|0)+1>>0]|0;g=l&255;m=128-g+(d[k+(e*3|0)+2>>0]|0)&255;a[f+e>>0]=(d[k+(e*3|0)>>0]|0)+128-g;a[f+(e+h)>>0]=l;a[f+(e+b)>>0]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=h*3|0;j=0;do{g=a[k+(j<<2)+1>>0]|0;m=a[k+(j<<2)+3>>0]|0;n=g&255;l=128-n+(d[k+(j<<2)+2>>0]|0)&255;a[f+j>>0]=(d[k+(j<<2)>>0]|0)+128-n;a[f+(j+h)>>0]=g;a[f+(j+b)>>0]=l;a[f+(j+e)>>0]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function _e(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;Ze(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){Ze(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function $e(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=a[e+(b*3|0)+1>>0]|0;i=j&255;k=i+128+(d[e+(b*3|0)+2>>0]|0)&255;h=f+(b*3|0)|0;a[h>>0]=(d[e+(b*3|0)>>0]|0)+128+i;a[h+1>>0]=j;a[h+2>>0]=k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=a[e+(j+h)>>0]|0;o=n&255;m=o+128+(d[e+(j+i)>>0]|0)&255;k=f+(j*3|0)|0;a[k>>0]=(d[e+j>>0]|0)+128+o;a[k+1>>0]=n;a[k+2>>0]=m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{n=d[e+(j+h)>>0]|0;o=f+(j<<2)|0;n=(d[e+j>>0]|0)+128+n&255|n<<8|d[e+(j+i)>>0]<<24|n+128+(d[e+(j+b)>>0]|0)<<16&16711680;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){o=b+2|0;n=a[b>>0]|0;a[b>>0]=a[o>>0]|0;a[o>>0]=n;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function af(a){a=a|0;var b=0,d=0;c[a>>2]=36712;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function bf(a){a=a|0;var b=0,d=0;c[a>>2]=36712;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function cf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;gf(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;gf(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;ef(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{ff(a,f,b,d,e);return}}function ef(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=b+4|0;h=c[j>>2]|0;if(!(a[h+32>>0]|0))j=d;else{i=b+8|0;lw(c[i>>2]|0,d|0,f*3|0)|0;h=c[j>>2]|0;d=c[h+16>>2]|0;if((f|0)>0){h=c[i>>2]|0;b=0;while(1){k=h+2|0;l=a[h>>0]|0;a[h>>0]=a[k>>0]|0;a[k>>0]=l;b=b+1|0;if((b|0)==(f|0))break;else h=h+d|0}h=c[j>>2]|0}j=c[i>>2]|0}switch(c[h+16>>2]|0){case 3:{if((c[h+24>>2]|0)==2){if((f|0)>0)h=0;else return;do{g=a[j+(h*3|0)+1>>0]|0;k=a[j+(h*3|0)+2>>0]|0;l=e+(h*3|0)|0;a[l>>0]=a[j+(h*3|0)>>0]|0;a[l+1>>0]=g;a[l+2>>0]=k;h=h+1|0}while((h|0)!=(f|0));return}h=(g|0)<(f|0)?g:f;if((h|0)<=0)return;b=g<<1;d=0;do{k=a[j+(d*3|0)+1>>0]|0;l=a[j+(d*3|0)+2>>0]|0;a[e+d>>0]=a[j+(d*3|0)>>0]|0;a[e+(d+g)>>0]=k;a[e+(d+b)>>0]=l;d=d+1|0}while((d|0)!=(h|0));return}case 4:{if((c[h+24>>2]|0)!=1)return;h=(g|0)<(f|0)?g:f;if((h|0)<=0)return;b=g<<1;d=g*3|0;i=0;do{f=a[j+(i<<2)+1>>0]|0;k=a[j+(i<<2)+2>>0]|0;l=a[j+(i<<2)+3>>0]|0;a[e+i>>0]=a[j+(i<<2)>>0]|0;a[e+(i+g)>>0]=f;a[e+(i+b)>>0]=k;a[e+(i+d)>>0]=l;i=i+1|0}while((i|0)!=(h|0));return}default:return}}function ff(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;ef(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){ef(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function gf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=a[e+(b*3|0)+1>>0]|0;k=a[e+(b*3|0)+2>>0]|0;h=f+(b*3|0)|0;a[h>>0]=a[e+(b*3|0)>>0]|0;a[h+1>>0]=j;a[h+2>>0]=k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=a[e+(j+h)>>0]|0;m=a[e+(j+i)>>0]|0;k=f+(j*3|0)|0;a[k>>0]=a[e+j>>0]|0;a[k+1>>0]=n;a[k+2>>0]=m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{n=f+(j<<2)|0;m=d[e+(j+h)>>0]<<8|d[e+j>>0]|d[e+(j+b)>>0]<<16|d[e+(j+i)>>0]<<24;a[n>>0]=m;a[n+1>>0]=m>>8;a[n+2>>0]=m>>16;a[n+3>>0]=m>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){n=b+2|0;m=a[b>>0]|0;a[b>>0]=a[n>>0]|0;a[n>>0]=m;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function hf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;w=u+12|0;t=u;q=b+180|0;r=(c[q>>2]|0)+4|0;if((c[b+32>>2]|0)==1)s=c[b+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,w|0),v=o,o=0,v&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[x>>2]|0)+3|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)h=19;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))h=17;if((h|0)==17?(f=s<<2,o=0,g=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=g;h=g+(s<<2)|0;c[t+8>>2]=h;iw(g|0,0,f|0)|0;c[v>>2]=h;h=19;break}f=Na()|0;d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){g=b+12|0;b:do if((c[g>>2]|0)>0){h=b+4604|0;j=($(s,r)|0)+1|0;k=b+4608|0;l=b+92|0;m=(s|0)>0;n=b+4600|0;p=0;c:while(1){f=c[w>>2]|0;d=f+3|0;c[h>>2]=d;e=f+(j*3|0)|0;c[k>>2]=e;if(!(p&1))d=j;else{c[h>>2]=e;c[k>>2]=d;d=1}e=c[l>>2]|0;o=0;Aa(c[(c[e>>2]|0)+12>>2]|0,e|0,f+(d*3|0)|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){h=29;break}if(m){d=c[t>>2]|0;e=c[h>>2]|0;f=0;do{c[n>>2]=c[d+(f<<2)>>2];y=c[q>>2]|0;d=e+(y*3|0)|0;e=e+((y+-1|0)*3|0)|0;a[d>>0]=a[e>>0]|0;a[d+1>>0]=a[e+1>>0]|0;a[d+2>>0]=a[e+2>>0]|0;d=c[h>>2]|0;e=(c[k>>2]|0)+-3|0;a[e>>0]=a[d>>0]|0;a[e+1>>0]=a[d+1>>0]|0;a[e+2>>0]=a[d+2>>0]|0;o=0;ia(70,b|0,0);e=o;o=0;if(e&1){h=28;break c}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[n>>2];e=(c[h>>2]|0)+(r*3|0)|0;c[h>>2]=e;c[k>>2]=(c[k>>2]|0)+(r*3|0);f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){h=41;break b}}if((h|0)==28){f=Na()|0;break}else if((h|0)==29){f=Na()|0;break}}else h=41;while(0);do if((h|0)==41){o=0;ha(182,b|0);y=o;o=0;if(y&1){f=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=u;return}while(0);d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function jf(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=b+180|0;if((c[A>>2]|0)<=0)return;B=b+4608|0;C=b+4604|0;D=b+4612|0;z=0;while(1){w=z+-1|0;i=c[B>>2]|0;j=c[C>>2]|0;e=z+1|0;h=d[j+(z*3|0)>>0]|0;y=c[D>>2]|0;k=d[j+(w*3|0)>>0]|0;l=h-k|0;m=d[i+(w*3|0)>>0]|0;n=k-m|0;o=((((a[y+((d[j+(e*3|0)>>0]|0)-h)>>0]|0)*9|0)+(a[y+l>>0]|0)|0)*9|0)+(a[y+n>>0]|0)|0;g=d[j+(z*3|0)+1>>0]|0;p=d[j+(w*3|0)+1>>0]|0;q=g-p|0;r=d[i+(w*3|0)+1>>0]|0;s=p-r|0;t=((((a[y+((d[j+(e*3|0)+1>>0]|0)-g)>>0]|0)*9|0)+(a[y+q>>0]|0)|0)*9|0)+(a[y+s>>0]|0)|0;f=d[j+(z*3|0)+2>>0]|0;u=d[j+(w*3|0)+2>>0]|0;v=f-u|0;w=d[i+(w*3|0)+2>>0]|0;x=u-w|0;y=((((a[y+((d[j+(e*3|0)+2>>0]|0)-f)>>0]|0)*9|0)+(a[y+v>>0]|0)|0)*9|0)+(a[y+x>>0]|0)|0;if(!(t|o|y))e=(kf(b,z,0)|0)+z|0;else{j=d[i+(z*3|0)>>0]|0;i=h-m>>31;if((i^n|0)>=0)if((i^l|0)<0)h=m;else h=m-k+h|0;j=lf(b,o,j,h,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+1>>0]|0;h=g-r>>31;if((h^s|0)>=0)if((h^q|0)<0)g=r;else g=r-p+g|0;h=lf(b,t,i,g,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+2>>0]|0;g=f-w>>31;if((g^x|0)>=0)if((g^v|0)<0)f=w;else f=w-u+f|0;y=lf(b,y,i,f,0)|0;z=(c[B>>2]|0)+(z*3|0)|0;a[z>>0]=j;a[z+1>>0]=h;a[z+2>>0]=y}if((e|0)<(c[A>>2]|0))z=e;else break}return}function kf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=i;i=i+32|0;A=B+15|0;q=B+12|0;p=B+9|0;r=B+6|0;w=B+3|0;x=B;y=(c[b+180>>2]|0)-e|0;z=c[b+4608>>2]|0;s=c[b+4604>>2]|0;v=z+((e+-1|0)*3|0)|0;t=a[v>>0]|0;u=a[v+1>>0]|0;v=a[v+2>>0]|0;f=t&255;g=b+144|0;h=u&255;j=v&255;o=0;while(1){k=z+((o+e|0)*3|0)|0;l=k+1|0;m=k+2|0;C=(d[k>>0]|0)-f|0;n=c[g>>2]|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(d[l>>0]|0)-h|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(d[m>>0]|0)-j|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;a[k>>0]=t;a[l>>0]=u;a[m>>0]=v;o=o+1|0;if((o|0)==(y|0)){o=y;break}}h=(o|0)==(y|0);j=b+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(o|0))f=o;else{f=o;do{ae(b,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]=a[C>>0]|0;a[w+1>>0]=a[C+1>>0]|0;a[w+2>>0]=a[C+2>>0]|0;a[x>>0]=t;a[x+1>>0]=u;a[x+2>>0]=v;e=s+(e*3|0)|0;a[p>>0]=a[w>>0]|0;a[p+1>>0]=a[w+1>>0]|0;a[p+2>>0]=a[w+2>>0]|0;a[q>>0]=a[x>>0]|0;a[q+1>>0]=a[x+1>>0]|0;a[q+2>>0]=a[x+2>>0]|0;a[A>>0]=a[e>>0]|0;a[A+1>>0]=a[e+1>>0]|0;a[A+2>>0]=a[e+2>>0]|0;nf(r,b,p,q,A);a[C>>0]=a[r>>0]|0;a[C+1>>0]=a[r+1>>0]|0;a[C+2>>0]=a[r+2>>0]|0;C=c[j>>2]|0;c[j>>2]=(C|0)<1?0:C+-1|0;C=o+1|0;i=B;return C|0}if(!f){C=y;i=B;return C|0}ae(b,1,1);C=y;i=B;return C|0}function lf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=d>>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;mf(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&255;return r|0}r=g&~(d>>31);r=r&255;return r|0}function mf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>0]|0;p=o-(d[g>>0]|0)>>31|1;i=$(p,(d[f>>0]|0)-o|0)|0;m=e+144|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;w=e+140|0;l=c[w>>2]|0;k=((i|0)<0?l:0)+i|0;l=k-((k|0)<((l+1|0)/2|0|0)?0:l)|0;k=e+4576|0;of(e,k,l);t=d[h+1>>0]|0;u=t-(d[g+1>>0]|0)>>31|1;i=$(u,(d[f+1>>0]|0)-t|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;q=c[w>>2]|0;v=((i|0)<0?q:0)+i|0;q=v-((v|0)<((q+1|0)/2|0|0)?0:q)|0;of(e,k,q);v=d[h+2>>0]|0;s=v-(d[g+2>>0]|0)>>31|1;i=$(s,(d[f+2>>0]|0)-v|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;n=c[w>>2]|0;i=((i|0)<0?n:0)+i|0;n=i-((i|0)<((n+1|0)/2|0|0)?0:n)|0;of(e,k,n);k=c[m>>2]|0;m=k<<1|1;i=($($(m,l)|0,p)|0)+o|0;f=0-k|0;if((i|0)>=(f|0)){j=c[r>>2]|0;if((j+k|0)<(i|0)){i=i-($(c[w>>2]|0,m)|0)|0;g=j}else g=j}else{i=($(c[w>>2]|0,m)|0)+i|0;g=c[r>>2]|0}if((i&g|0)!=(i|0))i=g&~(i>>31);h=i&255;i=($($(m,q)|0,u)|0)+t|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)!=(i|0))i=g&~(i>>31);j=i&255;i=($($(m,n)|0,s)|0)+v|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)==(i|0)){w=i;w=w&255;a[b>>0]=h;v=b+1|0;a[v>>0]=j;b=b+2|0;a[b>>0]=w;return}w=g&~(i>>31);w=w&255;a[b>>0]=h;v=b+1|0;a[v>>0]=j;b=b+2|0;a[b>>0]=w;return}function of(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;mf(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function pf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+144|0;a:do if(!(c[o>>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function qf(a){a=a|0;var b=0,d=0;c[a>>2]=35996;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function rf(a){a=a|0;var b=0,d=0;c[a>>2]=35996;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function sf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,65535,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;Bf(d);g=0;do{c[d+172+(g*12|0)>>2]=1024;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=1024;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=1024;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function tf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35772;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];vf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;vf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function uf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function vf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+32|0;x=v+12|0;u=v;r=a+156|0;s=(c[r>>2]|0)+4|0;if((c[a+32>>2]|0)==1)t=c[a+24>>2]|0;else t=1;d=$(t<<1,s)|0;c[x>>2]=0;y=x+4|0;c[y>>2]=0;c[x+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,x|0),w=o,o=0,w&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,w=o,o=0,!(w&1)):0){c[x>>2]=f;w=f+(d<<1)|0;c[x+8>>2]=w;iw(f|0,0,e|0)|0;c[y>>2]=w;break}f=Na()|0;d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[u>>2]=0;w=u+4|0;c[w>>2]=0;c[u+8>>2]=0;do if(!t)j=18;else{if(!(t>>>0>1073741823?(o=0,ha(178,u|0),q=o,o=0,q&1):0))j=16;if((j|0)==16?(g=t<<2,o=0,h=ka(67,g|0)|0,q=o,o=0,!(q&1)):0){c[u>>2]=h;j=h+(t<<2)|0;c[u+8>>2]=j;iw(h|0,0,g|0)|0;c[w>>2]=j;j=18;break}f=Na()|0;d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+12|0;a:do if((c[h>>2]|0)>0){j=a+4580|0;k=($(t,s)|0)+1|0;l=a+4584|0;m=a+92|0;n=(t|0)>0;p=a+4576|0;q=0;b:while(1){e=c[x>>2]|0;d=e+2|0;c[j>>2]=d;e=e+(k<<1)|0;c[l>>2]=e;if(!(q&1))d=e;else{c[j>>2]=e;c[l>>2]=d}g=c[m>>2]|0;o=0;Aa(c[(c[g>>2]|0)+12>>2]|0,g|0,d|0,c[r>>2]|0,s|0);g=o;o=0;if(g&1){j=28;break}if(n){d=c[j>>2]|0;e=c[l>>2]|0;f=c[u>>2]|0;g=0;do{c[p>>2]=c[f+(g<<2)>>2];f=c[r>>2]|0;b[d+(f<<1)>>1]=b[d+(f+-1<<1)>>1]|0;b[e+-2>>1]=b[d>>1]|0;o=0;ia(71,a|0,0);f=o;o=0;if(f&1){j=27;break b}f=c[u>>2]|0;c[f+(g<<2)>>2]=c[p>>2];d=(c[j>>2]|0)+(s<<1)|0;c[j>>2]=d;e=(c[l>>2]|0)+(s<<1)|0;c[l>>2]=e;g=g+1|0}while((g|0)<(t|0))}q=q+1|0;if((q|0)>=(c[h>>2]|0)){j=40;break a}}if((j|0)==27){f=Na()|0;break}else if((j|0)==28){f=Na()|0;break}}else j=40;while(0);do if((j|0)==40){o=0;ha(182,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[u>>2]|0;e=d;if(d){f=c[w>>2]|0;if((f|0)!=(d|0))c[w>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[x>>2]|0;if(!d){i=v;return}e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=v;return}while(0);d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function wf(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4580|0;f=c[p>>2]|0;s=d+156|0;if((c[s>>2]|0)<=0)return;q=d+4584|0;r=d+4588|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(yf(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=xf(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function xf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&65535|0)==(g|0))m=g;else m=g>>31&65535^65535;j=(e-m^q)-q<<16;l=j>>16;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;f=g^l;f=f>>30^f<<1;g=f>>h;if((g|0)<47){if((g|0)>30){i=(g|0)/2|0;ae(a,0,i);g=g-i|0}ae(a,1,g+1|0);ae(a,f&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-65536?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&65535;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&65535;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&65535;return d|0}function yf(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=(c[a+156>>2]|0)-d|0;k=c[a+4584>>2]|0;m=c[a+4580>>2]|0;h=b[k+(d+-1<<1)>>1]|0;g=0;while(1){f=k+(g+d<<1)|0;if((b[f>>1]|0)!=h<<16>>16){n=g;break}b[f>>1]=h;g=g+1|0;if((g|0)==(j|0)){n=j;break}}i=h&65535;h=(n|0)==(j|0);l=a+4576|0;g=c[36476+(c[l>>2]<<2)>>2]|0;if((1<(n|0))f=n;else{f=n;do{ae(a,1,1);g=c[l>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[l>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]|0;f=e[m+(f<<1)>>1]|0;m=i-f|0;if((((m|0)>-1?m:0-m|0)|0)<1){f=g-i<<16>>16;zf(a,a+4564|0,f);f=f+i|0}else{m=f-i>>31|1;d=($(g-f<<16,m)|0)>>16;zf(a,a+4552|0,d);f=($(d,m)|0)+f|0}b[h>>1]=f;a=c[l>>2]|0;c[l>>2]=(a|0)<1?0:a+-1|0;a=n+1|0;return a|0}function zf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;Af(b,h,g,63-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function Af(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-16|0;if((e|0)<(d+-17|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-47|0)}else ae(a,1,f);ae(a,c+65535&65535,16);return}function Bf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,65535,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8909]|0;c[b+4588>>2]=l+(((c[8910]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=131072){if(h>>>0>131072?(j=d+131072|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,131072-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+65536;j=b+168|0;g=b+164|0;h=-65536;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==65536)break}i=m;return}function Cf(a){a=a|0;var b=0,d=0;c[a>>2]=35968;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Df(a){a=a|0;var b=0,d=0;c[a>>2]=35968;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Ef(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,4095,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;Nf(d);g=0;do{c[d+172+(g*12|0)>>2]=64;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=64;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=64;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function Ff(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35744;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];Hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;Hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function Gf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Hf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+32|0;x=v+12|0;u=v;r=a+156|0;s=(c[r>>2]|0)+4|0;if((c[a+32>>2]|0)==1)t=c[a+24>>2]|0;else t=1;d=$(t<<1,s)|0;c[x>>2]=0;y=x+4|0;c[y>>2]=0;c[x+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,x|0),w=o,o=0,w&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,w=o,o=0,!(w&1)):0){c[x>>2]=f;w=f+(d<<1)|0;c[x+8>>2]=w;iw(f|0,0,e|0)|0;c[y>>2]=w;break}f=Na()|0;d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[u>>2]=0;w=u+4|0;c[w>>2]=0;c[u+8>>2]=0;do if(!t)j=18;else{if(!(t>>>0>1073741823?(o=0,ha(178,u|0),q=o,o=0,q&1):0))j=16;if((j|0)==16?(g=t<<2,o=0,h=ka(67,g|0)|0,q=o,o=0,!(q&1)):0){c[u>>2]=h;j=h+(t<<2)|0;c[u+8>>2]=j;iw(h|0,0,g|0)|0;c[w>>2]=j;j=18;break}f=Na()|0;d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+12|0;a:do if((c[h>>2]|0)>0){j=a+4580|0;k=($(t,s)|0)+1|0;l=a+4584|0;m=a+92|0;n=(t|0)>0;p=a+4576|0;q=0;b:while(1){e=c[x>>2]|0;d=e+2|0;c[j>>2]=d;e=e+(k<<1)|0;c[l>>2]=e;if(!(q&1))d=e;else{c[j>>2]=e;c[l>>2]=d}g=c[m>>2]|0;o=0;Aa(c[(c[g>>2]|0)+12>>2]|0,g|0,d|0,c[r>>2]|0,s|0);g=o;o=0;if(g&1){j=28;break}if(n){d=c[j>>2]|0;e=c[l>>2]|0;f=c[u>>2]|0;g=0;do{c[p>>2]=c[f+(g<<2)>>2];f=c[r>>2]|0;b[d+(f<<1)>>1]=b[d+(f+-1<<1)>>1]|0;b[e+-2>>1]=b[d>>1]|0;o=0;ia(72,a|0,0);f=o;o=0;if(f&1){j=27;break b}f=c[u>>2]|0;c[f+(g<<2)>>2]=c[p>>2];d=(c[j>>2]|0)+(s<<1)|0;c[j>>2]=d;e=(c[l>>2]|0)+(s<<1)|0;c[l>>2]=e;g=g+1|0}while((g|0)<(t|0))}q=q+1|0;if((q|0)>=(c[h>>2]|0)){j=40;break a}}if((j|0)==27){f=Na()|0;break}else if((j|0)==28){f=Na()|0;break}}else j=40;while(0);do if((j|0)==40){o=0;ha(182,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[u>>2]|0;e=d;if(d){f=c[w>>2]|0;if((f|0)!=(d|0))c[w>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[x>>2]|0;if(!d){i=v;return}e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=v;return}while(0);d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function If(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4580|0;f=c[p>>2]|0;s=d+156|0;if((c[s>>2]|0)<=0)return;q=d+4584|0;r=d+4588|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(Kf(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=Jf(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function Jf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&4095|0)==(g|0))m=g;else m=g>>31&4095^4095;j=(e-m^q)-q<<20;l=j>>20;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;f=g^l;f=f>>30^f<<1;g=f>>h;if((g|0)<35){if((g|0)>30){i=(g|0)/2|0;ae(a,0,i);g=g-i|0}ae(a,1,g+1|0);ae(a,f&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-1048576?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&4095;d=d&65535;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&4095;d=d&65535;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&4095;d=d&65535;return d|0}function Kf(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=(c[a+156>>2]|0)-d|0;k=c[a+4584>>2]|0;m=c[a+4580>>2]|0;h=b[k+(d+-1<<1)>>1]|0;g=0;while(1){f=k+(g+d<<1)|0;if((b[f>>1]|0)!=h<<16>>16){n=g;break}b[f>>1]=h;g=g+1|0;if((g|0)==(j|0)){n=j;break}}i=h&65535;h=(n|0)==(j|0);l=a+4576|0;g=c[36476+(c[l>>2]<<2)>>2]|0;if((1<(n|0))f=n;else{f=n;do{ae(a,1,1);g=c[l>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[l>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]|0;f=e[m+(f<<1)>>1]|0;m=i-f|0;if((((m|0)>-1?m:0-m|0)|0)<1){f=g-i<<20>>20;Lf(a,a+4564|0,f);f=f+i|0}else{m=f-i>>31|1;d=($(g-f<<20,m)|0)>>20;Lf(a,a+4552|0,d);f=($(d,m)|0)+f|0}b[h>>1]=f&4095;a=c[l>>2]|0;c[l>>2]=(a|0)<1?0:a+-1|0;a=n+1|0;return a|0}function Lf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;Mf(b,h,g,47-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function Mf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-12|0;if((e|0)<(d+-13|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-43|0)}else ae(a,1,f);ae(a,c+4095&4095,12);return}function Nf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,4095,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8906]|0;c[b+4588>>2]=l+(((c[8907]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=8192){if(h>>>0>8192?(j=d+8192|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,8192-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+4096;j=b+168|0;g=b+164|0;h=-4096;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==4096)break}i=m;return}function Of(a){a=a|0;var b=0,d=0;c[a>>2]=35940;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Pf(a){a=a|0;var b=0,d=0;c[a>>2]=35940;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Qf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;Zf(d);g=0;do{c[d+172+(g*12|0)>>2]=4;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=4;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=4;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function Rf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35716;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];Tf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;Tf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function Sf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Tf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=i;i=i+32|0;w=u+12|0;t=u;q=b+156|0;r=(c[q>>2]|0)+4|0;if((c[b+32>>2]|0)==1)s=c[b+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,w|0),v=o,o=0,v&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[x>>2]|0)+1|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)h=19;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))h=17;if((h|0)==17?(f=s<<2,o=0,g=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=g;h=g+(s<<2)|0;c[t+8>>2]=h;iw(g|0,0,f|0)|0;c[v>>2]=h;h=19;break}e=Na()|0;d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){g=b+12|0;b:do if((c[g>>2]|0)>0){h=b+4580|0;j=($(s,r)|0)+1|0;k=b+4584|0;l=b+92|0;m=(s|0)>0;n=b+4576|0;p=0;c:while(1){e=c[w>>2]|0;d=e+1|0;c[h>>2]=d;e=e+j|0;c[k>>2]=e;if(!(p&1))d=e;else{c[h>>2]=e;c[k>>2]=d}f=c[l>>2]|0;o=0;Aa(c[(c[f>>2]|0)+12>>2]|0,f|0,d|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){h=29;break}if(m){d=c[h>>2]|0;e=c[t>>2]|0;f=0;do{c[n>>2]=c[e+(f<<2)>>2];e=c[q>>2]|0;a[d+e>>0]=a[d+(e+-1)>>0]|0;a[(c[k>>2]|0)+-1>>0]=a[c[h>>2]>>0]|0;o=0;ia(73,b|0,0);e=o;o=0;if(e&1){h=28;break c}e=c[t>>2]|0;c[e+(f<<2)>>2]=c[n>>2];d=(c[h>>2]|0)+r|0;c[h>>2]=d;c[k>>2]=(c[k>>2]|0)+r;f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){h=41;break b}}if((h|0)==28){e=Na()|0;break}else if((h|0)==29){e=Na()|0;break}}else h=41;while(0);do if((h|0)==41){o=0;ha(182,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);i=u;return}while(0);d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}function Uf(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=b+4580|0;e=c[o>>2]|0;r=b+156|0;if((c[r>>2]|0)<=0)return;p=b+4584|0;q=b+4588|0;h=e;i=d[e+-1>>0]|0;e=d[e>>0]|0;n=0;while(1){m=c[p>>2]|0;l=d[m+(n+-1)>>0]|0;g=n+1|0;f=d[h+g>>0]|0;k=c[q>>2]|0;j=e-i|0;h=i-l|0;k=((((a[k+(f-e)>>0]|0)*9|0)+(a[k+j>>0]|0)|0)*9|0)+(a[k+h>>0]|0)|0;if(!k){g=(Wf(b,n,0)|0)+n|0;f=c[o>>2]|0;e=d[f+(g+-1)>>0]|0;f=d[f+g>>0]|0}else{i=e-l>>31;if((i^h|0)<0)h=e;else h=l+((i^j|0)<0?0:j)|0;m=Vf(b,k,d[m+n>>0]|0,h,0)|0;a[(c[p>>2]|0)+n>>0]=m}if((g|0)>=(c[r>>2]|0))break;h=c[o>>2]|0;i=e;e=f;n=g}return}function Vf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&255|0)==(g|0))m=g;else m=g>>31&255^255;j=(e-m^q)-q<<24;l=j>>24;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;g=g^l;g=g>>30^g<<1;f=g>>h;if((f|0)<23){ae(a,1,f+1|0);ae(a,g&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-16777216?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}function Wf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=(c[b+156>>2]|0)-e|0;k=c[b+4584>>2]|0;m=c[b+4580>>2]|0;h=a[k+(e+-1)>>0]|0;g=0;while(1){f=k+(g+e)|0;if((a[f>>0]|0)!=h<<24>>24){n=g;break}a[f>>0]=h;g=g+1|0;if((g|0)==(j|0)){n=j;break}}i=h&255;h=(n|0)==(j|0);l=b+4576|0;g=c[36476+(c[l>>2]<<2)>>2]|0;if((1<(n|0))f=n;else{f=n;do{ae(b,1,1);g=c[l>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[l>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]|0;f=d[m+f>>0]|0;m=i-f|0;if((((m|0)>-1?m:0-m|0)|0)<1){f=g-i<<24>>24;Xf(b,b+4564|0,f);f=f+i|0}else{m=f-i>>31|1;e=($(g-f<<24,m)|0)>>24;Xf(b,b+4552|0,e);f=($(e,m)|0)+f|0}a[h>>0]=f;b=c[l>>2]|0;c[l>>2]=(b|0)<1?0:b+-1|0;b=n+1|0;return b|0}function Xf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;Yf(b,h,g,31-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function Yf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-8|0;if((e|0)<(d+-9|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-39|0)}else ae(a,1,f);ae(a,c+255&255,8);return}function Zf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8900]|0;c[b+4588>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+256;j=b+168|0;g=b+164|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function _f(a){a=a|0;var b=0,d=0;c[a>>2]=35912;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function $f(a){a=a|0;var b=0,d=0;c[a>>2]=35912;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function ag(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;jg(d);g=0;do{c[d+172+(g*12|0)>>2]=4;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=4;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=4;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function bg(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35688;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];dg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;dg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function cg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function dg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;w=u+12|0;t=u;q=b+156|0;r=(c[q>>2]|0)+4|0;if((c[b+32>>2]|0)==1)s=c[b+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,w|0),v=o,o=0,v&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[x>>2]|0)+3|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)h=19;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))h=17;if((h|0)==17?(f=s<<2,o=0,g=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=g;h=g+(s<<2)|0;c[t+8>>2]=h;iw(g|0,0,f|0)|0;c[v>>2]=h;h=19;break}f=Na()|0;d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){g=b+12|0;b:do if((c[g>>2]|0)>0){h=b+4580|0;j=($(s,r)|0)+1|0;k=b+4584|0;l=b+92|0;m=(s|0)>0;n=b+4576|0;p=0;c:while(1){f=c[w>>2]|0;d=f+3|0;c[h>>2]=d;e=f+(j*3|0)|0;c[k>>2]=e;if(!(p&1))d=j;else{c[h>>2]=e;c[k>>2]=d;d=1}e=c[l>>2]|0;o=0;Aa(c[(c[e>>2]|0)+12>>2]|0,e|0,f+(d*3|0)|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){h=29;break}if(m){d=c[t>>2]|0;e=c[h>>2]|0;f=0;do{c[n>>2]=c[d+(f<<2)>>2];y=c[q>>2]|0;d=e+(y*3|0)|0;e=e+((y+-1|0)*3|0)|0;a[d>>0]=a[e>>0]|0;a[d+1>>0]=a[e+1>>0]|0;a[d+2>>0]=a[e+2>>0]|0;d=c[h>>2]|0;e=(c[k>>2]|0)+-3|0;a[e>>0]=a[d>>0]|0;a[e+1>>0]=a[d+1>>0]|0;a[e+2>>0]=a[d+2>>0]|0;o=0;ia(74,b|0,0);e=o;o=0;if(e&1){h=28;break c}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[n>>2];e=(c[h>>2]|0)+(r*3|0)|0;c[h>>2]=e;c[k>>2]=(c[k>>2]|0)+(r*3|0);f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){h=41;break b}}if((h|0)==28){f=Na()|0;break}else if((h|0)==29){f=Na()|0;break}}else h=41;while(0);do if((h|0)==41){o=0;ha(182,b|0);y=o;o=0;if(y&1){f=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=u;return}while(0);d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function eg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=b+156|0;if((c[A>>2]|0)<=0)return;B=b+4584|0;C=b+4580|0;D=b+4588|0;z=0;while(1){w=z+-1|0;i=c[B>>2]|0;j=c[C>>2]|0;e=z+1|0;h=d[j+(z*3|0)>>0]|0;y=c[D>>2]|0;k=d[j+(w*3|0)>>0]|0;l=h-k|0;m=d[i+(w*3|0)>>0]|0;n=k-m|0;o=((((a[y+((d[j+(e*3|0)>>0]|0)-h)>>0]|0)*9|0)+(a[y+l>>0]|0)|0)*9|0)+(a[y+n>>0]|0)|0;g=d[j+(z*3|0)+1>>0]|0;p=d[j+(w*3|0)+1>>0]|0;q=g-p|0;r=d[i+(w*3|0)+1>>0]|0;s=p-r|0;t=((((a[y+((d[j+(e*3|0)+1>>0]|0)-g)>>0]|0)*9|0)+(a[y+q>>0]|0)|0)*9|0)+(a[y+s>>0]|0)|0;f=d[j+(z*3|0)+2>>0]|0;u=d[j+(w*3|0)+2>>0]|0;v=f-u|0;w=d[i+(w*3|0)+2>>0]|0;x=u-w|0;y=((((a[y+((d[j+(e*3|0)+2>>0]|0)-f)>>0]|0)*9|0)+(a[y+v>>0]|0)|0)*9|0)+(a[y+x>>0]|0)|0;if(!(t|o|y))e=(fg(b,z,0)|0)+z|0;else{j=d[i+(z*3|0)>>0]|0;i=h-m>>31;if((i^n|0)>=0)if((i^l|0)<0)h=m;else h=m-k+h|0;j=gg(b,o,j,h,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+1>>0]|0;h=g-r>>31;if((h^s|0)>=0)if((h^q|0)<0)g=r;else g=r-p+g|0;h=gg(b,t,i,g,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+2>>0]|0;g=f-w>>31;if((g^x|0)>=0)if((g^v|0)<0)f=w;else f=w-u+f|0;y=gg(b,y,i,f,0)|0;z=(c[B>>2]|0)+(z*3|0)|0;a[z>>0]=j;a[z+1>>0]=h;a[z+2>>0]=y}if((e|0)<(c[A>>2]|0))z=e;else break}return}function fg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;m=(c[b+156>>2]|0)-e|0;n=c[b+4584>>2]|0;o=c[b+4580>>2]|0;l=n+((e+-1|0)*3|0)|0;p=a[l>>0]|0;k=a[l+1>>0]|0;l=a[l+2>>0]|0;i=0;while(1){f=n+((i+e|0)*3|0)|0;g=f+1|0;h=f+2|0;if(!(((a[f>>0]|0)==p<<24>>24?(a[g>>0]|0)==k<<24>>24:0)&(a[h>>0]|0)==l<<24>>24))break;a[f>>0]=p;a[g>>0]=k;a[h>>0]=l;i=i+1|0;if((i|0)==(m|0)){i=m;break}}h=(i|0)==(m|0);j=b+4576|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(i|0))f=i;else{f=i;do{ae(b,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]|0;e=m+2|0;f=a[e>>0]|0;o=o+(q*3|0)|0;q=a[o+1>>0]|0;t=a[o+2>>0]|0;o=d[o>>0]|0;h=o-(p&255)>>31|1;g=($((d[m>>0]|0)-o<<24,h)|0)>>24;s=b+4552|0;hg(b,s,g);p=q&255;q=p-(k&255)>>31|1;r=($((r&255)-p<<24,q)|0)>>24;hg(b,s,r);k=t&255;l=k-(l&255)>>31|1;f=($((f&255)-k<<24,l)|0)>>24;hg(b,s,f);p=($(r,q)|0)+p&255;b=($(f,l)|0)+k&255;a[m>>0]=($(g,h)|0)+o;a[n>>0]=p;a[e>>0]=b;b=c[j>>2]|0;c[j>>2]=(b|0)<1?0:b+-1|0;b=i+1|0;return b|0}if(!f){t=m;return t|0}ae(b,1,1);t=m;return t|0}function gg(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&255|0)==(g|0))m=g;else m=g>>31&255^255;j=(e-m^q)-q<<24;l=j>>24;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;g=g^l;g=g>>30^g<<1;f=g>>h;if((f|0)<23){ae(a,1,f+1|0);ae(a,g&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-16777216?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}function hg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;ig(b,h,g,31-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function ig(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-8|0;if((e|0)<(d+-9|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-39|0)}else ae(a,1,f);ae(a,c+255&255,8);return}function jg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8900]|0;c[b+4588>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+256;j=b+168|0;g=b+164|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function kg(a){a=a|0;var b=0,d=0;c[a>>2]=35884;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function lg(a){a=a|0;var b=0,d=0;c[a>>2]=35884;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function mg(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;wg(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function ng(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35660;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];pg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;pg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0} + function og(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function pg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=i;i=i+32|0;w=u+12|0;t=u;r=b+180|0;s=(c[r>>2]|0)+4|0;if((c[b+32>>2]|0)==1)p=c[b+24>>2]|0;else p=1;d=$(p<<1,s)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,w|0),v=o,o=0,v&1):0))q=6;if((q|0)==6?(o=0,e=ka(67,d|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[x>>2]|0)+1|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!p)q=19;else{if(!(p>>>0>1073741823?(o=0,ha(178,t|0),n=o,o=0,n&1):0))q=17;if((q|0)==17?(f=p<<2,o=0,g=ka(67,f|0)|0,n=o,o=0,!(n&1)):0){c[t>>2]=g;q=g+(p<<2)|0;c[t+8>>2]=q;iw(g|0,0,f|0)|0;c[v>>2]=q;q=19;break}e=Na()|0;d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((q|0)==19){j=b+12|0;b:do if((c[j>>2]|0)>0){k=b+4604|0;l=($(p,s)|0)+1|0;m=b+4608|0;n=b+92|0;h=b+4600|0;if((p|0)>0)g=0;else{f=0;while(1){e=c[w>>2]|0;d=e+1|0;c[k>>2]=d;e=e+l|0;c[m>>2]=e;if(!(f&1))d=e;else{c[k>>2]=e;c[m>>2]=d}p=c[n>>2]|0;o=0;Aa(c[(c[p>>2]|0)+12>>2]|0,p|0,d|0,c[r>>2]|0,s|0);p=o;o=0;if(p&1)break;f=f+1|0;if((f|0)>=(c[j>>2]|0)){q=45;break b}}e=Na()|0;break}c:while(1){e=c[w>>2]|0;d=e+1|0;c[k>>2]=d;e=e+l|0;c[m>>2]=e;if(!(g&1))d=e;else{c[k>>2]=e;c[m>>2]=d}q=c[n>>2]|0;o=0;Aa(c[(c[q>>2]|0)+12>>2]|0,q|0,d|0,c[r>>2]|0,s|0);q=o;o=0;if(q&1){q=28;break}d=c[t>>2]|0;e=c[k>>2]|0;f=0;do{c[h>>2]=c[d+(f<<2)>>2];q=c[r>>2]|0;a[e+q>>0]=a[e+(q+-1)>>0]|0;a[(c[m>>2]|0)+-1>>0]=a[c[k>>2]>>0]|0;o=0;ia(75,b|0,0);q=o;o=0;if(q&1){q=36;break c}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[h>>2];e=(c[k>>2]|0)+s|0;c[k>>2]=e;c[m>>2]=(c[m>>2]|0)+s;f=f+1|0}while((f|0)<(p|0));g=g+1|0;if((g|0)>=(c[j>>2]|0)){q=45;break b}}if((q|0)==28){e=Na()|0;break}else if((q|0)==36){e=Na()|0;break}}else q=45;while(0);do if((q|0)==45){o=0;ha(182,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);i=u;return}while(0);d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}function qg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=b+4604|0;e=c[o>>2]|0;r=b+180|0;if((c[r>>2]|0)<=0)return;p=b+4608|0;q=b+4612|0;h=e;i=d[e+-1>>0]|0;e=d[e>>0]|0;n=0;while(1){m=c[p>>2]|0;l=d[m+(n+-1)>>0]|0;g=n+1|0;f=d[h+g>>0]|0;k=c[q>>2]|0;j=e-i|0;h=i-l|0;k=((((a[k+(f-e)>>0]|0)*9|0)+(a[k+j>>0]|0)|0)*9|0)+(a[k+h>>0]|0)|0;if(!k){g=(sg(b,n,0)|0)+n|0;f=c[o>>2]|0;e=d[f+(g+-1)>>0]|0;f=d[f+g>>0]|0}else{i=e-l>>31;if((i^h|0)<0)h=e;else h=l+((i^j|0)<0?0:j)|0;m=rg(b,k,d[m+n>>0]|0,h,0)|0;a[(c[p>>2]|0)+n>>0]=m}if((g|0)>=(c[r>>2]|0))break;h=c[o>>2]|0;i=e;e=f;n=g}return}function rg(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=d>>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;vg(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&255;return r|0}r=g&~(d>>31);r=r&255;return r|0}function sg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=(c[b+180>>2]|0)-e|0;m=c[b+4608>>2]|0;n=c[b+4604>>2]|0;h=a[m+(e+-1)>>0]|0;k=h&255;f=b+144|0;i=0;while(1){g=m+(i+e)|0;j=(d[g>>0]|0)-k|0;if((((j|0)>-1?j:0-j|0)|0)>(c[f>>2]|0))break;a[g>>0]=h;i=i+1|0;if((i|0)==(l|0)){i=l;break}}h=(i|0)==(l|0);j=b+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(i|0))f=i;else{f=i;do{ae(b,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]=tg(b,d[e>>0]|0,k,d[n+l>>0]|0)|0;b=c[j>>2]|0;c[j>>2]=(b|0)<1?0:b+-1|0;b=i+1|0;return b|0}if(!f){b=l;return b|0}ae(b,1,1);b=l;return b|0}function tg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=d-e|0;j=a+136|0;h=a+144|0;f=c[h>>2]|0;if((((i|0)>-1?i:0-i|0)|0)>(f|0)){g=e-d>>31|1;b=$(g,b-e|0)|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;d=((b|0)<0?f:0)+b|0;f=d-((d|0)<((f+1|0)/2|0|0)?0:f)|0;ug(a,a+4576|0,f);f=$(f,g)|0;g=c[h>>2]|0;h=g<<1|1;f=($(f,h)|0)+e|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&255;return j|0}j=b&~(f>>31);j=j&255;return j|0}else{b=b-d|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;g=((b|0)<0?f:0)+b|0;f=g-((g|0)<((f+1|0)/2|0|0)?0:f)|0;ug(a,a+4588|0,f);g=c[h>>2]|0;h=g<<1|1;f=($(h,f)|0)+d|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&255;return j|0}j=b&~(f>>31);j=j&255;return j|0}return 0}function ug(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;vg(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function vg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function xg(a){a=a|0;var b=0,d=0;c[a>>2]=35856;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function yg(a){a=a|0;var b=0,d=0;c[a>>2]=35856;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function zg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Ag(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;Lg(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function Bg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Cg(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Cg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+172|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,B=o,o=0,!(B&1)):0){c[C>>2]=f;B=f+(d<<1)|0;c[C+8>>2]=B;iw(f|0,0,e|0)|0;c[D>>2]=B;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=18;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=16;if((j|0)==16?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=18;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4596|0;k=$(y,x)|0;l=k+1|0;m=a+4600|0;n=(y|0)>0;p=a+160|0;q=a+168|0;r=a+164|0;s=a+156|0;t=a+88|0;u=a+4592|0;v=0;b:while(1){f=c[C>>2]|0;e=f+2|0;c[j>>2]=e;f=f+(l<<1)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;b[e+(g<<1)>>1]=b[e+(g+-1<<1)>>1]|0;b[d+-2>>1]=b[e>>1]|0;o=0;ia(76,a|0,0);g=o;o=0;if(g&1){j=29;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x<<1)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x<<1)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k<<1)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=30;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function Dg(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=d+4596|0;g=c[q>>2]|0;u=d+172|0;f=c[u>>2]|0;if((f|0)<=0)return;r=d+4600|0;s=d+4604|0;t=d+4592|0;l=g;j=e[g+-2>>1]|0;g=e[g>>1]|0;p=0;while(1){n=c[r>>2]|0;k=b[n+(p+-1<<1)>>1]|0;o=k&65535;i=p+1|0;h=e[l+(i<<1)>>1]|0;m=c[s>>2]|0;l=g-j|0;j=j-o|0;m=((((a[m+(h-g)>>0]|0)*9|0)+(a[m+l>>0]|0)|0)*9|0)+(a[m+j>>0]|0)|0;n=n+(p<<1)|0;if(!m){f=Gg(d,k,n,f-p|0)|0;g=f+p|0;if((g|0)!=(c[u>>2]|0)){o=Hg(d,o,e[(c[q>>2]|0)+(g<<1)>>1]|0)|0;b[(c[r>>2]|0)+(g<<1)>>1]=o;o=c[t>>2]|0;c[t>>2]=(o|0)<1?0:o+-1|0;f=f+1|0}i=f+p|0;h=c[q>>2]|0;g=e[h+(i+-1<<1)>>1]|0;h=e[h+(i<<1)>>1]|0}else{f=g-o>>31;if((f^j|0)<0)f=g;else f=o+((f^l|0)<0?0:l)|0;o=Fg(d,m,e[n>>1]|0,f,0)|0;b[(c[r>>2]|0)+(p<<1)>>1]=o}f=c[u>>2]|0;if((f|0)<=(i|0))break;l=c[q>>2]|0;j=g;g=h;p=i}return}function Eg(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+116|0;e=c[f>>2]|0;if((a[e>>0]|0)!=-1){g=b+112|0;d=c[g>>2]|0;if((d|0)<1){ge(b);d=c[g>>2]|0;e=c[f>>2]|0}b=b+108|0;f=c[b>>2]|0;c[g>>2]=d+-1;d=f<<1;c[b>>2]=d;if((a[e>>0]|0)!=-1){d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,6,35648);b=o;o=0;if(!(b&1))lb(d|0,824,96);b=Na()|0;La(d|0);Ya(b|0)}}else d=c[b+108>>2]|0;if(!d)return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,6,35648);b=o;o=0;if(!(b&1))lb(d|0,824,96);b=Na()|0;La(d|0);Ya(b|0)}function Fg(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&65535;return d|0}d=f&~(h>>31);d=d&65535;return d|0}function Gg(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4592|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)>0)i=0;else return h|0;do{b[f+(i<<1)>>1]=e;i=i+1|0}while((i|0)!=(h|0));return h|0}function Hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=b-d|0;h=a+128|0;e=a+136|0;if((((g|0)>-1?g:0-g|0)|0)>(c[e>>2]|0)){b=$(Ig(a,a+4568|0)|0,d-b>>31|1)|0;f=c[e>>2]|0;g=f<<1|1;b=($(b,g)|0)+d|0;if((b|0)>=(0-f|0)){e=c[h>>2]|0;if((e+f|0)<(b|0))b=b-($(c[a+132>>2]|0,g)|0)|0}else{b=($(c[a+132>>2]|0,g)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&65535;return a|0}a=e&~(b>>31);a=a&65535;return a|0}else{d=Ig(a,a+4580|0)|0;g=c[e>>2]|0;f=g<<1|1;b=($(f,d)|0)+b|0;if((b|0)>=(0-g|0)){e=c[h>>2]|0;if((e+g|0)<(b|0))b=b-($(c[a+132>>2]|0,f)|0)|0}else{b=($(c[a+132>>2]|0,f)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&65535;return a|0}a=e&~(b>>31);a=a&65535;return a|0}return 0}function Ig(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function Jg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=a+112|0;if((c[g>>2]|0)<16)ge(a);h=a+108|0;d=c[h>>2]|0;if((d|0)>=0)if(!(d&1073741824))if(!(d&536870912))if(!(d&268435456))if(!(d&134217728))if(!(d&67108864))if(!(d&33554432))if(!(d&16777216))if(!(d&8388608))if(!(d&4194304))if(!(d&2097152))if(!(d&1048576))if(!(d&524288))if(!(d&262144))if(!(d&131072)){f=d>>>12&16;b=f+-1|0;if(!f){b=(c[g>>2]|0)+-15|0;c[g>>2]=b;e=d<<15;c[h>>2]=e;d=b;b=15;while(1){if((d|0)<1){ge(a);f=c[h>>2]|0;d=c[g>>2]|0}else f=e;d=d+-1|0;c[g>>2]=d;e=f<<1;c[h>>2]=e;if((f|0)<0)break;else b=b+1|0}return b|0}}else b=14;else b=13;else b=12;else b=11;else b=10;else b=9;else b=8;else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;a=b+1|0;c[g>>2]=(c[g>>2]|0)-a;c[h>>2]=d<>2]|0;if((e|0)<(d|0)){ge(b);e=c[f>>2]|0;if((e|0)<(d|0)){e=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,e|0,5,35648);b=o;o=0;if(b&1){b=Na()|0;La(e|0);Ya(b|0)}else lb(e|0,824,96)}}g=b+108|0;b=c[g>>2]|0;c[f>>2]=e-d;c[g>>2]=b<>>(32-d|0)|0}function Lg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function Mg(a){a=a|0;var b=0,d=0;c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Ng(a){a=a|0;var b=0,d=0;c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Og(a){a=a|0;var b=0,d=0;c[a>>2]=35828;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Pg(a){a=a|0;var b=0,d=0;c[a>>2]=35828;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Qg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Rg(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;Zg(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function Sg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Tg(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Tg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+172|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!(d>>>0>715827882?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(o=0,e=ka(67,d*6|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;f=e+(d*6|0)|0;c[C+8>>2]=f;while(1){b[e>>1]=0;b[e+2>>1]=0;b[e+4>>1]=0;d=d+-1|0;if(!d)break;else e=e+6|0}c[D>>2]=f;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=20;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=18;if((j|0)==18?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=20;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==20){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4596|0;k=$(y,x)|0;l=k+1|0;m=a+4600|0;n=(y|0)>0;p=a+160|0;q=a+168|0;r=a+164|0;s=a+156|0;t=a+88|0;u=a+4592|0;v=0;b:while(1){f=c[C>>2]|0;e=f+6|0;c[j>>2]=e;f=f+(l*6|0)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];d=c[w>>2]|0;g=e+(d*6|0)|0;e=e+((d+-1|0)*6|0)|0;b[g>>1]=b[e>>1]|0;b[g+2>>1]=b[e+2>>1]|0;b[g+4>>1]=b[e+4>>1]|0;g=(c[m>>2]|0)+-6|0;e=c[j>>2]|0;b[g>>1]=b[e>>1]|0;b[g+2>>1]=b[e+2>>1]|0;b[g+4>>1]=b[e+4>>1]|0;o=0;ia(77,a|0,0);g=o;o=0;if(g&1){j=31;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x*6|0)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x*6|0)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+(((c[s>>2]|0)-k|0)*6|0)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=32;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=44;break a}}if((j|0)==31){f=Na()|0;break}else if((j|0)==32){f=Na()|0;break}}else j=44;while(0);do if((j|0)==44){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}function Ug(d,f){d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;N=i;i=i+32|0;D=N+24|0;M=N+18|0;L=N+12|0;E=N+6|0;F=N;G=d+172|0;f=c[G>>2]|0;if((f|0)<=0){i=N;return}H=d+4600|0;I=d+4596|0;J=d+4604|0;K=d+4592|0;C=0;while(1){h=C+-1|0;j=c[H>>2]|0;O=c[I>>2]|0;g=C+1|0;k=e[O+(C*6|0)>>1]|0;B=c[J>>2]|0;l=e[O+(h*6|0)>>1]|0;m=k-l|0;n=e[j+(h*6|0)>>1]|0;o=l-n|0;p=((((a[B+((e[O+(g*6|0)>>1]|0)-k)>>0]|0)*9|0)+(a[B+m>>0]|0)|0)*9|0)+(a[B+o>>0]|0)|0;q=e[O+(C*6|0)+2>>1]|0;r=e[O+(h*6|0)+2>>1]|0;s=q-r|0;t=e[j+(h*6|0)+2>>1]|0;u=r-t|0;v=((((a[B+((e[O+(g*6|0)+2>>1]|0)-q)>>0]|0)*9|0)+(a[B+s>>0]|0)|0)*9|0)+(a[B+u>>0]|0)|0;w=e[O+(C*6|0)+4>>1]|0;x=e[O+(h*6|0)+4>>1]|0;y=w-x|0;z=e[j+(h*6|0)+4>>1]|0;A=x-z|0;B=((((a[B+((e[O+(g*6|0)+4>>1]|0)-w)>>0]|0)*9|0)+(a[B+y>>0]|0)|0)*9|0)+(a[B+A>>0]|0)|0;if(!(v|p|B)){g=j+(h*6|0)|0;b[L>>1]=b[g>>1]|0;b[L+2>>1]=b[g+2>>1]|0;b[L+4>>1]=b[g+4>>1]|0;b[D>>1]=b[g>>1]|0;b[D+2>>1]=b[g+2>>1]|0;b[D+4>>1]=b[g+4>>1]|0;f=Vg(d,D,j+(C*6|0)|0,f-C|0)|0;g=f+C|0;if((g|0)!=(c[G>>2]|0)){O=(c[I>>2]|0)+(g*6|0)|0;b[F>>1]=b[O>>1]|0;b[F+2>>1]=b[O+2>>1]|0;b[F+4>>1]=b[O+4>>1]|0;O=(c[H>>2]|0)+(g*6|0)|0;b[M>>1]=b[L>>1]|0;b[M+2>>1]=b[L+2>>1]|0;b[M+4>>1]=b[L+4>>1]|0;b[D>>1]=b[F>>1]|0;b[D+2>>1]=b[F+2>>1]|0;b[D+4>>1]=b[F+4>>1]|0;Wg(E,d,M,D);b[O>>1]=b[E>>1]|0;b[O+2>>1]=b[E+2>>1]|0;b[O+4>>1]=b[E+4>>1]|0;O=c[K>>2]|0;c[K>>2]=(O|0)<1?0:O+-1|0;f=f+1|0}g=f+C|0}else{h=e[j+(C*6|0)>>1]|0;f=k-n>>31;if((f^o|0)>=0)if((f^m|0)<0)f=n;else f=n-l+k|0;else f=k;k=Xg(d,p,h,f,0)|0;h=e[(c[H>>2]|0)+(C*6|0)+2>>1]|0;f=q-t>>31;if((f^u|0)>=0)if((f^s|0)<0)f=t;else f=t-r+q|0;else f=q;h=Xg(d,v,h,f,0)|0;j=e[(c[H>>2]|0)+(C*6|0)+4>>1]|0;f=w-z>>31;if((f^A|0)>=0)if((f^y|0)<0)f=z;else f=z-x+w|0;else f=w;B=Xg(d,B,j,f,0)|0;O=c[H>>2]|0;b[O+(C*6|0)>>1]=k;b[O+(C*6|0)+2>>1]=h;b[O+(C*6|0)+4>>1]=B}f=c[G>>2]|0;if((g|0)>=(f|0))break;else C=g}i=N;return}function Vg(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4592|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)<=0)return h|0;i=0;do{r=f+(i*6|0)|0;b[r>>1]=b[e>>1]|0;b[r+2>>1]=b[e+2>>1]|0;b[r+4>>1]=b[e+4>>1]|0;i=i+1|0}while((i|0)!=(h|0));return h|0}function Wg(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=d+4568|0;o=Yg(d,l)|0;j=Yg(d,l)|0;l=Yg(d,l)|0;i=d+128|0;h=e[g>>1]|0;m=c[d+136>>2]|0;n=m<<1|1;h=($($(n,o)|0,h-(e[f>>1]|0)>>31|1)|0)+h|0;o=0-m|0;if((h|0)>=(o|0)){i=c[i>>2]|0;if((i+m|0)<(h|0))h=h-($(c[d+132>>2]|0,n)|0)|0}else{h=($(c[d+132>>2]|0,n)|0)+h|0;i=c[i>>2]|0}if((h&i|0)!=(h|0))h=i&~(h>>31);k=h&65535;h=e[g+2>>1]|0;h=($($(n,j)|0,h-(e[f+2>>1]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[d+132>>2]|0,n)|0)|0}else h=($(c[d+132>>2]|0,n)|0)+h|0;if((h&i|0)!=(h|0))h=i&~(h>>31);j=h&65535;h=e[g+4>>1]|0;h=($($(n,l)|0,h-(e[f+4>>1]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[d+132>>2]|0,n)|0)|0}else h=($(c[d+132>>2]|0,n)|0)+h|0;if((h&i|0)==(h|0)){d=h;d=d&65535;b[a>>1]=k;o=a+2|0;b[o>>1]=j;a=a+4|0;b[a>>1]=d;return}d=i&~(h>>31);d=d&65535;b[a>>1]=k;o=a+2|0;b[o>>1]=j;a=a+4|0;b[a>>1]=d;return}function Xg(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&65535;return d|0}d=f&~(h>>31);d=d&65535;return d|0}function Yg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function Zg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function _g(a){a=a|0;var b=0,d=0;c[a>>2]=35800;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function $g(a){a=a|0;var b=0,d=0;c[a>>2]=35800;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function ah(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function bh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;jh(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function ch(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);dh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function dh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=b+172|0;x=(c[w>>2]|0)+4|0;if((c[b+28>>2]|0)==1)y=c[b+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,C|0),B=o,o=0,B&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[D>>2]|0)+3|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)h=19;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))h=17;if((h|0)==17?(f=y<<2,o=0,g=ka(67,f|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=g;h=g+(y<<2)|0;c[z+8>>2]=h;iw(g|0,0,f|0)|0;c[B>>2]=h;h=19;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){h=b+8|0;b:do if((c[h>>2]|0)>0){j=b+4596|0;k=$(y,x)|0;l=k+1|0;m=b+4600|0;n=(y|0)>0;p=b+160|0;q=b+168|0;r=b+164|0;s=b+156|0;t=b+88|0;u=b+4592|0;v=0;c:while(1){f=c[C>>2]|0;e=f+3|0;c[j>>2]=e;f=f+(l*3|0)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];d=c[w>>2]|0;g=e+(d*3|0)|0;e=e+((d+-1|0)*3|0)|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;e=c[j>>2]|0;g=(c[m>>2]|0)+-3|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;o=0;ia(78,b|0,0);g=o;o=0;if(g&1){h=30;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x*3|0)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x*3|0)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+(((c[s>>2]|0)-k|0)*3|0)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){h=31;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){h=43;break b}}if((h|0)==30){f=Na()|0;break}else if((h|0)==31){f=Na()|0;break}}else h=43;while(0);do if((h|0)==43){o=0;ha(183,b|0);b=o;o=0;if(b&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function eh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;M=i;i=i+16|0;C=M+12|0;L=M+9|0;K=M+6|0;D=M+3|0;E=M;F=b+172|0;e=c[F>>2]|0;if((e|0)<=0){i=M;return}G=b+4600|0;H=b+4596|0;I=b+4604|0;J=b+4592|0;B=0;while(1){y=B+-1|0;g=c[G>>2]|0;h=g+(y*3|0)|0;N=c[H>>2]|0;f=B+1|0;j=d[N+(B*3|0)>>0]|0;A=c[I>>2]|0;k=d[N+(y*3|0)>>0]|0;l=j-k|0;m=d[h>>0]|0;n=k-m|0;o=((((a[A+((d[N+(f*3|0)>>0]|0)-j)>>0]|0)*9|0)+(a[A+l>>0]|0)|0)*9|0)+(a[A+n>>0]|0)|0;p=d[N+(B*3|0)+1>>0]|0;q=d[N+(y*3|0)+1>>0]|0;r=p-q|0;s=d[g+(y*3|0)+1>>0]|0;t=q-s|0;u=((((a[A+((d[N+(f*3|0)+1>>0]|0)-p)>>0]|0)*9|0)+(a[A+r>>0]|0)|0)*9|0)+(a[A+t>>0]|0)|0;v=d[N+(B*3|0)+2>>0]|0;w=d[N+(y*3|0)+2>>0]|0;x=v-w|0;y=d[g+(y*3|0)+2>>0]|0;z=w-y|0;A=((((a[A+((d[N+(f*3|0)+2>>0]|0)-v)>>0]|0)*9|0)+(a[A+x>>0]|0)|0)*9|0)+(a[A+z>>0]|0)|0;if(!(u|o|A)){a[K>>0]=a[h>>0]|0;a[K+1>>0]=a[h+1>>0]|0;a[K+2>>0]=a[h+2>>0]|0;a[C>>0]=a[h>>0]|0;a[C+1>>0]=a[h+1>>0]|0;a[C+2>>0]=a[h+2>>0]|0;e=fh(b,C,g+(B*3|0)|0,e-B|0)|0;f=e+B|0;if((f|0)!=(c[F>>2]|0)){N=(c[H>>2]|0)+(f*3|0)|0;a[E>>0]=a[N>>0]|0;a[E+1>>0]=a[N+1>>0]|0;a[E+2>>0]=a[N+2>>0]|0;N=c[G>>2]|0;a[L>>0]=a[K>>0]|0;a[L+1>>0]=a[K+1>>0]|0;a[L+2>>0]=a[K+2>>0]|0;a[C>>0]=a[E>>0]|0;a[C+1>>0]=a[E+1>>0]|0;a[C+2>>0]=a[E+2>>0]|0;gh(D,b,L,C);N=N+(f*3|0)|0;a[N>>0]=a[D>>0]|0;a[N+1>>0]=a[D+1>>0]|0;a[N+2>>0]=a[D+2>>0]|0;N=c[J>>2]|0;c[J>>2]=(N|0)<1?0:N+-1|0;e=e+1|0}f=e+B|0}else{g=d[g+(B*3|0)>>0]|0;e=j-m>>31;if((e^n|0)>=0)if((e^l|0)<0)e=m;else e=m-k+j|0;else e=j;j=hh(b,o,g,e,0)|0;g=d[(c[G>>2]|0)+(B*3|0)+1>>0]|0;e=p-s>>31;if((e^t|0)>=0)if((e^r|0)<0)e=s;else e=s-q+p|0;else e=p;g=hh(b,u,g,e,0)|0;h=d[(c[G>>2]|0)+(B*3|0)+2>>0]|0;e=v-y>>31;if((e^z|0)>=0)if((e^x|0)<0)e=y;else e=y-w+v|0;else e=v;A=hh(b,A,h,e,0)|0;N=(c[G>>2]|0)+(B*3|0)|0;a[N>>0]=j;a[N+1>>0]=g;a[N+2>>0]=A}e=c[F>>2]|0;if((f|0)>=(e|0))break;else B=f}i=M;return}function fh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4592|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;h=0;do{q=e+(h*3|0)|0;a[q>>0]=a[d>>0]|0;a[q+1>>0]=a[d+1>>0]|0;a[q+2>>0]=a[d+2>>0]|0;h=h+1|0}while((h|0)!=(g|0));return g|0}function gh(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=e+4568|0;o=ih(e,l)|0;j=ih(e,l)|0;l=ih(e,l)|0;i=e+128|0;h=d[g>>0]|0;m=c[e+136>>2]|0;n=m<<1|1;h=($($(n,o)|0,h-(d[f>>0]|0)>>31|1)|0)+h|0;o=0-m|0;if((h|0)>=(o|0)){i=c[i>>2]|0;if((i+m|0)<(h|0))h=h-($(c[e+132>>2]|0,n)|0)|0}else{h=($(c[e+132>>2]|0,n)|0)+h|0;i=c[i>>2]|0}if((h&i|0)!=(h|0))h=i&~(h>>31);k=h&255;h=d[g+1>>0]|0;h=($($(n,j)|0,h-(d[f+1>>0]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[e+132>>2]|0,n)|0)|0}else h=($(c[e+132>>2]|0,n)|0)+h|0;if((h&i|0)!=(h|0))h=i&~(h>>31);j=h&255;h=d[g+2>>0]|0;h=($($(n,l)|0,h-(d[f+2>>0]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[e+132>>2]|0,n)|0)|0}else h=($(c[e+132>>2]|0,n)|0)+h|0;if((h&i|0)==(h|0)){e=h;e=e&255;a[b>>0]=k;o=b+1|0;a[o>>0]=j;b=b+2|0;a[b>>0]=e;return}e=i&~(h>>31);e=e&255;a[b>>0]=k;o=b+1|0;a[o>>0]=j;b=b+2|0;a[b>>0]=e;return}function hh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&255;return d|0}d=f&~(h>>31);d=d&255;return d|0}function ih(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function jh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function kh(a){a=a|0;var b=0,d=0;c[a>>2]=35772;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function lh(a){a=a|0;var b=0,d=0;c[a>>2]=35772;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function mh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function nh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,65535,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;vh(d);g=0;do{c[d+164+(g*12|0)>>2]=1024;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=1024;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=1024;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function oh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);ph(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function ph(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+148|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,B=o,o=0,!(B&1)):0){c[C>>2]=f;B=f+(d<<1)|0;c[C+8>>2]=B;iw(f|0,0,e|0)|0;c[D>>2]=B;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=18;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=16;if((j|0)==16?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=18;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4572|0;k=$(y,x)|0;l=k+1|0;m=a+4576|0;n=(y|0)>0;p=a+136|0;q=a+144|0;r=a+140|0;s=a+132|0;t=a+88|0;u=a+4568|0;v=0;b:while(1){f=c[C>>2]|0;e=f+2|0;c[j>>2]=e;f=f+(l<<1)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;b[e+(g<<1)>>1]=b[e+(g+-1<<1)>>1]|0;b[d+-2>>1]=b[e>>1]|0;o=0;ia(79,a|0,0);g=o;o=0;if(g&1){j=29;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x<<1)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x<<1)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k<<1)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=30;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function qh(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4572|0;f=c[p>>2]|0;s=d+148|0;if((c[s>>2]|0)<=0)return;q=d+4576|0;r=d+4580|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(sh(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=rh(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function rh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&65535|0)!=(f|0))f=f>>31&65535^65535;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<47){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&65535;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&65535;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&65535;return e|0}function sh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;i=a+4576|0;h=c[i>>2]|0;f=b[h+(d+-1<<1)>>1]|0;j=a+148|0;h=th(a,f,h+(d<<1)|0,(c[j>>2]|0)-d|0)|0;g=h+d|0;if((g|0)==(c[j>>2]|0)){j=h;return j|0}f=f&65535;d=e[(c[a+4572>>2]|0)+(g<<1)>>1]|0;j=f-d|0;if((((j|0)>-1?j:0-j|0)|0)<1)f=(uh(a,a+4556|0)|0)+f|0;else f=($(uh(a,a+4544|0)|0,d-f>>31|1)|0)+d|0;b[(c[i>>2]|0)+(g<<1)>>1]=f;j=a+4568|0;a=c[j>>2]|0;c[j>>2]=(a|0)<1?0:a+-1|0;j=h+1|0;return j|0}function th(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4568|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)>0)i=0;else return h|0;do{b[f+(i<<1)>>1]=e;i=i+1|0}while((i|0)!=(h|0));return h|0}function uh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(46-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,16)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}function vh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,65535,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8909]|0;c[b+4580>>2]=l+(((c[8910]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=131072){if(h>>>0>131072?(j=d+131072|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,131072-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+65536;j=b+160|0;g=b+156|0;h=-65536;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==65536)break}i=m;return}function wh(a){a=a|0;var b=0,d=0;c[a>>2]=35744;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function xh(a){a=a|0;var b=0,d=0;c[a>>2]=35744;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function yh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function zh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,4095,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;Hh(d);g=0;do{c[d+164+(g*12|0)>>2]=64;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=64;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=64;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function Ah(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Bh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Bh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+148|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,B=o,o=0,!(B&1)):0){c[C>>2]=f;B=f+(d<<1)|0;c[C+8>>2]=B;iw(f|0,0,e|0)|0;c[D>>2]=B;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=18;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=16;if((j|0)==16?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=18;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4572|0;k=$(y,x)|0;l=k+1|0;m=a+4576|0;n=(y|0)>0;p=a+136|0;q=a+144|0;r=a+140|0;s=a+132|0;t=a+88|0;u=a+4568|0;v=0;b:while(1){f=c[C>>2]|0;e=f+2|0;c[j>>2]=e;f=f+(l<<1)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;b[e+(g<<1)>>1]=b[e+(g+-1<<1)>>1]|0;b[d+-2>>1]=b[e>>1]|0;o=0;ia(80,a|0,0);g=o;o=0;if(g&1){j=29;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x<<1)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x<<1)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k<<1)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=30;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function Ch(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4572|0;f=c[p>>2]|0;s=d+148|0;if((c[s>>2]|0)<=0)return;q=d+4576|0;r=d+4580|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(Eh(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=Dh(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function Dh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&4095|0)!=(f|0))f=f>>31&4095^4095;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<35){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&4095;e=e&65535;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&4095;e=e&65535;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&4095;e=e&65535;return e|0}function Eh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;i=a+4576|0;h=c[i>>2]|0;f=b[h+(d+-1<<1)>>1]|0;j=a+148|0;h=Fh(a,f,h+(d<<1)|0,(c[j>>2]|0)-d|0)|0;g=h+d|0;if((g|0)==(c[j>>2]|0)){j=h;return j|0}f=f&65535;d=e[(c[a+4572>>2]|0)+(g<<1)>>1]|0;j=f-d|0;if((((j|0)>-1?j:0-j|0)|0)<1)f=(Gh(a,a+4556|0)|0)+f|0;else f=($(Gh(a,a+4544|0)|0,d-f>>31|1)|0)+d|0;b[(c[i>>2]|0)+(g<<1)>>1]=f&4095;j=a+4568|0;a=c[j>>2]|0;c[j>>2]=(a|0)<1?0:a+-1|0;j=h+1|0;return j|0}function Fh(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4568|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)>0)i=0;else return h|0;do{b[f+(i<<1)>>1]=e;i=i+1|0}while((i|0)!=(h|0));return h|0}function Gh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(34-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,12)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}function Hh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,4095,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8906]|0;c[b+4580>>2]=l+(((c[8907]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=8192){if(h>>>0>8192?(j=d+8192|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,8192-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+4096;j=b+160|0;g=b+156|0;h=-4096;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==4096)break}i=m;return}function Ih(a){a=a|0;var b=0,d=0;c[a>>2]=35716;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Jh(a){a=a|0;var b=0,d=0;c[a>>2]=35716;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Lh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;Th(d);g=0;do{c[d+164+(g*12|0)>>2]=4;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=4;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=4;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function Mh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Nh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Nh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=b+148|0;x=(c[w>>2]|0)+4|0;if((c[b+28>>2]|0)==1)y=c[b+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[D>>2]|0)+1|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)h=19;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))h=17;if((h|0)==17?(f=y<<2,o=0,g=ka(67,f|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=g;h=g+(y<<2)|0;c[z+8>>2]=h;iw(g|0,0,f|0)|0;c[B>>2]=h;h=19;break}e=Na()|0;d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){h=b+8|0;b:do if((c[h>>2]|0)>0){j=b+4572|0;k=$(y,x)|0;l=k+1|0;m=b+4576|0;n=(y|0)>0;p=b+136|0;q=b+144|0;r=b+140|0;s=b+132|0;t=b+88|0;u=b+4568|0;v=0;c:while(1){f=c[C>>2]|0;e=f+1|0;c[j>>2]=e;f=f+l|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;a[e+g>>0]=a[e+(g+-1)>>0]|0;a[(c[m>>2]|0)+-1>>0]=a[c[j>>2]>>0]|0;o=0;ia(81,b|0,0);g=o;o=0;if(g&1){h=30;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+x|0;c[j>>2]=e;d=(c[m>>2]|0)+x|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){h=31;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){h=43;break b}}if((h|0)==30){e=Na()|0;break}else if((h|0)==31){e=Na()|0;break}}else h=43;while(0);do if((h|0)==43){o=0;ha(183,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);i=A;return}while(0);d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}function Oh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=b+4572|0;e=c[o>>2]|0;r=b+148|0;if((c[r>>2]|0)<=0)return;p=b+4576|0;q=b+4580|0;h=e;i=d[e+-1>>0]|0;e=d[e>>0]|0;n=0;while(1){m=c[p>>2]|0;l=d[m+(n+-1)>>0]|0;g=n+1|0;f=d[h+g>>0]|0;k=c[q>>2]|0;j=e-i|0;h=i-l|0;k=((((a[k+(f-e)>>0]|0)*9|0)+(a[k+j>>0]|0)|0)*9|0)+(a[k+h>>0]|0)|0;if(!k){g=(Qh(b,n,0)|0)+n|0;f=c[o>>2]|0;e=d[f+(g+-1)>>0]|0;f=d[f+g>>0]|0}else{i=e-l>>31;if((i^h|0)<0)h=e;else h=l+((i^j|0)<0?0:j)|0;m=Ph(b,k,d[m+n>>0]|0,h,0)|0;a[(c[p>>2]|0)+n>>0]=m}if((g|0)>=(c[r>>2]|0))break;h=c[o>>2]|0;i=e;e=f;n=g}return}function Ph(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&255|0)!=(f|0))f=f>>31&255^255;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<23){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}function Qh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=b+4576|0;h=c[i>>2]|0;f=a[h+(e+-1)>>0]|0;j=b+148|0;h=Rh(b,f,h+e|0,(c[j>>2]|0)-e|0)|0;g=h+e|0;if((g|0)==(c[j>>2]|0)){j=h;return j|0}f=f&255;e=d[(c[b+4572>>2]|0)+g>>0]|0;j=f-e|0;if((((j|0)>-1?j:0-j|0)|0)<1)f=(Sh(b,b+4556|0)|0)+f|0;else f=($(Sh(b,b+4544|0)|0,e-f>>31|1)|0)+e|0;a[(c[i>>2]|0)+g>>0]=f;j=b+4568|0;b=c[j>>2]|0;c[j>>2]=(b|0)<1?0:b+-1|0;j=h+1|0;return j|0}function Rh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4568|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;iw(e|0,d|0,g|0)|0;return g|0}function Sh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(22-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,8)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}function Th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8900]|0;c[b+4580>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+256;j=b+160|0;g=b+156|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function Uh(a){a=a|0;var b=0,d=0;c[a>>2]=35688;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Vh(a){a=a|0;var b=0,d=0;c[a>>2]=35688;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Wh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Xh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;di(d);g=0;do{c[d+164+(g*12|0)>>2]=4;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=4;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=4;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function Yh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Zh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Zh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=b+148|0;x=(c[w>>2]|0)+4|0;if((c[b+28>>2]|0)==1)y=c[b+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,C|0),B=o,o=0,B&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[D>>2]|0)+3|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)h=19;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))h=17;if((h|0)==17?(f=y<<2,o=0,g=ka(67,f|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=g;h=g+(y<<2)|0;c[z+8>>2]=h;iw(g|0,0,f|0)|0;c[B>>2]=h;h=19;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){h=b+8|0;b:do if((c[h>>2]|0)>0){j=b+4572|0;k=$(y,x)|0;l=k+1|0;m=b+4576|0;n=(y|0)>0;p=b+136|0;q=b+144|0;r=b+140|0;s=b+132|0;t=b+88|0;u=b+4568|0;v=0;c:while(1){f=c[C>>2]|0;e=f+3|0;c[j>>2]=e;f=f+(l*3|0)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];d=c[w>>2]|0;g=e+(d*3|0)|0;e=e+((d+-1|0)*3|0)|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;e=c[j>>2]|0;g=(c[m>>2]|0)+-3|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;o=0;ia(82,b|0,0);g=o;o=0;if(g&1){h=30;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x*3|0)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x*3|0)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+(((c[s>>2]|0)-k|0)*3|0)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){h=31;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){h=43;break b}}if((h|0)==30){f=Na()|0;break}else if((h|0)==31){f=Na()|0;break}}else h=43;while(0);do if((h|0)==43){o=0;ha(183,b|0);b=o;o=0;if(b&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function _h(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=b+148|0;if((c[A>>2]|0)<=0)return;B=b+4576|0;C=b+4572|0;D=b+4580|0;z=0;while(1){w=z+-1|0;i=c[B>>2]|0;j=c[C>>2]|0;e=z+1|0;h=d[j+(z*3|0)>>0]|0;y=c[D>>2]|0;k=d[j+(w*3|0)>>0]|0;l=h-k|0;m=d[i+(w*3|0)>>0]|0;n=k-m|0;o=((((a[y+((d[j+(e*3|0)>>0]|0)-h)>>0]|0)*9|0)+(a[y+l>>0]|0)|0)*9|0)+(a[y+n>>0]|0)|0;g=d[j+(z*3|0)+1>>0]|0;p=d[j+(w*3|0)+1>>0]|0;q=g-p|0;r=d[i+(w*3|0)+1>>0]|0;s=p-r|0;t=((((a[y+((d[j+(e*3|0)+1>>0]|0)-g)>>0]|0)*9|0)+(a[y+q>>0]|0)|0)*9|0)+(a[y+s>>0]|0)|0;f=d[j+(z*3|0)+2>>0]|0;u=d[j+(w*3|0)+2>>0]|0;v=f-u|0;w=d[i+(w*3|0)+2>>0]|0;x=u-w|0;y=((((a[y+((d[j+(e*3|0)+2>>0]|0)-f)>>0]|0)*9|0)+(a[y+v>>0]|0)|0)*9|0)+(a[y+x>>0]|0)|0;if(!(t|o|y))e=($h(b,z,0)|0)+z|0;else{j=d[i+(z*3|0)>>0]|0;i=h-m>>31;if((i^n|0)>=0)if((i^l|0)<0)h=m;else h=m-k+h|0;j=ai(b,o,j,h,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+1>>0]|0;h=g-r>>31;if((h^s|0)>=0)if((h^q|0)<0)g=r;else g=r-p+g|0;h=ai(b,t,i,g,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+2>>0]|0;g=f-w>>31;if((g^x|0)>=0)if((g^v|0)<0)f=w;else f=w-u+f|0;y=ai(b,y,i,f,0)|0;z=(c[B>>2]|0)+(z*3|0)|0;a[z>>0]=j;a[z+1>>0]=h;a[z+2>>0]=y}if((e|0)<(c[A>>2]|0))z=e;else break}return}function $h(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;l=i;i=i+16|0;n=l+3|0;o=l;h=b+4576|0;e=c[h>>2]|0;f=e+((d+-1|0)*3|0)|0;j=a[f>>0]|0;k=a[f+1>>0]|0;f=a[f+2>>0]|0;a[o>>0]=j;a[o+1>>0]=k;a[o+2>>0]=f;m=b+148|0;g=(c[m>>2]|0)-d|0;a[n>>0]=a[o>>0]|0;a[n+1>>0]=a[o+1>>0]|0;a[n+2>>0]=a[o+2>>0]|0;g=bi(b,n,e+(d*3|0)|0,g)|0;e=g+d|0;if((e|0)==(c[m>>2]|0)){o=g;i=l;return o|0}n=(c[b+4572>>2]|0)+(e*3|0)|0;d=a[n>>0]|0;m=a[n+1>>0]|0;n=a[n+2>>0]|0;o=c[h>>2]|0;p=b+4544|0;h=ci(b,p)|0;q=ci(b,p)|0;d=d&255;m=m&255;m=($(m-(k&255)>>31|1,q)|0)+m&255;n=n&255;n=($(n-(f&255)>>31|1,ci(b,p)|0)|0)+n&255;o=o+(e*3|0)|0;a[o>>0]=($(d-(j&255)>>31|1,h)|0)+d;a[o+1>>0]=m;a[o+2>>0]=n;o=b+4568|0;n=c[o>>2]|0;c[o>>2]=(n|0)<1?0:n+-1|0;o=g+1|0;i=l;return o|0}function ai(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&255|0)!=(f|0))f=f>>31&255^255;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<23){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}function bi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4568|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;h=0;do{q=e+(h*3|0)|0;a[q>>0]=a[d>>0]|0;a[q+1>>0]=a[d+1>>0]|0;a[q+2>>0]=a[d+2>>0]|0;h=h+1|0}while((h|0)!=(g|0));return g|0}function ci(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(22-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,8)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0} + function Lp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+128|0;h=n;q=n+116|0;r=n+104|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,0,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(3,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=Uu(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function Mp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+240|0;h=n+8|0;a=n;q=n+204|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,0,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,23,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(3,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=Uu(h,k,r,s,d,e)|0;i=n;return s|0}return 0}function Np(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+352|0;u=z+312|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+316|0;t=z+80|0;k=z+84|0;y=z+76|0;x=z+72|0;v=z+68|0;w=z+64|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58898,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,c[q>>2]=c[d+8>>2],h[q+8>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<3)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(4,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(40,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Op(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;y=i;i=i+16|0;z=y;x=Is(j,44212)|0;v=Is(j,44368)|0;Cb[c[(c[v>>2]|0)+20>>2]&127](z,v);c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,j|0)|0;w=o;o=0;if(w&1)u=8;else{m=c[h>>2]|0;c[h>>2]=m+4;c[m>>2]=j;m=b+1|0;u=10}break}default:{m=b;u=10}}a:do if((u|0)==10){w=e;b:do if((w-m|0)>1?(a[m>>0]|0)==48:0){k=m+1|0;switch(a[k>>0]|0){case 88:case 120:break;default:{u=11;break b}}o=0;j=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,48)|0;t=o;o=0;if(t&1){u=8;break a}t=c[h>>2]|0;c[h>>2]=t+4;c[t>>2]=j;m=m+2|0;o=0;j=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,a[k>>0]|0)|0;t=o;o=0;if(t&1){u=8;break a}t=c[h>>2]|0;c[h>>2]=t+4;c[t>>2]=j;if(m>>>0>>0){j=m;while(1){k=a[j>>0]|0;o=0;l=ua(3)|0;t=o;o=0;if(t&1)break;o=0;k=ra(39,k<<24>>24|0,l|0)|0;t=o;o=0;if(t&1)break;if(!k){t=m;break b}j=j+1|0;if(j>>>0>=e>>>0){t=m;break b}}j=Na()|0;break a}else{t=m;j=m}}else u=11;while(0);c:do if((u|0)==11)if(m>>>0>>0){j=m;while(1){k=a[j>>0]|0;o=0;l=ua(3)|0;t=o;o=0;if(t&1)break;o=0;k=ra(40,k<<24>>24|0,l|0)|0;t=o;o=0;if(t&1)break;if(!k){t=m;break c}j=j+1|0;if(j>>>0>=e>>>0){t=m;break c}}j=Na()|0;break a}else{t=m;j=m}while(0);r=a[z>>0]|0;s=z+4|0;if(((r&1)==0?(r&255)>>>1:c[s>>2]|0)|0){if((t|0)!=(j|0)?(n=j+-1|0,t>>>0>>0):0){l=t;k=n;do{r=a[l>>0]|0;a[l>>0]=a[k>>0]|0;a[k>>0]=r;l=l+1|0;k=k+-1|0}while(l>>>0>>0)}o=0;n=ka(c[(c[v>>2]|0)+16>>2]|0,v|0)|0;r=o;o=0;if(r&1){u=8;break}p=z+8|0;q=z+1|0;d:do if(t>>>0>>0){k=0;l=0;r=t;while(1){m=a[((a[z>>0]&1)==0?q:c[p>>2]|0)+l>>0]|0;if(m<<24>>24>0&(k|0)==(m<<24>>24|0)){k=c[h>>2]|0;c[h>>2]=k+4;c[k>>2]=n;k=a[z>>0]|0;m=0;l=(l>>>0<(((k&1)==0?(k&255)>>>1:c[s>>2]|0)+-1|0)>>>0&1)+l|0}else m=k;o=0;k=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,a[r>>0]|0)|0;A=o;o=0;if(A&1)break;A=c[h>>2]|0;c[h>>2]=A+4;c[A>>2]=k;r=r+1|0;if(r>>>0>=j>>>0)break d;else k=m+1|0}j=Na()|0;break a}while(0);k=f+(t-b<<2)|0;m=c[h>>2]|0;if((k|0)!=(m|0)){l=m+-4|0;if(k>>>0>>0){do{A=c[k>>2]|0;c[k>>2]=c[l>>2];c[l>>2]=A;k=k+4|0;l=l+-4|0}while(k>>>0>>0);n=x;k=m}else{n=x;k=m}}else n=x}else{o=0;va(c[(c[x>>2]|0)+48>>2]|0,x|0,t|0,j|0,c[h>>2]|0)|0;A=o;o=0;if(A&1){u=8;break}k=(c[h>>2]|0)+(j-t<<2)|0;c[h>>2]=k;n=x}e:do if(j>>>0>>0){while(1){k=a[j>>0]|0;if(k<<24>>24==46){l=j;break}o=0;l=ra(c[(c[n>>2]|0)+44>>2]|0,x|0,k|0)|0;A=o;o=0;if(A&1){u=4;break}A=c[h>>2]|0;k=A+4|0;c[h>>2]=k;c[A>>2]=l;j=j+1|0;if(j>>>0>=e>>>0)break e}if((u|0)==4){j=Na()|0;break a}o=0;j=ka(c[(c[v>>2]|0)+12>>2]|0,v|0)|0;A=o;o=0;if(A&1){u=8;break a}A=c[h>>2]|0;k=A+4|0;c[h>>2]=k;c[A>>2]=j;j=l+1|0}while(0);o=0;va(c[(c[x>>2]|0)+48>>2]|0,x|0,j|0,e|0,k|0)|0;A=o;o=0;if(A&1)u=8;else{A=(c[h>>2]|0)+(w-j<<2)|0;c[h>>2]=A;c[g>>2]=(d|0)==(e|0)?A:f+(d-b<<2)|0;Im(z);i=y;return}}while(0);if((u|0)==8)j=Na()|0;Im(z);Ya(j|0)}function Pp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+352|0;u=z+304|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+308|0;t=z+72|0;k=z+76|0;y=z+68|0;x=z+64|0;v=z+60|0;w=z+56|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58899,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,h[q>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<3)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(4,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(40,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Qp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+192|0;l=q;b=q+180|0;n=q+160|0;p=q+12|0;k=q+8|0;m=q+4|0;a[b>>0]=a[58901]|0;a[b+1>>0]=a[58902]|0;a[b+2>>0]=a[58903]|0;a[b+3>>0]=a[58904]|0;a[b+4>>0]=a[58905]|0;a[b+5>>0]=a[58906]|0;h=Xo()|0;c[l>>2]=g;b=Su(n,20,h,b,l)|0;g=n+b|0;h=vp(n,g,e)|0;j=jn(e)|0;c[k>>2]=j;o=0;k=ra(37,k|0,44212)|0;r=o;o=0;if(r&1){r=Na()|0;pm(j)|0;Ya(r|0)}else{pm(j)|0;Pb[c[(c[k>>2]|0)+48>>2]&31](k,n,g,p)|0;r=p+(b<<2)|0;c[m>>2]=c[d>>2];c[l>>2]=c[m>>2];r=Uu(l,p,(h|0)==(g|0)?r:p+(h-n<<2)|0,r,e,f)|0;i=q;return r|0}return 0}function Rp(e,f,g,h,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+32|0;w=C+16|0;v=C+12|0;z=C+8|0;x=C+4|0;y=C;n=jn(h)|0;c[z>>2]=n;o=0;z=ra(37,z|0,44220)|0;u=o;o=0;if(u&1){C=Na()|0;pm(n)|0;Ya(C|0)}pm(n)|0;c[j>>2]=0;u=z+8|0;n=c[f>>2]|0;a:do if((l|0)!=(m|0)){b:while(1){p=n;if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0;p=0}}else n=0;s=(n|0)==0;r=c[g>>2]|0;q=r;do if(r){if((c[r+12>>2]|0)==(c[r+16>>2]|0)?(Eb[c[(c[r>>2]|0)+36>>2]&127](r)|0)==-1:0){c[g>>2]=0;q=0;B=12;break}if(!s){B=13;break b}}else B=12;while(0);if((B|0)==12){B=0;if(s){B=13;break}else r=0}c:do if((Gb[c[(c[z>>2]|0)+36>>2]&63](z,a[l>>0]|0,0)|0)<<24>>24==37){r=l+1|0;if((r|0)==(m|0)){B=17;break b}t=Gb[c[(c[z>>2]|0)+36>>2]&63](z,a[r>>0]|0,0)|0;switch(t<<24>>24){case 48:case 69:{s=l+2|0;if((s|0)==(m|0)){B=20;break b}l=r;r=Gb[c[(c[z>>2]|0)+36>>2]&63](z,a[s>>0]|0,0)|0;n=t;break}default:{r=t;n=0}}t=c[(c[e>>2]|0)+36>>2]|0;c[x>>2]=p;c[y>>2]=q;c[v>>2]=c[x>>2];c[w>>2]=c[y>>2];c[f>>2]=Sb[t&15](e,v,w,h,j,k,r,n)|0;l=l+2|0}else{p=a[l>>0]|0;if(p<<24>>24>-1?(A=c[u>>2]|0,(b[A+(p<<24>>24<<1)>>1]&8192)!=0):0){do{l=l+1|0;if((l|0)==(m|0)){l=m;break}p=a[l>>0]|0;if(p<<24>>24<=-1)break}while((b[A+(p<<24>>24<<1)>>1]&8192)!=0);p=r;while(1){if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0}}else n=0;q=(n|0)==0;do if(r){if((c[r+12>>2]|0)!=(c[r+16>>2]|0))if(q){t=p;break}else break c;if((Eb[c[(c[r>>2]|0)+36>>2]&127](r)|0)!=-1)if(q^(p|0)==0){t=p;r=p;break}else break c;else{c[g>>2]=0;p=0;B=39;break}}else B=39;while(0);if((B|0)==39){B=0;if(q)break c;else{t=p;r=0}}q=n+12|0;p=c[q>>2]|0;s=n+16|0;if((p|0)==(c[s>>2]|0))p=Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0;else p=d[p>>0]|0;if((p&255)<<24>>24<=-1)break c;if(!(b[(c[u>>2]|0)+(p<<24>>24<<1)>>1]&8192))break c;p=c[q>>2]|0;if((p|0)==(c[s>>2]|0)){Eb[c[(c[n>>2]|0)+40>>2]&127](n)|0;p=t;continue}else{c[q>>2]=p+1;p=t;continue}}}q=n+12|0;p=c[q>>2]|0;r=n+16|0;if((p|0)==(c[r>>2]|0))p=Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0;else p=d[p>>0]|0;t=Lb[c[(c[z>>2]|0)+12>>2]&63](z,p&255)|0;if(t<<24>>24!=(Lb[c[(c[z>>2]|0)+12>>2]&63](z,a[l>>0]|0)|0)<<24>>24){B=57;break b}p=c[q>>2]|0;if((p|0)==(c[r>>2]|0))Eb[c[(c[n>>2]|0)+40>>2]&127](n)|0;else c[q>>2]=p+1;l=l+1|0}while(0);n=c[f>>2]|0;if(!((l|0)!=(m|0)&(c[j>>2]|0)==0))break a}if((B|0)==13){c[j>>2]=4;break}else if((B|0)==17){c[j>>2]=4;break}else if((B|0)==20){c[j>>2]=4;break}else if((B|0)==57){c[j>>2]=4;n=c[f>>2]|0;break}}while(0);if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0}}else n=0;l=(n|0)==0;p=c[g>>2]|0;do if(p){if((c[p+12>>2]|0)==(c[p+16>>2]|0)?(Eb[c[(c[p>>2]|0)+36>>2]&127](p)|0)==-1:0){c[g>>2]=0;B=67;break}if(!l)B=68}else B=67;while(0);if((B|0)==67?l:0)B=68;if((B|0)==68)c[j>>2]=c[j>>2]|2;i=C;return n|0}function Sp(a){a=a|0;return}function Tp(a){a=a|0;cj(a);return}function Up(a){a=a|0;return 2}function Vp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Rp(a,k,j,e,f,g,58907,58915)|0;i=h;return a|0}function Wp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;j=i;i=i+16|0;k=j+12|0;l=j+8|0;n=j+4|0;m=j;o=b+8|0;o=Eb[c[(c[o>>2]|0)+20>>2]&127](o)|0;c[n>>2]=c[d>>2];c[m>>2]=c[e>>2];e=a[o>>0]|0;p=(e&1)==0;d=p?o+1|0:c[o+8>>2]|0;e=d+(p?(e&255)>>>1:c[o+4>>2]|0)|0;c[l>>2]=c[n>>2];c[k>>2]=c[m>>2];b=Rp(b,l,k,f,g,h,d,e)|0;i=j;return b|0}function Xp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44220)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];Yp(a,g+24|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function Yp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[c[a>>2]>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(xu(d,j,a,a+168|0,g,f,0)|0)-a|0;if((d|0)<168)c[b>>2]=((d|0)/12|0|0)%7|0;i=h;return}function Zp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44220)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];_p(a,g+16|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function _p(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[(c[a>>2]|0)+4>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(xu(d,j,a,a+288|0,g,f,0)|0)-a|0;if((d|0)<288)c[b>>2]=((d|0)/12|0|0)%12|0;i=h;return}function $p(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44220)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];aq(a,g+20|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function aq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,4)|0;if(!(c[f>>2]&4)){if((a|0)<69)a=a+2e3|0;else a=(a+-69|0)>>>0<31?a+1900|0:a;c[b>>2]=a+-1900}i=h;return}function bq(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=i;i=i+144|0;l=U+132|0;k=U+116|0;N=U+128|0;x=U+124|0;I=U+120|0;O=U+112|0;P=U+108|0;Q=U+104|0;R=U+100|0;S=U+96|0;T=U+92|0;m=U+88|0;n=U+84|0;p=U+80|0;q=U+76|0;r=U+72|0;s=U+68|0;t=U+64|0;u=U+60|0;v=U+56|0;w=U+52|0;y=U+48|0;z=U+44|0;A=U+40|0;B=U+36|0;C=U+32|0;D=U+28|0;E=U+24|0;F=U+20|0;G=U+16|0;H=U+12|0;J=U+8|0;K=U+4|0;L=U;c[g>>2]=0;M=jn(f)|0;c[N>>2]=M;o=0;N=ra(37,N|0,44220)|0;W=o;o=0;if(W&1){W=Na()|0;pm(M)|0;Ya(W|0)}pm(M)|0;do switch(j<<24>>24|0){case 65:case 97:{c[x>>2]=c[e>>2];c[l>>2]=c[x>>2];Yp(b,h+24|0,d,l,g,N);V=28;break}case 104:case 66:case 98:{c[I>>2]=c[e>>2];c[l>>2]=c[I>>2];_p(b,h+16|0,d,l,g,N);V=28;break}case 99:{V=b+8|0;V=Eb[c[(c[V>>2]|0)+12>>2]&127](V)|0;c[O>>2]=c[d>>2];c[P>>2]=c[e>>2];j=a[V>>0]|0;e=(j&1)==0;W=e?V+1|0:c[V+8>>2]|0;V=W+(e?(j&255)>>>1:c[V+4>>2]|0)|0;c[k>>2]=c[O>>2];c[l>>2]=c[P>>2];c[d>>2]=Rp(b,k,l,f,g,h,W,V)|0;V=28;break}case 101:case 100:{c[Q>>2]=c[e>>2];c[l>>2]=c[Q>>2];cq(b,h+12|0,d,l,g,N);V=28;break}case 68:{c[R>>2]=c[d>>2];c[S>>2]=c[e>>2];c[k>>2]=c[R>>2];c[l>>2]=c[S>>2];c[d>>2]=Rp(b,k,l,f,g,h,58915,58923)|0;V=28;break}case 70:{c[T>>2]=c[d>>2];c[m>>2]=c[e>>2];c[k>>2]=c[T>>2];c[l>>2]=c[m>>2];c[d>>2]=Rp(b,k,l,f,g,h,58923,58931)|0;V=28;break}case 72:{c[n>>2]=c[e>>2];c[l>>2]=c[n>>2];dq(b,h+8|0,d,l,g,N);V=28;break}case 73:{c[p>>2]=c[e>>2];c[l>>2]=c[p>>2];eq(b,h+8|0,d,l,g,N);V=28;break}case 106:{c[q>>2]=c[e>>2];c[l>>2]=c[q>>2];fq(b,h+28|0,d,l,g,N);V=28;break}case 109:{c[r>>2]=c[e>>2];c[l>>2]=c[r>>2];gq(b,h+16|0,d,l,g,N);V=28;break}case 77:{c[s>>2]=c[e>>2];c[l>>2]=c[s>>2];hq(b,h+4|0,d,l,g,N);V=28;break}case 116:case 110:{c[t>>2]=c[e>>2];c[l>>2]=c[t>>2];iq(b,d,l,g,N);V=28;break}case 112:{c[u>>2]=c[e>>2];c[l>>2]=c[u>>2];jq(b,h+8|0,d,l,g,N);V=28;break}case 114:{c[v>>2]=c[d>>2];c[w>>2]=c[e>>2];c[k>>2]=c[v>>2];c[l>>2]=c[w>>2];c[d>>2]=Rp(b,k,l,f,g,h,58931,58942)|0;V=28;break}case 82:{c[y>>2]=c[d>>2];c[z>>2]=c[e>>2];c[k>>2]=c[y>>2];c[l>>2]=c[z>>2];c[d>>2]=Rp(b,k,l,f,g,h,58942,58947)|0;V=28;break}case 83:{c[A>>2]=c[e>>2];c[l>>2]=c[A>>2];kq(b,h,d,l,g,N);V=28;break}case 84:{c[B>>2]=c[d>>2];c[C>>2]=c[e>>2];c[k>>2]=c[B>>2];c[l>>2]=c[C>>2];c[d>>2]=Rp(b,k,l,f,g,h,58947,58955)|0;V=28;break}case 119:{c[D>>2]=c[e>>2];c[l>>2]=c[D>>2];lq(b,h+24|0,d,l,g,N);V=28;break}case 120:{W=c[(c[b>>2]|0)+20>>2]|0;c[E>>2]=c[d>>2];c[F>>2]=c[e>>2];c[k>>2]=c[E>>2];c[l>>2]=c[F>>2];k=Db[W&63](b,k,l,f,g,h)|0;break}case 88:{V=b+8|0;V=Eb[c[(c[V>>2]|0)+24>>2]&127](V)|0;c[G>>2]=c[d>>2];c[H>>2]=c[e>>2];j=a[V>>0]|0;e=(j&1)==0;W=e?V+1|0:c[V+8>>2]|0;V=W+(e?(j&255)>>>1:c[V+4>>2]|0)|0;c[k>>2]=c[G>>2];c[l>>2]=c[H>>2];c[d>>2]=Rp(b,k,l,f,g,h,W,V)|0;V=28;break}case 121:{c[J>>2]=c[e>>2];c[l>>2]=c[J>>2];aq(b,h+20|0,d,l,g,N);V=28;break}case 89:{c[K>>2]=c[e>>2];c[l>>2]=c[K>>2];mq(b,h+20|0,d,l,g,N);V=28;break}case 37:{c[L>>2]=c[e>>2];c[l>>2]=c[L>>2];nq(b,d,l,g,N);V=28;break}default:{c[g>>2]=c[g>>2]|4;V=28}}while(0);if((V|0)==28)k=c[d>>2]|0;i=U;return k|0}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<31&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function dq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<24&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function eq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<12&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function fq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,3)|0;d=c[f>>2]|0;if((a|0)<366&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function gq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<13&(d&4|0)==0)c[b>>2]=a+-1;else c[f>>2]=d|4;i=h;return}function hq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<60&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function iq(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=h+8|0;a:while(1){h=c[e>>2]|0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;h=0;break}else{h=c[e>>2]|0;break}}else h=0;while(0);h=(h|0)==0;a=c[f>>2]|0;do if(a){if((c[a+12>>2]|0)!=(c[a+16>>2]|0))if(h)break;else break a;if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)!=-1)if(h)break;else break a;else{c[f>>2]=0;k=12;break}}else k=12;while(0);if((k|0)==12){k=0;if(h){a=0;break}else a=0}h=c[e>>2]|0;i=c[h+12>>2]|0;if((i|0)==(c[h+16>>2]|0))h=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=d[i>>0]|0;if((h&255)<<24>>24<=-1)break;if(!(b[(c[j>>2]|0)+(h<<24>>24<<1)>>1]&8192))break;h=c[e>>2]|0;a=h+12|0;i=c[a>>2]|0;if((i|0)==(c[h+16>>2]|0)){Eb[c[(c[h>>2]|0)+40>>2]&127](h)|0;continue}else{c[a>>2]=i+1;continue}}h=c[e>>2]|0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;h=0;break}else{h=c[e>>2]|0;break}}else h=0;while(0);h=(h|0)==0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0)?(Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1:0){c[f>>2]=0;k=32;break}if(!h)k=33}else k=32;while(0);if((k|0)==32?h:0)k=33;if((k|0)==33)c[g>>2]=c[g>>2]|2;return}function jq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+4|0;l=n;m=b+8|0;m=Eb[c[(c[m>>2]|0)+8>>2]&127](m)|0;b=a[m>>0]|0;if(!(b&1))j=(b&255)>>>1;else j=c[m+4>>2]|0;b=a[m+12>>0]|0;if(!(b&1))b=(b&255)>>>1;else b=c[m+16>>2]|0;do if((j|0)!=(0-b|0)){c[l>>2]=c[f>>2];c[k>>2]=c[l>>2];b=xu(e,k,m,m+24|0,h,g,0)|0;j=c[d>>2]|0;if((b|0)==(m|0)&(j|0)==12){c[d>>2]=0;break}if((j|0)<12&(b-m|0)==12)c[d>>2]=j+12}else c[g>>2]=c[g>>2]|4;while(0);i=n;return}function kq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<61&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function lq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,1)|0;d=c[f>>2]|0;if((a|0)<7&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function mq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,4)|0;if(!(c[f>>2]&4))c[b>>2]=a+-1900;i=h;return}function nq(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a=c[b>>2]|0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0))if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1){c[b>>2]=0;a=0;break}else{a=c[b>>2]|0;break}}else a=0;while(0);h=(a|0)==0;a=c[e>>2]|0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0)?(Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1:0){c[e>>2]=0;j=11;break}if(h){i=a;j=13}else j=12}else j=11;while(0);if((j|0)==11)if(h)j=12;else{i=0;j=13}a:do if((j|0)==12)c[f>>2]=c[f>>2]|6;else if((j|0)==13){a=c[b>>2]|0;h=c[a+12>>2]|0;if((h|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=d[h>>0]|0;if((Gb[c[(c[g>>2]|0)+36>>2]&63](g,a&255,0)|0)<<24>>24!=37){c[f>>2]=c[f>>2]|4;break}a=c[b>>2]|0;h=a+12|0;g=c[h>>2]|0;if((g|0)==(c[a+16>>2]|0)){Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;a=c[b>>2]|0;if(!a)a=0;else j=21}else{c[h>>2]=g+1;j=21}do if((j|0)==21)if((c[a+12>>2]|0)==(c[a+16>>2]|0))if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1){c[b>>2]=0;a=0;break}else{a=c[b>>2]|0;break}while(0);a=(a|0)==0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0)?(Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1:0){c[e>>2]=0;j=30;break}if(a)break a}else j=30;while(0);if((j|0)==30?!a:0)break;c[f>>2]=c[f>>2]|2}while(0);return}function oq(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+32|0;s=x+16|0;r=x+12|0;v=x+8|0;t=x+4|0;u=x;k=jn(e)|0;c[v>>2]=k;o=0;v=ra(37,v|0,44212)|0;q=o;o=0;if(q&1){x=Na()|0;pm(k)|0;Ya(x|0)}pm(k)|0;c[f>>2]=0;k=c[b>>2]|0;a:do if((h|0)!=(j|0)){b:while(1){m=k;if(k){l=c[k+12>>2]|0;if((l|0)==(c[k+16>>2]|0))l=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;if((l|0)==-1){c[b>>2]=0;k=0;p=1;q=0}else{p=0;q=m}}else{k=0;p=1;q=m}n=c[d>>2]|0;l=n;do if(n){m=c[n+12>>2]|0;if((m|0)==(c[n+16>>2]|0))m=Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0;else m=c[m>>2]|0;if((m|0)!=-1)if(p)break;else{w=17;break b}else{c[d>>2]=0;l=0;w=15;break}}else w=15;while(0);if((w|0)==15){w=0;if(p){w=17;break}else n=0}c:do if((Gb[c[(c[v>>2]|0)+52>>2]&63](v,c[h>>2]|0,0)|0)<<24>>24==37){m=h+4|0;if((m|0)==(j|0)){w=21;break b}p=Gb[c[(c[v>>2]|0)+52>>2]&63](v,c[m>>2]|0,0)|0;switch(p<<24>>24){case 48:case 69:{n=h+8|0;if((n|0)==(j|0)){w=24;break b}h=m;m=Gb[c[(c[v>>2]|0)+52>>2]&63](v,c[n>>2]|0,0)|0;k=p;break}default:{m=p;k=0}}p=c[(c[a>>2]|0)+36>>2]|0;c[t>>2]=q;c[u>>2]=l;c[r>>2]=c[t>>2];c[s>>2]=c[u>>2];c[b>>2]=Sb[p&15](a,r,s,e,f,g,m,k)|0;h=h+8|0}else{if(!(Gb[c[(c[v>>2]|0)+12>>2]&63](v,8192,c[h>>2]|0)|0)){m=k+12|0;l=c[m>>2]|0;n=k+16|0;if((l|0)==(c[n>>2]|0))l=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;q=Lb[c[(c[v>>2]|0)+28>>2]&63](v,l)|0;if((q|0)!=(Lb[c[(c[v>>2]|0)+28>>2]&63](v,c[h>>2]|0)|0)){w=61;break b}l=c[m>>2]|0;if((l|0)==(c[n>>2]|0))Eb[c[(c[k>>2]|0)+40>>2]&127](k)|0;else c[m>>2]=l+4;h=h+4|0;break}do{h=h+4|0;if((h|0)==(j|0)){h=j;break}}while(Gb[c[(c[v>>2]|0)+12>>2]&63](v,8192,c[h>>2]|0)|0);l=n;p=n;while(1){if(k){m=c[k+12>>2]|0;if((m|0)==(c[k+16>>2]|0))m=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else m=c[m>>2]|0;if((m|0)==-1){c[b>>2]=0;n=1;k=0}else n=0}else{n=1;k=0}do if(p){m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0))m=Eb[c[(c[p>>2]|0)+36>>2]&127](p)|0;else m=c[m>>2]|0;if((m|0)!=-1)if(n^(l|0)==0){q=l;p=l;break}else break c;else{c[d>>2]=0;l=0;w=44;break}}else w=44;while(0);if((w|0)==44){w=0;if(n)break c;else{q=l;p=0}}m=k+12|0;l=c[m>>2]|0;n=k+16|0;if((l|0)==(c[n>>2]|0))l=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;if(!(Gb[c[(c[v>>2]|0)+12>>2]&63](v,8192,l)|0))break c;l=c[m>>2]|0;if((l|0)==(c[n>>2]|0)){Eb[c[(c[k>>2]|0)+40>>2]&127](k)|0;l=q;continue}else{c[m>>2]=l+4;l=q;continue}}}while(0);k=c[b>>2]|0;if(!((h|0)!=(j|0)&(c[f>>2]|0)==0))break a}if((w|0)==17){c[f>>2]=4;break}else if((w|0)==21){c[f>>2]=4;break}else if((w|0)==24){c[f>>2]=4;break}else if((w|0)==61){c[f>>2]=4;k=c[b>>2]|0;break}}while(0);if(k){h=c[k+12>>2]|0;if((h|0)==(c[k+16>>2]|0))h=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else h=c[h>>2]|0;if((h|0)==-1){c[b>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}h=c[d>>2]|0;do if(h){l=c[h+12>>2]|0;if((l|0)==(c[h+16>>2]|0))h=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=c[l>>2]|0;if((h|0)!=-1)if(m)break;else{w=76;break}else{c[d>>2]=0;w=74;break}}else w=74;while(0);if((w|0)==74?m:0)w=76;if((w|0)==76)c[f>>2]=c[f>>2]|2;i=x;return k|0}function pq(a){a=a|0;return}function qq(a){a=a|0;cj(a);return}function rq(a){a=a|0;return 2}function sq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=oq(a,k,j,e,f,g,44788,44820)|0;i=h;return a|0}function tq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;j=i;i=i+16|0;k=j+12|0;l=j+8|0;n=j+4|0;m=j;q=b+8|0;q=Eb[c[(c[q>>2]|0)+20>>2]&127](q)|0;c[n>>2]=c[d>>2];c[m>>2]=c[e>>2];o=a[q>>0]|0;p=(o&1)==0;e=q+4|0;d=p?e:c[q+8>>2]|0;e=d+((p?(o&255)>>>1:c[e>>2]|0)<<2)|0;c[l>>2]=c[n>>2];c[k>>2]=c[m>>2];b=oq(b,l,k,f,g,h,d,e)|0;i=j;return b|0}function uq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44212)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];vq(a,g+24|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function vq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[c[a>>2]>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(Iu(d,j,a,a+168|0,g,f,0)|0)-a|0;if((d|0)<168)c[b>>2]=((d|0)/12|0|0)%7|0;i=h;return}function wq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44212)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];xq(a,g+16|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function xq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[(c[a>>2]|0)+4>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(Iu(d,j,a,a+288|0,g,f,0)|0)-a|0;if((d|0)<288)c[b>>2]=((d|0)/12|0|0)%12|0;i=h;return}function yq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44212)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];zq(a,g+20|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function zq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,4)|0;if(!(c[f>>2]&4)){if((a|0)<69)a=a+2e3|0;else a=(a+-69|0)>>>0<31?a+1900|0:a;c[b>>2]=a+-1900}i=h;return}function Aq(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=i;i=i+144|0;l=U+132|0;k=U+116|0;N=U+128|0;x=U+124|0;I=U+120|0;O=U+112|0;P=U+108|0;Q=U+104|0;R=U+100|0;S=U+96|0;T=U+92|0;m=U+88|0;n=U+84|0;p=U+80|0;q=U+76|0;r=U+72|0;s=U+68|0;t=U+64|0;u=U+60|0;v=U+56|0;w=U+52|0;y=U+48|0;z=U+44|0;A=U+40|0;B=U+36|0;C=U+32|0;D=U+28|0;E=U+24|0;F=U+20|0;G=U+16|0;H=U+12|0;J=U+8|0;K=U+4|0;L=U;c[g>>2]=0;M=jn(f)|0;c[N>>2]=M;o=0;N=ra(37,N|0,44212)|0;W=o;o=0;if(W&1){W=Na()|0;pm(M)|0;Ya(W|0)}pm(M)|0;do switch(j<<24>>24|0){case 65:case 97:{c[x>>2]=c[e>>2];c[l>>2]=c[x>>2];vq(b,h+24|0,d,l,g,N);V=28;break}case 104:case 66:case 98:{c[I>>2]=c[e>>2];c[l>>2]=c[I>>2];xq(b,h+16|0,d,l,g,N);V=28;break}case 99:{W=b+8|0;W=Eb[c[(c[W>>2]|0)+12>>2]&127](W)|0;c[O>>2]=c[d>>2];c[P>>2]=c[e>>2];j=a[W>>0]|0;e=(j&1)==0;V=W+4|0;W=e?V:c[W+8>>2]|0;V=W+((e?(j&255)>>>1:c[V>>2]|0)<<2)|0;c[k>>2]=c[O>>2];c[l>>2]=c[P>>2];c[d>>2]=oq(b,k,l,f,g,h,W,V)|0;V=28;break}case 101:case 100:{c[Q>>2]=c[e>>2];c[l>>2]=c[Q>>2];Bq(b,h+12|0,d,l,g,N);V=28;break}case 68:{c[R>>2]=c[d>>2];c[S>>2]=c[e>>2];c[k>>2]=c[R>>2];c[l>>2]=c[S>>2];c[d>>2]=oq(b,k,l,f,g,h,44820,44852)|0;V=28;break}case 70:{c[T>>2]=c[d>>2];c[m>>2]=c[e>>2];c[k>>2]=c[T>>2];c[l>>2]=c[m>>2];c[d>>2]=oq(b,k,l,f,g,h,44852,44884)|0;V=28;break}case 72:{c[n>>2]=c[e>>2];c[l>>2]=c[n>>2];Cq(b,h+8|0,d,l,g,N);V=28;break}case 73:{c[p>>2]=c[e>>2];c[l>>2]=c[p>>2];Dq(b,h+8|0,d,l,g,N);V=28;break}case 106:{c[q>>2]=c[e>>2];c[l>>2]=c[q>>2];Eq(b,h+28|0,d,l,g,N);V=28;break}case 109:{c[r>>2]=c[e>>2];c[l>>2]=c[r>>2];Fq(b,h+16|0,d,l,g,N);V=28;break}case 77:{c[s>>2]=c[e>>2];c[l>>2]=c[s>>2];Gq(b,h+4|0,d,l,g,N);V=28;break}case 116:case 110:{c[t>>2]=c[e>>2];c[l>>2]=c[t>>2];Hq(b,d,l,g,N);V=28;break}case 112:{c[u>>2]=c[e>>2];c[l>>2]=c[u>>2];Iq(b,h+8|0,d,l,g,N);V=28;break}case 114:{c[v>>2]=c[d>>2];c[w>>2]=c[e>>2];c[k>>2]=c[v>>2];c[l>>2]=c[w>>2];c[d>>2]=oq(b,k,l,f,g,h,44884,44928)|0;V=28;break}case 82:{c[y>>2]=c[d>>2];c[z>>2]=c[e>>2];c[k>>2]=c[y>>2];c[l>>2]=c[z>>2];c[d>>2]=oq(b,k,l,f,g,h,44928,44948)|0;V=28;break}case 83:{c[A>>2]=c[e>>2];c[l>>2]=c[A>>2];Jq(b,h,d,l,g,N);V=28;break}case 84:{c[B>>2]=c[d>>2];c[C>>2]=c[e>>2];c[k>>2]=c[B>>2];c[l>>2]=c[C>>2];c[d>>2]=oq(b,k,l,f,g,h,44948,44980)|0;V=28;break}case 119:{c[D>>2]=c[e>>2];c[l>>2]=c[D>>2];Kq(b,h+24|0,d,l,g,N);V=28;break}case 120:{W=c[(c[b>>2]|0)+20>>2]|0;c[E>>2]=c[d>>2];c[F>>2]=c[e>>2];c[k>>2]=c[E>>2];c[l>>2]=c[F>>2];k=Db[W&63](b,k,l,f,g,h)|0;break}case 88:{W=b+8|0;W=Eb[c[(c[W>>2]|0)+24>>2]&127](W)|0;c[G>>2]=c[d>>2];c[H>>2]=c[e>>2];j=a[W>>0]|0;e=(j&1)==0;V=W+4|0;W=e?V:c[W+8>>2]|0;V=W+((e?(j&255)>>>1:c[V>>2]|0)<<2)|0;c[k>>2]=c[G>>2];c[l>>2]=c[H>>2];c[d>>2]=oq(b,k,l,f,g,h,W,V)|0;V=28;break}case 121:{c[J>>2]=c[e>>2];c[l>>2]=c[J>>2];zq(b,h+20|0,d,l,g,N);V=28;break}case 89:{c[K>>2]=c[e>>2];c[l>>2]=c[K>>2];Lq(b,h+20|0,d,l,g,N);V=28;break}case 37:{c[L>>2]=c[e>>2];c[l>>2]=c[L>>2];Mq(b,d,l,g,N);V=28;break}default:{c[g>>2]=c[g>>2]|4;V=28}}while(0);if((V|0)==28)k=c[d>>2]|0;i=U;return k|0}function Bq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<31&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<24&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Dq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<12&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Eq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,3)|0;d=c[f>>2]|0;if((a|0)<366&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Fq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<13&(d&4|0)==0)c[b>>2]=a+-1;else c[f>>2]=d|4;i=h;return}function Gq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<60&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Hq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:while(1){a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);g=c[d>>2]|0;do if(g){a=c[g+12>>2]|0;if((a|0)==(c[g+16>>2]|0))a=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(h){h=g;break}else{h=g;break a}else{c[d>>2]=0;i=15;break}}else i=15;while(0);if((i|0)==15){i=0;if(h){h=0;break}else h=0}a=c[b>>2]|0;g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if(!(Gb[c[(c[f>>2]|0)+12>>2]&63](f,8192,a)|0))break;a=c[b>>2]|0;g=a+12|0;h=c[g>>2]|0;if((h|0)==(c[a+16>>2]|0)){Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;continue}else{c[g>>2]=h+4;continue}}a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){a=c[h+12>>2]|0;if((a|0)==(c[h+16>>2]|0))a=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(g)break;else{i=39;break}else{c[d>>2]=0;i=37;break}}else i=37;while(0);if((i|0)==37?g:0)i=39;if((i|0)==39)c[e>>2]=c[e>>2]|2;return}function Iq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+4|0;l=n;m=b+8|0;m=Eb[c[(c[m>>2]|0)+8>>2]&127](m)|0;b=a[m>>0]|0;if(!(b&1))j=(b&255)>>>1;else j=c[m+4>>2]|0;b=a[m+12>>0]|0;if(!(b&1))b=(b&255)>>>1;else b=c[m+16>>2]|0;do if((j|0)!=(0-b|0)){c[l>>2]=c[f>>2];c[k>>2]=c[l>>2];b=Iu(e,k,m,m+24|0,h,g,0)|0;j=c[d>>2]|0;if((b|0)==(m|0)&(j|0)==12){c[d>>2]=0;break}if((j|0)<12&(b-m|0)==12)c[d>>2]=j+12}else c[g>>2]=c[g>>2]|4;while(0);i=n;return}function Jq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<61&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Kq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,1)|0;d=c[f>>2]|0;if((a|0)<7&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Lq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,4)|0;if(!(c[f>>2]&4))c[b>>2]=a+-1900;i=h;return}function Mq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);g=c[d>>2]|0;do if(g){a=c[g+12>>2]|0;if((a|0)==(c[g+16>>2]|0))a=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(h){i=g;j=17;break}else{j=16;break}else{c[d>>2]=0;j=14;break}}else j=14;while(0);if((j|0)==14)if(h)j=16;else{i=0;j=17}a:do if((j|0)==16)c[e>>2]=c[e>>2]|6;else if((j|0)==17){a=c[b>>2]|0;g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((Gb[c[(c[f>>2]|0)+52>>2]&63](f,a,0)|0)<<24>>24!=37){c[e>>2]=c[e>>2]|4;break}a=c[b>>2]|0;g=a+12|0;h=c[g>>2]|0;if((h|0)==(c[a+16>>2]|0)){Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;a=c[b>>2]|0;if(!a)g=1;else j=25}else{c[g>>2]=h+4;j=25}do if((j|0)==25){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}while(0);do if(i){a=c[i+12>>2]|0;if((a|0)==(c[i+16>>2]|0))a=Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(g)break a;else break;else{c[d>>2]=0;j=37;break}}else j=37;while(0);if((j|0)==37?!g:0)break;c[e>>2]=c[e>>2]|2}while(0);return}function Nq(a){a=a|0;Oq(a+8|0);return}function Oq(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;o=0;d=ua(3)|0;e=o;o=0;do if(!(e&1)){if((b|0)!=(d|0)?(o=0,ha(188,c[a>>2]|0),e=o,o=0,e&1):0)break;return}while(0);e=Na(0)|0;ec(e)}function Pq(a){a=a|0;Oq(a+8|0);cj(a);return}function Qq(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0;l=i;i=i+112|0;k=l+4|0;e=l;c[e>>2]=k+100;Rq(b+8|0,k,e,g,h,j);g=c[e>>2]|0;e=c[d>>2]|0;if((k|0)!=(g|0))do{j=a[k>>0]|0;do if(e){f=e+24|0;h=c[f>>2]|0;if((h|0)==(c[e+28>>2]|0)){d=(Lb[c[(c[e>>2]|0)+52>>2]&63](e,j&255)|0)==-1;e=d?0:e;break}else{c[f>>2]=h+1;a[h>>0]=j;break}}else e=0;while(0);k=k+1|0}while((k|0)!=(g|0));i=l;return e|0}function Rq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;a[l>>0]=37;j=l+1|0;a[j>>0]=g;k=l+2|0;a[k>>0]=h;a[l+3>>0]=0;if(h<<24>>24){a[j>>0]=h;a[k>>0]=g}c[e>>2]=d+(Ra(d|0,(c[e>>2]|0)-d|0,l|0,f|0,c[b>>2]|0)|0);i=m;return}function Sq(a){a=a|0;Oq(a+8|0);return}function Tq(a){a=a|0;Oq(a+8|0);cj(a);return}function Uq(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;j=i;i=i+416|0;e=j+8|0;d=j;c[d>>2]=e+400;Vq(a+8|0,e,d,f,g,h);a=c[d>>2]|0;d=c[b>>2]|0;if((e|0)!=(a|0)){f=e;do{e=c[f>>2]|0;if(!d)d=0;else{g=d+24|0;h=c[g>>2]|0;if((h|0)==(c[d+28>>2]|0))e=Lb[c[(c[d>>2]|0)+52>>2]&63](d,e)|0;else{c[g>>2]=h+4;c[h>>2]=e}d=(e|0)==-1?0:d}f=f+4|0}while((f|0)!=(a|0))}i=j;return d|0}function Vq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+128|0;l=h+16|0;m=h+12|0;j=h;k=h+8|0;c[m>>2]=l+100;Rq(a,l,m,e,f,g);f=j;c[f>>2]=0;c[f+4>>2]=0;c[k>>2]=l;f=(c[d>>2]|0)-b>>2;g=qk(c[a>>2]|0)|0;o=0;f=va(18,b|0,k|0,f|0,j|0)|0;a=o;o=0;if(a&1){f=Na()|0;if((g|0)!=0?(o=0,ka(75,g|0)|0,m=o,o=0,m&1):0){m=Na(0)|0;ec(m)}Ya(f|0)}if((g|0)!=0?(o=0,ka(75,g|0)|0,m=o,o=0,m&1):0){m=Na(0)|0;ec(m)}if((f|0)==-1)Rr(58955);else{c[d>>2]=b+(f<<2);i=h;return}}function Wq(a){a=a|0;return}function Xq(a){a=a|0;cj(a);return}function Yq(a){a=a|0;return 127}function Zq(a){a=a|0;return 127}function _q(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function $q(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function ar(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function br(a,b){a=a|0;b=b|0;Hm(a,1,45);return}function cr(a){a=a|0;return 0}function dr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function er(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function fr(a){a=a|0;return}function gr(a){a=a|0;cj(a);return}function hr(a){a=a|0;return 127}function ir(a){a=a|0;return 127}function jr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function kr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function lr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function mr(a,b){a=a|0;b=b|0;Hm(a,1,45);return}function nr(a){a=a|0;return 0}function or(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function pr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function qr(a){a=a|0;return}function rr(a){a=a|0;cj(a);return}function sr(a){a=a|0;return 2147483647}function tr(a){a=a|0;return 2147483647}function ur(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function vr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function wr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function xr(a,b){a=a|0;b=b|0;Vm(a,1,45);return}function yr(a){a=a|0;return 0}function zr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Ar(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Br(a){a=a|0;return}function Cr(a){a=a|0;cj(a);return}function Dr(a){a=a|0;return 2147483647}function Er(a){a=a|0;return 2147483647}function Fr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Gr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Hr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Ir(a,b){a=a|0;b=b|0;Vm(a,1,45);return}function Jr(a){a=a|0;return 0}function Kr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Lr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Mr(a){a=a|0;return}function Nr(a){a=a|0;cj(a);return}function Or(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;B=i;i=i+240|0;z=B+24|0;A=B;b=B+136|0;D=B+16|0;y=B+12|0;C=B+8|0;p=B+134|0;l=B+4|0;x=B+124|0;c[D>>2]=b;E=D+4|0;c[E>>2]=189;m=b+100|0;o=0;k=ka(68,g|0)|0;w=o;o=0;if(!(w&1)){c[C>>2]=k;o=0;b=ra(37,C|0,44220)|0;w=o;o=0;a:do if(!(w&1)?(a[p>>0]=0,c[l>>2]=c[e>>2],n=c[g+4>>2]|0,o=0,c[z>>2]=c[l>>2],n=la(1,d|0,z|0,f|0,C|0,n|0,h|0,p|0,b|0,D|0,y|0,m|0)|0,w=o,o=0,!(w&1)):0){b:do if(n){o=0;va(c[(c[b>>2]|0)+32>>2]|0,b|0,58976,58986,x|0)|0;w=o;o=0;if(w&1){G=10;break a}l=c[y>>2]|0;m=c[D>>2]|0;b=l-m|0;if((b|0)>98){b=Fl(b+2|0)|0;k=b;if(!b){o=0;xa(6);w=o;o=0;if(!(w&1)){b=0;G=13}}else G=13}else{k=0;b=z;G=13}do if((G|0)==13){if(a[p>>0]|0){a[b>>0]=45;b=b+1|0}v=x+10|0;w=x;if(m>>>0>>0){n=x+1|0;f=n+1|0;g=f+1|0;p=g+1|0;q=p+1|0;r=q+1|0;s=r+1|0;t=s+1|0;u=t+1|0;do{l=a[m>>0]|0;do if((a[x>>0]|0)!=l<<24>>24)if((a[n>>0]|0)!=l<<24>>24)if((a[f>>0]|0)!=l<<24>>24)if((a[g>>0]|0)!=l<<24>>24)if((a[p>>0]|0)==l<<24>>24)l=p;else{if((a[q>>0]|0)==l<<24>>24){l=q;break}if((a[r>>0]|0)==l<<24>>24){l=r;break}if((a[s>>0]|0)==l<<24>>24){l=s;break}if((a[t>>0]|0)==l<<24>>24){l=t;break}l=(a[u>>0]|0)==l<<24>>24?u:v}else l=g;else l=f;else l=n;else l=x;while(0);a[b>>0]=a[58976+(l-w)>>0]|0;m=m+1|0;b=b+1|0}while(m>>>0<(c[y>>2]|0)>>>0)}a[b>>0]=0;c[A>>2]=j;if(($k(z,58987,A)|0)!=1?(o=0,ha(190,58991),j=o,o=0,j&1):0)break;if(k)Gl(k);break b}while(0);b=Na()|0;if(!k){l=b;k=D;break a}Gl(k);l=b;k=D;break a}while(0);b=c[d>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}if((b|0)==-1){c[d>>2]=0;b=0;break}else{b=c[d>>2]|0;break}}}else b=0;while(0);k=(b|0)==0;b=c[e>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}if((b|0)==-1){c[e>>2]=0;G=37;break}}if(!k)G=38}else G=37;while(0);if((G|0)==37?k:0)G=38;if((G|0)==38)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(c[C>>2]|0)|0;b=c[D>>2]|0;c[D>>2]=0;if((b|0)!=0?(o=0,ha(c[E>>2]|0,b|0),G=o,o=0,G&1):0){G=Na(0)|0;ec(G)}i=B;return k|0}else G=10;while(0);if((G|0)==10){l=Na()|0;k=D}pm(c[C>>2]|0)|0;b=c[k>>2]|0;c[k>>2]=0;if(!b)F=l;else{k=c[E>>2]|0;G=45}}else{l=Na()|0;c[D>>2]=0;k=189;G=45}if((G|0)==45){o=0;ha(k|0,b|0);G=o;o=0;if(G&1){G=Na(0)|0;ec(G)}else F=l}Ya(F|0);return 0}function Pr(a){a=a|0;return}function Qr(e,f,g,h,j,k,l,m,n,p,q){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;ba=i;i=i+512|0;P=ba+88|0;u=ba+96|0;da=ba+80|0;T=ba+72|0;S=ba+68|0;U=ba+500|0;Q=ba+497|0;V=ba+496|0;Y=ba+56|0;aa=ba+44|0;_=ba+32|0;Z=ba+20|0;$=ba+8|0;R=ba+4|0;X=ba;c[P>>2]=q;c[da>>2]=u;ca=da+4|0;c[ca>>2]=189;c[T>>2]=u;c[S>>2]=u+400;c[Y>>2]=0;c[Y+4>>2]=0;c[Y+8>>2]=0;c[aa>>2]=0;c[aa+4>>2]=0;c[aa+8>>2]=0;c[_>>2]=0;c[_+4>>2]=0;c[_+8>>2]=0;c[Z>>2]=0;c[Z+4>>2]=0;c[Z+8>>2]=0;c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;o=0;qa(1,g|0,h|0,U|0,Q|0,V|0,Y|0,aa|0,_|0,Z|0,R|0);O=o;o=0;a:do if(O&1)m=Na()|0;else{c[p>>2]=c[n>>2];I=m+8|0;J=_+4|0;K=Z+4|0;L=Z+8|0;M=Z+1|0;N=_+8|0;O=_+1|0;z=(j&512|0)!=0;A=aa+8|0;B=aa+1|0;C=aa+4|0;D=$+4|0;E=$+8|0;F=$+1|0;G=U+3|0;H=Y+4|0;y=0;t=0;b:while(1){q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);q=(q|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(q){x=m;break}else{W=235;break b}o=0;g=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=24;break b}if((g|0)!=-1)if(q){x=m;break}else{W=235;break b}else{c[f>>2]=0;W=15;break}}else W=15;while(0);if((W|0)==15){W=0;if(q){W=235;break}else x=0}c:do switch(a[U+y>>0]|0){case 1:{if((y|0)!=3){q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;W=o;o=0;if(W&1){W=24;break b}}else q=d[m>>0]|0;if((q&255)<<24>>24<=-1){W=40;break b}if(!(b[(c[I>>2]|0)+(q<<24>>24<<1)>>1]&8192)){W=40;break b}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;W=o;o=0;if(W&1){W=24;break b}}else{c[m>>2]=g+1;q=d[g>>0]|0}o=0;ia(67,$|0,q&255|0);W=o;o=0;if(W&1){W=24;break b}else{q=x;h=x;W=42}}break}case 0:{if((y|0)!=3){q=x;h=x;W=42}break}case 3:{m=a[_>>0]|0;q=(m&1)==0?(m&255)>>>1:c[J>>2]|0;g=a[Z>>0]|0;h=(g&1)==0?(g&255)>>>1:c[K>>2]|0;if((q|0)!=(0-h|0)){if(!q){q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}m=a[Z>>0]|0}else{q=d[m>>0]|0;m=g}if((q&255)<<24>>24!=(a[((m&1)==0?M:c[L>>2]|0)>>0]|0))break c;q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;a[l>>0]=1;x=a[Z>>0]|0;t=((x&1)==0?(x&255)>>>1:c[K>>2]|0)>>>0>1?Z:t;break c}j=c[e>>2]|0;r=c[j+12>>2]|0;g=c[j+16>>2]|0;q=(r|0)==(g|0);if(!h){if(q){o=0;q=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}m=a[_>>0]|0}else q=d[r>>0]|0;if((q&255)<<24>>24!=(a[((m&1)==0?O:c[N>>2]|0)>>0]|0)){a[l>>0]=1;break c}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;x=a[_>>0]|0;t=((x&1)==0?(x&255)>>>1:c[J>>2]|0)>>>0>1?_:t;break c}if(q){o=0;q=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}g=c[e>>2]|0;m=a[_>>0]|0;j=g;r=c[g+12>>2]|0;g=c[g+16>>2]|0}else q=d[r>>0]|0;h=j+12|0;g=(r|0)==(g|0);if((q&255)<<24>>24==(a[((m&1)==0?O:c[N>>2]|0)>>0]|0)){if(g){o=0;ka(c[(c[j>>2]|0)+40>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[h>>2]=r+1;x=a[_>>0]|0;t=((x&1)==0?(x&255)>>>1:c[J>>2]|0)>>>0>1?_:t;break c}if(g){o=0;q=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}}else q=d[r>>0]|0;if((q&255)<<24>>24!=(a[((a[Z>>0]&1)==0?M:c[L>>2]|0)>>0]|0)){W=104;break b}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;a[l>>0]=1;x=a[Z>>0]|0;t=((x&1)==0?(x&255)>>>1:c[K>>2]|0)>>>0>1?Z:t}break}case 2:{if(!(y>>>0<2|(t|0)!=0)?!(z|(y|0)==2&(a[G>>0]|0)!=0):0){t=0;break c}v=a[aa>>0]|0;q=(v&1)==0;w=c[A>>2]|0;g=q?B:w;s=g;d:do if((y|0)!=0?(d[U+(y+-1)>>0]|0)<2:0){r=q?(v&255)>>>1:c[C>>2]|0;h=g+r|0;j=c[I>>2]|0;e:do if(!r)m=s;else{r=g;m=s;do{q=a[r>>0]|0;if(q<<24>>24<=-1)break e;if(!(b[j+(q<<24>>24<<1)>>1]&8192))break e;r=r+1|0;m=r}while((r|0)!=(h|0))}while(0);h=m-s|0;j=a[$>>0]|0;q=(j&1)==0;j=q?(j&255)>>>1:c[D>>2]|0;if(j>>>0>=h>>>0){q=q?F:c[E>>2]|0;r=q+j|0;if((m|0)!=(s|0)){q=q+(j-h)|0;while(1){if((a[q>>0]|0)!=(a[g>>0]|0)){m=s;break d}q=q+1|0;if((q|0)==(r|0))break;else g=g+1|0}}}else m=s}else m=s;while(0);q=(v&1)==0;q=(q?B:w)+(q?(v&255)>>>1:c[C>>2]|0)|0;f:do if((m|0)!=(q|0)){j=x;h=x;q=m;while(1){m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=21;break b}if((m|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}}else m=0;while(0);g=(m|0)==0;do if(h){if((c[h+12>>2]|0)!=(c[h+16>>2]|0))if(g){m=j;r=h;break}else break f;o=0;m=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){W=21;break b}if((m|0)!=-1)if(g^(j|0)==0){m=j;r=j;break}else break f;else{c[f>>2]=0;m=0;W=131;break}}else{m=j;W=131}while(0);if((W|0)==131){W=0;if(g)break f;else r=0}g=c[e>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=21;break b}}else g=d[h>>0]|0;if((g&255)<<24>>24!=(a[q>>0]|0))break f;g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=21;break b}}else c[h>>2]=j+1;q=q+1|0;g=a[aa>>0]|0;x=(g&1)==0;g=(x?B:c[A>>2]|0)+(x?(g&255)>>>1:c[C>>2]|0)|0;if((q|0)==(g|0)){q=g;break}else{j=m;h=r}}}while(0);if(z?(x=a[aa>>0]|0,w=(x&1)==0,(q|0)!=((w?B:c[A>>2]|0)+(w?(x&255)>>>1:c[C>>2]|0)|0)):0){W=143;break b}break}case 4:{s=a[V>>0]|0;m=x;j=x;q=0;g:while(1){g=c[e>>2]|0;do if(g){if((c[g+12>>2]|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=23;break b}if((g|0)==-1){c[e>>2]=0;g=0;break}else{g=c[e>>2]|0;break}}}else g=0;while(0);h=(g|0)==0;do if(j){if((c[j+12>>2]|0)!=(c[j+16>>2]|0))if(h){r=m;break}else{h=m;break g}o=0;g=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=23;break b}if((g|0)!=-1)if(h^(m|0)==0){r=m;j=m;break}else{h=m;break g}else{c[f>>2]=0;m=0;W=156;break}}else W=156;while(0);if((W|0)==156){W=0;if(h){h=m;break}else{r=m;j=0}}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=23;break b}}else m=d[g>>0]|0;g=m&255;if(g<<24>>24>-1?(b[(c[I>>2]|0)+(m<<24>>24<<1)>>1]&2048)!=0:0){m=c[p>>2]|0;if((m|0)==(c[P>>2]|0)){o=0;wa(12,n|0,p|0,P|0);x=o;o=0;if(x&1){W=23;break b}m=c[p>>2]|0}c[p>>2]=m+1;a[m>>0]=g;q=q+1|0}else{x=a[Y>>0]|0;if(!(g<<24>>24==s<<24>>24&((q|0)!=0?(((x&1)==0?(x&255)>>>1:c[H>>2]|0)|0)!=0:0))){h=r;break}if((u|0)==(c[S>>2]|0)){o=0;wa(13,da|0,T|0,S|0);x=o;o=0;if(x&1){W=23;break b}u=c[T>>2]|0}x=u+4|0;c[T>>2]=x;c[u>>2]=q;u=x;q=0}m=c[e>>2]|0;g=m+12|0;h=c[g>>2]|0;if((h|0)==(c[m+16>>2]|0)){o=0;ka(c[(c[m>>2]|0)+40>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=23;break b}else{m=r;continue}}else{c[g>>2]=h+1;m=r;continue}}if((q|0)!=0?(c[da>>2]|0)!=(u|0):0){if((u|0)==(c[S>>2]|0)){o=0;wa(13,da|0,T|0,S|0);x=o;o=0;if(x&1){W=24;break b}u=c[T>>2]|0}x=u+4|0;c[T>>2]=x;c[u>>2]=q;u=x}r=c[R>>2]|0;if((r|0)>0){q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);q=(q|0)==0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0)){o=0;m=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){W=24;break b}if((m|0)==-1){c[f>>2]=0;W=193;break}}if(!q){W=198;break b}}else W=193;while(0);if((W|0)==193){W=0;if(q){W=198;break b}else h=0}q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else q=d[m>>0]|0;if((q&255)<<24>>24!=(a[Q>>0]|0)){W=198;break b}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;if((r|0)>0){j=h;g=h;s=r;while(1){q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=22;break b}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);m=(q|0)==0;do if(g){if((c[g+12>>2]|0)!=(c[g+16>>2]|0))if(m){q=j;r=g;break}else{W=222;break b}o=0;q=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=22;break b}if((q|0)!=-1)if(m^(j|0)==0){q=j;r=j;break}else{W=222;break b}else{c[f>>2]=0;q=0;W=215;break}}else{q=j;W=215}while(0);if((W|0)==215){W=0;if(m){W=222;break b}else r=0}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=22;break b}}else m=d[g>>0]|0;if((m&255)<<24>>24<=-1){W=222;break b}if(!(b[(c[I>>2]|0)+(m<<24>>24<<1)>>1]&2048)){W=222;break b}if((c[p>>2]|0)==(c[P>>2]|0)?(o=0,wa(12,n|0,p|0,P|0),x=o,o=0,x&1):0){W=22;break b}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=22;break b}}else m=d[g>>0]|0;g=c[p>>2]|0;c[p>>2]=g+1;a[g>>0]=m;m=s;s=s+-1|0;c[R>>2]=s;g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=22;break b}}else c[h>>2]=j+1;if((m|0)<=1)break;else{j=q;g=r}}}}if((c[p>>2]|0)==(c[n>>2]|0)){W=233;break b}break}default:{}}while(0);h:do if((W|0)==42)while(1){W=0;m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=20;break b}if((m|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}}else m=0;while(0);g=(m|0)==0;do if(h){if((c[h+12>>2]|0)!=(c[h+16>>2]|0))if(g){j=q;break}else break h;o=0;m=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){W=20;break b}if((m|0)!=-1)if(g^(q|0)==0){j=q;h=q;break}else break h;else{c[f>>2]=0;q=0;W=54;break}}else W=54;while(0);if((W|0)==54){W=0;if(g)break h;else{j=q;h=0}}q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=20;break b}}else q=d[m>>0]|0;if((q&255)<<24>>24<=-1)break h;if(!(b[(c[I>>2]|0)+(q<<24>>24<<1)>>1]&8192))break h;q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;W=o;o=0;if(W&1){W=20;break b}}else{c[m>>2]=g+1;q=d[g>>0]|0}o=0;ia(67,$|0,q&255|0);W=o;o=0;if(W&1){W=20;break b}else{q=j;W=42}}while(0);y=y+1|0;if(y>>>0>=4){W=235;break}}i:switch(W|0){case 20:{m=Na()|0;break a}case 21:{m=Na()|0;break a}case 22:{m=Na()|0;break a}case 23:{m=Na()|0;break a}case 24:{m=Na()|0;break a}case 40:{c[k>>2]=c[k>>2]|4;m=0;break}case 104:{c[k>>2]=c[k>>2]|4;m=0;break}case 143:{c[k>>2]=c[k>>2]|4;m=0;break}case 198:{c[k>>2]=c[k>>2]|4;m=0;break}case 222:{c[k>>2]=c[k>>2]|4;m=0;break}case 233:{c[k>>2]=c[k>>2]|4;m=0;break}case 235:{j:do if(t){j=t+1|0;r=t+8|0;s=t+4|0;g=1;k:while(1){q=a[t>>0]|0;if(!(q&1))q=(q&255)>>>1;else q=c[s>>2]|0;if(g>>>0>=q>>>0)break j;q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;p=o;o=0;if(p&1){W=19;break k}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);m=(q|0)==0;q=c[f>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;p=o;o=0;if(p&1){W=19;break k}if((q|0)==-1){c[f>>2]=0;W=253;break}}if(!m){W=260;break k}}else W=253;while(0);if((W|0)==253?(W=0,m):0){W=260;break}q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;p=o;o=0;if(p&1){W=19;break}}else q=d[m>>0]|0;if(!(a[t>>0]&1))m=j;else m=c[r>>2]|0;if((q&255)<<24>>24!=(a[m+g>>0]|0)){W=260;break}q=g+1|0;m=c[e>>2]|0;g=m+12|0;h=c[g>>2]|0;if((h|0)==(c[m+16>>2]|0)){o=0;ka(c[(c[m>>2]|0)+40>>2]|0,m|0)|0;p=o;o=0;if(p&1){W=19;break}else{g=q;continue}}else{c[g>>2]=h+1;g=q;continue}}if((W|0)==19){m=Na()|0;break a}else if((W|0)==260){c[k>>2]=c[k>>2]|4;m=0;break i}}while(0);q=c[da>>2]|0;if((q|0)!=(u|0)?(c[X>>2]=0,Ur(Y,q,u,X),(c[X>>2]|0)!=0):0){c[k>>2]=c[k>>2]|4;m=0}else m=1;break}}Im($);Im(Z);Im(_);Im(aa);Im(Y);q=c[da>>2]|0;c[da>>2]=0;if((q|0)!=0?(o=0,ha(c[ca>>2]|0,q|0),da=o,o=0,da&1):0){da=Na(0)|0;ec(da)}i=ba;return m|0}while(0);Im($);Im(Z);Im(_);Im(aa);Im(Y);q=c[da>>2]|0;c[da>>2]=0;if((q|0)!=0?(o=0,ha(c[ca>>2]|0,q|0),da=o,o=0,da&1):0){da=Na(0)|0;ec(da)}Ya(m|0);return 0}function Rr(a){a=a|0;var b=0;b=Ma(8)|0;o=0;ia(90,b|0,a|0);a=o;o=0;if(a&1){a=Na()|0;La(b|0);Ya(a|0)}else lb(b|0,616,80)}function Sr(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;w=i;i=i+144|0;k=w+24|0;b=w+32|0;x=w+16|0;s=w+8|0;p=w+4|0;q=w+28|0;l=w;c[x>>2]=b;A=x+4|0;c[A>>2]=189;m=b+100|0;o=0;v=ka(68,g|0)|0;n=o;o=0;if(!(n&1)){c[p>>2]=v;o=0;n=ra(37,p|0,44220)|0;b=o;o=0;a:do if(!(b&1)?(a[q>>0]=0,t=c[e>>2]|0,c[l>>2]=t,r=c[g+4>>2]|0,u=t,o=0,c[k>>2]=c[l>>2],r=la(1,d|0,k|0,f|0,p|0,r|0,h|0,q|0,n|0,x|0,s|0,m|0)|0,g=o,o=0,!(g&1)):0){if(r){if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}if(a[q>>0]|0){o=0;b=ra(c[(c[n>>2]|0)+28>>2]|0,n|0,45)|0;g=o;o=0;if(g&1)break;o=0;ia(67,j|0,b|0);g=o;o=0;if(g&1)break}o=0;l=ra(c[(c[n>>2]|0)+28>>2]|0,n|0,48)|0;g=o;o=0;if(g&1)break;b=c[x>>2]|0;m=c[s>>2]|0;k=m+-1|0;b:do if(b>>>0>>0)do{if((a[b>>0]|0)!=l<<24>>24)break b;b=b+1|0}while(b>>>0>>0);while(0);o=0;ma(32,j|0,b|0,m|0)|0;j=o;o=0;if(j&1)break}b=c[d>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1)break a;if((b|0)==-1){c[d>>2]=0;b=0;break}else{b=c[d>>2]|0;break}}}else b=0;while(0);k=(b|0)==0;do if(t){if((c[u+12>>2]|0)==(c[u+16>>2]|0)){o=0;b=ka(c[(c[t>>2]|0)+36>>2]|0,u|0)|0;u=o;o=0;if(u&1)break a;if((b|0)==-1){c[e>>2]=0;z=29;break}}if(!k)z=30}else z=29;while(0);if((z|0)==29?k:0)z=30;if((z|0)==30)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(v)|0;b=c[x>>2]|0;c[x>>2]=0;if((b|0)!=0?(o=0,ha(c[A>>2]|0,b|0),A=o,o=0,A&1):0){A=Na(0)|0;ec(A)}i=w;return k|0}while(0);k=Na()|0;pm(v)|0;b=c[x>>2]|0;c[x>>2]=0;if(!b)y=k;else z=36}else{k=Na()|0;c[x>>2]=0;z=36}if((z|0)==36){o=0;ha(c[A>>2]|0,b|0);A=o;o=0;if(A&1){A=Na(0)|0;ec(A)}else y=k}Ya(y|0);return 0}function Tr(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;n=z+100|0;p=z+88|0;q=z+76|0;r=z+64|0;s=z+52|0;t=z+48|0;u=z+36|0;v=z+24|0;w=z+12|0;x=z;do if(b){b=Is(d,43828)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](n,b);x=c[n>>2]|0;a[e>>0]=x;a[e+1>>0]=x>>8;a[e+2>>0]=x>>16;a[e+3>>0]=x>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](p,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[p>>2];c[l+4>>2]=c[p+4>>2];c[l+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Im(p);Cb[c[(c[b>>2]|0)+28>>2]&127](q,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;Im(q);a[f>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[g>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](r,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[r>>2];c[h+4>>2]=c[r+4>>2];c[h+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Im(r);Cb[c[(c[b>>2]|0)+24>>2]&127](s,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;Im(s);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(d,43764)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](t,b);t=c[t>>2]|0;a[e>>0]=t;a[e+1>>0]=t>>8;a[e+2>>0]=t>>16;a[e+3>>0]=t>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](u,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[u>>2];c[l+4>>2]=c[u+4>>2];c[l+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;Im(u);Cb[c[(c[b>>2]|0)+28>>2]&127](v,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[v>>2];c[k+4>>2]=c[v+4>>2];c[k+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Im(v);a[f>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[g>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](w,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[w>>2];c[h+4>>2]=c[w+4>>2];c[h+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;Im(w);Cb[c[(c[b>>2]|0)+24>>2]&127](x,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[x>>2];c[j+4>>2]=c[x+4>>2];c[j+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Im(x);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=y;i=z;return}function Ur(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=a[b>>0]|0;i=b+4|0;h=c[i>>2]|0;a:do if(((g&1)==0?(g&255)>>>1:h)|0){if((d|0)!=(e|0)){g=e+-4|0;if(g>>>0>d>>>0){h=d;do{j=c[h>>2]|0;c[h>>2]=c[g>>2];c[g>>2]=j;h=h+4|0;g=g+-4|0}while(h>>>0>>0)}g=a[b>>0]|0;h=c[i>>2]|0}j=(g&1)==0;i=j?b+1|0:c[b+8>>2]|0;e=e+-4|0;b=i+(j?(g&255)>>>1:h)|0;h=a[i>>0]|0;g=h<<24>>24<1|h<<24>>24==127;b:do if(e>>>0>d>>>0){while(1){if(!g?(h<<24>>24|0)!=(c[d>>2]|0):0)break;i=(b-i|0)>1?i+1|0:i;d=d+4|0;h=a[i>>0]|0;g=h<<24>>24<1|h<<24>>24==127;if(d>>>0>=e>>>0)break b}c[f>>2]=4;break a}while(0);if(!g?((c[e>>2]|0)+-1|0)>>>0>=h<<24>>24>>>0:0)c[f>>2]=4}while(0);return}function Vr(a){a=a|0;return}function Wr(a){a=a|0;cj(a);return}function Xr(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;B=i;i=i+576|0;x=B+424|0;A=B;b=B+24|0;D=B+16|0;y=B+12|0;C=B+8|0;p=B+464|0;l=B+4|0;z=B+468|0;c[D>>2]=b;F=D+4|0;c[F>>2]=189;m=b+400|0;o=0;k=ka(68,g|0)|0;w=o;o=0;if(!(w&1)){c[C>>2]=k;o=0;b=ra(37,C|0,44212)|0;w=o;o=0;a:do if(!(w&1)?(a[p>>0]=0,c[l>>2]=c[e>>2],n=c[g+4>>2]|0,o=0,c[x>>2]=c[l>>2],n=la(2,d|0,x|0,f|0,C|0,n|0,h|0,p|0,b|0,D|0,y|0,m|0)|0,w=o,o=0,!(w&1)):0){b:do if(n){o=0;va(c[(c[b>>2]|0)+48>>2]|0,b|0,59007,59017,x|0)|0;w=o;o=0;if(w&1){G=10;break a}l=c[y>>2]|0;m=c[D>>2]|0;b=l-m|0;if((b|0)>392){b=Fl((b>>2)+2|0)|0;k=b;if(!b){o=0;xa(6);w=o;o=0;if(!(w&1)){b=0;G=13}}else G=13}else{k=0;b=z;G=13}do if((G|0)==13){if(a[p>>0]|0){a[b>>0]=45;b=b+1|0}v=x+40|0;w=x;if(m>>>0>>0){n=x+4|0;f=n+4|0;g=f+4|0;p=g+4|0;q=p+4|0;r=q+4|0;s=r+4|0;t=s+4|0;u=t+4|0;do{l=c[m>>2]|0;do if((c[x>>2]|0)!=(l|0))if((c[n>>2]|0)!=(l|0))if((c[f>>2]|0)!=(l|0))if((c[g>>2]|0)!=(l|0))if((c[p>>2]|0)==(l|0))l=p;else{if((c[q>>2]|0)==(l|0)){l=q;break}if((c[r>>2]|0)==(l|0)){l=r;break}if((c[s>>2]|0)==(l|0)){l=s;break}if((c[t>>2]|0)==(l|0)){l=t;break}l=(c[u>>2]|0)==(l|0)?u:v}else l=g;else l=f;else l=n;else l=x;while(0);a[b>>0]=a[59007+(l-w>>2)>>0]|0;m=m+4|0;b=b+1|0}while(m>>>0<(c[y>>2]|0)>>>0)}a[b>>0]=0;c[A>>2]=j;if(($k(z,58987,A)|0)!=1?(o=0,ha(190,58991),j=o,o=0,j&1):0)break;if(k)Gl(k);break b}while(0);b=Na()|0;if(!k){l=b;k=D;break a}Gl(k);l=b;k=D;break a}while(0);b=c[d>>2]|0;do if(b){k=c[b+12>>2]|0;if((k|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}}else b=c[k>>2]|0;if((b|0)==-1){c[d>>2]=0;l=1;break}else{l=(c[d>>2]|0)==0;break}}else l=1;while(0);b=c[e>>2]|0;do if(b){k=c[b+12>>2]|0;if((k|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}}else b=c[k>>2]|0;if((b|0)!=-1)if(l)break;else{G=40;break}else{c[e>>2]=0;G=38;break}}else G=38;while(0);if((G|0)==38?l:0)G=40;if((G|0)==40)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(c[C>>2]|0)|0;b=c[D>>2]|0;c[D>>2]=0;if((b|0)!=0?(o=0,ha(c[F>>2]|0,b|0),G=o,o=0,G&1):0){G=Na(0)|0;ec(G)}i=B;return k|0}else G=10;while(0);if((G|0)==10){l=Na()|0;k=D}pm(c[C>>2]|0)|0;b=c[k>>2]|0;c[k>>2]=0;if(!b)E=l;else{k=c[F>>2]|0;G=47}}else{l=Na()|0;c[D>>2]=0;k=189;G=47}if((G|0)==47){o=0;ha(k|0,b|0);G=o;o=0;if(G&1){G=Na(0)|0;ec(G)}else E=l}Ya(E|0);return 0}function Yr(b,e,f,g,h,j,k,l,m,n,p){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;Y=i;i=i+512|0;K=Y+96|0;q=Y+104|0;_=Y+88|0;O=Y+80|0;N=Y+76|0;P=Y+504|0;L=Y+72|0;Q=Y+68|0;T=Y+56|0;X=Y+44|0;V=Y+32|0;U=Y+20|0;W=Y+8|0;M=Y+4|0;S=Y;c[K>>2]=p;c[_>>2]=q;Z=_+4|0;c[Z>>2]=189;c[O>>2]=q;c[N>>2]=q+400;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;o=0;qa(2,f|0,g|0,P|0,L|0,Q|0,T|0,X|0,V|0,U|0,M|0);J=o;o=0;a:do if(J&1)f=Na()|0;else{c[n>>2]=c[m>>2];G=V+4|0;H=U+4|0;I=U+8|0;J=V+8|0;z=(h&512|0)!=0;A=X+8|0;B=X+4|0;C=W+4|0;D=W+8|0;E=P+3|0;F=T+4|0;y=0;s=0;b:while(1){p=c[b>>2]|0;do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else p=c[f>>2]|0;if((p|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);f=c[e>>2]|0;do if(f){p=c[f+12>>2]|0;if((p|0)==(c[f+16>>2]|0)){o=0;p=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else p=c[p>>2]|0;if((p|0)!=-1)if(g){x=f;break}else{t=q;R=244;break b}else{c[e>>2]=0;R=16;break}}else R=16;while(0);if((R|0)==16){R=0;if(g){t=q;R=244;break}else x=0}c:do switch(a[P+y>>0]|0){case 1:{if((y|0)!=3){p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;R=o;o=0;if(R&1){R=26;break b}}else p=c[f>>2]|0;o=0;p=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,8192,p|0)|0;R=o;o=0;if(R&1){R=26;break b}if(!p){R=42;break b}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;R=o;o=0;if(R&1){R=26;break b}}else{c[f>>2]=g+4;p=c[g>>2]|0}o=0;ia(92,W|0,p|0);R=o;o=0;if(R&1){R=26;break b}else{p=x;h=x;R=44}}else p=q;break}case 0:{if((y|0)==3)p=q;else{p=x;h=x;R=44}break}case 3:{f=a[V>>0]|0;p=(f&1)==0?(f&255)>>>1:c[G>>2]|0;g=a[U>>0]|0;h=(g&1)==0?(g&255)>>>1:c[H>>2]|0;if((p|0)==(0-h|0))p=q;else{if(!p){p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}f=a[U>>0]|0}else{p=c[f>>2]|0;f=g}if((p|0)!=(c[((f&1)==0?H:c[I>>2]|0)>>2]|0)){p=q;break c}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[f>>2]=g+4;a[k>>0]=1;x=a[U>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[H>>2]|0)>>>0>1?U:s;break c}r=c[b>>2]|0;t=c[r+12>>2]|0;g=c[r+16>>2]|0;p=(t|0)==(g|0);if(!h){if(p){o=0;p=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}f=a[V>>0]|0}else p=c[t>>2]|0;if((p|0)!=(c[((f&1)==0?G:c[J>>2]|0)>>2]|0)){a[k>>0]=1;p=q;break c}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[f>>2]=g+4;x=a[V>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[G>>2]|0)>>>0>1?V:s;break c}if(p){o=0;p=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}g=c[b>>2]|0;f=a[V>>0]|0;r=g;t=c[g+12>>2]|0;g=c[g+16>>2]|0}else p=c[t>>2]|0;h=r+12|0;g=(t|0)==(g|0);if((p|0)==(c[((f&1)==0?G:c[J>>2]|0)>>2]|0)){if(g){o=0;ka(c[(c[r>>2]|0)+40>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[h>>2]=t+4;x=a[V>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[G>>2]|0)>>>0>1?V:s;break c}if(g){o=0;p=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}}else p=c[t>>2]|0;if((p|0)!=(c[((a[U>>0]&1)==0?H:c[I>>2]|0)>>2]|0)){R=107;break b}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[f>>2]=g+4;a[k>>0]=1;x=a[U>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[H>>2]|0)>>>0>1?U:s}break}case 2:{if(!(y>>>0<2|(s|0)!=0)?!(z|(y|0)==2&(a[E>>0]|0)!=0):0){p=q;s=0;break c}h=a[X>>0]|0;g=c[A>>2]|0;f=(h&1)==0?B:g;p=f;d:do if((y|0)!=0?(d[P+(y+-1)>>0]|0)<2:0){w=(h&1)==0;e:do if((f|0)!=((w?B:g)+((w?(h&255)>>>1:c[B>>2]|0)<<2)|0)){h=f;while(1){o=0;f=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,8192,c[h>>2]|0)|0;w=o;o=0;if(w&1){R=23;break b}if(!f)break;h=h+4|0;p=h;f=a[X>>0]|0;g=c[A>>2]|0;w=(f&1)==0;if((h|0)==((w?B:g)+((w?(f&255)>>>1:c[B>>2]|0)<<2)|0)){h=f;break e}}h=a[X>>0]|0;g=c[A>>2]|0}while(0);t=(h&1)==0?B:g;f=t;u=p-f>>2;v=a[W>>0]|0;r=(v&1)==0;v=r?(v&255)>>>1:c[C>>2]|0;if(v>>>0>=u>>>0){r=r?C:c[D>>2]|0;w=r+(v<<2)|0;if(!u)f=p;else{r=r+(v-u<<2)|0;while(1){if((c[r>>2]|0)!=(c[t>>2]|0))break d;r=r+4|0;if((r|0)==(w|0)){f=p;break}else t=t+4|0}}}}else f=p;while(0);p=(h&1)==0;p=(p?B:g)+((p?(h&255)>>>1:c[B>>2]|0)<<2)|0;f:do if((f|0)!=(p|0)){r=x;h=x;p=f;while(1){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=22;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0)){o=0;f=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=22;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g^(r|0)==0){f=r;t=r;break}else break f;else{c[e>>2]=0;f=0;R=136;break}}else{f=r;R=136}while(0);if((R|0)==136){R=0;if(g)break f;else t=0}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=22;break b}}else g=c[h>>2]|0;if((g|0)!=(c[p>>2]|0))break f;g=c[b>>2]|0;h=g+12|0;r=c[h>>2]|0;if((r|0)==(c[g+16>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=22;break b}}else c[h>>2]=r+4;p=p+4|0;g=a[X>>0]|0;x=(g&1)==0;g=(x?B:c[A>>2]|0)+((x?(g&255)>>>1:c[B>>2]|0)<<2)|0;if((p|0)==(g|0)){p=g;break}else{r=f;h=t}}}while(0);if(z?(x=a[X>>0]|0,w=(x&1)==0,(p|0)!=((w?B:c[A>>2]|0)+((w?(x&255)>>>1:c[B>>2]|0)<<2)|0)):0){R=148;break b}else p=q;break}case 4:{v=c[Q>>2]|0;u=x;r=x;p=q;f=0;g:while(1){g=c[b>>2]|0;do if(g){h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=25;break b}}else g=c[h>>2]|0;if((g|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);do if(r){g=c[r+12>>2]|0;if((g|0)==(c[r+16>>2]|0)){o=0;g=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=25;break b}}else g=c[g>>2]|0;if((g|0)!=-1)if(h^(u|0)==0){g=u;t=u;break}else{q=u;break g}else{c[e>>2]=0;g=0;R=162;break}}else{g=u;R=162}while(0);if((R|0)==162){R=0;if(h){q=g;break}else t=0}h=c[b>>2]|0;q=c[h+12>>2]|0;if((q|0)==(c[h+16>>2]|0)){o=0;h=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=25;break b}}else h=c[q>>2]|0;o=0;q=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,2048,h|0)|0;x=o;o=0;if(x&1){R=25;break b}if(q){q=c[n>>2]|0;if((q|0)==(c[K>>2]|0)){o=0;wa(14,m|0,n|0,K|0);x=o;o=0;if(x&1){R=25;break b}q=c[n>>2]|0}c[n>>2]=q+4;c[q>>2]=h;f=f+1|0}else{x=a[T>>0]|0;if(!((h|0)==(v|0)&((f|0)!=0?(((x&1)==0?(x&255)>>>1:c[F>>2]|0)|0)!=0:0))){q=g;break}if((p|0)==(c[N>>2]|0)){o=0;wa(13,_|0,O|0,N|0);x=o;o=0;if(x&1){R=25;break b}p=c[O>>2]|0}x=p+4|0;c[O>>2]=x;c[p>>2]=f;p=x;f=0}h=c[b>>2]|0;q=h+12|0;r=c[q>>2]|0;if((r|0)==(c[h+16>>2]|0)){o=0;ka(c[(c[h>>2]|0)+40>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=25;break b}else{u=g;r=t;continue}}else{c[q>>2]=r+4;u=g;r=t;continue}}if((f|0)!=0?(c[_>>2]|0)!=(p|0):0){if((p|0)==(c[N>>2]|0)){o=0;wa(13,_|0,O|0,N|0);x=o;o=0;if(x&1){R=26;break b}p=c[O>>2]|0}x=p+4|0;c[O>>2]=x;c[p>>2]=f;p=x}t=c[M>>2]|0;if((t|0)>0){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(q){f=c[q+12>>2]|0;if((f|0)==(c[q+16>>2]|0)){o=0;f=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){R=26;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g)break;else{R=206;break b}else{c[e>>2]=0;R=200;break}}else R=200;while(0);if((R|0)==200){R=0;if(g){R=206;break b}else q=0}f=c[b>>2]|0;g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else f=c[g>>2]|0;if((f|0)!=(c[L>>2]|0)){R=206;break b}f=c[b>>2]|0;g=f+12|0;h=c[g>>2]|0;if((h|0)==(c[f+16>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[g>>2]=h+4;if((t|0)>0){r=q;h=q;u=t;while(1){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=24;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0)){o=0;f=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=24;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g^(r|0)==0){f=r;t=r;break}else{R=231;break b}else{c[e>>2]=0;f=0;R=224;break}}else{f=r;R=224}while(0);if((R|0)==224){R=0;if(g){R=231;break b}else t=0}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=24;break b}}else g=c[h>>2]|0;o=0;g=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,2048,g|0)|0;x=o;o=0;if(x&1){R=24;break b}if(!g){R=231;break b}if((c[n>>2]|0)==(c[K>>2]|0)?(o=0,wa(14,m|0,n|0,K|0),x=o,o=0,x&1):0){R=24;break b}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=24;break b}}else g=c[h>>2]|0;h=c[n>>2]|0;c[n>>2]=h+4;c[h>>2]=g;g=u;u=u+-1|0;c[M>>2]=u;h=c[b>>2]|0;q=h+12|0;r=c[q>>2]|0;if((r|0)==(c[h+16>>2]|0)){o=0;ka(c[(c[h>>2]|0)+40>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=24;break b}}else c[q>>2]=r+4;if((g|0)<=1)break;else{r=f;h=t}}}}if((c[n>>2]|0)==(c[m>>2]|0)){R=242;break b}break}default:p=q}while(0);h:do if((R|0)==44)while(1){R=0;f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=21;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0)){o=0;f=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=21;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g^(p|0)==0){r=p;h=p;break}else{p=q;break h}else{c[e>>2]=0;p=0;R=57;break}}else R=57;while(0);if((R|0)==57){R=0;if(g){p=q;break h}else{r=p;h=0}}p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=21;break b}}else p=c[f>>2]|0;o=0;p=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,8192,p|0)|0;x=o;o=0;if(x&1){R=21;break b}if(!p){p=q;break h}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;R=o;o=0;if(R&1){R=21;break b}}else{c[f>>2]=g+4;p=c[g>>2]|0}o=0;ia(92,W|0,p|0);R=o;o=0;if(R&1){R=21;break b}else{p=r;R=44}}while(0);y=y+1|0;if(y>>>0>=4){t=p;R=244;break}else q=p}i:switch(R|0){case 21:{f=Na()|0;break a}case 22:{f=Na()|0;break a}case 23:{f=Na()|0;break a}case 24:{f=Na()|0;break a}case 25:{f=Na()|0;break a}case 26:{f=Na()|0;break a}case 42:{c[j>>2]=c[j>>2]|4;f=0;break}case 107:{c[j>>2]=c[j>>2]|4;f=0;break}case 148:{c[j>>2]=c[j>>2]|4;f=0;break}case 206:{c[j>>2]=c[j>>2]|4;f=0;break}case 231:{c[j>>2]=c[j>>2]|4;f=0;break}case 242:{c[j>>2]=c[j>>2]|4;f=0;break}case 244:{j:do if(s){q=s+4|0;r=s+8|0;h=1;k:while(1){p=a[s>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[q>>2]|0;if(h>>>0>=p>>>0)break j;p=c[b>>2]|0;do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;n=o;o=0;if(n&1){R=20;break k}}else p=c[f>>2]|0;if((p|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);p=c[e>>2]|0;do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;n=o;o=0;if(n&1){R=20;break k}}else p=c[f>>2]|0;if((p|0)!=-1)if(g)break;else{R=271;break k}else{c[e>>2]=0;R=263;break}}else R=263;while(0);if((R|0)==263?(R=0,g):0){R=271;break}p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;n=o;o=0;if(n&1){R=20;break}}else p=c[f>>2]|0;if(!(a[s>>0]&1))f=q;else f=c[r>>2]|0;if((p|0)!=(c[f+(h<<2)>>2]|0)){R=271;break}p=h+1|0;f=c[b>>2]|0;g=f+12|0;h=c[g>>2]|0;if((h|0)==(c[f+16>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;n=o;o=0;if(n&1){R=20;break}else{h=p;continue}}else{c[g>>2]=h+4;h=p;continue}}if((R|0)==20){f=Na()|0;break a}else if((R|0)==271){c[j>>2]=c[j>>2]|4;f=0;break i}}while(0);p=c[_>>2]|0;if((p|0)!=(t|0)?(c[S>>2]=0,Ur(T,p,t,S),(c[S>>2]|0)!=0):0){c[j>>2]=c[j>>2]|4;f=0}else f=1;break}}Wm(W);Wm(U);Wm(V);Wm(X);Im(T);p=c[_>>2]|0;c[_>>2]=0;if((p|0)!=0?(o=0,ha(c[Z>>2]|0,p|0),_=o,o=0,_&1):0){_=Na(0)|0;ec(_)}i=Y;return f|0}while(0);Wm(W);Wm(U);Wm(V);Wm(X);Im(T);p=c[_>>2]|0;c[_>>2]=0;if((p|0)!=0?(o=0,ha(c[Z>>2]|0,p|0),_=o,o=0,_&1):0){_=Na(0)|0;ec(_)}Ya(f|0);return 0}function Zr(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;w=i;i=i+432|0;k=w+424|0;b=w+24|0;y=w+16|0;s=w+8|0;p=w+4|0;q=w+428|0;l=w;c[y>>2]=b;A=y+4|0;c[A>>2]=189;m=b+400|0;o=0;v=ka(68,g|0)|0;n=o;o=0;if(!(n&1)){c[p>>2]=v;o=0;n=ra(37,p|0,44212)|0;b=o;o=0;a:do if(!(b&1)?(a[q>>0]=0,t=c[e>>2]|0,c[l>>2]=t,r=c[g+4>>2]|0,u=t,o=0,c[k>>2]=c[l>>2],r=la(2,d|0,k|0,f|0,p|0,r|0,h|0,q|0,n|0,y|0,s|0,m|0)|0,g=o,o=0,!(g&1)):0){if(r){if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;if(a[q>>0]|0){o=0;b=ra(c[(c[n>>2]|0)+44>>2]|0,n|0,45)|0;g=o;o=0;if(g&1)break;o=0;ia(92,j|0,b|0);g=o;o=0;if(g&1)break}o=0;l=ra(c[(c[n>>2]|0)+44>>2]|0,n|0,48)|0;g=o;o=0;if(g&1)break;b=c[y>>2]|0;m=c[s>>2]|0;k=m+-4|0;b:do if(b>>>0>>0)do{if((c[b>>2]|0)!=(l|0))break b;b=b+4|0}while(b>>>0>>0);while(0);o=0;ma(33,j|0,b|0,m|0)|0;j=o;o=0;if(j&1)break}b=c[d>>2]|0;do if(b){k=c[b+12>>2]|0;if((k|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1)break a}else b=c[k>>2]|0;if((b|0)==-1){c[d>>2]=0;k=1;break}else{k=(c[d>>2]|0)==0;break}}else k=1;while(0);do if(t){b=c[u+12>>2]|0;if((b|0)==(c[u+16>>2]|0)){o=0;b=ka(c[(c[t>>2]|0)+36>>2]|0,u|0)|0;u=o;o=0;if(u&1)break a}else b=c[b>>2]|0;if((b|0)!=-1)if(k)break;else{z=32;break}else{c[e>>2]=0;z=30;break}}else z=30;while(0);if((z|0)==30?k:0)z=32;if((z|0)==32)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(v)|0;b=c[y>>2]|0;c[y>>2]=0;if((b|0)!=0?(o=0,ha(c[A>>2]|0,b|0),A=o,o=0,A&1):0){A=Na(0)|0;ec(A)}i=w;return k|0}while(0);k=Na()|0;pm(v)|0;b=c[y>>2]|0;c[y>>2]=0;if(!b)x=k;else z=38}else{k=Na()|0;c[y>>2]=0;z=38}if((z|0)==38){o=0;ha(c[A>>2]|0,b|0);A=o;o=0;if(A&1){A=Na(0)|0;ec(A)}else x=k}Ya(x|0);return 0}function _r(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;n=z+100|0;p=z+88|0;q=z+76|0;r=z+64|0;s=z+52|0;t=z+48|0;u=z+36|0;v=z+24|0;w=z+12|0;x=z;do if(b){b=Is(d,43956)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](n,b);x=c[n>>2]|0;a[e>>0]=x;a[e+1>>0]=x>>8;a[e+2>>0]=x>>16;a[e+3>>0]=x>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](p,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[p>>2];c[l+4>>2]=c[p+4>>2];c[l+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Wm(p);Cb[c[(c[b>>2]|0)+28>>2]&127](q,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;Wm(q);c[f>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[g>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](r,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[r>>2];c[h+4>>2]=c[r+4>>2];c[h+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Im(r);Cb[c[(c[b>>2]|0)+24>>2]&127](s,b);if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;o=0;ia(93,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;Wm(s);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(d,43892)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](t,b);t=c[t>>2]|0;a[e>>0]=t;a[e+1>>0]=t>>8;a[e+2>>0]=t>>16;a[e+3>>0]=t>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](u,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[u>>2];c[l+4>>2]=c[u+4>>2];c[l+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;Wm(u);Cb[c[(c[b>>2]|0)+28>>2]&127](v,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[v>>2];c[k+4>>2]=c[v+4>>2];c[k+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Wm(v);c[f>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[g>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](w,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[w>>2];c[h+4>>2]=c[w+4>>2];c[h+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;Im(w);Cb[c[(c[b>>2]|0)+24>>2]&127](x,b);if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;o=0;ia(93,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[x>>2];c[j+4>>2]=c[x+4>>2];c[j+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Wm(x);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=y;i=z;return}function $r(a){a=a|0;return}function as(a){a=a|0;cj(a);return}function bs(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=+j;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;D=i;i=i+384|0;v=D+8|0;k=D;m=D+284|0;n=D+72|0;l=D+184|0;F=D+68|0;A=D+80|0;x=D+77|0;B=D+76|0;G=D+56|0;I=D+44|0;H=D+32|0;p=D+28|0;u=D+84|0;z=D+24|0;y=D+20|0;w=D+16|0;c[n>>2]=m;h[v>>3]=j;m=_k(m,100,59018,v)|0;do if(m>>>0>99){o=0;b=ua(3)|0;C=o;o=0;if(!(C&1)?(o=0,h[k>>3]=j,s=va(17,n|0,b|0,59018,k|0)|0,C=o,o=0,!(C&1)):0){b=c[n>>2]|0;if(!b){o=0;xa(6);C=o;o=0;if(C&1){b=0;k=0;C=7;break}b=c[n>>2]|0}l=Fl(s)|0;k=l;if(!l){o=0;xa(6);C=o;o=0;if(C&1)C=7;else{t=0;C=10}}else{t=l;C=10}}else{b=0;k=0;C=7}}else{k=0;b=0;t=l;s=m;C=10}while(0);if((C|0)==10){o=0;l=ka(68,f|0)|0;r=o;o=0;if(r&1)C=7;else{c[F>>2]=l;o=0;r=ra(37,F|0,44220)|0;q=o;o=0;if(!(q&1)?(q=c[n>>2]|0,o=0,va(c[(c[r>>2]|0)+32>>2]|0,r|0,q|0,q+s|0,t|0)|0,q=o,o=0,!(q&1)):0){if(!s)q=0;else q=(a[c[n>>2]>>0]|0)==45;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;o=0;qa(3,e|0,q|0,F|0,A|0,x|0,B|0,G|0,I|0,H|0,p|0);e=o;o=0;if(!(e&1)){p=c[p>>2]|0;if((s|0)>(p|0)){e=a[H>>0]|0;m=a[I>>0]|0;m=(s-p<<1|1)+p+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}else{e=a[H>>0]|0;m=a[I>>0]|0;m=p+2+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}if(m>>>0>100){m=Fl(m)|0;n=m;if(!m){o=0;xa(6);u=o;o=0;if(!(u&1)){m=0;C=26}}else C=26}else{n=0;m=u;C=26}if((C|0)==26){o=0;na(1,m|0,z|0,y|0,c[f+4>>2]|0,t|0,t+s|0,r|0,q|0,A|0,a[x>>0]|0,a[B>>0]|0,G|0,I|0,H|0,p|0);B=o;o=0;if(!(B&1)?(c[w>>2]=c[d>>2],d=c[z>>2]|0,E=c[y>>2]|0,o=0,c[v>>2]=c[w>>2],E=ja(39,v|0,m|0,d|0,E|0,f|0,g|0)|0,d=o,o=0,!(d&1)):0){if(n){Gl(n);l=c[F>>2]|0}Im(H);Im(I);Im(G);pm(l)|0;if(k)Gl(k);if(b)Gl(b);i=D;return E|0}}m=Na()|0;if(n){Gl(n);l=c[F>>2]|0}}else m=Na()|0;Im(H);Im(I);Im(G)}else m=Na()|0;pm(l)|0}}if((C|0)==7)m=Na()|0;if(k)Gl(k);if(b)Gl(b);Ya(m|0);return 0}function cs(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+112|0;q=D+108|0;r=D+96|0;u=D+92|0;v=D+80|0;w=D+68|0;x=D+56|0;y=D+52|0;z=D+40|0;A=D+36|0;B=D+24|0;s=D+12|0;t=D;do if(b){b=Is(e,43828)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](q,b);d=c[q>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](r,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[r>>2];c[l+4>>2]=c[r+4>>2];c[l+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Im(r);p=b;break}}else{Cb[c[e+40>>2]&127](u,b);d=c[u>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](v,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Im(v);p=b;break}}while(0);a[g>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[h>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[p>>2]|0)+20>>2]&127](w,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[w>>2];c[j+4>>2]=c[w+4>>2];c[j+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;Im(w);Cb[c[(c[p>>2]|0)+24>>2]&127](x,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[x>>2];c[k+4>>2]=c[x+4>>2];c[k+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Im(x);C=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(e,43764)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](y,b);d=c[y>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](z,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[z>>2];c[l+4>>2]=c[z+4>>2];c[l+8>>2]=c[z+8>>2];c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;Im(z);n=b;break}}else{Cb[c[e+40>>2]&127](A,b);d=c[A>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](B,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[B>>2];c[l+4>>2]=c[B+4>>2];c[l+8>>2]=c[B+8>>2];c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;Im(B);n=b;break}}while(0);a[g>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[h>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[n>>2]|0)+20>>2]&127](s,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;Im(s);Cb[c[(c[n>>2]|0)+24>>2]&127](t,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[t>>2];c[k+4>>2]=c[t+4>>2];c[k+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;Im(t);C=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=C;i=D;return}function ds(d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c[f>>2]=d;N=q+4|0;O=q+8|0;P=q+1|0;H=p+4|0;I=(g&512|0)==0;J=p+8|0;K=p+1|0;L=j+8|0;M=(r|0)>0;A=o+4|0;B=o+8|0;C=o+1|0;D=r+1|0;F=-2-r-((r|0)<0?~r:-1)|0;G=(r|0)>0;z=0;do{switch(a[l+z>>0]|0){case 0:{c[e>>2]=c[f>>2];break}case 1:{c[e>>2]=c[f>>2];x=Lb[c[(c[j>>2]|0)+28>>2]&63](j,32)|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x;break}case 3:{y=a[q>>0]|0;s=(y&1)==0;if((s?(y&255)>>>1:c[N>>2]|0)|0){x=a[(s?P:c[O>>2]|0)>>0]|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x}break}case 2:{u=a[p>>0]|0;s=(u&1)==0;u=s?(u&255)>>>1:c[H>>2]|0;if(!(I|(u|0)==0)){t=s?K:c[J>>2]|0;v=t+u|0;s=c[f>>2]|0;if(u)do{a[s>>0]=a[t>>0]|0;t=t+1|0;s=s+1|0}while((t|0)!=(v|0));c[f>>2]=s}break}case 4:{s=c[f>>2]|0;h=k?h+1|0:h;w=h;v=c[L>>2]|0;a:do if(h>>>0>>0){t=h;do{u=a[t>>0]|0;if(u<<24>>24<=-1)break a;if(!(b[v+(u<<24>>24<<1)>>1]&2048))break a;t=t+1|0}while(t>>>0>>0)}else t=h;while(0);u=t;if(M){x=-2-u-~(u>>>0>w>>>0?w:u)|0;x=F>>>0>x>>>0?F:x;if(t>>>0>h>>>0&G){u=t;w=r;while(1){u=u+-1|0;y=a[u>>0]|0;v=c[f>>2]|0;c[f>>2]=v+1;a[v>>0]=y;v=(w|0)>1;if(!(u>>>0>h>>>0&v))break;else w=w+-1|0}}else v=G;y=D+x|0;u=t+(x+1)|0;if(v)w=Lb[c[(c[j>>2]|0)+28>>2]&63](j,48)|0;else w=0;t=c[f>>2]|0;c[f>>2]=t+1;if((y|0)>0){v=y;while(1){a[t>>0]=w;t=c[f>>2]|0;c[f>>2]=t+1;if((v|0)>1)v=v+-1|0;else break}}a[t>>0]=m}else u=t;if((u|0)!=(h|0)){y=a[o>>0]|0;t=(y&1)==0;if(!((t?(y&255)>>>1:c[A>>2]|0)|0))t=-1;else t=a[(t?C:c[B>>2]|0)>>0]|0;if((u|0)!=(h|0)){v=0;w=0;while(1){if((w|0)==(t|0)){y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=n;v=v+1|0;y=a[o>>0]|0;t=(y&1)==0;if(v>>>0<(t?(y&255)>>>1:c[A>>2]|0)>>>0){t=a[(t?C:c[B>>2]|0)+v>>0]|0;t=t<<24>>24==127?-1:t<<24>>24;w=0}else{t=w;w=0}}u=u+-1|0;x=a[u>>0]|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x;if((u|0)==(h|0))break;else w=w+1|0}}}else{x=Lb[c[(c[j>>2]|0)+28>>2]&63](j,48)|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x}t=c[f>>2]|0;if((s|0)!=(t|0)?(E=t+-1|0,s>>>0>>0):0){t=E;do{y=a[s>>0]|0;a[s>>0]=a[t>>0]|0;a[t>>0]=y;s=s+1|0;t=t+-1|0}while(s>>>0>>0)}break}default:{}}z=z+1|0}while((z|0)!=4);t=a[q>>0]|0;h=(t&1)==0;t=h?(t&255)>>>1:c[N>>2]|0;if(t>>>0>1){s=h?P:c[O>>2]|0;u=s+t|0;h=c[f>>2]|0;if((t|0)!=1){s=s+1|0;do{a[h>>0]=a[s>>0]|0;h=h+1|0;s=s+1|0}while((s|0)!=(u|0))}c[f>>2]=h}switch(g&176|0){case 32:{c[e>>2]=c[f>>2];break}case 16:break;default:c[e>>2]=d}return}function es(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;z=i;i=i+176|0;r=z+56|0;B=z+52|0;x=z+64|0;u=z+61|0;y=z+60|0;C=z+40|0;E=z+28|0;D=z+16|0;m=z+12|0;q=z+68|0;w=z+8|0;v=z+4|0;s=z;b=jn(f)|0;c[B>>2]=b;o=0;t=ra(37,B|0,44220)|0;p=o;o=0;do if(p&1)F=13;else{n=a[h>>0]|0;j=(n&1)==0;p=h+4|0;if(!((j?(n&255)>>>1:c[p>>2]|0)|0))n=0;else{j=a[(j?h+1|0:c[h+8>>2]|0)>>0]|0;o=0;k=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,45)|0;n=o;o=0;if(n&1){F=13;break}n=j<<24>>24==k<<24>>24}c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;o=0;qa(3,e|0,n|0,B|0,x|0,u|0,y|0,C|0,E|0,D|0,m|0);l=o;o=0;if(!(l&1)){l=a[h>>0]|0;e=c[p>>2]|0;j=(l&1)==0?(l&255)>>>1:e;m=c[m>>2]|0;if((j|0)>(m|0)){G=a[D>>0]|0;k=a[E>>0]|0;j=(j-m<<1|1)+m+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}else{G=a[D>>0]|0;j=a[E>>0]|0;j=m+2+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((j&1)==0?(j&255)>>>1:c[E+4>>2]|0)|0}if(j>>>0>100){j=Fl(j)|0;k=j;if(!j){o=0;xa(6);G=o;o=0;if(!(G&1)){l=a[h>>0]|0;e=c[p>>2]|0;j=0;F=17}}else F=17}else{k=0;j=q;F=17}if((F|0)==17){G=(l&1)==0;h=G?h+1|0:c[h+8>>2]|0;o=0;na(1,j|0,w|0,v|0,c[f+4>>2]|0,h|0,h+(G?(l&255)>>>1:e)|0,t|0,n|0,x|0,a[u>>0]|0,a[y>>0]|0,C|0,E|0,D|0,m|0);G=o;o=0;if(!(G&1)?(c[s>>2]=c[d>>2],G=c[w>>2]|0,A=c[v>>2]|0,o=0,c[r>>2]=c[s>>2],A=ja(39,r|0,j|0,G|0,A|0,f|0,g|0)|0,G=o,o=0,!(G&1)):0){if(k){Gl(k);b=c[B>>2]|0}Im(D);Im(E);Im(C);pm(b)|0;i=z;return A|0}}j=Na()|0;if(k){Gl(k);b=c[B>>2]|0}}else j=Na()|0;Im(D);Im(E);Im(C)}while(0);if((F|0)==13)j=Na()|0;pm(b)|0;Ya(j|0);return 0}function fs(a){a=a|0;return}function gs(a){a=a|0;cj(a);return}function hs(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=+j;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;D=i;i=i+992|0;v=D+8|0;k=D;m=D+888|0;n=D+880|0;l=D+480|0;F=D+76|0;A=D+884|0;x=D+72|0;B=D+68|0;G=D+56|0;I=D+44|0;H=D+32|0;p=D+28|0;u=D+80|0;z=D+24|0;y=D+20|0;w=D+16|0;c[n>>2]=m;h[v>>3]=j;m=_k(m,100,59018,v)|0;do if(m>>>0>99){o=0;b=ua(3)|0;C=o;o=0;if(!(C&1)?(o=0,h[k>>3]=j,s=va(17,n|0,b|0,59018,k|0)|0,C=o,o=0,!(C&1)):0){b=c[n>>2]|0;if(!b){o=0;xa(6);C=o;o=0;if(C&1){b=0;k=0;C=7;break}b=c[n>>2]|0}l=Fl(s<<2)|0;k=l;if(!l){o=0;xa(6);C=o;o=0;if(C&1)C=7;else{t=0;C=10}}else{t=l;C=10}}else{b=0;k=0;C=7}}else{k=0;b=0;t=l;s=m;C=10}while(0);if((C|0)==10){o=0;l=ka(68,f|0)|0;r=o;o=0;if(r&1)C=7;else{c[F>>2]=l;o=0;r=ra(37,F|0,44212)|0;q=o;o=0;if(!(q&1)?(q=c[n>>2]|0,o=0,va(c[(c[r>>2]|0)+48>>2]|0,r|0,q|0,q+s|0,t|0)|0,q=o,o=0,!(q&1)):0){if(!s)q=0;else q=(a[c[n>>2]>>0]|0)==45;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;o=0;qa(4,e|0,q|0,F|0,A|0,x|0,B|0,G|0,I|0,H|0,p|0);e=o;o=0;if(!(e&1)){p=c[p>>2]|0;if((s|0)>(p|0)){e=a[H>>0]|0;m=a[I>>0]|0;m=(s-p<<1|1)+p+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}else{e=a[H>>0]|0;m=a[I>>0]|0;m=p+2+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}if(m>>>0>100){m=Fl(m<<2)|0;n=m;if(!m){o=0;xa(6);u=o;o=0;if(!(u&1)){m=0;C=26}}else C=26}else{n=0;m=u;C=26}if((C|0)==26){o=0;na(2,m|0,z|0,y|0,c[f+4>>2]|0,t|0,t+(s<<2)|0,r|0,q|0,A|0,c[x>>2]|0,c[B>>2]|0,G|0,I|0,H|0,p|0);B=o;o=0;if(!(B&1)?(c[w>>2]=c[d>>2],d=c[z>>2]|0,E=c[y>>2]|0,o=0,c[v>>2]=c[w>>2],E=ja(40,v|0,m|0,d|0,E|0,f|0,g|0)|0,d=o,o=0,!(d&1)):0){if(n){Gl(n);l=c[F>>2]|0}Wm(H);Wm(I);Im(G);pm(l)|0;if(k)Gl(k);if(b)Gl(b);i=D;return E|0}}m=Na()|0;if(n){Gl(n);l=c[F>>2]|0}}else m=Na()|0;Wm(H);Wm(I);Im(G)}else m=Na()|0;pm(l)|0}}if((C|0)==7)m=Na()|0;if(k)Gl(k);if(b)Gl(b);Ya(m|0);return 0}function is(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+112|0;n=B+108|0;p=B+96|0;s=B+92|0;t=B+80|0;u=B+68|0;v=B+56|0;w=B+52|0;x=B+40|0;y=B+36|0;z=B+24|0;q=B+12|0;r=B;do if(b){b=Is(e,43956)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](n,b);d=c[n>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](p,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[p>>2];c[l+4>>2]=c[p+4>>2];c[l+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Wm(p);break}}else{Cb[c[e+40>>2]&127](s,b);d=c[s>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](t,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[t>>2];c[l+4>>2]=c[t+4>>2];c[l+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;Wm(t);break}}while(0);c[g>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[h>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](u,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[u>>2];c[j+4>>2]=c[u+4>>2];c[j+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;Im(u);Cb[c[(c[b>>2]|0)+24>>2]&127](v,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[v>>2];c[k+4>>2]=c[v+4>>2];c[k+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Wm(v);A=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(e,43892)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](w,b);d=c[w>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](x,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[x>>2];c[l+4>>2]=c[x+4>>2];c[l+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Wm(x);break}}else{Cb[c[e+40>>2]&127](y,b);d=c[y>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](z,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[z>>2];c[l+4>>2]=c[z+4>>2];c[l+8>>2]=c[z+8>>2];c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;Wm(z);break}}while(0);c[g>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[h>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](q,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;Im(q);Cb[c[(c[b>>2]|0)+24>>2]&127](r,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[r>>2];c[k+4>>2]=c[r+4>>2];c[k+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Wm(r);A=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=A;i=B;return}function js(b,d,e,f,g,h,i,j,k,l,m,n,o,p,q){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c[e>>2]=b;J=p+4|0;K=p+8|0;C=o+4|0;D=(f&512|0)==0;E=o+8|0;F=(q|0)>0;G=n+4|0;H=n+8|0;I=n+1|0;A=(q|0)>0;z=0;do{switch(a[k+z>>0]|0){case 0:{c[d>>2]=c[e>>2];break}case 1:{c[d>>2]=c[e>>2];x=Lb[c[(c[i>>2]|0)+44>>2]&63](i,32)|0;y=c[e>>2]|0;c[e>>2]=y+4;c[y>>2]=x;break}case 3:{y=a[p>>0]|0;r=(y&1)==0;if((r?(y&255)>>>1:c[J>>2]|0)|0){x=c[(r?J:c[K>>2]|0)>>2]|0;y=c[e>>2]|0;c[e>>2]=y+4;c[y>>2]=x}break}case 2:{v=a[o>>0]|0;r=(v&1)==0;v=r?(v&255)>>>1:c[C>>2]|0;if(!(D|(v|0)==0)){r=r?C:c[E>>2]|0;t=r+(v<<2)|0;u=c[e>>2]|0;if(v){s=u;while(1){c[s>>2]=c[r>>2];r=r+4|0;if((r|0)==(t|0))break;else s=s+4|0}}c[e>>2]=u+(v<<2)}break}case 4:{r=c[e>>2]|0;g=j?g+4|0:g;a:do if(g>>>0>>0){s=g;do{if(!(Gb[c[(c[i>>2]|0)+12>>2]&63](i,2048,c[s>>2]|0)|0))break a;s=s+4|0}while(s>>>0>>0)}else s=g;while(0);if(F){if(s>>>0>g>>>0&A){v=c[e>>2]|0;u=q;while(1){s=s+-4|0;t=v+4|0;c[v>>2]=c[s>>2];w=u+-1|0;u=(u|0)>1;if(s>>>0>g>>>0&u){v=t;u=w}else{v=w;break}}c[e>>2]=t;t=v}else{u=A;t=q}if(u)w=Lb[c[(c[i>>2]|0)+44>>2]&63](i,48)|0;else w=0;x=c[e>>2]|0;u=t+((t|0)<0?~t:-1)|0;if((t|0)>0){v=x;while(1){c[v>>2]=w;if((t|0)>1){v=v+4|0;t=t+-1|0}else break}}c[e>>2]=x+(u+2<<2);c[x+(u+1<<2)>>2]=l}if((s|0)==(g|0)){x=Lb[c[(c[i>>2]|0)+44>>2]&63](i,48)|0;y=c[e>>2]|0;s=y+4|0;c[e>>2]=s;c[y>>2]=x}else{x=a[n>>0]|0;t=(x&1)==0;y=c[G>>2]|0;if(!((t?(x&255)>>>1:y)|0))t=-1;else t=a[(t?I:c[H>>2]|0)>>0]|0;if((s|0)!=(g|0)){w=0;x=0;while(1){u=c[e>>2]|0;if((x|0)==(t|0)){v=u+4|0;c[e>>2]=v;c[u>>2]=m;w=w+1|0;u=a[n>>0]|0;t=(u&1)==0;if(w>>>0<(t?(u&255)>>>1:y)>>>0){t=a[(t?I:c[H>>2]|0)+w>>0]|0;u=v;t=t<<24>>24==127?-1:t<<24>>24;v=0}else{u=v;t=x;v=0}}else v=x;s=s+-4|0;x=c[s>>2]|0;c[e>>2]=u+4;c[u>>2]=x;if((s|0)==(g|0))break;else x=v+1|0}}s=c[e>>2]|0}if((r|0)!=(s|0)?(B=s+-4|0,r>>>0>>0):0){s=B;do{y=c[r>>2]|0;c[r>>2]=c[s>>2];c[s>>2]=y;r=r+4|0;s=s+-4|0}while(r>>>0>>0)}break}default:{}}z=z+1|0}while((z|0)!=4);r=a[p>>0]|0;g=(r&1)==0;r=g?(r&255)>>>1:c[J>>2]|0;if(r>>>0>1){s=g?J:c[K>>2]|0;g=s+4|0;s=s+(r<<2)|0;t=c[e>>2]|0;u=s-g|0;if((r|0)!=1){r=t;while(1){c[r>>2]=c[g>>2];g=g+4|0;if((g|0)==(s|0))break;else r=r+4|0}}c[e>>2]=t+(u>>>2<<2)}switch(f&176|0){case 32:{c[d>>2]=c[e>>2];break}case 16:break;default:c[d>>2]=b}return}function ks(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;z=i;i=i+480|0;q=z+468|0;B=z+464|0;x=z+472|0;u=z+56|0;y=z+52|0;C=z+40|0;E=z+28|0;D=z+16|0;m=z+12|0;p=z+64|0;w=z+8|0;v=z+4|0;r=z;b=jn(f)|0;c[B>>2]=b;o=0;s=ra(37,B|0,44212)|0;t=o;o=0;do if(t&1)F=13;else{n=a[h>>0]|0;j=(n&1)==0;t=h+4|0;if(!((j?(n&255)>>>1:c[t>>2]|0)|0))n=0;else{j=c[(j?t:c[h+8>>2]|0)>>2]|0;o=0;k=ra(c[(c[s>>2]|0)+44>>2]|0,s|0,45)|0;n=o;o=0;if(n&1){F=13;break}n=(j|0)==(k|0)}c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;o=0;qa(4,e|0,n|0,B|0,x|0,u|0,y|0,C|0,E|0,D|0,m|0);l=o;o=0;if(!(l&1)){l=a[h>>0]|0;e=c[t>>2]|0;j=(l&1)==0?(l&255)>>>1:e;m=c[m>>2]|0;if((j|0)>(m|0)){G=a[D>>0]|0;k=a[E>>0]|0;j=(j-m<<1|1)+m+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}else{G=a[D>>0]|0;j=a[E>>0]|0;j=m+2+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((j&1)==0?(j&255)>>>1:c[E+4>>2]|0)|0}if(j>>>0>100){j=Fl(j<<2)|0;k=j;if(!j){o=0;xa(6);G=o;o=0;if(!(G&1)){l=a[h>>0]|0;e=c[t>>2]|0;j=0;F=17}}else F=17}else{k=0;j=p;F=17}if((F|0)==17){G=(l&1)==0;h=G?t:c[h+8>>2]|0;o=0;na(2,j|0,w|0,v|0,c[f+4>>2]|0,h|0,h+((G?(l&255)>>>1:e)<<2)|0,s|0,n|0,x|0,c[u>>2]|0,c[y>>2]|0,C|0,E|0,D|0,m|0);G=o;o=0;if(!(G&1)?(c[r>>2]=c[d>>2],G=c[w>>2]|0,A=c[v>>2]|0,o=0,c[q>>2]=c[r>>2],A=ja(40,q|0,j|0,G|0,A|0,f|0,g|0)|0,G=o,o=0,!(G&1)):0){if(k){Gl(k);b=c[B>>2]|0}Wm(D);Wm(E);Im(C);pm(b)|0;i=z;return A|0}}j=Na()|0;if(k){Gl(k);b=c[B>>2]|0}}else j=Na()|0;Wm(D);Wm(E);Im(C)}while(0);if((F|0)==13)j=Na()|0;pm(b)|0;Ya(j|0);return 0}function ls(a){a=a|0;return}function ms(a){a=a|0;cj(a);return}function ns(b,d,e){b=b|0;d=d|0;e=e|0;b=lk((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,1)|0;return b>>>((b|0)!=(-1|0)&1)|0}function os(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;k=i;i=i+16|0;l=k;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;j=a[h>>0]|0;m=(j&1)==0;d=m?h+1|0:c[h+8>>2]|0;j=m?(j&255)>>>1:c[h+4>>2]|0;h=d+j|0;a:do if((j|0)>0){while(1){o=0;ia(67,l|0,a[d>>0]|0);m=o;o=0;if(m&1)break;d=d+1|0;if(d>>>0>=h>>>0){j=4;break a}}d=Na()|0;j=7}else j=4;while(0);b:do if((j|0)==4){o=0;d=va(19,((e|0)==-1?-1:e<<1)|0,f|0,g|0,((a[l>>0]&1)==0?l+1|0:c[l+8>>2]|0)|0)|0;m=o;o=0;if(m&1){d=Na()|0;j=7;break}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;m=nl(d)|0;h=d+m|0;c:do if((m|0)>0){while(1){o=0;ia(67,b|0,a[d>>0]|0);m=o;o=0;if(m&1)break;d=d+1|0;if(d>>>0>=h>>>0)break c}d=Na()|0;Im(b);break b}while(0);Im(l);i=k;return}while(0);Im(l);Ya(d|0)}function ps(a,b){a=a|0;b=b|0;return}function qs(a){a=a|0;return}function rs(a){a=a|0;cj(a);return}function ss(b,d,e){b=b|0;d=d|0;e=e|0;b=lk((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,1)|0;return b>>>((b|0)!=(-1|0)&1)|0}function ts(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=i;i=i+224|0;p=w+184|0;n=w+192|0;m=w+180|0;q=w+176|0;u=w+168|0;t=w+40|0;s=w+32|0;v=w+28|0;x=w+16|0;l=w+8|0;r=w;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[l+4>>2]=0;c[l>>2]=44696;k=a[h>>0]|0;y=(k&1)==0;j=h+4|0;d=y?j:c[h+8>>2]|0;h=y?(k&255)>>>1:c[j>>2]|0;j=d+(h<<2)|0;k=n+32|0;a:do if((h|0)>0){b:while(1){c[q>>2]=d;o=0;h=ya(c[(c[l>>2]|0)+12>>2]|0,l|0,p|0,d|0,j|0,q|0,n|0,k|0,m|0)|0;y=o;o=0;if(y&1){h=12;break}if((h|0)==2?1:(c[q>>2]|0)==(d|0)){h=5;break}if(n>>>0<(c[m>>2]|0)>>>0){d=n;do{o=0;ia(67,x|0,a[d>>0]|0);y=o;o=0;if(y&1){h=11;break b}d=d+1|0}while(d>>>0<(c[m>>2]|0)>>>0)}d=c[q>>2]|0;if(!((h|0)!=2&d>>>0>>0)){h=9;break a}}if((h|0)==5){o=0;ha(190,58955);o=0;d=Na()|0}else if((h|0)==11)d=Na()|0;else if((h|0)==12)d=Na()|0}else h=9;while(0);c:do if((h|0)==9){o=0;d=va(19,((e|0)==-1?-1:e<<1)|0,f|0,g|0,((a[x>>0]&1)==0?x+1|0:c[x+8>>2]|0)|0)|0;y=o;o=0;if(y&1){d=Na()|0;break}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[r+4>>2]=0;c[r>>2]=44744;y=nl(d)|0;j=d+y|0;k=j;l=t+128|0;d:do if((y|0)>0){e:while(1){c[v>>2]=d;o=0;h=ya(c[(c[r>>2]|0)+16>>2]|0,r|0,u|0,d|0,((k-d|0)>32?d+32|0:j)|0,v|0,t|0,l|0,s|0)|0;y=o;o=0;if(y&1){h=24;break}if((h|0)==2?1:(c[v>>2]|0)==(d|0)){h=18;break}if(t>>>0<(c[s>>2]|0)>>>0){d=t;do{o=0;ia(92,b|0,c[d>>2]|0);y=o;o=0;if(y&1){h=23;break e}d=d+4|0}while(d>>>0<(c[s>>2]|0)>>>0)}d=c[v>>2]|0;if(!((h|0)!=2&d>>>0>>0))break d}if((h|0)==18){o=0;ha(190,58955);o=0;d=Na()|0}else if((h|0)==23)d=Na()|0;else if((h|0)==24)d=Na()|0;Wm(b);break c}while(0);Im(x);i=w;return}while(0);Im(x);Ya(d|0)}function us(a,b){a=a|0;b=b|0;return}function vs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;c[b+4>>2]=d+-1;c[b>>2]=44196;h=b+8|0;o=0;ia(94,h|0,28);g=o;o=0;if(g&1)d=Na()|0;else{g=b+144|0;o=0;wa(5,g|0,58885,1);f=o;o=0;if(f&1)d=Na()|0;else{e=c[h>>2]|0;f=b+12|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}c[495]=0;c[494]=43124;o=0;ia(95,b|0,1976);f=o;o=0;do if(((((((((((((!(f&1)?(c[497]=0,c[496]=43164,o=0,ia(96,b|0,1984),f=o,o=0,!(f&1)):0)?(c[499]=0,c[498]=44236,c[500]=0,a[2004]=0,c[500]=Os()|0,o=0,ia(97,b|0,1992),f=o,o=0,!(f&1)):0)?(c[503]=0,c[502]=44484,o=0,ia(98,b|0,2008),f=o,o=0,!(f&1)):0)?(c[505]=0,c[504]=44552,o=0,ia(99,b|0,2016),f=o,o=0,!(f&1)):0)?(o=0,ia(100,2024,1),f=o,o=0,!(f&1)):0)?(o=0,ia(101,b|0,2024),f=o,o=0,!(f&1)):0)?(c[511]=0,c[510]=44600,o=0,ia(102,b|0,2040),f=o,o=0,!(f&1)):0)?(c[513]=0,c[512]=44648,o=0,ia(103,b|0,2048),f=o,o=0,!(f&1)):0)?(Tt(2056,1),o=0,ia(104,b|0,2056),f=o,o=0,!(f&1)):0)?(Ut(2080,1),o=0,ia(105,b|0,2080),f=o,o=0,!(f&1)):0)?(c[529]=0,c[528]=43204,o=0,ia(106,b|0,2112),f=o,o=0,!(f&1)):0)?(c[531]=0,c[530]=43276,o=0,ia(107,b|0,2120),f=o,o=0,!(f&1)):0)?(c[533]=0,c[532]=43348,o=0,ia(108,b|0,2128),f=o,o=0,!(f&1)):0){c[535]=0;c[534]=43408;o=0;ia(109,b|0,2136);f=o;o=0;if(f&1){i=42;break}c[537]=0;c[536]=43716;o=0;ia(110,b|0,2144);f=o;o=0;if(f&1){i=42;break}c[539]=0;c[538]=43780;o=0;ia(111,b|0,2152);f=o;o=0;if(f&1){i=42;break}c[541]=0;c[540]=43844;o=0;ia(112,b|0,2160);f=o;o=0;if(f&1){i=42;break}c[543]=0;c[542]=43908;o=0;ia(113,b|0,2168);f=o;o=0;if(f&1){i=42;break}c[545]=0;c[544]=43972;o=0;ia(114,b|0,2176);f=o;o=0;if(f&1){i=42;break}c[547]=0;c[546]=44008;o=0;ia(115,b|0,2184);f=o;o=0;if(f&1){i=42;break}c[549]=0;c[548]=44044;o=0;ia(116,b|0,2192);f=o;o=0;if(f&1){i=42;break}c[551]=0;c[550]=44080;o=0;ia(117,b|0,2200);f=o;o=0;if(f&1){i=42;break}c[553]=0;c[552]=43468;c[554]=43516;o=0;ia(118,b|0,2208);f=o;o=0;if(f&1){i=42;break}c[557]=0;c[556]=43560;c[558]=43608;o=0;ia(119,b|0,2224);f=o;o=0;if(f&1){i=42;break}c[561]=0;c[560]=44464;o=0;d=ua(3)|0;f=o;o=0;if(f&1){d=Na()|0;break}c[562]=d;c[560]=43652;o=0;ia(120,b|0,2240);f=o;o=0;if(f&1){i=42;break}c[565]=0;c[564]=44464;o=0;d=ua(3)|0;f=o;o=0;if(f&1){d=Na()|0;break}c[566]=d;c[564]=43684;o=0;ia(121,b|0,2256);i=o;o=0;if(i&1){i=42;break}c[569]=0;c[568]=44116;o=0;ia(122,b|0,2272);i=o;o=0;if(i&1){i=42;break}c[571]=0;c[570]=44156;o=0;ia(123,b|0,2280);i=o;o=0;if(i&1){i=42;break}return}else i=42;while(0);if((i|0)==42)d=Na()|0;Im(g)}Dv(h)}Ya(d|0)}function ws(){var b=0;do if((a[2288]|0)==0?(Ha(2288)|0)!=0:0){o=0;ua(4)|0;b=o;o=0;if(b&1){b=Na()|0;sb(2288);Ya(b|0)}else{c[11246]=44980;Pa(2288);break}}while(0);return c[11246]|0}function xs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;om(b);f=a+8|0;e=c[f>>2]|0;do if((c[a+12>>2]|0)-e>>2>>>0<=d>>>0){o=0;ia(124,f|0,d+1|0);a=o;o=0;if(!(a&1)){e=c[f>>2]|0;break}e=Na()|0;if(b)pm(b)|0;Ya(e|0)}while(0);a=c[e+(d<<2)>>2]|0;if(a){pm(a)|0;e=c[f>>2]|0}c[e+(d<<2)>>2]=b;return}function ys(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=44196;e=a+8|0;f=a+12|0;b=c[e>>2]|0;if((c[f>>2]|0)!=(b|0)){d=0;do{b=c[b+(d<<2)>>2]|0;if(b)pm(b)|0;d=d+1|0;b=c[e>>2]|0}while(d>>>0<(c[f>>2]|0)-b>>2>>>0)}Im(a+144|0);Dv(e);return}function zs(a){a=a|0;ys(a);cj(a);return}function As(a,b){a=a|0;b=b|0;if(Fv(a,b)|0)return c[(c[a+8>>2]|0)+(b<<2)>>2]|0;else{a=Ma(4)|0;qj(a);lb(a|0,640,82)}return 0}function Bs(){vs(2296,1);c[11245]=2296;return 44980}function Cs(){var a=0;a=c[(ws()|0)>>2]|0;c[11247]=a;om(a);return 44988}function Ds(){var b=0;do if((a[2456]|0)==0?(Ha(2456)|0)!=0:0){o=0;ua(5)|0;b=o;o=0;if(b&1){b=Na()|0;sb(2456);Ya(b|0)}else{c[11248]=44988;Pa(2456);break}}while(0);return c[11248]|0}function Es(a){a=a|0;var b=0,d=0;o=0;b=ua(6)|0;d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}else{d=c[b>>2]|0;c[a>>2]=d;om(d);return}}function Fs(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;om(b);return}function Gs(a){a=a|0;pm(c[a>>2]|0)|0;return}function Hs(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;if((c[a>>2]|0)!=-1){c[b>>2]=a;c[b+4>>2]=191;c[b+8>>2]=0;Em(a,b,192)}i=d;return (c[a+4>>2]|0)+-1|0}function Is(a,b){a=a|0;b=b|0;a=c[a>>2]|0;return As(a,Hs(b)|0)|0}function Js(a){a=a|0;cj(a);return}function Ks(a){a=a|0;if(a)Bb[c[(c[a>>2]|0)+4>>2]&255](a);return}function Ls(a){a=a|0;var b=0;b=c[11052]|0;c[11052]=b+1;c[a+4>>2]=b+1;return}function Ms(a){a=a|0;cj(a);return}function Ns(a,c,d){a=a|0;c=c|0;d=d|0;if(d>>>0<128)d=(b[(Os()|0)+(d<<1)>>1]&c)<<16>>16!=0;else d=0;return d|0}function Os(){var a=0,b=0;o=0;a=ua(7)|0;b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else return c[a>>2]|0;return 0}function Ps(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;i=(f-d|0)>>>2;if((d|0)!=(f|0)){h=d;while(1){a=c[h>>2]|0;if(a>>>0<128)a=e[(Os()|0)+(a<<1)>>1]|0;else a=0;b[g>>1]=a;h=h+4|0;if((h|0)==(f|0))break;else g=g+2|0}}return d+(i<<2)|0}function Qs(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;a:do if((e|0)==(f|0))e=f;else while(1){a=c[e>>2]|0;if(a>>>0<128?(b[(Os()|0)+(a<<1)>>1]&d)<<16>>16!=0:0)break a;e=e+4|0;if((e|0)==(f|0)){e=f;break}}while(0);return e|0}function Rs(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;a:do if((e|0)==(f|0))e=f;else while(1){a=c[e>>2]|0;if(a>>>0>=128)break a;if(!((b[(Os()|0)+(a<<1)>>1]&d)<<16>>16))break a;e=e+4|0;if((e|0)==(f|0)){e=f;break}}while(0);return e|0}function Ss(a,b){a=a|0;b=b|0;if(b>>>0<128)b=c[(Ts()|0)+(b<<2)>>2]|0;return b|0}function Ts(){var a=0,b=0;o=0;a=ua(8)|0;b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else return c[a>>2]|0;return 0}function Us(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(d-b|0)>>>2;if((b|0)!=(d|0)){e=b;do{a=c[e>>2]|0;if(a>>>0<128)a=c[(Ts()|0)+(a<<2)>>2]|0;c[e>>2]=a;e=e+4|0}while((e|0)!=(d|0))}return b+(f<<2)|0}function Vs(a,b){a=a|0;b=b|0;if(b>>>0<128)b=c[(Ws()|0)+(b<<2)>>2]|0;return b|0}function Ws(){var a=0,b=0;o=0;a=ua(9)|0;b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else return c[a>>2]|0;return 0}function Xs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(d-b|0)>>>2;if((b|0)!=(d|0)){e=b;do{a=c[e>>2]|0;if(a>>>0<128)a=c[(Ws()|0)+(a<<2)>>2]|0;c[e>>2]=a;e=e+4|0}while((e|0)!=(d|0))}return b+(f<<2)|0}function Ys(a,b){a=a|0;b=b|0;return b<<24>>24|0}function Zs(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;if((d|0)!=(e|0))while(1){c[f>>2]=a[d>>0];d=d+1|0;if((d|0)==(e|0))break;else f=f+4|0}return e|0}function _s(a,b,c){a=a|0;b=b|0;c=c|0;return (b>>>0<128?b&255:c)|0}function $s(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=(e-d|0)>>>2;if((d|0)!=(e|0)){h=d;b=g;while(1){g=c[h>>2]|0;a[b>>0]=g>>>0<128?g&255:f;h=h+4|0;if((h|0)==(e|0))break;else b=b+1|0}}return d+(i<<2)|0}function at(b){b=b|0;var d=0;c[b>>2]=44236;d=c[b+8>>2]|0;if((d|0)!=0?(a[b+12>>0]|0)!=0:0)dj(d);return}function bt(a){a=a|0;at(a);cj(a);return}function ct(a,b){a=a|0;b=b|0;if(b<<24>>24>-1)b=c[(Ts()|0)+((b&255)<<2)>>2]&255;return b|0}function dt(b,d,e){b=b|0;d=d|0;e=e|0;if((d|0)!=(e|0)){b=d;do{d=a[b>>0]|0;if(d<<24>>24>-1)d=c[(Ts()|0)+(d<<24>>24<<2)>>2]&255;a[b>>0]=d;b=b+1|0}while((b|0)!=(e|0))}return e|0}function et(a,b){a=a|0;b=b|0;if(b<<24>>24>-1)b=c[(Ws()|0)+(b<<24>>24<<2)>>2]&255;return b|0}function ft(b,d,e){b=b|0;d=d|0;e=e|0;if((d|0)!=(e|0)){b=d;do{d=a[b>>0]|0;if(d<<24>>24>-1)d=c[(Ws()|0)+(d<<24>>24<<2)>>2]&255;a[b>>0]=d;b=b+1|0}while((b|0)!=(e|0))}return e|0}function gt(a,b){a=a|0;b=b|0;return b|0}function ht(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if((c|0)!=(d|0))while(1){a[e>>0]=a[c>>0]|0;c=c+1|0;if((c|0)==(d|0))break;else e=e+1|0}return d|0}function it(a,b,c){a=a|0;b=b|0;c=c|0;return (b<<24>>24>-1?b:c)|0}function jt(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if((c|0)!=(d|0))while(1){b=a[c>>0]|0;a[f>>0]=b<<24>>24>-1?b:e;c=c+1|0;if((c|0)==(d|0))break;else f=f+1|0}return d|0}function kt(a){a=a|0;cj(a);return}function lt(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;c[f>>2]=d;c[i>>2]=g;return 3}function mt(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;c[f>>2]=d;c[i>>2]=g;return 3}function nt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function ot(a){a=a|0;return 1}function pt(a){a=a|0;return 1}function qt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=d-c|0;return (a>>>0>>0?a:e)|0}function rt(a){a=a|0;return 1}function st(a,b){a=a|0;b=b|0;var d=0;c[a+4>>2]=b+-1;c[a>>2]=44304;o=0;b=ua(3)|0;d=o;o=0;if(d&1){d=Na()|0;Ya(d|0)}else{c[a+8>>2]=b;return}}function tt(a){a=a|0;wu(a);cj(a);return} + function xl(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+624|0;ca=ha+24|0;ea=ha+16|0;da=ha+588|0;Y=ha+576|0;ba=ha;V=ha+536|0;ga=ha+8|0;fa=ha+528|0;M=(e|0)!=0;N=V+40|0;U=N;V=V+39|0;W=ga+4|0;X=Y+12|0;Y=Y+11|0;Z=da;_=X;aa=_-Z|0;O=-2-Z|0;P=_+2|0;Q=ca+288|0;R=da+9|0;S=R;T=da+8|0;m=0;w=f;n=0;f=0;a:while(1){do if((m|0)>-1)if((n|0)>(2147483647-m|0)){c[(ck()|0)>>2]=75;m=-1;break}else{m=n+m|0;break}while(0);n=a[w>>0]|0;if(!(n<<24>>24)){L=245;break}else o=w;b:while(1){switch(n<<24>>24){case 37:{n=o;L=9;break b}case 0:{n=o;break b}default:{}}K=o+1|0;n=a[K>>0]|0;o=K}c:do if((L|0)==9)while(1){L=0;if((a[n+1>>0]|0)!=37)break c;o=o+1|0;n=n+2|0;if((a[n>>0]|0)==37)L=9;else break}while(0);y=o-w|0;if(M?(c[e>>2]&32|0)==0:0)Xk(w,y,e)|0;if((o|0)!=(w|0)){w=n;n=y;continue}r=n+1|0;o=a[r>>0]|0;p=(o<<24>>24)+-48|0;if(p>>>0<10){K=(a[n+2>>0]|0)==36;r=K?n+3|0:r;o=a[r>>0]|0;u=K?p:-1;f=K?1:f}else u=-1;n=o<<24>>24;d:do if((n&-32|0)==32){p=0;while(1){if(!(1<>24)+-32|p;r=r+1|0;o=a[r>>0]|0;n=o<<24>>24;if((n&-32|0)!=32){s=p;n=r;break}}}else{s=0;n=r}while(0);do if(o<<24>>24==42){p=n+1|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[l+(o<<2)>>2]=10;f=1;n=n+3|0;o=c[j+((a[p>>0]|0)+-48<<3)>>2]|0}else{if(f){m=-1;break a}if(!M){x=s;n=p;f=0;K=0;break}f=(c[g>>2]|0)+(4-1)&~(4-1);o=c[f>>2]|0;c[g>>2]=f+4;f=0;n=p}if((o|0)<0){x=s|8192;K=0-o|0}else{x=s;K=o}}else{p=(o<<24>>24)+-48|0;if(p>>>0<10){o=0;do{o=(o*10|0)+p|0;n=n+1|0;p=(a[n>>0]|0)+-48|0}while(p>>>0<10);if((o|0)<0){m=-1;break a}else{x=s;K=o}}else{x=s;K=0}}while(0);e:do if((a[n>>0]|0)==46){p=n+1|0;o=a[p>>0]|0;if(o<<24>>24!=42){r=(o<<24>>24)+-48|0;if(r>>>0<10){n=p;o=0}else{n=p;r=0;break}while(1){o=(o*10|0)+r|0;n=n+1|0;r=(a[n>>0]|0)+-48|0;if(r>>>0>=10){r=o;break e}}}p=n+2|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+3>>0]|0)==36:0){c[l+(o<<2)>>2]=10;n=n+4|0;r=c[j+((a[p>>0]|0)+-48<<3)>>2]|0;break}if(f){m=-1;break a}if(M){n=(c[g>>2]|0)+(4-1)&~(4-1);r=c[n>>2]|0;c[g>>2]=n+4;n=p}else{n=p;r=0}}else r=-1;while(0);t=0;while(1){o=(a[n>>0]|0)+-65|0;if(o>>>0>57){m=-1;break a}p=n+1|0;o=a[56223+(t*58|0)+o>>0]|0;s=o&255;if((s+-1|0)>>>0<8){n=p;t=s}else{J=p;break}}if(!(o<<24>>24)){m=-1;break}p=(u|0)>-1;do if(o<<24>>24==19)if(p){m=-1;break a}else L=52;else{if(p){c[l+(u<<2)>>2]=s;H=j+(u<<3)|0;I=c[H+4>>2]|0;L=ba;c[L>>2]=c[H>>2];c[L+4>>2]=I;L=52;break}if(!M){m=0;break a}Cl(ba,s,g)}while(0);if((L|0)==52?(L=0,!M):0){w=J;n=y;continue}u=a[n>>0]|0;u=(t|0)!=0&(u&15|0)==3?u&-33:u;p=x&-65537;I=(x&8192|0)==0?x:p;f:do switch(u|0){case 110:switch(t|0){case 0:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 1:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 2:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}case 3:{b[c[ba>>2]>>1]=m;w=J;n=y;continue a}case 4:{a[c[ba>>2]>>0]=m;w=J;n=y;continue a}case 6:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 7:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}default:{w=J;n=y;continue a}}case 112:{t=I|8;r=r>>>0>8?r:8;u=120;L=64;break}case 88:case 120:{t=I;L=64;break}case 111:{p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;if((o|0)==0&(p|0)==0)n=N;else{n=N;do{n=n+-1|0;a[n>>0]=o&7|48;o=kw(o|0,p|0,3)|0;p=D}while(!((o|0)==0&(p|0)==0))}if(!(I&8)){o=I;t=0;s=56703;L=77}else{t=U-n+1|0;o=I;r=(r|0)<(t|0)?t:r;t=0;s=56703;L=77}break}case 105:case 100:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)<0){n=hw(0,0,n|0,o|0)|0;o=D;p=ba;c[p>>2]=n;c[p+4>>2]=o;p=1;s=56703;L=76;break f}if(!(I&2048)){s=I&1;p=s;s=(s|0)==0?56703:56705;L=76}else{p=1;s=56704;L=76}break}case 117:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;p=0;s=56703;L=76;break}case 99:{a[V>>0]=c[ba>>2];w=V;o=1;t=0;u=56703;n=N;break}case 109:{n=dk(c[(ck()|0)>>2]|0)|0;L=82;break}case 115:{n=c[ba>>2]|0;n=(n|0)!=0?n:56713;L=82;break}case 67:{c[ga>>2]=c[ba>>2];c[W>>2]=0;c[ba>>2]=ga;r=-1;L=86;break}case 83:{if(!r){El(e,32,K,0,I);n=0;L=98}else L=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=+h[ba>>3];c[ea>>2]=0;h[k>>3]=q;if((c[k+4>>2]|0)>=0)if(!(I&2048)){H=I&1;G=H;H=(H|0)==0?56721:56726}else{G=1;H=56723}else{q=-q;G=1;H=56720}h[k>>3]=q;F=c[k+4>>2]&2146435072;do if(F>>>0<2146435072|(F|0)==2146435072&0<0){v=+wk(q,ea)*2.0;o=v!=0.0;if(o)c[ea>>2]=(c[ea>>2]|0)+-1;C=u|32;if((C|0)==97){w=u&32;y=(w|0)==0?H:H+9|0;x=G|2;n=12-r|0;do if(!(r>>>0>11|(n|0)==0)){q=8.0;do{n=n+-1|0;q=q*16.0}while((n|0)!=0);if((a[y>>0]|0)==45){q=-(q+(-v-q));break}else{q=v+q-q;break}}else q=v;while(0);o=c[ea>>2]|0;n=(o|0)<0?0-o|0:o;n=Dl(n,((n|0)<0)<<31>>31,X)|0;if((n|0)==(X|0)){a[Y>>0]=48;n=Y}a[n+-1>>0]=(o>>31&2)+43;t=n+-2|0;a[t>>0]=u+15;s=(r|0)<1;p=(I&8|0)==0;o=da;while(1){H=~~q;n=o+1|0;a[o>>0]=d[56687+H>>0]|w;q=(q-+(H|0))*16.0;do if((n-Z|0)==1){if(p&(s&q==0.0))break;a[n>>0]=46;n=o+2|0}while(0);if(!(q!=0.0))break;else o=n}r=(r|0)!=0&(O+n|0)<(r|0)?P+r-t|0:aa-t+n|0;p=r+x|0;El(e,32,K,p,I);if(!(c[e>>2]&32))Xk(y,x,e)|0;El(e,48,K,p,I^65536);n=n-Z|0;if(!(c[e>>2]&32))Xk(da,n,e)|0;o=_-t|0;El(e,48,r-(n+o)|0,0,0);if(!(c[e>>2]&32))Xk(t,o,e)|0;El(e,32,K,p,I^8192);n=(p|0)<(K|0)?K:p;break}n=(r|0)<0?6:r;if(o){o=(c[ea>>2]|0)+-28|0;c[ea>>2]=o;q=v*268435456.0}else{q=v;o=c[ea>>2]|0}F=(o|0)<0?ca:Q;E=F;o=F;do{B=~~q>>>0;c[o>>2]=B;o=o+4|0;q=(q-+(B>>>0))*1.0e9}while(q!=0.0);p=o;o=c[ea>>2]|0;if((o|0)>0){s=F;while(1){t=(o|0)>29?29:o;r=p+-4|0;do if(r>>>0>>0)r=s;else{o=0;do{B=mw(c[r>>2]|0,0,t|0)|0;B=jw(B|0,D|0,o|0,0)|0;o=D;A=vw(B|0,o|0,1e9,0)|0;c[r>>2]=A;o=uw(B|0,o|0,1e9,0)|0;r=r+-4|0}while(r>>>0>=s>>>0);if(!o){r=s;break}r=s+-4|0;c[r>>2]=o}while(0);while(1){if(p>>>0<=r>>>0)break;o=p+-4|0;if(!(c[o>>2]|0))p=o;else break}o=(c[ea>>2]|0)-t|0;c[ea>>2]=o;if((o|0)>0)s=r;else break}}else r=F;if((o|0)<0){y=((n+25|0)/9|0)+1|0;z=(C|0)==102;w=r;while(1){x=0-o|0;x=(x|0)>9?9:x;do if(w>>>0

>>0){o=(1<>>x;r=0;t=w;do{B=c[t>>2]|0;c[t>>2]=(B>>>x)+r;r=$(B&o,s)|0;t=t+4|0}while(t>>>0

>>0);o=(c[w>>2]|0)==0?w+4|0:w;if(!r){r=o;break}c[p>>2]=r;r=o;p=p+4|0}else r=(c[w>>2]|0)==0?w+4|0:w;while(0);o=z?F:r;p=(p-o>>2|0)>(y|0)?o+(y<<2)|0:p;o=(c[ea>>2]|0)+x|0;c[ea>>2]=o;if((o|0)>=0){w=r;break}else w=r}}else w=r;do if(w>>>0

>>0){o=(E-w>>2)*9|0;s=c[w>>2]|0;if(s>>>0<10)break;else r=10;do{r=r*10|0;o=o+1|0}while(s>>>0>=r>>>0)}else o=0;while(0);A=(C|0)==103;B=(n|0)!=0;r=n-((C|0)!=102?o:0)+((B&A)<<31>>31)|0;if((r|0)<(((p-E>>2)*9|0)+-9|0)){t=r+9216|0;z=(t|0)/9|0;r=F+(z+-1023<<2)|0;t=((t|0)%9|0)+1|0;if((t|0)<9){s=10;do{s=s*10|0;t=t+1|0}while((t|0)!=9)}else s=10;x=c[r>>2]|0;y=(x>>>0)%(s>>>0)|0;if((y|0)==0?(F+(z+-1022<<2)|0)==(p|0):0)s=w;else L=163;do if((L|0)==163){L=0;v=(((x>>>0)/(s>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;t=(s|0)/2|0;do if(y>>>0>>0)q=.5;else{if((y|0)==(t|0)?(F+(z+-1022<<2)|0)==(p|0):0){q=1.0;break}q=1.5}while(0);do if(G){if((a[H>>0]|0)!=45)break;v=-v;q=-q}while(0);t=x-y|0;c[r>>2]=t;if(!(v+q!=v)){s=w;break}C=t+s|0;c[r>>2]=C;if(C>>>0>999999999){o=w;while(1){s=r+-4|0;c[r>>2]=0;if(s>>>0>>0){o=o+-4|0;c[o>>2]=0}C=(c[s>>2]|0)+1|0;c[s>>2]=C;if(C>>>0>999999999)r=s;else{w=o;r=s;break}}}o=(E-w>>2)*9|0;t=c[w>>2]|0;if(t>>>0<10){s=w;break}else s=10;do{s=s*10|0;o=o+1|0}while(t>>>0>=s>>>0);s=w}while(0);C=r+4|0;w=s;p=p>>>0>C>>>0?C:p}y=0-o|0;while(1){if(p>>>0<=w>>>0){z=0;C=p;break}r=p+-4|0;if(!(c[r>>2]|0))p=r;else{z=1;C=p;break}}do if(A){n=(B&1^1)+n|0;if((n|0)>(o|0)&(o|0)>-5){u=u+-1|0;n=n+-1-o|0}else{u=u+-2|0;n=n+-1|0}p=I&8;if(p)break;do if(z){p=c[C+-4>>2]|0;if(!p){r=9;break}if(!((p>>>0)%10|0)){s=10;r=0}else{r=0;break}do{s=s*10|0;r=r+1|0}while(((p>>>0)%(s>>>0)|0|0)==0)}else r=9;while(0);p=((C-E>>2)*9|0)+-9|0;if((u|32|0)==102){p=p-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}else{p=p+o-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}}else p=I&8;while(0);x=n|p;s=(x|0)!=0&1;t=(u|32|0)==102;if(t){o=(o|0)>0?o:0;u=0}else{r=(o|0)<0?y:o;r=Dl(r,((r|0)<0)<<31>>31,X)|0;if((_-r|0)<2)do{r=r+-1|0;a[r>>0]=48}while((_-r|0)<2);a[r+-1>>0]=(o>>31&2)+43;E=r+-2|0;a[E>>0]=u;o=_-E|0;u=E}y=G+1+n+s+o|0;El(e,32,K,y,I);if(!(c[e>>2]&32))Xk(H,G,e)|0;El(e,48,K,y,I^65536);do if(t){r=w>>>0>F>>>0?F:w;o=r;do{p=Dl(c[o>>2]|0,0,R)|0;do if((o|0)==(r|0)){if((p|0)!=(R|0))break;a[T>>0]=48;p=T}else{if(p>>>0<=da>>>0)break;do{p=p+-1|0;a[p>>0]=48}while(p>>>0>da>>>0)}while(0);if(!(c[e>>2]&32))Xk(p,S-p|0,e)|0;o=o+4|0}while(o>>>0<=F>>>0);do if(x){if(c[e>>2]&32)break;Xk(56755,1,e)|0}while(0);if((n|0)>0&o>>>0>>0){p=o;while(1){o=Dl(c[p>>2]|0,0,R)|0;if(o>>>0>da>>>0)do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0);if(!(c[e>>2]&32))Xk(o,(n|0)>9?9:n,e)|0;p=p+4|0;o=n+-9|0;if(!((n|0)>9&p>>>0>>0)){n=o;break}else n=o}}El(e,48,n+9|0,9,0)}else{t=z?C:w+4|0;if((n|0)>-1){s=(p|0)==0;r=w;do{o=Dl(c[r>>2]|0,0,R)|0;if((o|0)==(R|0)){a[T>>0]=48;o=T}do if((r|0)==(w|0)){p=o+1|0;if(!(c[e>>2]&32))Xk(o,1,e)|0;if(s&(n|0)<1){o=p;break}if(c[e>>2]&32){o=p;break}Xk(56755,1,e)|0;o=p}else{if(o>>>0<=da>>>0)break;do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0)}while(0);p=S-o|0;if(!(c[e>>2]&32))Xk(o,(n|0)>(p|0)?p:n,e)|0;n=n-p|0;r=r+4|0}while(r>>>0>>0&(n|0)>-1)}El(e,48,n+18|0,18,0);if(c[e>>2]&32)break;Xk(u,_-u|0,e)|0}while(0);El(e,32,K,y,I^8192);n=(y|0)<(K|0)?K:y}else{t=(u&32|0)!=0;s=q!=q|0.0!=0.0;o=s?0:G;r=o+3|0;El(e,32,K,r,p);n=c[e>>2]|0;if(!(n&32)){Xk(H,o,e)|0;n=c[e>>2]|0}if(!(n&32))Xk(s?(t?56747:56751):t?56739:56743,3,e)|0;El(e,32,K,r,I^8192);n=(r|0)<(K|0)?K:r}while(0);w=J;continue a}default:{p=I;o=r;t=0;u=56703;n=N}}while(0);g:do if((L|0)==64){p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;s=u&32;if(!((o|0)==0&(p|0)==0)){n=N;do{n=n+-1|0;a[n>>0]=d[56687+(o&15)>>0]|s;o=kw(o|0,p|0,4)|0;p=D}while(!((o|0)==0&(p|0)==0));L=ba;if((t&8|0)==0|(c[L>>2]|0)==0&(c[L+4>>2]|0)==0){o=t;t=0;s=56703;L=77}else{o=t;t=2;s=56703+(u>>4)|0;L=77}}else{n=N;o=t;t=0;s=56703;L=77}}else if((L|0)==76){n=Dl(n,o,N)|0;o=I;t=p;L=77}else if((L|0)==82){L=0;I=jl(n,0,r)|0;H=(I|0)==0;w=n;o=H?r:I-n|0;t=0;u=56703;n=H?n+r|0:I}else if((L|0)==86){L=0;o=0;n=0;s=c[ba>>2]|0;while(1){p=c[s>>2]|0;if(!p)break;n=Ik(fa,p)|0;if((n|0)<0|n>>>0>(r-o|0)>>>0)break;o=n+o|0;if(r>>>0>o>>>0)s=s+4|0;else break}if((n|0)<0){m=-1;break a}El(e,32,K,o,I);if(!o){n=0;L=98}else{p=0;r=c[ba>>2]|0;while(1){n=c[r>>2]|0;if(!n){n=o;L=98;break g}n=Ik(fa,n)|0;p=n+p|0;if((p|0)>(o|0)){n=o;L=98;break g}if(!(c[e>>2]&32))Xk(fa,n,e)|0;if(p>>>0>=o>>>0){n=o;L=98;break}else r=r+4|0}}}while(0);if((L|0)==98){L=0;El(e,32,K,n,I^8192);w=J;n=(K|0)>(n|0)?K:n;continue}if((L|0)==77){L=0;p=(r|0)>-1?o&-65537:o;o=ba;o=(c[o>>2]|0)!=0|(c[o+4>>2]|0)!=0;if((r|0)!=0|o){o=(o&1^1)+(U-n)|0;w=n;o=(r|0)>(o|0)?r:o;u=s;n=N}else{w=N;o=0;u=s;n=N}}s=n-w|0;o=(o|0)<(s|0)?s:o;r=t+o|0;n=(K|0)<(r|0)?r:K;El(e,32,n,r,p);if(!(c[e>>2]&32))Xk(u,t,e)|0;El(e,48,n,r,p^65536);El(e,48,o,s,0);if(!(c[e>>2]&32))Xk(w,s,e)|0;El(e,32,n,r,p^8192);w=J}h:do if((L|0)==245)if(!e)if(f){m=1;while(1){f=c[l+(m<<2)>>2]|0;if(!f)break;Cl(j+(m<<3)|0,f,g);m=m+1|0;if((m|0)>=10){m=1;break h}}if((m|0)<10)while(1){if(c[l+(m<<2)>>2]|0){m=-1;break h}m=m+1|0;if((m|0)>=10){m=1;break}}else m=1}else m=0;while(0);i=ha;return m|0}function yl(a,b,c){a=a|0;b=b|0;c=c|0;return Rk(a,b,c)|0}function zl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+112|0;h=j;f=h;g=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;gk(h,0);e=+ek(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b)c[b>>2]=(d|0)!=0?a+d|0:a;i=j;return +e}function Al(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+112|0;j=k;c[j>>2]=0;g=j+4|0;c[g>>2]=a;c[j+44>>2]=a;h=j+8|0;c[h>>2]=(a|0)<0?-1:a+2147483647|0;c[j+76>>2]=-1;gk(j,0);e=fk(j,d,1,e,f)|0;if(b)c[b>>2]=a+((c[g>>2]|0)+(c[j+108>>2]|0)-(c[h>>2]|0));i=k;return e|0}function Bl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;lw(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function Cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Dl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=vw(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=uw(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=D}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function El(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+256|0;h=j;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;iw(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){Xk(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;Xk(h,f,a)|0}while(0);i=j;return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[10218]|0;d=i>>>a;if(d&3){a=(d&1^1)+a|0;e=a<<1;d=40912+(e<<2)|0;e=40912+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[10222]|0)>>>0)Ga();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else Ga()}else c[10218]=i&~(1<>2]=M|3;M=f+(M|4)|0;c[M>>2]=c[M>>2]|1;M=g;return M|0}h=c[10220]|0;if(o>>>0>h>>>0){if(d){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;a=e>>>1&1;a=(f|j|g|d|a)+(e>>>a)|0;e=a<<1;d=40912+(e<<2)|0;e=40912+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[10222]|0)>>>0)Ga();b=f+12|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;c[e>>2]=f;k=c[10220]|0;break}else Ga()}else{c[10218]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+M>>2]=h;if(k){f=c[10223]|0;d=k>>>3;b=d<<1;e=40912+(b<<2)|0;a=c[10218]|0;d=1<>2]|0;if(b>>>0<(c[10222]|0)>>>0)Ga();else{l=a;m=b}}else{c[10218]=a|d;l=40912+(b+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[10220]=h;c[10223]=i;M=j;return M|0}a=c[10219]|0;if(a){d=(a&0-a)+-1|0;L=d>>>12&16;d=d>>>L;K=d>>>5&8;d=d>>>K;M=d>>>2&4;d=d>>>M;a=d>>>1&2;d=d>>>a;e=d>>>1&1;e=c[41176+((K|L|M|a|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;a=e;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b){j=d;break}}a=(c[b+4>>2]&-8)-o|0;M=a>>>0>>0;d=M?a:d;a=b;e=M?b:e}g=c[10222]|0;if(e>>>0>>0)Ga();i=e+o|0;if(e>>>0>=i>>>0)Ga();h=c[e+24>>2]|0;d=c[e+12>>2]|0;do if((d|0)==(e|0)){a=e+20|0;b=c[a>>2]|0;if(!b){a=e+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;f=c[d>>2]|0;if(f){b=f;a=d;continue}d=b+16|0;f=c[d>>2]|0;if(!f)break;else{b=f;a=d}}if(a>>>0>>0)Ga();else{c[a>>2]=0;n=b;break}}else{f=c[e+8>>2]|0;if(f>>>0>>0)Ga();b=f+12|0;if((c[b>>2]|0)!=(e|0))Ga();a=d+8|0;if((c[a>>2]|0)==(e|0)){c[b>>2]=d;c[a>>2]=f;n=d;break}else Ga()}while(0);do if(h){b=c[e+28>>2]|0;a=41176+(b<<2)|0;if((e|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=h+16|0;if((c[b>>2]|0)==(e|0))c[b>>2]=n;else c[h+20>>2]=n;if(!n)break}a=c[10222]|0;if(n>>>0>>0)Ga();c[n+24>>2]=h;b=c[e+16>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[e+20>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){M=j+o|0;c[e+4>>2]=M|3;M=e+(M+4)|0;c[M>>2]=c[M>>2]|1}else{c[e+4>>2]=o|3;c[e+(o|4)>>2]=j|1;c[e+(j+o)>>2]=j;b=c[10220]|0;if(b){g=c[10223]|0;d=b>>>3;b=d<<1;f=40912+(b<<2)|0;a=c[10218]|0;d=1<>2]|0;if(a>>>0<(c[10222]|0)>>>0)Ga();else{p=b;q=a}}else{c[10218]=a|d;p=40912+(b+2<<2)|0;q=f}c[p>>2]=g;c[q+12>>2]=g;c[g+8>>2]=q;c[g+12>>2]=f}c[10220]=j;c[10223]=i}M=e+8|0;return M|0}else q=o}else q=o}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;l=c[10219]|0;if(l){d=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)k=31;else{q=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;k=14-(p|q|k)+(v<>>15)|0;k=m>>>(k+7|0)&1|k<<1}else k=0;a=c[41176+(k<<2)>>2]|0;a:do if(!a){f=0;a=0;v=86}else{h=d;f=0;i=m<<((k|0)==31?0:25-(k>>>1)|0);j=a;a=0;while(1){g=c[j+4>>2]&-8;d=g-m|0;if(d>>>0>>0)if((g|0)==(m|0)){g=j;a=j;v=90;break a}else a=j;else d=h;v=c[j+20>>2]|0;j=c[j+16+(i>>>31<<2)>>2]|0;f=(v|0)==0|(v|0)==(j|0)?f:v;if(!j){v=86;break}else{h=d;i=i<<1}}}while(0);if((v|0)==86){if((f|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;l=a>>>5&8;a=a>>>l;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;f=a>>>1&1;f=c[41176+((l|n|p|q|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;j=a}else{g=f;v=90}}if((v|0)==90)while(1){v=0;q=(c[g+4>>2]&-8)-m|0;f=q>>>0>>0;d=f?q:d;a=f?g:a;f=c[g+16>>2]|0;if(f){g=f;v=90;continue}g=c[g+20>>2]|0;if(!g){i=d;j=a;break}else v=90}if((j|0)!=0?i>>>0<((c[10220]|0)-m|0)>>>0:0){f=c[10222]|0;if(j>>>0>>0)Ga();h=j+m|0;if(j>>>0>=h>>>0)Ga();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){o=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)Ga();else{c[a>>2]=0;o=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)Ga();b=e+12|0;if((c[b>>2]|0)!=(j|0))Ga();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;o=d;break}else Ga()}while(0);do if(g){b=c[j+28>>2]|0;a=41176+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=o;if(!o){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=g+16|0;if((c[b>>2]|0)==(j|0))c[b>>2]=o;else c[g+20>>2]=o;if(!o)break}a=c[10222]|0;if(o>>>0>>0)Ga();c[o+24>>2]=g;b=c[j+16>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[o+16>>2]=b;c[b+24>>2]=o;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[o+20>>2]=b;c[b+24>>2]=o;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=m|3;c[j+(m|4)>>2]=i|1;c[j+(i+m)>>2]=i;b=i>>>3;if(i>>>0<256){a=b<<1;e=40912+(a<<2)|0;d=c[10218]|0;b=1<>2]|0;if(a>>>0<(c[10222]|0)>>>0)Ga();else{s=b;t=a}}else{c[10218]=d|b;s=40912+(a+2<<2)|0;t=e}c[s>>2]=h;c[t+12>>2]=h;c[j+(m+8)>>2]=t;c[j+(m+12)>>2]=e;break}b=i>>>8;if(b)if(i>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;b=41176+(e<<2)|0;c[j+(m+28)>>2]=e;c[j+(m+20)>>2]=0;c[j+(m+16)>>2]=0;a=c[10219]|0;d=1<>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(i|0)){y=d;break c}else{e=e<<1;b=d}}if(a>>>0<(c[10222]|0)>>>0)Ga();else{c[a>>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break b}}else y=b;while(0);b=y+8|0;a=c[b>>2]|0;M=c[10222]|0;if(a>>>0>=M>>>0&y>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[j+(m+8)>>2]=a;c[j+(m+12)>>2]=y;c[j+(m+24)>>2]=0;break}else Ga()}else{M=i+m|0;c[j+4>>2]=M|3;M=j+(M+4)|0;c[M>>2]=c[M>>2]|1}while(0);M=j+8|0;return M|0}else q=m}else q=m}else q=-1;while(0);d=c[10220]|0;if(d>>>0>=q>>>0){b=d-q|0;a=c[10223]|0;if(b>>>0>15){c[10223]=a+q;c[10220]=b;c[a+(q+4)>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=q|3}else{c[10220]=0;c[10223]=0;c[a+4>>2]=d|3;M=a+(d+4)|0;c[M>>2]=c[M>>2]|1}M=a+8|0;return M|0}a=c[10221]|0;if(a>>>0>q>>>0){L=a-q|0;c[10221]=L;M=c[10224]|0;c[10224]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}do if(!(c[10336]|0)){a=_a(30)|0;if(!(a+-1&a)){c[10338]=a;c[10337]=a;c[10339]=-1;c[10340]=-1;c[10341]=0;c[10329]=0;c[10336]=(qb(0)|0)&-16^1431655768;break}else Ga()}while(0);j=q+48|0;i=c[10338]|0;k=q+47|0;h=i+k|0;i=0-i|0;l=h&i;if(l>>>0<=q>>>0){M=0;return M|0}a=c[10328]|0;if((a|0)!=0?(t=c[10326]|0,y=t+l|0,y>>>0<=t>>>0|y>>>0>a>>>0):0){M=0;return M|0}d:do if(!(c[10329]&4)){a=c[10224]|0;e:do if(a){f=41320;while(1){d=c[f>>2]|0;if(d>>>0<=a>>>0?(r=f+4|0,(d+(c[r>>2]|0)|0)>>>0>a>>>0):0){g=f;a=r;break}f=c[f+8>>2]|0;if(!f){v=174;break e}}d=h-(c[10221]|0)&i;if(d>>>0<2147483647){f=Ua(d|0)|0;y=(f|0)==((c[g>>2]|0)+(c[a>>2]|0)|0);a=y?d:0;if(y){if((f|0)!=(-1|0)){w=f;p=a;v=194;break d}}else v=184}else a=0}else v=174;while(0);do if((v|0)==174){g=Ua(0)|0;if((g|0)!=(-1|0)){a=g;d=c[10337]|0;f=d+-1|0;if(!(f&a))d=l;else d=l-a+(f+a&0-d)|0;a=c[10326]|0;f=a+d|0;if(d>>>0>q>>>0&d>>>0<2147483647){y=c[10328]|0;if((y|0)!=0?f>>>0<=a>>>0|f>>>0>y>>>0:0){a=0;break}f=Ua(d|0)|0;y=(f|0)==(g|0);a=y?d:0;if(y){w=g;p=a;v=194;break d}else v=184}else a=0}else a=0}while(0);f:do if((v|0)==184){g=0-d|0;do if(j>>>0>d>>>0&(d>>>0<2147483647&(f|0)!=(-1|0))?(u=c[10338]|0,u=k-d+u&0-u,u>>>0<2147483647):0)if((Ua(u|0)|0)==(-1|0)){Ua(g|0)|0;break f}else{d=u+d|0;break}while(0);if((f|0)!=(-1|0)){w=f;p=d;v=194;break d}}while(0);c[10329]=c[10329]|4;v=191}else{a=0;v=191}while(0);if((((v|0)==191?l>>>0<2147483647:0)?(w=Ua(l|0)|0,x=Ua(0)|0,w>>>0>>0&((w|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(z=x-w|0,A=z>>>0>(q+40|0)>>>0,A):0){p=A?z:a;v=194}if((v|0)==194){a=(c[10326]|0)+p|0;c[10326]=a;if(a>>>0>(c[10327]|0)>>>0)c[10327]=a;h=c[10224]|0;g:do if(h){g=41320;do{a=c[g>>2]|0;d=g+4|0;f=c[d>>2]|0;if((w|0)==(a+f|0)){B=a;C=d;D=f;E=g;v=204;break}g=c[g+8>>2]|0}while((g|0)!=0);if(((v|0)==204?(c[E+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=B>>>0:0){c[C>>2]=D+p;M=(c[10221]|0)+p|0;L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=M-L|0;c[10224]=h+L;c[10221]=K;c[h+(L+4)>>2]=K|1;c[h+(M+4)>>2]=40;c[10225]=c[10340];break}a=c[10222]|0;if(w>>>0>>0){c[10222]=w;a=w}d=w+p|0;g=41320;while(1){if((c[g>>2]|0)==(d|0)){f=g;d=g;v=212;break}g=c[g+8>>2]|0;if(!g){d=41320;break}}if((v|0)==212)if(!(c[d+12>>2]&8)){c[f>>2]=w;n=d+4|0;c[n>>2]=(c[n>>2]|0)+p;n=w+8|0;n=(n&7|0)==0?0:0-n&7;k=w+(p+8)|0;k=(k&7|0)==0?0:0-k&7;b=w+(k+p)|0;m=n+q|0;o=w+m|0;l=b-(w+n)-q|0;c[w+(n+4)>>2]=q|3;h:do if((b|0)!=(h|0)){if((b|0)==(c[10223]|0)){M=(c[10220]|0)+l|0;c[10220]=M;c[10223]=o;c[w+(m+4)>>2]=M|1;c[w+(M+m)>>2]=M;break}i=p+4|0;d=c[w+(i+k)>>2]|0;if((d&3|0)==1){j=d&-8;g=d>>>3;i:do if(d>>>0>=256){h=c[w+((k|24)+p)>>2]|0;e=c[w+(p+12+k)>>2]|0;do if((e|0)==(b|0)){f=k|16;e=w+(i+f)|0;d=c[e>>2]|0;if(!d){e=w+(f+p)|0;d=c[e>>2]|0;if(!d){J=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;J=d;break}}else{f=c[w+((k|8)+p)>>2]|0;if(f>>>0>>0)Ga();a=f+12|0;if((c[a>>2]|0)!=(b|0))Ga();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;J=e;break}else Ga()}while(0);if(!h)break;a=c[w+(p+28+k)>>2]|0;d=41176+(a<<2)|0;do if((b|0)!=(c[d>>2]|0)){if(h>>>0<(c[10222]|0)>>>0)Ga();a=h+16|0;if((c[a>>2]|0)==(b|0))c[a>>2]=J;else c[h+20>>2]=J;if(!J)break i}else{c[d>>2]=J;if(J)break;c[10219]=c[10219]&~(1<>>0>>0)Ga();c[J+24>>2]=h;b=k|16;a=c[w+(b+p)>>2]|0;do if(a)if(a>>>0>>0)Ga();else{c[J+16>>2]=a;c[a+24>>2]=J;break}while(0);b=c[w+(i+b)>>2]|0;if(!b)break;if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{e=c[w+((k|8)+p)>>2]|0;f=c[w+(p+12+k)>>2]|0;d=40912+(g<<1<<2)|0;do if((e|0)!=(d|0)){if(e>>>0>>0)Ga();if((c[e+12>>2]|0)==(b|0))break;Ga()}while(0);if((f|0)==(e|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();a=f+8|0;if((c[a>>2]|0)==(b|0)){F=a;break}Ga()}while(0);c[e+12>>2]=f;c[F>>2]=e}while(0);b=w+((j|k)+p)|0;f=j+l|0}else f=l;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[w+(m+4)>>2]=f|1;c[w+(f+m)>>2]=f;b=f>>>3;if(f>>>0<256){a=b<<1;e=40912+(a<<2)|0;d=c[10218]|0;b=1<>2]|0;if(a>>>0>=(c[10222]|0)>>>0){K=b;L=a;break}Ga()}while(0);c[K>>2]=o;c[L+12>>2]=o;c[w+(m+8)>>2]=L;c[w+(m+12)>>2]=e;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}K=(b+1048320|0)>>>16&8;L=b<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=41176+(e<<2)|0;c[w+(m+28)>>2]=e;c[w+(m+20)>>2]=0;c[w+(m+16)>>2]=0;a=c[10219]|0;d=1<>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break}b=c[b>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(f|0)){M=d;break j}else{e=e<<1;b=d}}if(a>>>0<(c[10222]|0)>>>0)Ga();else{c[a>>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break h}}else M=b;while(0);b=M+8|0;a=c[b>>2]|0;L=c[10222]|0;if(a>>>0>=L>>>0&M>>>0>=L>>>0){c[a+12>>2]=o;c[b>>2]=o;c[w+(m+8)>>2]=a;c[w+(m+12)>>2]=M;c[w+(m+24)>>2]=0;break}else Ga()}else{M=(c[10221]|0)+l|0;c[10221]=M;c[10224]=o;c[w+(m+4)>>2]=M|1}while(0);M=w+(n|8)|0;return M|0}else d=41320;while(1){a=c[d>>2]|0;if(a>>>0<=h>>>0?(b=c[d+4>>2]|0,e=a+b|0,e>>>0>h>>>0):0)break;d=c[d+8>>2]|0}f=a+(b+-39)|0;a=a+(b+-47+((f&7|0)==0?0:0-f&7))|0;f=h+16|0;a=a>>>0>>0?h:a;b=a+8|0;d=w+8|0;d=(d&7|0)==0?0:0-d&7;M=p+-40-d|0;c[10224]=w+d;c[10221]=M;c[w+(d+4)>>2]=M|1;c[w+(p+-36)>>2]=40;c[10225]=c[10340];d=a+4|0;c[d>>2]=27;c[b>>2]=c[10330];c[b+4>>2]=c[10331];c[b+8>>2]=c[10332];c[b+12>>2]=c[10333];c[10330]=w;c[10331]=p;c[10333]=0;c[10332]=b;b=a+28|0;c[b>>2]=7;if((a+32|0)>>>0>>0)do{M=b;b=b+4|0;c[b>>2]=7}while((M+8|0)>>>0>>0);if((a|0)!=(h|0)){g=a-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){a=b<<1;e=40912+(a<<2)|0;d=c[10218]|0;b=1<>2]|0;if(a>>>0<(c[10222]|0)>>>0)Ga();else{G=b;H=a}}else{c[10218]=d|b;G=40912+(a+2<<2)|0;H=e}c[G>>2]=h;c[H+12>>2]=h;c[h+8>>2]=H;c[h+12>>2]=e;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=41176+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;b=c[10219]|0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=c[d>>2]|0;k:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){I=d;break k}else{e=e<<1;b=d}}if(a>>>0<(c[10222]|0)>>>0)Ga();else{c[a>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else I=b;while(0);b=I+8|0;a=c[b>>2]|0;M=c[10222]|0;if(a>>>0>=M>>>0&I>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=I;c[h+24>>2]=0;break}else Ga()}}else{M=c[10222]|0;if((M|0)==0|w>>>0>>0)c[10222]=w;c[10330]=w;c[10331]=p;c[10333]=0;c[10227]=c[10336];c[10226]=-1;b=0;do{M=b<<1;L=40912+(M<<2)|0;c[40912+(M+3<<2)>>2]=L;c[40912+(M+2<<2)>>2]=L;b=b+1|0}while((b|0)!=32);M=w+8|0;M=(M&7|0)==0?0:0-M&7;L=p+-40-M|0;c[10224]=w+M;c[10221]=L;c[w+(M+4)>>2]=L|1;c[w+(p+-36)>>2]=40;c[10225]=c[10340]}while(0);b=c[10221]|0;if(b>>>0>q>>>0){L=b-q|0;c[10221]=L;M=c[10224]|0;c[10224]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}}c[(ck()|0)>>2]=12;M=0;return M|0}function Gl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[10222]|0;if(b>>>0>>0)Ga();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)Ga();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)Ga();if((l|0)==(c[10223]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[10220]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=40912+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)Ga();if((c[e+12>>2]|0)!=(l|0))Ga()}if((d|0)==(e|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else Ga()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)Ga();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ga();b=f+12|0;if((c[b>>2]|0)!=(l|0))Ga();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else Ga()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=41176+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[10222]|0;if(k>>>0>>0)Ga();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)Ga();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))Ga();if(!(d&2)){if((q|0)==(c[10224]|0)){t=(c[10221]|0)+g|0;c[10221]=t;c[10224]=u;c[u+4>>2]=t|1;if((u|0)!=(c[10223]|0))return;c[10223]=0;c[10220]=0;return}if((q|0)==(c[10223]|0)){t=(c[10220]|0)+g|0;c[10220]=t;c[10223]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[10222]|0)>>>0)Ga();e=d+12|0;if((c[e>>2]|0)!=(q|0))Ga();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else Ga()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=41176+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[10222]|0;if(p>>>0>>0)Ga();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=40912+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[10222]|0)>>>0)Ga();if((c[e+12>>2]|0)!=(q|0))Ga()}if((d|0)==(e|0)){c[10218]=c[10218]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else Ga()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[10223]|0)){c[10220]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=40912+(d<<2)|0;e=c[10218]|0;b=1<>2]|0;if(d>>>0<(c[10222]|0)>>>0)Ga();else{r=b;s=d}}else{c[10218]=e|b;r=40912+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=41176+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[10219]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){d=b+16+(f>>>31<<2)|0;e=c[d>>2]|0;if(!e)break;if((c[e+4>>2]&-8|0)==(g|0)){t=e;break b}else{f=f<<1;b=e}}if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[d>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[10222]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else Ga()}else{c[10219]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[10226]|0)+-1|0;c[10226]=u;if(!u)b=41328;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[10226]=-1;return}function Hl(a,b){a=a|0;b=b|0;var d=0;if(a){d=$(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=Fl(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;iw(b|0,0,d|0)|0;return b|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=Fl(b)|0;return a|0}if(b>>>0>4294967231){c[(ck()|0)>>2]=12;a=0;return a|0}d=Jl(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){a=d+8|0;return a|0}d=Fl(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;lw(d|0,a|0,(e>>>0>>0?e:b)|0)|0;Gl(a);a=d;return a|0}function Jl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=a+4|0;p=c[o>>2]|0;j=p&-8;l=a+j|0;i=c[10222]|0;d=p&3;if(!((d|0)!=1&a>>>0>=i>>>0&a>>>0>>0))Ga();e=a+(j|4)|0;f=c[e>>2]|0;if(!(f&1))Ga();if(!d){if(b>>>0<256){a=0;return a|0}if(j>>>0>=(b+4|0)>>>0?(j-b|0)>>>0<=c[10338]<<1>>>0:0)return a|0;a=0;return a|0}if(j>>>0>=b>>>0){d=j-b|0;if(d>>>0<=15)return a|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|3;c[e>>2]=c[e>>2]|1;Kl(a+b|0,d);return a|0}if((l|0)==(c[10224]|0)){d=(c[10221]|0)+j|0;if(d>>>0<=b>>>0){a=0;return a|0}n=d-b|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|1;c[10224]=a+b;c[10221]=n;return a|0}if((l|0)==(c[10223]|0)){e=(c[10220]|0)+j|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|1;c[a+e>>2]=d;e=a+(e+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[o>>2]=p&1|e|2;e=a+(e+4)|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[10220]=d;c[10223]=e;return a|0}if(f&2){a=0;return a|0}m=(f&-8)+j|0;if(m>>>0>>0){a=0;return a|0}n=m-b|0;g=f>>>3;do if(f>>>0>=256){h=c[a+(j+24)>>2]|0;g=c[a+(j+12)>>2]|0;do if((g|0)==(l|0)){e=a+(j+20)|0;d=c[e>>2]|0;if(!d){e=a+(j+16)|0;d=c[e>>2]|0;if(!d){k=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;k=d;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ga();d=f+12|0;if((c[d>>2]|0)!=(l|0))Ga();e=g+8|0;if((c[e>>2]|0)==(l|0)){c[d>>2]=g;c[e>>2]=f;k=g;break}else Ga()}while(0);if(h){d=c[a+(j+28)>>2]|0;e=41176+(d<<2)|0;if((l|0)==(c[e>>2]|0)){c[e>>2]=k;if(!k){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();d=h+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=k;else c[h+20>>2]=k;if(!k)break}e=c[10222]|0;if(k>>>0>>0)Ga();c[k+24>>2]=h;d=c[a+(j+16)>>2]|0;do if(d)if(d>>>0>>0)Ga();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(j+20)>>2]|0;if(d)if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[k+20>>2]=d;c[d+24>>2]=k;break}}}else{f=c[a+(j+8)>>2]|0;e=c[a+(j+12)>>2]|0;d=40912+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ga();if((c[f+12>>2]|0)!=(l|0))Ga()}if((e|0)==(f|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();d=e+8|0;if((c[d>>2]|0)==(l|0))h=d;else Ga()}else h=e+8|0;c[f+12>>2]=e;c[h>>2]=f}while(0);if(n>>>0<16){c[o>>2]=m|p&1|2;b=a+(m|4)|0;c[b>>2]=c[b>>2]|1;return a|0}else{c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|3;p=a+(m|4)|0;c[p>>2]=c[p>>2]|1;Kl(a+b|0,n);return a|0}return 0}function Kl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){k=c[a>>2]|0;if(!(d&3))return;n=a+(0-k)|0;m=k+b|0;j=c[10222]|0;if(n>>>0>>0)Ga();if((n|0)==(c[10223]|0)){e=a+(b+4)|0;d=c[e>>2]|0;if((d&3|0)!=3){t=n;h=m;break}c[10220]=m;c[e>>2]=d&-2;c[a+(4-k)>>2]=m|1;c[q>>2]=m;return}g=k>>>3;if(k>>>0<256){f=c[a+(8-k)>>2]|0;e=c[a+(12-k)>>2]|0;d=40912+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ga();if((c[f+12>>2]|0)!=(n|0))Ga()}if((e|0)==(f|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();d=e+8|0;if((c[d>>2]|0)==(n|0))i=d;else Ga()}else i=e+8|0;c[f+12>>2]=e;c[i>>2]=f;t=n;h=m;break}i=c[a+(24-k)>>2]|0;f=c[a+(12-k)>>2]|0;do if((f|0)==(n|0)){f=16-k|0;e=a+(f+4)|0;d=c[e>>2]|0;if(!d){e=a+f|0;d=c[e>>2]|0;if(!d){l=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;l=d;break}}else{g=c[a+(8-k)>>2]|0;if(g>>>0>>0)Ga();d=g+12|0;if((c[d>>2]|0)!=(n|0))Ga();e=f+8|0;if((c[e>>2]|0)==(n|0)){c[d>>2]=f;c[e>>2]=g;l=f;break}else Ga()}while(0);if(i){d=c[a+(28-k)>>2]|0;e=41176+(d<<2)|0;if((n|0)==(c[e>>2]|0)){c[e>>2]=l;if(!l){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();d=i+16|0;if((c[d>>2]|0)==(n|0))c[d>>2]=l;else c[i+20>>2]=l;if(!l){t=n;h=m;break}}f=c[10222]|0;if(l>>>0>>0)Ga();c[l+24>>2]=i;d=16-k|0;e=c[a+d>>2]|0;do if(e)if(e>>>0>>0)Ga();else{c[l+16>>2]=e;c[e+24>>2]=l;break}while(0);d=c[a+(d+4)>>2]|0;if(d)if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[l+20>>2]=d;c[d+24>>2]=l;t=n;h=m;break}else{t=n;h=m}}else{t=n;h=m}}else{t=a;h=b}while(0);j=c[10222]|0;if(q>>>0>>0)Ga();d=a+(b+4)|0;e=c[d>>2]|0;if(!(e&2)){if((q|0)==(c[10224]|0)){s=(c[10221]|0)+h|0;c[10221]=s;c[10224]=t;c[t+4>>2]=s|1;if((t|0)!=(c[10223]|0))return;c[10223]=0;c[10220]=0;return}if((q|0)==(c[10223]|0)){s=(c[10220]|0)+h|0;c[10220]=s;c[10223]=t;c[t+4>>2]=s|1;c[t+s>>2]=s;return}h=(e&-8)+h|0;g=e>>>3;do if(e>>>0>=256){i=c[a+(b+24)>>2]|0;f=c[a+(b+12)>>2]|0;do if((f|0)==(q|0)){e=a+(b+20)|0;d=c[e>>2]|0;if(!d){e=a+(b+16)|0;d=c[e>>2]|0;if(!d){p=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;p=d;break}}else{g=c[a+(b+8)>>2]|0;if(g>>>0>>0)Ga();d=g+12|0;if((c[d>>2]|0)!=(q|0))Ga();e=f+8|0;if((c[e>>2]|0)==(q|0)){c[d>>2]=f;c[e>>2]=g;p=f;break}else Ga()}while(0);if(i){d=c[a+(b+28)>>2]|0;e=41176+(d<<2)|0;if((q|0)==(c[e>>2]|0)){c[e>>2]=p;if(!p){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();d=i+16|0;if((c[d>>2]|0)==(q|0))c[d>>2]=p;else c[i+20>>2]=p;if(!p)break}e=c[10222]|0;if(p>>>0>>0)Ga();c[p+24>>2]=i;d=c[a+(b+16)>>2]|0;do if(d)if(d>>>0>>0)Ga();else{c[p+16>>2]=d;c[d+24>>2]=p;break}while(0);d=c[a+(b+20)>>2]|0;if(d)if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[p+20>>2]=d;c[d+24>>2]=p;break}}}else{f=c[a+(b+8)>>2]|0;e=c[a+(b+12)>>2]|0;d=40912+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ga();if((c[f+12>>2]|0)!=(q|0))Ga()}if((e|0)==(f|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();d=e+8|0;if((c[d>>2]|0)==(q|0))o=d;else Ga()}else o=e+8|0;c[f+12>>2]=e;c[o>>2]=f}while(0);c[t+4>>2]=h|1;c[t+h>>2]=h;if((t|0)==(c[10223]|0)){c[10220]=h;return}}else{c[d>>2]=e&-2;c[t+4>>2]=h|1;c[t+h>>2]=h}d=h>>>3;if(h>>>0<256){e=d<<1;g=40912+(e<<2)|0;f=c[10218]|0;d=1<>2]|0;if(e>>>0<(c[10222]|0)>>>0)Ga();else{r=d;s=e}}else{c[10218]=f|d;r=40912+(e+2<<2)|0;s=g}c[r>>2]=t;c[s+12>>2]=t;c[t+8>>2]=s;c[t+12>>2]=g;return}d=h>>>8;if(d)if(h>>>0>16777215)g=31;else{r=(d+1048320|0)>>>16&8;s=d<>>16&4;s=s<>>16&2;g=14-(q|r|g)+(s<>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;d=41176+(g<<2)|0;c[t+28>>2]=g;c[t+20>>2]=0;c[t+16>>2]=0;e=c[10219]|0;f=1<>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}d=c[d>>2]|0;a:do if((c[d+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=d+16+(g>>>31<<2)|0;f=c[e>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(h|0)){d=f;break a}else{g=g<<1;d=f}}if(e>>>0<(c[10222]|0)>>>0)Ga();c[e>>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}while(0);e=d+8|0;f=c[e>>2]|0;s=c[10222]|0;if(!(f>>>0>=s>>>0&d>>>0>=s>>>0))Ga();c[f+12>>2]=t;c[e>>2]=t;c[t+8>>2]=f;c[t+12>>2]=d;c[t+24>>2]=0;return}function Ll(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[9321]|0;Pl(42048,e,42104);c[10342]=42892;c[10344]=42912;c[10343]=0;a=c[10720]|0;o=0;ia(62,41368+a|0,42048);g=o;o=0;if(g&1){g=Na()|0;fn(41376);Ya(g|0)}c[41368+(a+72)>>2]=0;c[41368+(a+76)>>2]=-1;f=c[9322]|0;Ql(42152,f,42112);c[10364]=42972;c[10365]=42992;d=c[10740]|0;o=0;ia(62,41456+d|0,42152);g=o;o=0;if(g&1){g=Na()|0;fn(41460);Ya(g|0)}a=d+72|0;c[41456+a>>2]=0;b=d+76|0;c[41456+b>>2]=-1;g=c[9320]|0;Ql(42200,g,42120);c[10385]=42972;c[10386]=42992;o=0;ia(62,41540+d|0,42200);h=o;o=0;if(h&1){h=Na()|0;fn(41544);Ya(h|0)}c[41540+a>>2]=0;c[41540+b>>2]=-1;h=c[41540+((c[(c[10385]|0)+-12>>2]|0)+24)>>2]|0;c[10406]=42972;c[10407]=42992;o=0;ia(62,41624+d|0,h|0);h=o;o=0;if(h&1){h=Na()|0;fn(41628);Ya(h|0)}c[41624+a>>2]=0;c[41624+b>>2]=-1;c[41368+((c[(c[10342]|0)+-12>>2]|0)+72)>>2]=41456;a=41540+((c[(c[10385]|0)+-12>>2]|0)+4)|0;c[a>>2]=c[a>>2]|8192;c[41540+((c[(c[10385]|0)+-12>>2]|0)+72)>>2]=41456;Rl(42248,e,42128);c[10427]=42932;c[10429]=42952;c[10428]=0;a=c[10730]|0;o=0;ia(62,41708+a|0,42248);h=o;o=0;if(h&1){h=Na()|0;ln(41716);Ya(h|0)}c[41708+(a+72)>>2]=0;c[41708+(a+76)>>2]=-1;Sl(42304,f,42136);c[10449]=43012;c[10450]=43032;d=c[10750]|0;o=0;ia(62,41796+d|0,42304);h=o;o=0;if(h&1){h=Na()|0;ln(41800);Ya(h|0)}a=d+72|0;c[41796+a>>2]=0;b=d+76|0;c[41796+b>>2]=-1;Sl(42352,g,42144);c[10470]=43012;c[10471]=43032;o=0;ia(62,41880+d|0,42352);h=o;o=0;if(h&1){h=Na()|0;ln(41884);Ya(h|0)}c[41880+a>>2]=0;c[41880+b>>2]=-1;h=c[41880+((c[(c[10470]|0)+-12>>2]|0)+24)>>2]|0;c[10491]=43012;c[10492]=43032;o=0;ia(62,41964+d|0,h|0);h=o;o=0;if(h&1){h=Na()|0;ln(41968);Ya(h|0)}else{c[41964+a>>2]=0;c[41964+b>>2]=-1;c[41708+((c[(c[10427]|0)+-12>>2]|0)+72)>>2]=41796;h=41880+((c[(c[10470]|0)+-12>>2]|0)+4)|0;c[h>>2]=c[h>>2]|8192;c[41880+((c[(c[10470]|0)+-12>>2]|0)+72)>>2]=41796;return}}function Ml(a){a=a|0;o=0;ka(70,41456)|0;a=o;o=0;if(((!(a&1)?(o=0,ka(70,41624)|0,a=o,o=0,!(a&1)):0)?(o=0,ka(71,41796)|0,a=o,o=0,!(a&1)):0)?(o=0,ka(71,41964)|0,a=o,o=0,!(a&1)):0)return;a=Na(0)|0;ec(a)}function Nl(){Ll(0);kb(187,56757,n|0)|0;return}function Ol(){return}function Pl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;pn(b);c[b>>2]=42600;c[b+32>>2]=d;c[b+40>>2]=e;c[b+48>>2]=-1;a[b+52>>0]=0;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;ia(23,b|0,f|0);e=o;o=0;if(e&1){h=Na()|0;Gs(f);nn(b);Ya(h|0)}else{Gs(f);i=g;return}}function Ql(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;pn(b);c[b>>2]=42536;c[b+32>>2]=d;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;d=ra(37,f|0,44280)|0;h=o;o=0;if(h&1){h=Na()|0;Gs(f);nn(b);Ya(h|0)}else{Gs(f);c[b+36>>2]=d;c[b+40>>2]=e;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;i=g;return}}function Rl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;En(b);c[b>>2]=42472;c[b+32>>2]=d;c[b+40>>2]=e;c[b+48>>2]=-1;a[b+52>>0]=0;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;ia(21,b|0,f|0);e=o;o=0;if(e&1){h=Na()|0;Gs(f);Cn(b);Ya(h|0)}else{Gs(f);i=g;return}}function Sl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;En(b);c[b>>2]=42408;c[b+32>>2]=d;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;d=ra(37,f|0,44288)|0;h=o;o=0;if(h&1){h=Na()|0;Gs(f);Cn(b);Ya(h|0)}else{Gs(f);c[b+36>>2]=d;c[b+40>>2]=e;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;i=g;return}}function Tl(a){a=a|0;Cn(a);cj(a);return}function Ul(b,d){b=b|0;d=d|0;Eb[c[(c[b>>2]|0)+24>>2]&127](b)|0;d=Is(d,44288)|0;c[b+36>>2]=d;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;return}function Vl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l;d=a+36|0;e=a+40|0;f=j+8|0;g=j;b=a+32|0;a:while(1){a=c[d>>2]|0;a=Mb[c[(c[a>>2]|0)+20>>2]&31](a,c[e>>2]|0,j,f,h)|0;m=(c[h>>2]|0)-g|0;if((Yk(j,1,m,c[b>>2]|0)|0)!=(m|0)){a=-1;break}switch(a|0){case 1:break;case 2:{a=-1;break a}default:{k=4;break a}}}if((k|0)==4)a=((Vk(c[b>>2]|0)|0)!=0)<<31>>31;i=l;return a|0}function Wl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;a:do if(!(a[b+44>>0]|0))if((e|0)>0){f=d;d=0;while(1){if((Lb[c[(c[b>>2]|0)+52>>2]&63](b,c[f>>2]|0)|0)==-1)break a;d=d+1|0;if((d|0)<(e|0))f=f+4|0;else break}}else d=0;else d=Yk(d,4,e,c[b+32>>2]|0)|0;while(0);return d|0}function Xl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;p=s+16|0;e=s+8|0;o=s+4|0;n=s;q=(d|0)==-1;a:do if(!q){c[e>>2]=d;if(a[b+44>>0]|0)if((Yk(e,4,1,c[b+32>>2]|0)|0)==1){r=11;break}else{e=-1;break}c[o>>2]=p;l=e+4|0;m=b+36|0;g=b+40|0;h=p+8|0;j=p;k=b+32|0;while(1){b=c[m>>2]|0;b=Sb[c[(c[b>>2]|0)+12>>2]&15](b,c[g>>2]|0,e,l,n,p,h,o)|0;if((c[n>>2]|0)==(e|0)){e=-1;break a}if((b|0)==3)break;f=(b|0)==1;if(b>>>0>=2){e=-1;break a}b=(c[o>>2]|0)-j|0;if((Yk(p,1,b,c[k>>2]|0)|0)!=(b|0)){e=-1;break a}if(f)e=f?c[n>>2]|0:e;else{r=11;break a}}if((Yk(e,1,1,c[k>>2]|0)|0)!=1)e=-1;else r=11}else r=11;while(0);if((r|0)==11)e=q?0:d;i=s;return e|0}function Yl(b,d){b=b|0;d=d|0;var e=0,f=0;f=Is(d,44288)|0;e=b+36|0;c[e>>2]=f;d=b+44|0;c[d>>2]=Eb[c[(c[f>>2]|0)+24>>2]&127](f)|0;e=c[e>>2]|0;a[b+53>>0]=(Eb[c[(c[e>>2]|0)+28>>2]&127](e)|0)&1;if((c[d>>2]|0)>8)Rr(56783);return}function Zl(a){a=a|0;Cn(a);cj(a);return}function _l(a){a=a|0;return bm(a,0)|0}function $l(a){a=a|0;return bm(a,1)|0}function am(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+16|0;k=m+8|0;f=m+4|0;g=m;h=b+52|0;e=(a[h>>0]|0)!=0;a:do if((d|0)==-1)if(e)d=-1;else{d=c[b+48>>2]|0;a[h>>0]=(d|0)!=-1&1}else{j=b+48|0;b:do if(e){c[f>>2]=c[j>>2];e=c[b+36>>2]|0;switch(Sb[c[(c[e>>2]|0)+12>>2]&15](e,c[b+40>>2]|0,f,f+4|0,g,l,l+8|0,k)|0){case 1:case 2:{d=-1;break a}case 3:{a[l>>0]=c[j>>2];c[k>>2]=l+1;break}default:{}}e=b+32|0;while(1){f=c[k>>2]|0;if(f>>>0<=l>>>0)break b;b=f+-1|0;c[k>>2]=b;if((al(a[b>>0]|0,c[e>>2]|0)|0)==-1){d=-1;break a}}}while(0);c[j>>2]=d;a[h>>0]=1}while(0);i=m;return d|0}function bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=i;i=i+32|0;q=r+16|0;p=r+8|0;m=r+4|0;n=r;g=b+52|0;a:do if(a[g>>0]|0){f=b+48|0;e=c[f>>2]|0;if(d){c[f>>2]=-1;a[g>>0]=0}}else{e=c[b+44>>2]|0;e=(e|0)>1?e:1;o=b+32|0;if((e|0)>0){g=0;do{f=Zk(c[o>>2]|0)|0;if((f|0)==-1){e=-1;break a}a[q+g>>0]=f;g=g+1|0}while((g|0)<(e|0))}b:do if(!(a[b+53>>0]|0)){j=b+40|0;k=b+36|0;l=p+4|0;c:while(1){s=c[j>>2]|0;g=s;f=c[g>>2]|0;g=c[g+4>>2]|0;t=c[k>>2]|0;h=q+e|0;switch(Sb[c[(c[t>>2]|0)+16>>2]&15](t,s,q,h,m,p,l,n)|0){case 2:{e=-1;break a}case 3:break c;case 1:break;default:break b}t=c[j>>2]|0;c[t>>2]=f;c[t+4>>2]=g;if((e|0)==8){e=-1;break a}f=Zk(c[o>>2]|0)|0;if((f|0)==-1){e=-1;break a}a[h>>0]=f;e=e+1|0}c[p>>2]=a[q>>0]}else c[p>>2]=a[q>>0];while(0);if(d){e=c[p>>2]|0;c[b+48>>2]=e;break}while(1){if((e|0)<=0)break;e=e+-1|0;if((al(a[q+e>>0]|0,c[o>>2]|0)|0)==-1){e=-1;break a}}e=c[p>>2]|0}while(0);i=r;return e|0}function cm(a){a=a|0;nn(a);cj(a);return}function dm(b,d){b=b|0;d=d|0;Eb[c[(c[b>>2]|0)+24>>2]&127](b)|0;d=Is(d,44280)|0;c[b+36>>2]=d;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;return}function em(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l;d=a+36|0;e=a+40|0;f=j+8|0;g=j;b=a+32|0;a:while(1){a=c[d>>2]|0;a=Mb[c[(c[a>>2]|0)+20>>2]&31](a,c[e>>2]|0,j,f,h)|0;m=(c[h>>2]|0)-g|0;if((Yk(j,1,m,c[b>>2]|0)|0)!=(m|0)){a=-1;break}switch(a|0){case 1:break;case 2:{a=-1;break a}default:{k=4;break a}}}if((k|0)==4)a=((Vk(c[b>>2]|0)|0)!=0)<<31>>31;i=l;return a|0}function fm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;a:do if(!(a[b+44>>0]|0))if((f|0)>0){g=e;e=0;while(1){if((Lb[c[(c[b>>2]|0)+52>>2]&63](b,d[g>>0]|0)|0)==-1)break a;e=e+1|0;if((e|0)<(f|0))g=g+1|0;else break}}else e=0;else e=Yk(e,1,f,c[b+32>>2]|0)|0;while(0);return e|0}function gm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;p=s+16|0;e=s+8|0;o=s+4|0;n=s;q=(d|0)==-1;a:do if(!q){a[e>>0]=d;if(a[b+44>>0]|0)if((Yk(e,1,1,c[b+32>>2]|0)|0)==1){r=11;break}else{e=-1;break}c[o>>2]=p;m=e+1|0;g=b+36|0;h=b+40|0;j=p+8|0;k=p;l=b+32|0;while(1){b=c[g>>2]|0;b=Sb[c[(c[b>>2]|0)+12>>2]&15](b,c[h>>2]|0,e,m,n,p,j,o)|0;if((c[n>>2]|0)==(e|0)){e=-1;break a}if((b|0)==3)break;f=(b|0)==1;if(b>>>0>=2){e=-1;break a}b=(c[o>>2]|0)-k|0;if((Yk(p,1,b,c[l>>2]|0)|0)!=(b|0)){e=-1;break a}if(f)e=f?c[n>>2]|0:e;else{r=11;break a}}if((Yk(e,1,1,c[l>>2]|0)|0)!=1)e=-1;else r=11}else r=11;while(0);if((r|0)==11)e=q?0:d;i=s;return e|0}function hm(b,d){b=b|0;d=d|0;var e=0,f=0;f=Is(d,44280)|0;e=b+36|0;c[e>>2]=f;d=b+44|0;c[d>>2]=Eb[c[(c[f>>2]|0)+24>>2]&127](f)|0;e=c[e>>2]|0;a[b+53>>0]=(Eb[c[(c[e>>2]|0)+28>>2]&127](e)|0)&1;if((c[d>>2]|0)>8)Rr(56783);return}function im(a){a=a|0;nn(a);cj(a);return}function jm(a){a=a|0;return mm(a,0)|0}function km(a){a=a|0;return mm(a,1)|0}function lm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+16|0;k=m+4|0;f=m+8|0;g=m;h=b+52|0;e=(a[h>>0]|0)!=0;a:do if((d|0)==-1)if(e)d=-1;else{d=c[b+48>>2]|0;a[h>>0]=(d|0)!=-1&1}else{j=b+48|0;b:do if(e){a[f>>0]=c[j>>2];e=c[b+36>>2]|0;switch(Sb[c[(c[e>>2]|0)+12>>2]&15](e,c[b+40>>2]|0,f,f+1|0,g,l,l+8|0,k)|0){case 1:case 2:{d=-1;break a}case 3:{a[l>>0]=c[j>>2];c[k>>2]=l+1;break}default:{}}e=b+32|0;while(1){f=c[k>>2]|0;if(f>>>0<=l>>>0)break b;b=f+-1|0;c[k>>2]=b;if((al(a[b>>0]|0,c[e>>2]|0)|0)==-1){d=-1;break a}}}while(0);c[j>>2]=d;a[h>>0]=1}while(0);i=m;return d|0}function mm(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+32|0;r=s+16|0;q=s+8|0;n=s+4|0;o=s;h=b+52|0;a:do if(a[h>>0]|0){g=b+48|0;f=c[g>>2]|0;if(e){c[g>>2]=-1;a[h>>0]=0}}else{f=c[b+44>>2]|0;f=(f|0)>1?f:1;p=b+32|0;if((f|0)>0){h=0;do{g=Zk(c[p>>2]|0)|0;if((g|0)==-1){f=-1;break a}a[r+h>>0]=g;h=h+1|0}while((h|0)<(f|0))}b:do if(!(a[b+53>>0]|0)){k=b+40|0;l=b+36|0;m=q+1|0;c:while(1){t=c[k>>2]|0;h=t;g=c[h>>2]|0;h=c[h+4>>2]|0;u=c[l>>2]|0;j=r+f|0;switch(Sb[c[(c[u>>2]|0)+16>>2]&15](u,t,r,j,n,q,m,o)|0){case 2:{f=-1;break a}case 3:break c;case 1:break;default:break b}u=c[k>>2]|0;c[u>>2]=g;c[u+4>>2]=h;if((f|0)==8){f=-1;break a}g=Zk(c[p>>2]|0)|0;if((g|0)==-1){f=-1;break a}a[j>>0]=g;f=f+1|0}a[q>>0]=a[r>>0]|0}else a[q>>0]=a[r>>0]|0;while(0);if(e){f=a[q>>0]|0;c[b+48>>2]=f&255}else{while(1){if((f|0)<=0)break;f=f+-1|0;if((al(d[r+f>>0]|0,c[p>>2]|0)|0)==-1){f=-1;break a}}f=a[q>>0]|0}f=f&255}while(0);i=s;return f|0}function nm(a){a=a|0;return}function om(a){a=a|0;a=a+4|0;c[a>>2]=(c[a>>2]|0)+1;return}function pm(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;c[d>>2]=b+-1;if(!b){Bb[c[(c[a>>2]|0)+8>>2]&255](a);a=1}else a=0;return a|0}function qm(b,d){b=b|0;d=d|0;c[b>>2]=36868;o=0;ia(86,b+4|0,((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0)|0);b=o;o=0;if(b&1){b=Na()|0;Ya(b|0)}else return}function rm(a,b){a=a|0;b=b|0;c[a>>2]=36868;o=0;ia(86,a+4|0,b|0);a=o;o=0;if(a&1){a=Na()|0;Ya(a|0)}else return}function sm(a,b){a=a|0;b=b|0;var d=0,e=0;e=nl(b)|0;d=bj(e+13|0)|0;c[d>>2]=e;c[d+4>>2]=e;c[d+8>>2]=0;d=d+12|0;lw(d|0,b|0,e+1|0)|0;c[a>>2]=d;return}function tm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=d;c[a+4>>2]=b;return}function um(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;Qb[c[(c[a>>2]|0)+12>>2]&15](e,a,b);if((c[e+4>>2]|0)==(c[d+4>>2]|0))e=(c[e>>2]|0)==(c[d>>2]|0);else e=0;i=f;return e|0}function vm(a,b,d){a=a|0;b=b|0;d=d|0;return ((c[b>>2]|0)==(d|0)?(c[b+4>>2]|0)==(a|0):0)|0}function wm(a,b,c){a=a|0;b=b|0;c=c|0;b=dk(c)|0;Gm(a,b,nl(b)|0);return}function xm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;f=c[d>>2]|0;do if(f){g=a[e>>0]|0;if(!(g&1))g=(g&255)>>>1;else g=c[e+4>>2]|0;if(g){Pm(e,56990)|0;f=c[d>>2]|0}d=c[d+4>>2]|0;Qb[c[(c[d>>2]|0)+24>>2]&15](h,d,f);d=a[h>>0]|0;g=(d&1)==0;o=0;ma(30,e|0,(g?h+1|0:c[h+8>>2]|0)|0,(g?(d&255)>>>1:c[h+4>>2]|0)|0)|0;d=o;o=0;if(d&1){j=Na()|0;Im(h);Ya(j|0)}else{Im(h);break}}while(0);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;i=j;return}function ym(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;e=f+12|0;g=f;Gm(g,d,nl(d)|0);o=0;wa(10,e|0,b|0,g|0);d=o;o=0;do if(!(d&1)){o=0;ia(87,a|0,e|0);d=o;o=0;if(d&1){f=Na()|0;Im(e);e=f;break}else{Im(e);Im(g);c[a>>2]=42664;d=c[b+4>>2]|0;g=a+8|0;c[g>>2]=c[b>>2];c[g+4>>2]=d;i=f;return}}else e=Na()|0;while(0);Im(g);Ya(e|0)}function zm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;g=i;i=i+48|0;f=g+24|0;j=g+16|0;h=g;c[j>>2]=b;c[j+4>>2]=d;Fm(h,e);o=0;wa(10,f|0,j|0,h|0);e=o;o=0;do if(!(e&1)){o=0;ia(87,a|0,f|0);j=o;o=0;if(j&1){j=Na()|0;Im(f);f=j;break}else{Im(f);Im(h);c[a>>2]=42664;c[a+8>>2]=b;c[a+12>>2]=d;i=g;return}}else f=Na()|0;while(0);Im(h);Ya(f|0)}function Am(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=i;i=i+48|0;e=f+24|0;h=f+16|0;g=f;c[h>>2]=b;c[h+4>>2]=d;Gm(g,58898,0);o=0;wa(10,e|0,h|0,g|0);h=o;o=0;do if(!(h&1)){o=0;ia(87,a|0,e|0);h=o;o=0;if(h&1){h=Na()|0;Im(e);e=h;break}else{Im(e);Im(g);c[a>>2]=42664;c[a+8>>2]=b;c[a+12>>2]=d;i=f;return}}else e=Na()|0;while(0);Im(g);Ya(e|0)}function Bm(a){a=a|0;mj(a);return}function Cm(a){a=a|0;mj(a);cj(a);return}function Dm(a){a=a|0;return}function Em(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;rb(42676)|0;if((c[a>>2]|0)==1)do Da(42704,42676)|0;while((c[a>>2]|0)==1);do if(!(c[a>>2]|0)){c[a>>2]=1;o=0;ka(72,42676)|0;e=o;o=0;if((((!(e&1)?(o=0,ha(d|0,b|0),e=o,o=0,!(e&1)):0)?(o=0,ka(73,42676)|0,e=o,o=0,!(e&1)):0)?(c[a>>2]=-1,o=0,ka(72,42676)|0,e=o,o=0,!(e&1)):0)?(o=0,ka(74,42704)|0,e=o,o=0,!(e&1)):0)break;e=Na(0)|0;Va(e|0)|0;o=0;ka(73,42676)|0;e=o;o=0;if((!(e&1)?(c[a>>2]=0,o=0,ka(72,42676)|0,e=o,o=0,!(e&1)):0)?(o=0,ka(74,42704)|0,e=o,o=0,!(e&1)):0){o=0;xa(5);o=0}b=Na()|0;o=0;xa(3);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)}else Ya(b|0)}else cb(42676)|0;while(0);return}function Fm(b,d){b=b|0;d=d|0;if(!(a[d>>0]&1)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2]}else Gm(b,c[d+8>>2]|0,c[d+4>>2]|0);return}function Gm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>4294967279)_i(b);if(e>>>0<11){a[b>>0]=e<<1;b=b+1|0}else{g=e+16&-16;f=bj(g)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=e;b=f}lw(b|0,d|0,e|0)|0;a[b+e>>0]=0;return}function Hm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(d>>>0>4294967279)_i(b);if(d>>>0<11){a[b>>0]=d<<1;b=b+1|0}else{g=d+16&-16;f=bj(g)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=d;b=f}iw(b|0,e|0,d|0)|0;a[b+d>>0]=0;return}function Im(b){b=b|0;if(a[b>>0]&1)cj(c[b+8>>2]|0);return}function Jm(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d>>0]|0;f=(e&1)==0;Lm(b,f?d+1|0:c[d+8>>2]|0,f?(e&255)>>>1:c[d+4>>2]|0)|0}return b|0}function Km(a,b){a=a|0;b=b|0;return Lm(a,b,nl(b)|0)|0}function Lm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))h=10;else{f=c[b>>2]|0;h=(f&-2)+-1|0;f=f&255}g=(f&1)==0;do if(h>>>0>=e>>>0){if(g)f=b+1|0;else f=c[b+8>>2]|0;nw(f|0,d|0,e|0)|0;a[f+e>>0]=0;if(!(a[b>>0]&1)){a[b>>0]=e<<1;break}else{c[b+4>>2]=e;break}}else{if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;Sm(b,h,e-h|0,f,0,f,e,d)}while(0);return b|0}function Mm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a[b>>0]|0;g=(f&1)==0;if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;do if(f>>>0>=d>>>0)if(g){a[b+1+d>>0]=0;a[b>>0]=d<<1;break}else{a[(c[b+8>>2]|0)+d>>0]=0;c[b+4>>2]=d;break}else Nm(b,d-f|0,e)|0;while(0);return}function Nm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(d){f=a[b>>0]|0;if(!(f&1))g=10;else{f=c[b>>2]|0;g=(f&-2)+-1|0;f=f&255}if(!(f&1))h=(f&255)>>>1;else h=c[b+4>>2]|0;if((g-h|0)>>>0>>0){Tm(b,g,d-g+h|0,h,h,0,0);f=a[b>>0]|0}if(!(f&1))g=b+1|0;else g=c[b+8>>2]|0;iw(g+h|0,e|0,d|0)|0;f=h+d|0;if(!(a[b>>0]&1))a[b>>0]=f<<1;else c[b+4>>2]=f;a[g+f>>0]=0}return b|0}function Om(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(d>>>0>4294967279)_i(b);e=a[b>>0]|0;if(!(e&1))f=10;else{e=c[b>>2]|0;f=(e&-2)+-1|0;e=e&255}if(!(e&1))j=(e&255)>>>1;else j=c[b+4>>2]|0;d=j>>>0>d>>>0?j:d;if(d>>>0<11)i=10;else i=(d+16&-16)+-1|0;a:do if((i|0)!=(f|0)){do if((i|0)!=10){d=i+1|0;if(i>>>0<=f>>>0){o=0;d=ka(67,d|0)|0;h=o;o=0;if(h&1){b=Na(0)|0;Va(b|0)|0;Xa();break a}}else d=bj(d)|0;if(!(e&1)){f=1;g=b+1|0;h=0;break}else{f=1;g=c[b+8>>2]|0;h=1;break}}else{d=b+1|0;f=0;g=c[b+8>>2]|0;h=1}while(0);if(!(e&1))e=(e&255)>>>1;else e=c[b+4>>2]|0;lw(d|0,g|0,e+1|0)|0;if(h)cj(g);if(f){c[b>>2]=i+1|1;c[b+4>>2]=j;c[b+8>>2]=d;break}else{a[b>>0]=j<<1;break}}while(0);return}function Pm(a,b){a=a|0;b=b|0;return Rm(a,b,nl(b)|0)|0}function Qm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;f=(e&1)!=0;if(f){g=(c[b>>2]&-2)+-1|0;h=c[b+4>>2]|0}else{g=10;h=(e&255)>>>1}if((h|0)==(g|0)){Tm(b,g,1,g,g,0,0);if(!(a[b>>0]&1))g=7;else g=8}else if(f)g=8;else g=7;if((g|0)==7){a[b>>0]=(h<<1)+2;e=b+1|0;f=h+1|0}else if((g|0)==8){e=c[b+8>>2]|0;f=h+1|0;c[b+4>>2]=f}a[e+h>>0]=d;a[e+f>>0]=0;return}function Rm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))g=10;else{f=c[b>>2]|0;g=(f&-2)+-1|0;f=f&255}if(!(f&1))h=(f&255)>>>1;else h=c[b+4>>2]|0;if((g-h|0)>>>0>=e>>>0){if(e){if(!(f&1))g=b+1|0;else g=c[b+8>>2]|0;lw(g+h|0,d|0,e|0)|0;f=h+e|0;if(!(a[b>>0]&1))a[b>>0]=f<<1;else c[b+4>>2]=f;a[g+f>>0]=0}}else Sm(b,g,e-g+h|0,h,h,0,e,d);return b|0}function Sm(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((-18-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))m=b+1|0;else m=c[b+8>>2]|0;if(d>>>0<2147483623){k=e+d|0;l=d<<1;k=k>>>0>>0?l:k;k=k>>>0<11?11:k+16&-16}else k=-17;l=bj(k)|0;if(g)lw(l|0,m|0,g|0)|0;if(i)lw(l+g|0,j|0,i|0)|0;e=f-h|0;if((e|0)!=(g|0))lw(l+(i+g)|0,m+(h+g)|0,e-g|0)|0;if((d|0)!=10)cj(m);c[b+8>>2]=l;c[b>>2]=k|1;d=e+i|0;c[b+4>>2]=d;a[l+d>>0]=0;return}function Tm(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;if((-17-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))l=b+1|0;else l=c[b+8>>2]|0;if(d>>>0<2147483623){j=e+d|0;k=d<<1;j=j>>>0>>0?k:j;j=j>>>0<11?11:j+16&-16}else j=-17;k=bj(j)|0;if(g)lw(k|0,l|0,g|0)|0;e=f-h|0;if((e|0)!=(g|0))lw(k+(i+g)|0,l+(h+g)|0,e-g|0)|0;if((d|0)!=10)cj(l);c[b+8>>2]=k;c[b>>2]=j|1;return}function Um(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>1073741807)_i(b);if(e>>>0<2){a[b>>0]=e<<1;b=b+4|0}else{g=e+4&-4;f=bj(g<<2)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=e;b=f}ql(b,d,e)|0;c[b+(e<<2)>>2]=0;return}function Vm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(d>>>0>1073741807)_i(b);if(d>>>0<2){a[b>>0]=d<<1;b=b+4|0}else{g=d+4&-4;f=bj(g<<2)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=d;b=f}sl(b,e,d)|0;c[b+(d<<2)>>2]=0;return}function Wm(b){b=b|0;if(a[b>>0]&1)cj(c[b+8>>2]|0);return}function Xm(a,b){a=a|0;b=b|0;return Ym(a,b,pl(b)|0)|0}function Ym(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))h=1;else{f=c[b>>2]|0;h=(f&-2)+-1|0;f=f&255}g=(f&1)==0;do if(h>>>0>=e>>>0){if(g)f=b+4|0;else f=c[b+8>>2]|0;rl(f,d,e)|0;c[f+(e<<2)>>2]=0;if(!(a[b>>0]&1)){a[b>>0]=e<<1;break}else{c[b+4>>2]=e;break}}else{if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;$m(b,h,e-h|0,f,0,f,e,d)}while(0);return b|0}function Zm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(d>>>0>1073741807)_i(b);e=a[b>>0]|0;if(!(e&1))f=1;else{e=c[b>>2]|0;f=(e&-2)+-1|0;e=e&255}if(!(e&1))j=(e&255)>>>1;else j=c[b+4>>2]|0;d=j>>>0>d>>>0?j:d;if(d>>>0<2)i=1;else i=(d+4&-4)+-1|0;a:do if((i|0)!=(f|0)){do if((i|0)!=1){d=(i<<2)+4|0;if(i>>>0<=f>>>0){o=0;d=ka(67,d|0)|0;h=o;o=0;if(h&1){b=Na(0)|0;Va(b|0)|0;Xa();break a}}else d=bj(d)|0;if(!(e&1)){f=1;g=b+4|0;h=0;break}else{f=1;g=c[b+8>>2]|0;h=1;break}}else{d=b+4|0;f=0;g=c[b+8>>2]|0;h=1}while(0);if(!(e&1))e=(e&255)>>>1;else e=c[b+4>>2]|0;ql(d,g,e+1|0)|0;if(h)cj(g);if(f){c[b>>2]=i+1|1;c[b+4>>2]=j;c[b+8>>2]=d;break}else{a[b>>0]=j<<1;break}}while(0);return}function _m(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;f=(e&1)!=0;if(f){g=(c[b>>2]&-2)+-1|0;h=c[b+4>>2]|0}else{g=1;h=(e&255)>>>1}if((h|0)==(g|0)){an(b,g,1,g,g,0,0);if(!(a[b>>0]&1))g=7;else g=8}else if(f)g=8;else g=7;if((g|0)==7){a[b>>0]=(h<<1)+2;e=b+4|0;f=h+1|0}else if((g|0)==8){e=c[b+8>>2]|0;f=h+1|0;c[b+4>>2]=f}c[e+(h<<2)>>2]=d;c[e+(f<<2)>>2]=0;return}function $m(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((1073741806-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))m=b+4|0;else m=c[b+8>>2]|0;if(d>>>0<536870887){k=e+d|0;l=d<<1;k=k>>>0>>0?l:k;k=k>>>0<2?2:k+4&-4}else k=1073741807;l=bj(k<<2)|0;if(g)ql(l,m,g)|0;if(i)ql(l+(g<<2)|0,j,i)|0;e=f-h|0;if((e|0)!=(g|0))ql(l+(i+g<<2)|0,m+(h+g<<2)|0,e-g|0)|0;if((d|0)!=1)cj(m);c[b+8>>2]=l;c[b>>2]=k|1;d=e+i|0;c[b+4>>2]=d;c[l+(d<<2)>>2]=0;return}function an(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;if((1073741807-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))l=b+4|0;else l=c[b+8>>2]|0;if(d>>>0<536870887){j=e+d|0;k=d<<1;j=j>>>0>>0?k:j;j=j>>>0<2?2:j+4&-4}else j=1073741807;k=bj(j<<2)|0;if(g)ql(k,l,g)|0;e=f-h|0;if((e|0)!=(g|0))ql(k+(i+g<<2)|0,l+(h+g<<2)|0,e-g|0)|0;if((d|0)!=1)cj(l);c[b+8>>2]=k;c[b>>2]=j|1;return}function bn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=d;f=e-g|0;if(f>>>0>4294967279)_i(b);if(f>>>0<11){a[b>>0]=f<<1;h=b+1|0}else{i=f+16&-16;h=bj(i)|0;c[b+8>>2]=h;c[b>>2]=i|1;c[b+4>>2]=f}b=e-g|0;if((d|0)!=(e|0)){f=h;while(1){a[f>>0]=a[d>>0]|0;d=d+1|0;if((d|0)==(e|0))break;else f=f+1|0}}a[h+b>>0]=0;return}function cn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d;f=e-h|0;g=f>>2;if(g>>>0>1073741807)_i(b);if(g>>>0<2){a[b>>0]=f>>>1;b=b+4|0}else{i=g+4&-4;f=bj(i<<2)|0;c[b+8>>2]=f;c[b>>2]=i|1;c[b+4>>2]=g;b=f}g=(e-h|0)>>>2;if((d|0)!=(e|0)){f=b;while(1){c[f>>2]=c[d>>2];d=d+4|0;if((d|0)==(e|0))break;else f=f+4|0}}c[b+(g<<2)>>2]=0;return}function dn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d;f=(c[a+24>>2]|0)==0;c[a+16>>2]=f&1|b;if(!((f&1|b)&c[a+20>>2])){i=d;return}b=Ma(16)|0;so()|0;c[e>>2]=1;c[e+4>>2]=43112;o=0;wa(11,b|0,57437,e|0);f=o;o=0;if(f&1){f=Na()|0;La(b|0);Ya(f|0)}else lb(b|0,864,112)}function en(a){a=a|0;var b=0;c[a>>2]=43068;o=0;ia(88,a|0,0);b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else{Gs(a+28|0);Gl(c[a+32>>2]|0);Gl(c[a+36>>2]|0);Gl(c[a+48>>2]|0);Gl(c[a+60>>2]|0);return}}function fn(a){a=a|0;en(a);return}function gn(a){a=a|0;en(a);cj(a);return}function hn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+40>>2]|0;e=a+32|0;f=a+36|0;if(d)do{d=d+-1|0;Qb[c[(c[e>>2]|0)+(d<<2)>>2]&15](b,a,c[(c[f>>2]|0)+(d<<2)>>2]|0)}while((d|0)!=0);return}function jn(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;Fs(b,a+28|0);i=d;return c[b>>2]|0}function kn(a,b){a=a|0;b=b|0;var d=0;c[a+24>>2]=b;c[a+16>>2]=(b|0)==0&1;c[a+20>>2]=0;c[a+4>>2]=4098;c[a+12>>2]=0;c[a+8>>2]=6;d=a+28|0;b=a+32|0;a=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));Es(d);return}function ln(a){a=a|0;en(a);return}function mn(a){a=a|0;en(a);cj(a);return}function nn(a){a=a|0;c[a>>2]=42760;Gs(a+4|0);return}function on(a){a=a|0;c[a>>2]=42760;Gs(a+4|0);cj(a);return}function pn(a){a=a|0;c[a>>2]=42760;Es(a+4|0);a=a+8|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;return}function qn(a,b){a=a|0;b=b|0;return}function rn(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function sn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function tn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function un(a){a=a|0;return 0}function vn(a){a=a|0;return 0}function wn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+12|0;i=b+16|0;a:do if((e|0)>0){g=d;d=0;while(1){f=c[h>>2]|0;if(f>>>0<(c[i>>2]|0)>>>0){c[h>>2]=f+1;f=a[f>>0]|0}else{f=Eb[c[(c[b>>2]|0)+40>>2]&127](b)|0;if((f|0)==-1)break a;f=f&255}a[g>>0]=f;d=d+1|0;if((d|0)<(e|0))g=g+1|0;else break}}else d=0;while(0);return d|0}function xn(a){a=a|0;return -1}function yn(a){a=a|0;var b=0;if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1)a=-1;else{b=a+12|0;a=c[b>>2]|0;c[b>>2]=a+1;a=d[a>>0]|0}return a|0}function zn(a,b){a=a|0;b=b|0;return -1}function An(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=b+24|0;j=b+28|0;a:do if((f|0)>0){h=e;e=0;while(1){g=c[i>>2]|0;if(g>>>0>=(c[j>>2]|0)>>>0){if((Lb[c[(c[b>>2]|0)+52>>2]&63](b,d[h>>0]|0)|0)==-1)break a}else{k=a[h>>0]|0;c[i>>2]=g+1;a[g>>0]=k}e=e+1|0;if((e|0)<(f|0))h=h+1|0;else break}}else e=0;while(0);return e|0}function Bn(a,b){a=a|0;b=b|0;return -1}function Cn(a){a=a|0;c[a>>2]=42824;Gs(a+4|0);return}function Dn(a){a=a|0;c[a>>2]=42824;Gs(a+4|0);cj(a);return}function En(a){a=a|0;c[a>>2]=42824;Es(a+4|0);a=a+8|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;return}function Fn(a,b){a=a|0;b=b|0;return}function Gn(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Hn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function In(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function Jn(a){a=a|0;return 0}function Kn(a){a=a|0;return 0}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+12|0;h=a+16|0;a:do if((d|0)>0){f=b;b=0;while(1){e=c[g>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){e=Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;if((e|0)==-1)break a}else{c[g>>2]=e+4;e=c[e>>2]|0}c[f>>2]=e;b=b+1|0;if((b|0)<(d|0))f=f+4|0;else break}}else b=0;while(0);return b|0}function Mn(a){a=a|0;return -1}function Nn(a){a=a|0;var b=0;if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1)a=-1;else{b=a+12|0;a=c[b>>2]|0;c[b>>2]=a+4;a=c[a>>2]|0}return a|0}function On(a,b){a=a|0;b=b|0;return -1}function Pn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+24|0;h=a+28|0;a:do if((d|0)>0){f=b;b=0;while(1){e=c[g>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){if((Lb[c[(c[a>>2]|0)+52>>2]&63](a,c[f>>2]|0)|0)==-1)break a}else{i=c[f>>2]|0;c[g>>2]=e+4;c[e>>2]=i}b=b+1|0;if((b|0)<(d|0))f=f+4|0;else break}}else b=0;while(0);return b|0}function Qn(a,b){a=a|0;b=b|0;return -1}function Rn(a){a=a|0;en(a+8|0);return}function Sn(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+8)|0);return}function Tn(a){a=a|0;en(a+8|0);cj(a);return}function Un(a){a=a|0;Tn(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function Vn(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f;a:do if(c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0){o=0;ia(65,e|0,b|0);d=o;o=0;b:do if(d&1)d=Na(0)|0;else{do if(a[e>>0]|0){d=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;d=ka(c[(c[d>>2]|0)+24>>2]|0,d|0)|0;g=o;o=0;if(!(g&1)){if((d|0)!=-1)break;g=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+g|0,c[b+(g+16)>>2]|1|0);g=o;o=0;if(!(g&1))break}d=Na(0)|0;ho(e);break b}while(0);ho(e);break a}while(0);Va(d|0)|0;o=0;ha(181,b+(c[(c[b>>2]|0)+-12>>2]|0)|0);g=o;o=0;if(!(g&1)){Xa();break}d=Na()|0;o=0;xa(3);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else Ya(d|0)}while(0);i=f;return b|0}function Wn(a){a=a|0;var b=0;b=a+16|0;c[b>>2]=c[b>>2]|1;if(!(c[a+20>>2]&1))return;else mb()}function Xn(a){a=a|0;en(a+8|0);return}function Yn(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+8)|0);return}function Zn(a){a=a|0;en(a+8|0);cj(a);return}function _n(a){a=a|0;Zn(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function $n(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f;a:do if(c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0){o=0;ia(89,e|0,b|0);d=o;o=0;b:do if(d&1)d=Na(0)|0;else{do if(a[e>>0]|0){d=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;d=ka(c[(c[d>>2]|0)+24>>2]|0,d|0)|0;g=o;o=0;if(!(g&1)){if((d|0)!=-1)break;g=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+g|0,c[b+(g+16)>>2]|1|0);g=o;o=0;if(!(g&1))break}d=Na(0)|0;po(e);break b}while(0);po(e);break a}while(0);Va(d|0)|0;o=0;ha(181,b+(c[(c[b>>2]|0)+-12>>2]|0)|0);g=o;o=0;if(!(g&1)){Xa();break}d=Na()|0;o=0;xa(3);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else Ya(d|0)}while(0);i=f;return b|0}function ao(a,b){a=a|0;b=b|0;return}function bo(a){a=a|0;en(a+4|0);return}function co(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0);return}function eo(a){a=a|0;en(a+4|0);cj(a);return}function fo(a){a=a|0;eo(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function go(b,d){b=b|0;d=d|0;var e=0;a[b>>0]=0;c[b+4>>2]=d;e=c[(c[d>>2]|0)+-12>>2]|0;if(!(c[d+(e+16)>>2]|0)){e=c[d+(e+72)>>2]|0;if(e)Vn(e)|0;a[b>>0]=1}return}function ho(a){a=a|0;var b=0,d=0;a=a+4|0;d=c[a>>2]|0;b=c[(c[d>>2]|0)+-12>>2]|0;do if((((c[d+(b+24)>>2]|0)!=0?(c[d+(b+16)>>2]|0)==0:0)?(c[d+(b+4)>>2]&8192|0)!=0:0)?!(Za()|0):0){b=c[a>>2]|0;b=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;b=ka(c[(c[b>>2]|0)+24>>2]|0,b|0)|0;d=o;o=0;if(!(d&1)){if((b|0)!=-1)break;b=c[a>>2]|0;d=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+d|0,c[b+(d+16)>>2]|1|0);d=o;o=0;if(!(d&1))break}d=Na(0)|0;Va(d|0)|0;o=0;xa(3);d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}}while(0);return}function io(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+32|0;k=q+20|0;l=q+16|0;n=q+8|0;e=q;o=0;ia(65,n|0,b|0);m=o;o=0;a:do if(m&1){e=Na(0)|0;f=b;g=b;p=19}else{do if(a[n>>0]|0){c[e>>2]=jn(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;o=0;m=ra(37,e|0,43392)|0;j=o;o=0;if(j&1){p=Na(0)|0;Gs(e);e=p}else{Gs(e);g=c[(c[b>>2]|0)+-12>>2]|0;j=c[b+(g+24)>>2]|0;f=b+g|0;g=b+(g+76)|0;e=c[g>>2]|0;do if((e|0)==-1){c[k>>2]=jn(f)|0;o=0;e=ra(37,k|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,h=ra(c[(c[e>>2]|0)+28>>2]|0,e|0,32)|0,r=o,o=0,!(r&1)):0){Gs(k);e=h<<24>>24;c[g>>2]=e;p=10;break}e=Na(0)|0;Gs(k)}else p=10;while(0);if((p|0)==10){r=c[(c[m>>2]|0)+16>>2]|0;c[l>>2]=j;o=0;c[k>>2]=c[l>>2];e=sa(r|0,m|0,k|0,f|0,e&255|0,d|0)|0;r=o;o=0;if(!(r&1)){if(e)break;r=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+r|0,c[b+(r+16)>>2]|5|0);r=o;o=0;if(!(r&1))break}e=Na(0)|0}}ho(n);f=b;g=b;p=19;break a}while(0);ho(n)}while(0);do if((p|0)==19){Va(e|0)|0;o=0;ha(181,f+(c[(c[g>>2]|0)+-12>>2]|0)|0);r=o;o=0;if(!(r&1)){Xa();break}e=Na()|0;o=0;xa(3);r=o;o=0;if(r&1){r=Na(0)|0;ec(r)}else Ya(e|0)}while(0);i=q;return b|0}function jo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+32|0;k=q+20|0;l=q+16|0;n=q+8|0;e=q;o=0;ia(65,n|0,b|0);m=o;o=0;a:do if(m&1){e=Na(0)|0;f=b;g=b;p=19}else{do if(a[n>>0]|0){c[e>>2]=jn(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;o=0;m=ra(37,e|0,43392)|0;j=o;o=0;if(j&1){p=Na(0)|0;Gs(e);e=p}else{Gs(e);g=c[(c[b>>2]|0)+-12>>2]|0;j=c[b+(g+24)>>2]|0;f=b+g|0;g=b+(g+76)|0;e=c[g>>2]|0;do if((e|0)==-1){c[k>>2]=jn(f)|0;o=0;e=ra(37,k|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,h=ra(c[(c[e>>2]|0)+28>>2]|0,e|0,32)|0,r=o,o=0,!(r&1)):0){Gs(k);e=h<<24>>24;c[g>>2]=e;p=10;break}e=Na(0)|0;Gs(k)}else p=10;while(0);if((p|0)==10){r=c[(c[m>>2]|0)+24>>2]|0;c[l>>2]=j;o=0;c[k>>2]=c[l>>2];e=sa(r|0,m|0,k|0,f|0,e&255|0,d|0)|0;r=o;o=0;if(!(r&1)){if(e)break;r=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+r|0,c[b+(r+16)>>2]|5|0);r=o;o=0;if(!(r&1))break}e=Na(0)|0}}ho(n);f=b;g=b;p=19;break a}while(0);ho(n)}while(0);do if((p|0)==19){Va(e|0)|0;o=0;ha(181,f+(c[(c[g>>2]|0)+-12>>2]|0)|0);r=o;o=0;if(!(r&1)){Xa();break}e=Na()|0;o=0;xa(3);r=o;o=0;if(r&1){r=Na(0)|0;ec(r)}else Ya(e|0)}while(0);i=q;return b|0}function ko(a){a=a|0;en(a+4|0);return}function lo(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0);return}function mo(a){a=a|0;en(a+4|0);cj(a);return}function no(a){a=a|0;mo(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function oo(b,d){b=b|0;d=d|0;var e=0;a[b>>0]=0;c[b+4>>2]=d;e=c[(c[d>>2]|0)+-12>>2]|0;if(!(c[d+(e+16)>>2]|0)){e=c[d+(e+72)>>2]|0;if(e)$n(e)|0;a[b>>0]=1}return}function po(a){a=a|0;var b=0,d=0;a=a+4|0;d=c[a>>2]|0;b=c[(c[d>>2]|0)+-12>>2]|0;do if((((c[d+(b+24)>>2]|0)!=0?(c[d+(b+16)>>2]|0)==0:0)?(c[d+(b+4)>>2]&8192|0)!=0:0)?!(Za()|0):0){b=c[a>>2]|0;b=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;b=ka(c[(c[b>>2]|0)+24>>2]|0,b|0)|0;d=o;o=0;if(!(d&1)){if((b|0)!=-1)break;b=c[a>>2]|0;d=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+d|0,c[b+(d+16)>>2]|1|0);d=o;o=0;if(!(d&1))break}d=Na(0)|0;Va(d|0)|0;o=0;xa(3);d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}}while(0);return}function qo(a){a=a|0;return 57453}function ro(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)!=1&(c|0)<257)wm(a,b,c);else Gm(a,57462,35);return}function so(){if((a[1048]|0)==0?(Ha(1048)|0)!=0:0){c[10778]=43084;kb(72,43112,n|0)|0;Pa(1048)}return 43112}function to(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;f=e+8|0;g=e;j=d;h=c[j+4>>2]|0;d=g;c[d>>2]=c[j>>2];c[d+4>>2]=h;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];ym(a,f,b);c[a>>2]=43048;i=e;return}function uo(a){a=a|0;Bm(a);return}function vo(a){a=a|0;Bm(a);cj(a);return}function wo(a){a=a|0;en(a);cj(a);return}function xo(a){a=a|0;cj(a);return}function yo(a){a=a|0;return}function zo(a){a=a|0;return}function Ao(a){a=a|0;cj(a);return}function Bo(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((e|0)==(f|0))h=6;else while(1){if((c|0)==(d|0)){c=-1;break a}b=a[c>>0]|0;g=a[e>>0]|0;if(b<<24>>24>24){c=-1;break a}if(g<<24>>24>24){c=1;break a}c=c+1|0;e=e+1|0;if((e|0)==(f|0)){h=6;break}}while(0);if((h|0)==6)c=(c|0)!=(d|0)&1;return c|0}function Co(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;bn(a,c,d);return}function Do(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)==(d|0))b=0;else{b=0;do{b=(a[c>>0]|0)+(b<<4)|0;e=b&-268435456;b=(e>>>24|e)^b;c=c+1|0}while((c|0)!=(d|0))}return b|0}function Eo(a){a=a|0;return}function Fo(a){a=a|0;cj(a);return}function Go(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((e|0)==(f|0))h=6;else while(1){if((b|0)==(d|0)){b=-1;break a}a=c[b>>2]|0;g=c[e>>2]|0;if((a|0)<(g|0)){b=-1;break a}if((g|0)<(a|0)){b=1;break a}b=b+4|0;e=e+4|0;if((e|0)==(f|0)){h=6;break}}while(0);if((h|0)==6)b=(b|0)!=(d|0)&1;return b|0}function Ho(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cn(a,c,d);return}function Io(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((b|0)==(d|0))a=0;else{a=0;do{a=(c[b>>2]|0)+(a<<4)|0;e=a&-268435456;a=(e>>>24|e)^a;b=b+4|0}while((b|0)!=(d|0))}return a|0}function Jo(a){a=a|0;return}function Ko(a){a=a|0;cj(a);return}function Lo(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;q=s+56|0;j=s+52|0;n=s+48|0;k=s+44|0;l=s+40|0;m=s+36|0;p=s+32|0;t=s+8|0;r=s;a:do if(!(c[f+4>>2]&1)){c[n>>2]=-1;t=c[(c[b>>2]|0)+16>>2]|0;c[k>>2]=c[d>>2];c[l>>2]=c[e>>2];c[j>>2]=c[k>>2];c[q>>2]=c[l>>2];j=Db[t&63](b,j,q,f,g,n)|0;c[d>>2]=j;switch(c[n>>2]|0){case 0:{a[h>>0]=0;break a}case 1:{a[h>>0]=1;break a}default:{a[h>>0]=1;c[g>>2]=4;break a}}}else{j=jn(f)|0;c[m>>2]=j;o=0;b=ra(37,m|0,44220)|0;n=o;o=0;do if(!(n&1)){pm(j)|0;j=jn(f)|0;c[p>>2]=j;o=0;l=ra(37,p|0,44360)|0;p=o;o=0;if(p&1){t=Na()|0;pm(j)|0;j=t;break}pm(j)|0;o=0;ia(c[(c[l>>2]|0)+24>>2]|0,t|0,l|0);p=o;o=0;if(!(p&1)){k=t+12|0;o=0;ia(c[(c[l>>2]|0)+28>>2]|0,k|0,l|0);p=o;o=0;if(!(p&1)){c[r>>2]=c[e>>2];o=0;c[q>>2]=c[r>>2];j=ea(7,d|0,q|0,t|0,t+24|0,b|0,g|0,1)|0;g=o;o=0;if(g&1){j=Na()|0;Im(t+12|0);Im(t);break}else{a[h>>0]=(j|0)==(t|0)&1;j=c[d>>2]|0;Im(t+12|0);Im(t);break a}}}else k=t;j=Na()|0;l=D;if((t|0)!=(k|0))do{k=k+-12|0;Im(k)}while((k|0)!=(t|0))}else{t=Na()|0;pm(j)|0;j=t}while(0);Ya(j|0)}while(0);i=s;return j|0}function Mo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=yu(a,k,j,e,f,g)|0;i=h;return a|0}function No(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=zu(a,k,j,e,f,g)|0;i=h;return a|0}function Oo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Au(a,k,j,e,f,g)|0;i=h;return a|0}function Po(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Bu(a,k,j,e,f,g)|0;i=h;return a|0}function Qo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Cu(a,k,j,e,f,g)|0;i=h;return a|0}function Ro(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Du(a,k,j,e,f,g)|0;i=h;return a|0}function So(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Eu(a,k,j,e,f,g)|0;i=h;return a|0}function To(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Fu(a,k,j,e,f,g)|0;i=h;return a|0}function Uo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Gu(a,k,j,e,f,g)|0;i=h;return a|0}function Vo(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;C=i;i=i+240|0;x=C;s=C+208|0;E=C+32|0;b=C+28|0;D=C+16|0;w=C+12|0;u=C+48|0;v=C+8|0;t=C+4|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;o=0;g=ka(68,g|0)|0;r=o;o=0;do if(r&1)b=Na()|0;else{c[b>>2]=g;o=0;b=ra(37,b|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,va(c[(c[b>>2]|0)+32>>2]|0,b|0,57498,57524,s|0)|0,r=o,o=0,!(r&1)):0){pm(g)|0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;if(!(a[D>>0]&1))b=10;else b=(c[D>>2]&-2)+-1|0;o=0;wa(8,D|0,b|0,0);r=o;o=0;a:do if(!(r&1)){q=D+8|0;r=D+1|0;g=(a[D>>0]&1)==0?r:c[q>>2]|0;c[w>>2]=g;c[v>>2]=u;c[t>>2]=0;p=D+4|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){F=29;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){F=29;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;F=19;break}}else F=19;while(0);if((F|0)==19){F=0;if(l){k=0;break}else k=0}l=a[D>>0]|0;l=(l&1)==0?(l&255)>>>1:c[p>>2]|0;if((c[w>>2]|0)==(g+l|0)){o=0;wa(8,D|0,l<<1|0,0);n=o;o=0;if(n&1){F=29;break}if(!(a[D>>0]&1))g=10;else g=(c[D>>2]&-2)+-1|0;o=0;wa(8,D|0,g|0,0);n=o;o=0;if(n&1){F=29;break}g=(a[D>>0]&1)==0?r:c[q>>2]|0;c[w>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;G=o;o=0;if(G&1){F=29;break}}else l=d[l>>0]|0;if(Wo(l&255,16,g,w,t,0,E,u,v,s)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;G=o;o=0;if(G&1){F=29;break}else continue}else{c[m>>2]=k+1;continue}}if((F|0)==29){b=Na()|0;break}o=0;wa(8,D|0,(c[w>>2]|0)-g|0,0);G=o;o=0;if((!(G&1)?(y=a[D>>0]|0,z=c[q>>2]|0,o=0,A=ua(3)|0,G=o,o=0,!(G&1)):0)?(o=0,c[x>>2]=j,B=va(16,((y&1)==0?r:z)|0,A|0,58882,x|0)|0,G=o,o=0,!(G&1)):0){if((B|0)!=1)c[h>>2]=4;if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;G=o;o=0;if(G&1){F=30;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;G=o;o=0;if(G&1){F=30;break a}if((b|0)==-1){c[f>>2]=0;F=55;break}}if(!g)F=56}else F=55;while(0);if((F|0)==55?g:0)F=56;if((F|0)==56)c[h>>2]=c[h>>2]|2;G=c[e>>2]|0;Im(D);Im(E);i=C;return G|0}else F=30}else F=30;while(0);if((F|0)==30)b=Na()|0;Im(D);break}b=Na()|0;pm(g)|0}while(0);Im(E);Ya(b|0);return 0}function Wo(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;o=c[f>>2]|0;p=(o|0)==(e|0);do if(p){m=(a[l+24>>0]|0)==b<<24>>24;if(!m?(a[l+25>>0]|0)!=b<<24>>24:0){n=5;break}c[f>>2]=e+1;a[e>>0]=m?43:45;c[g>>2]=0;m=0}else n=5;while(0);a:do if((n|0)==5){n=a[i>>0]|0;if(b<<24>>24==h<<24>>24?(((n&1)==0?(n&255)>>>1:c[i+4>>2]|0)|0)!=0:0){m=c[k>>2]|0;if((m-j|0)>=160){m=0;break}d=c[g>>2]|0;c[k>>2]=m+4;c[m>>2]=d;c[g>>2]=0;m=0;break}i=l+26|0;m=l;while(1){if((a[m>>0]|0)==b<<24>>24)break;m=m+1|0;if((m|0)==(i|0)){m=i;break}}m=m-l|0;if((m|0)>23)m=-1;else{switch(d|0){case 10:case 8:{if((m|0)>=(d|0)){m=-1;break a}break}case 16:{if((m|0)>=22){if(p){m=-1;break a}if((o-e|0)>=3){m=-1;break a}if((a[o+-1>>0]|0)!=48){m=-1;break a}c[g>>2]=0;m=a[57498+m>>0]|0;c[f>>2]=o+1;a[o>>0]=m;m=0;break a}break}default:{}}m=a[57498+m>>0]|0;c[f>>2]=o+1;a[o>>0]=m;c[g>>2]=(c[g>>2]|0)+1;m=0}}while(0);return m|0}function Xo(){var b=0,d=0;do if((a[1968]|0)==0?(Ha(1968)|0)!=0:0){o=0;b=ma(31,2147483647,58885,0)|0;d=o;o=0;if(d&1){d=Na()|0;sb(1968);Ya(d|0)}else{c[11196]=b;Pa(1968);break}}while(0);return c[11196]|0}function Yo(a){a=a|0;return}function Zo(a){a=a|0;cj(a);return}function _o(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;q=s+56|0;j=s+52|0;n=s+48|0;k=s+44|0;l=s+40|0;m=s+36|0;p=s+32|0;t=s+8|0;r=s;a:do if(!(c[f+4>>2]&1)){c[n>>2]=-1;t=c[(c[b>>2]|0)+16>>2]|0;c[k>>2]=c[d>>2];c[l>>2]=c[e>>2];c[j>>2]=c[k>>2];c[q>>2]=c[l>>2];j=Db[t&63](b,j,q,f,g,n)|0;c[d>>2]=j;switch(c[n>>2]|0){case 0:{a[h>>0]=0;break a}case 1:{a[h>>0]=1;break a}default:{a[h>>0]=1;c[g>>2]=4;break a}}}else{j=jn(f)|0;c[m>>2]=j;o=0;b=ra(37,m|0,44212)|0;n=o;o=0;do if(!(n&1)){pm(j)|0;j=jn(f)|0;c[p>>2]=j;o=0;l=ra(37,p|0,44368)|0;p=o;o=0;if(p&1){t=Na()|0;pm(j)|0;j=t;break}pm(j)|0;o=0;ia(c[(c[l>>2]|0)+24>>2]|0,t|0,l|0);p=o;o=0;if(!(p&1)){k=t+12|0;o=0;ia(c[(c[l>>2]|0)+28>>2]|0,k|0,l|0);p=o;o=0;if(!(p&1)){c[r>>2]=c[e>>2];o=0;c[q>>2]=c[r>>2];j=ea(8,d|0,q|0,t|0,t+24|0,b|0,g|0,1)|0;g=o;o=0;if(g&1){j=Na()|0;Wm(t+12|0);Wm(t);break}else{a[h>>0]=(j|0)==(t|0)&1;j=c[d>>2]|0;Wm(t+12|0);Wm(t);break a}}}else k=t;j=Na()|0;l=D;if((t|0)!=(k|0))do{k=k+-12|0;Wm(k)}while((k|0)!=(t|0))}else{t=Na()|0;pm(j)|0;j=t}while(0);Ya(j|0)}while(0);i=s;return j|0}function $o(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ju(a,k,j,e,f,g)|0;i=h;return a|0}function ap(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ku(a,k,j,e,f,g)|0;i=h;return a|0}function bp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Lu(a,k,j,e,f,g)|0;i=h;return a|0}function cp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Mu(a,k,j,e,f,g)|0;i=h;return a|0}function dp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Nu(a,k,j,e,f,g)|0;i=h;return a|0}function ep(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ou(a,k,j,e,f,g)|0;i=h;return a|0}function fp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Pu(a,k,j,e,f,g)|0;i=h;return a|0}function gp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Qu(a,k,j,e,f,g)|0;i=h;return a|0}function hp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ru(a,k,j,e,f,g)|0;i=h;return a|0}function ip(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;B=i;i=i+320|0;w=B;r=B+208|0;D=B+32|0;b=B+28|0;C=B+16|0;v=B+12|0;t=B+48|0;u=B+8|0;s=B+4|0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;o=0;f=ka(68,f|0)|0;q=o;o=0;do if(q&1)b=Na()|0;else{c[b>>2]=f;o=0;b=ra(37,b|0,44212)|0;q=o;o=0;if(!(q&1)?(o=0,va(c[(c[b>>2]|0)+48>>2]|0,b|0,57498,57524,r|0)|0,q=o,o=0,!(q&1)):0){pm(f)|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;if(!(a[C>>0]&1))b=10;else b=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,b|0,0);q=o;o=0;a:do if(!(q&1)){p=C+8|0;q=C+1|0;b=(a[C>>0]&1)==0?q:c[p>>2]|0;c[v>>2]=b;c[u>>2]=t;c[s>>2]=0;n=C+4|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){E=30;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){E=30;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k){j=l;break}else{j=l;break b}else{c[e>>2]=0;E=20;break}}else E=20;while(0);if((E|0)==20){E=0;if(k){j=0;break}else j=0}k=a[C>>0]|0;k=(k&1)==0?(k&255)>>>1:c[n>>2]|0;if((c[v>>2]|0)==(b+k|0)){o=0;wa(8,C|0,k<<1|0,0);m=o;o=0;if(m&1){E=30;break}if(!(a[C>>0]&1))b=10;else b=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,b|0,0);m=o;o=0;if(m&1){E=30;break}b=(a[C>>0]&1)==0?q:c[p>>2]|0;c[v>>2]=b+k}l=f+12|0;k=c[l>>2]|0;m=f+16|0;if((k|0)==(c[m>>2]|0)){o=0;k=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;F=o;o=0;if(F&1){E=30;break}}else k=c[k>>2]|0;if(jp(k,16,b,v,s,0,D,t,u,r)|0)break;j=c[l>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;F=o;o=0;if(F&1){E=30;break}else{j=f;continue}}else{c[l>>2]=j+4;j=f;continue}}if((E|0)==30){b=Na()|0;break}o=0;wa(8,C|0,(c[v>>2]|0)-b|0,0);F=o;o=0;if((!(F&1)?(x=a[C>>0]|0,y=c[p>>2]|0,o=0,z=ua(3)|0,F=o,o=0,!(F&1)):0)?(o=0,c[w>>2]=h,A=va(16,((x&1)==0?q:y)|0,z|0,58882,w|0)|0,F=o,o=0,!(F&1)):0){if((A|0)!=1)c[g>>2]=4;if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;F=o;o=0;if(F&1){E=31;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;F=o;o=0;if(F&1){E=31;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{E=59;break}else{c[e>>2]=0;E=57;break}}else E=57;while(0);if((E|0)==57?f:0)E=59;if((E|0)==59)c[g>>2]=c[g>>2]|2;F=c[d>>2]|0;Im(C);Im(D);i=B;return F|0}else E=31}else E=31;while(0);if((E|0)==31)b=Na()|0;Im(C);break}b=Na()|0;pm(f)|0}while(0);Im(D);Ya(b|0);return 0}function jp(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;o=c[f>>2]|0;p=(o|0)==(e|0);do if(p){m=(c[l+96>>2]|0)==(b|0);if(!m?(c[l+100>>2]|0)!=(b|0):0){n=5;break}c[f>>2]=e+1;a[e>>0]=m?43:45;c[g>>2]=0;m=0}else n=5;while(0);a:do if((n|0)==5){n=a[i>>0]|0;if((b|0)==(h|0)?(((n&1)==0?(n&255)>>>1:c[i+4>>2]|0)|0)!=0:0){m=c[k>>2]|0;if((m-j|0)>=160){m=0;break}d=c[g>>2]|0;c[k>>2]=m+4;c[m>>2]=d;c[g>>2]=0;m=0;break}i=l+104|0;m=l;while(1){if((c[m>>2]|0)==(b|0))break;m=m+4|0;if((m|0)==(i|0)){m=i;break}}m=m-l|0;i=m>>2;if((m|0)>92)m=-1;else{switch(d|0){case 10:case 8:{if((i|0)>=(d|0)){m=-1;break a}break}case 16:{if((m|0)>=88){if(p){m=-1;break a}if((o-e|0)>=3){m=-1;break a}if((a[o+-1>>0]|0)!=48){m=-1;break a}c[g>>2]=0;m=a[57498+i>>0]|0;c[f>>2]=o+1;a[o>>0]=m;m=0;break a}break}default:{}}m=a[57498+i>>0]|0;c[f>>2]=o+1;a[o>>0]=m;c[g>>2]=(c[g>>2]|0)+1;m=0}}while(0);return m|0}function kp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;k=l;d=jn(d)|0;c[k>>2]=d;o=0;g=ra(37,k|0,44220)|0;m=o;o=0;if((((!(m&1)?(o=0,va(c[(c[g>>2]|0)+32>>2]|0,g|0,57498,57524,e|0)|0,m=o,o=0,!(m&1)):0)?(o=0,j=ra(37,k|0,44360)|0,m=o,o=0,!(m&1)):0)?(o=0,h=ka(c[(c[j>>2]|0)+16>>2]|0,j|0)|0,m=o,o=0,!(m&1)):0)?(a[f>>0]=h,o=0,ia(c[(c[j>>2]|0)+20>>2]|0,b|0,j|0),m=o,o=0,!(m&1)):0){pm(d)|0;i=l;return}m=Na()|0;pm(d)|0;Ya(m|0)}function lp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0;n=i;i=i+16|0;m=n;d=jn(d)|0;c[m>>2]=d;o=0;h=ra(37,m|0,44220)|0;p=o;o=0;if(((((!(p&1)?(o=0,va(c[(c[h>>2]|0)+32>>2]|0,h|0,57498,57530,e|0)|0,p=o,o=0,!(p&1)):0)?(o=0,l=ra(37,m|0,44360)|0,p=o,o=0,!(p&1)):0)?(o=0,j=ka(c[(c[l>>2]|0)+12>>2]|0,l|0)|0,p=o,o=0,!(p&1)):0)?(a[f>>0]=j,o=0,k=ka(c[(c[l>>2]|0)+16>>2]|0,l|0)|0,p=o,o=0,!(p&1)):0)?(a[g>>0]=k,o=0,ia(c[(c[l>>2]|0)+20>>2]|0,b|0,l|0),p=o,o=0,!(p&1)):0){pm(d)|0;i=n;return}p=Na()|0;pm(d)|0;Ya(p|0)}function mp(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;a:do if(b<<24>>24==i<<24>>24)if(a[e>>0]|0){a[e>>0]=0;f=c[h>>2]|0;c[h>>2]=f+1;a[f>>0]=46;f=a[k>>0]|0;if((((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0?(p=c[m>>2]|0,(p-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;p=0}else p=0}else p=-1;else{if(b<<24>>24==j<<24>>24?(j=a[k>>0]|0,(((j&1)==0?(j&255)>>>1:c[k+4>>2]|0)|0)!=0):0){if(!(a[e>>0]|0)){p=-1;break}p=c[m>>2]|0;if((p-l|0)>=160){p=0;break}l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;c[n>>2]=0;p=0;break}i=o+32|0;p=o;while(1){if((a[p>>0]|0)==b<<24>>24)break;p=p+1|0;if((p|0)==(i|0)){p=i;break}}i=p-o|0;if((i|0)>31)p=-1;else{j=a[57498+i>>0]|0;switch(i|0){case 24:case 25:{p=c[h>>2]|0;if((p|0)!=(g|0)?(d[p+-1>>0]&95|0)!=(d[f>>0]&127|0):0){p=-1;break a}c[h>>2]=p+1;a[p>>0]=j;p=0;break a}case 23:case 22:{a[f>>0]=80;p=c[h>>2]|0;c[h>>2]=p+1;a[p>>0]=j;p=0;break a}default:{p=j&95;if((((p|0)==(a[f>>0]|0)?(a[f>>0]=p|128,(a[e>>0]|0)!=0):0)?(a[e>>0]=0,f=a[k>>0]|0,(((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0):0)?(q=c[m>>2]|0,(q-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=q+4;c[q>>2]=l}m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=j;if((i|0)>21){p=0;break a}c[n>>2]=(c[n>>2]|0)+1;p=0;break a}}}}while(0);return p|0}function np(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+16|0;j=k;b=jn(b)|0;c[j>>2]=b;o=0;f=ra(37,j|0,44212)|0;l=o;o=0;if((((!(l&1)?(o=0,va(c[(c[f>>2]|0)+48>>2]|0,f|0,57498,57524,d|0)|0,l=o,o=0,!(l&1)):0)?(o=0,h=ra(37,j|0,44368)|0,l=o,o=0,!(l&1)):0)?(o=0,g=ka(c[(c[h>>2]|0)+16>>2]|0,h|0)|0,l=o,o=0,!(l&1)):0)?(c[e>>2]=g,o=0,ia(c[(c[h>>2]|0)+20>>2]|0,a|0,h|0),l=o,o=0,!(l&1)):0){pm(b)|0;i=k;return}l=Na()|0;pm(b)|0;Ya(l|0)}function op(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;l=m;b=jn(b)|0;c[l>>2]=b;o=0;g=ra(37,l|0,44212)|0;n=o;o=0;if(((((!(n&1)?(o=0,va(c[(c[g>>2]|0)+48>>2]|0,g|0,57498,57530,d|0)|0,n=o,o=0,!(n&1)):0)?(o=0,k=ra(37,l|0,44368)|0,n=o,o=0,!(n&1)):0)?(o=0,h=ka(c[(c[k>>2]|0)+12>>2]|0,k|0)|0,n=o,o=0,!(n&1)):0)?(c[e>>2]=h,o=0,j=ka(c[(c[k>>2]|0)+16>>2]|0,k|0)|0,n=o,o=0,!(n&1)):0)?(c[f>>2]=j,o=0,ia(c[(c[k>>2]|0)+20>>2]|0,a|0,k|0),n=o,o=0,!(n&1)):0){pm(b)|0;i=m;return}n=Na()|0;pm(b)|0;Ya(n|0)}function pp(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;a:do if((b|0)==(i|0))if(a[e>>0]|0){a[e>>0]=0;f=c[h>>2]|0;c[h>>2]=f+1;a[f>>0]=46;f=a[k>>0]|0;if((((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0?(p=c[m>>2]|0,(p-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;p=0}else p=0}else p=-1;else{if((b|0)==(j|0)?(j=a[k>>0]|0,(((j&1)==0?(j&255)>>>1:c[k+4>>2]|0)|0)!=0):0){if(!(a[e>>0]|0)){p=-1;break}p=c[m>>2]|0;if((p-l|0)>=160){p=0;break}l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;c[n>>2]=0;p=0;break}i=o+128|0;p=o;while(1){if((c[p>>2]|0)==(b|0))break;p=p+4|0;if((p|0)==(i|0)){p=i;break}}i=p-o|0;p=i>>2;if((i|0)<=124){j=a[57498+p>>0]|0;switch(p|0){case 24:case 25:{p=c[h>>2]|0;if((p|0)!=(g|0)?(d[p+-1>>0]&95|0)!=(d[f>>0]&127|0):0){p=-1;break a}c[h>>2]=p+1;a[p>>0]=j;p=0;break a}case 23:case 22:{a[f>>0]=80;break}default:{p=j&95;if((((p|0)==(a[f>>0]|0)?(a[f>>0]=p|128,(a[e>>0]|0)!=0):0)?(a[e>>0]=0,f=a[k>>0]|0,(((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0):0)?(q=c[m>>2]|0,(q-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=q+4;c[q>>2]=l}}}m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=j;if((i|0)>84)p=0;else{c[n>>2]=(c[n>>2]|0)+1;p=0}}else p=-1}while(0);return p|0}function qp(a){a=a|0;return}function rp(a){a=a|0;cj(a);return}function sp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+20|0;j=n+16|0;k=n+12|0;m=n;a:do if(!(c[e+4>>2]&1)){m=c[(c[b>>2]|0)+24>>2]|0;c[j>>2]=c[d>>2];c[h>>2]=c[j>>2];h=Mb[m&31](b,h,e,f,g&1)|0}else{h=jn(e)|0;c[k>>2]=h;o=0;j=ra(37,k|0,44360)|0;l=o;o=0;b:do if(l&1){n=Na()|0;pm(h)|0;h=n}else{pm(h)|0;h=c[j>>2]|0;if(g)Cb[c[h+24>>2]&127](m,j);else Cb[c[h+28>>2]&127](m,j);b=a[m>>0]|0;l=(b&1)==0;h=m+1|0;g=m+8|0;k=l?h:m+1|0;h=l?h:c[m+8>>2]|0;l=m+4|0;e=(b&1)==0;c:do if((h|0)!=((e?k:c[g>>2]|0)+(e?(b&255)>>>1:c[l>>2]|0)|0)){d:while(1){j=a[h>>0]|0;f=c[d>>2]|0;do if(f){e=f+24|0;b=c[e>>2]|0;if((b|0)!=(c[f+28>>2]|0)){c[e>>2]=b+1;a[b>>0]=j;break}o=0;j=ra(c[(c[f>>2]|0)+52>>2]|0,f|0,j&255|0)|0;b=o;o=0;if(b&1)break d;if((j|0)==-1)c[d>>2]=0}while(0);h=h+1|0;b=a[m>>0]|0;e=(b&1)==0;if((h|0)==((e?k:c[g>>2]|0)+(e?(b&255)>>>1:c[l>>2]|0)|0))break c}h=Na()|0;Im(m);break b}while(0);h=c[d>>2]|0;Im(m);break a}while(0);Ya(h|0)}while(0);i=n;return h|0}function tp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+64|0;h=n;q=n+56|0;r=n+44|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,1,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(1,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=cd(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function up(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(e&2048){a[b>>0]=43;b=b+1|0}if(e&512){a[b>>0]=35;b=b+1|0}f=a[c>>0]|0;if(f<<24>>24){g=c;while(1){g=g+1|0;c=b+1|0;a[b>>0]=f;f=a[g>>0]|0;if(!(f<<24>>24)){b=c;break}else b=c}}a:do switch(e&74|0){case 64:{a[b>>0]=111;break}case 8:if(!(e&16384)){a[b>>0]=120;break a}else{a[b>>0]=88;break a}default:if(d){a[b>>0]=100;break a}else{a[b>>0]=117;break a}}while(0);return}function vp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;a:do switch(c[e+4>>2]&176|0){case 16:{e=a[b>>0]|0;switch(e<<24>>24){case 43:case 45:{b=b+1|0;break a}default:{}}if((d-b|0)>1&e<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:{f=7;break a}}b=b+2|0}else f=7;break}case 32:{b=d;break}default:f=7}while(0);return b|0}function wp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+16|0;w=v;t=Is(j,44220)|0;m=Is(j,44360)|0;Cb[c[(c[m>>2]|0)+20>>2]&127](w,m);r=a[w>>0]|0;s=w+4|0;a:do if(!(((r&1)==0?(r&255)>>>1:c[s>>2]|0)|0)){o=0;va(c[(c[t>>2]|0)+32>>2]|0,t|0,b|0,e|0,f|0)|0;u=o;o=0;if(u&1)u=5;else{j=f+(e-b)|0;c[h>>2]=j;u=29}}else{c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,j|0)|0;r=o;o=0;if(r&1){u=5;break a}l=c[h>>2]|0;c[h>>2]=l+1;a[l>>0]=j;l=b+1|0;break}default:l=b}b:do if((e-l|0)>1?(a[l>>0]|0)==48:0){j=l+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:break b}o=0;k=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,48)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+1;a[r>>0]=k;o=0;j=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,a[j>>0]|0)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+1;a[r>>0]=j;l=l+2|0}while(0);if((l|0)!=(e|0)?(n=e+-1|0,l>>>0>>0):0){k=l;j=n;do{r=a[k>>0]|0;a[k>>0]=a[j>>0]|0;a[j>>0]=r;k=k+1|0;j=j+-1|0}while(k>>>0>>0)}o=0;n=ka(c[(c[m>>2]|0)+16>>2]|0,m|0)|0;r=o;o=0;if(!(r&1)){p=w+8|0;q=w+1|0;c:do if(l>>>0>>0){j=0;k=0;r=l;while(1){m=a[((a[w>>0]&1)==0?q:c[p>>2]|0)+k>>0]|0;if(m<<24>>24!=0&(j|0)==(m<<24>>24|0)){j=c[h>>2]|0;c[h>>2]=j+1;a[j>>0]=n;j=a[w>>0]|0;m=0;k=(k>>>0<(((j&1)==0?(j&255)>>>1:c[s>>2]|0)+-1|0)>>>0&1)+k|0}else m=j;o=0;j=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,a[r>>0]|0)|0;x=o;o=0;if(x&1)break;x=c[h>>2]|0;c[h>>2]=x+1;a[x>>0]=j;r=r+1|0;if(r>>>0>=e>>>0)break c;else j=m+1|0}j=Na()|0;break a}while(0);k=b;j=f+(l-k)|0;b=c[h>>2]|0;if((j|0)==(b|0)){b=k;u=29}else{b=b+-1|0;if(j>>>0>>0)do{x=a[j>>0]|0;a[j>>0]=a[b>>0]|0;a[b>>0]=x;j=j+1|0;b=b+-1|0}while(j>>>0>>0);b=k;j=c[h>>2]|0;u=29}}else u=5}while(0);if((u|0)==5)j=Na()|0;else if((u|0)==29){c[g>>2]=(d|0)==(e|0)?j:f+(d-b)|0;Im(w);i=v;return}Im(w);Ya(j|0)}function xp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+96|0;h=n+8|0;a=n;q=n+74|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,1,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,22,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(1,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=cd(h,k,r,s,d,e)|0;i=n;return s|0}return 0}function yp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+64|0;h=n;q=n+56|0;r=n+44|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,0,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(1,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=cd(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function zp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+112|0;h=n+8|0;a=n;q=n+75|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,0,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,23,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(1,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=cd(h,k,r,s,d,e)|0;i=n;return s|0}return 0}function Ap(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+176|0;u=z+84|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+88|0;t=z+80|0;k=z+118|0;y=z+76|0;x=z+72|0;v=z+68|0;w=z+64|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58898,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,c[q>>2]=c[d+8>>2],h[q+8>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<1)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(2,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(39,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Bp(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(d&2048){a[b>>0]=43;b=b+1|0}if(d&1024){a[b>>0]=35;b=b+1|0}h=d&260;f=d>>>14;i=(h|0)==260;if(i)g=0;else{a[b>>0]=46;a[b+1>>0]=42;b=b+2|0;g=1}d=a[c>>0]|0;if(d<<24>>24){e=b;while(1){c=c+1|0;b=e+1|0;a[e>>0]=d;d=a[c>>0]|0;if(!(d<<24>>24))break;else e=b}}a:do switch(h|0){case 4:if(!(f&1)){a[b>>0]=102;break a}else{a[b>>0]=70;break a}case 256:if(!(f&1)){a[b>>0]=101;break a}else{a[b>>0]=69;break a}default:{d=(f&1|0)!=0;if(i)if(d){a[b>>0]=65;break a}else{a[b>>0]=97;break a}else if(d){a[b>>0]=71;break a}else{a[b>>0]=103;break a}}}while(0);return g|0}function Cp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;z=i;i=i+16|0;A=z;y=Is(j,44220)|0;w=Is(j,44360)|0;Cb[c[(c[w>>2]|0)+20>>2]&127](A,w);c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,j|0)|0;x=o;o=0;if(x&1)v=8;else{n=c[h>>2]|0;c[h>>2]=n+1;a[n>>0]=j;n=b+1|0;v=10}break}default:{n=b;v=10}}a:do if((v|0)==10){x=e;b:do if((x-n|0)>1?(a[n>>0]|0)==48:0){l=n+1|0;switch(a[l>>0]|0){case 88:case 120:break;default:{v=11;break b}}o=0;j=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,48)|0;u=o;o=0;if(u&1){v=8;break a}u=c[h>>2]|0;c[h>>2]=u+1;a[u>>0]=j;n=n+2|0;o=0;j=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,a[l>>0]|0)|0;u=o;o=0;if(u&1){v=8;break a}u=c[h>>2]|0;c[h>>2]=u+1;a[u>>0]=j;if(n>>>0>>0){j=n;while(1){l=a[j>>0]|0;o=0;m=ua(3)|0;u=o;o=0;if(u&1)break;o=0;l=ra(39,l<<24>>24|0,m|0)|0;u=o;o=0;if(u&1)break;if(!l){u=n;break b}j=j+1|0;if(j>>>0>=e>>>0){u=n;break b}}j=Na()|0;break a}else{u=n;j=n}}else v=11;while(0);c:do if((v|0)==11)if(n>>>0>>0){j=n;while(1){l=a[j>>0]|0;o=0;m=ua(3)|0;u=o;o=0;if(u&1)break;o=0;l=ra(40,l<<24>>24|0,m|0)|0;u=o;o=0;if(u&1)break;if(!l){u=n;break c}j=j+1|0;if(j>>>0>=e>>>0){u=n;break c}}j=Na()|0;break a}else{u=n;j=n}while(0);s=a[A>>0]|0;t=A+4|0;if(((s&1)==0?(s&255)>>>1:c[t>>2]|0)|0){if((u|0)!=(j|0)?(p=j+-1|0,u>>>0

>>0):0){m=u;l=p;do{s=a[m>>0]|0;a[m>>0]=a[l>>0]|0;a[l>>0]=s;m=m+1|0;l=l+-1|0}while(m>>>0>>0)}o=0;p=ka(c[(c[w>>2]|0)+16>>2]|0,w|0)|0;s=o;o=0;if(s&1){v=8;break}q=A+8|0;r=A+1|0;d:do if(u>>>0>>0){l=0;m=0;s=u;while(1){n=a[((a[A>>0]&1)==0?r:c[q>>2]|0)+m>>0]|0;if(n<<24>>24>0&(l|0)==(n<<24>>24|0)){l=c[h>>2]|0;c[h>>2]=l+1;a[l>>0]=p;l=a[A>>0]|0;n=0;m=(m>>>0<(((l&1)==0?(l&255)>>>1:c[t>>2]|0)+-1|0)>>>0&1)+m|0}else n=l;o=0;l=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,a[s>>0]|0)|0;B=o;o=0;if(B&1)break;B=c[h>>2]|0;c[h>>2]=B+1;a[B>>0]=l;s=s+1|0;if(s>>>0>=j>>>0)break d;else l=n+1|0}j=Na()|0;break a}while(0);l=f+(u-b)|0;m=c[h>>2]|0;if((l|0)!=(m|0)?(k=m+-1|0,l>>>0>>0):0){do{B=a[l>>0]|0;a[l>>0]=a[k>>0]|0;a[k>>0]=B;l=l+1|0;k=k+-1|0}while(l>>>0>>0);l=y}else l=y}else{o=0;va(c[(c[y>>2]|0)+32>>2]|0,y|0,u|0,j|0,c[h>>2]|0)|0;B=o;o=0;if(B&1){v=8;break}c[h>>2]=(c[h>>2]|0)+(j-u);l=y}e:do if(j>>>0>>0){while(1){k=a[j>>0]|0;if(k<<24>>24==46)break;o=0;k=ra(c[(c[l>>2]|0)+28>>2]|0,y|0,k|0)|0;B=o;o=0;if(B&1){v=4;break}B=c[h>>2]|0;c[h>>2]=B+1;a[B>>0]=k;j=j+1|0;if(j>>>0>=e>>>0)break e}if((v|0)==4){j=Na()|0;break a}o=0;k=ka(c[(c[w>>2]|0)+12>>2]|0,w|0)|0;B=o;o=0;if(B&1){v=8;break a}B=c[h>>2]|0;c[h>>2]=B+1;a[B>>0]=k;j=j+1|0}while(0);o=0;va(c[(c[y>>2]|0)+32>>2]|0,y|0,j|0,e|0,c[h>>2]|0)|0;B=o;o=0;if(B&1)v=8;else{B=(c[h>>2]|0)+(x-j)|0;c[h>>2]=B;c[g>>2]=(d|0)==(e|0)?B:f+(d-b)|0;Im(A);i=z;return}}while(0);if((v|0)==8)j=Na()|0;Im(A);Ya(j|0)}function Dp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+176|0;u=z+76|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+80|0;t=z+72|0;k=z+110|0;y=z+68|0;x=z+64|0;v=z+60|0;w=z+56|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58899,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,h[q>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<1)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(2,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(39,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Ep(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+80|0;l=q;b=q+70|0;n=q+12|0;p=q+32|0;k=q+8|0;m=q+4|0;a[b>>0]=a[58901]|0;a[b+1>>0]=a[58902]|0;a[b+2>>0]=a[58903]|0;a[b+3>>0]=a[58904]|0;a[b+4>>0]=a[58905]|0;a[b+5>>0]=a[58906]|0;h=Xo()|0;c[l>>2]=g;b=Su(n,20,h,b,l)|0;g=n+b|0;h=vp(n,g,e)|0;j=jn(e)|0;c[k>>2]=j;o=0;k=ra(37,k|0,44220)|0;r=o;o=0;if(r&1){r=Na()|0;pm(j)|0;Ya(r|0)}else{pm(j)|0;Pb[c[(c[k>>2]|0)+32>>2]&31](k,n,g,p)|0;r=p+b|0;c[m>>2]=c[d>>2];c[l>>2]=c[m>>2];r=cd(l,p,(h|0)==(g|0)?r:p+(h-n)|0,r,e,f)|0;i=q;return r|0}return 0}function Fp(a){a=a|0;return}function Gp(a){a=a|0;cj(a);return}function Hp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+20|0;j=m+16|0;k=m+12|0;l=m;a:do if(!(c[e+4>>2]&1)){l=c[(c[b>>2]|0)+24>>2]|0;c[j>>2]=c[d>>2];c[h>>2]=c[j>>2];h=Mb[l&31](b,h,e,f,g&1)|0}else{h=jn(e)|0;c[k>>2]=h;o=0;j=ra(37,k|0,44368)|0;k=o;o=0;b:do if(k&1){m=Na()|0;pm(h)|0;h=m}else{pm(h)|0;h=c[j>>2]|0;if(g)Cb[c[h+24>>2]&127](l,j);else Cb[c[h+28>>2]&127](l,j);b=a[l>>0]|0;e=(b&1)==0;h=l+4|0;g=l+8|0;k=e?h:l+4|0;h=e?h:c[l+8>>2]|0;e=(b&1)==0;c:do if((h|0)!=((e?k:c[g>>2]|0)+((e?(b&255)>>>1:c[k>>2]|0)<<2)|0)){while(1){j=c[h>>2]|0;f=c[d>>2]|0;if(f){e=f+24|0;b=c[e>>2]|0;if((b|0)==(c[f+28>>2]|0)){o=0;j=ra(c[(c[f>>2]|0)+52>>2]|0,f|0,j|0)|0;b=o;o=0;if(b&1)break}else{c[e>>2]=b+4;c[b>>2]=j}if((j|0)==-1)c[d>>2]=0}h=h+4|0;b=a[l>>0]|0;e=(b&1)==0;if((h|0)==((e?k:c[g>>2]|0)+((e?(b&255)>>>1:c[k>>2]|0)<<2)|0))break c}h=Na()|0;Wm(l);break b}while(0);h=c[d>>2]|0;Wm(l);break a}while(0);Ya(h|0)}while(0);i=m;return h|0}function Ip(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+128|0;h=n;q=n+116|0;r=n+104|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,1,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(3,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=Uu(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function Jp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+16|0;w=v;t=Is(j,44212)|0;m=Is(j,44368)|0;Cb[c[(c[m>>2]|0)+20>>2]&127](w,m);r=a[w>>0]|0;s=w+4|0;a:do if(!(((r&1)==0?(r&255)>>>1:c[s>>2]|0)|0)){o=0;va(c[(c[t>>2]|0)+48>>2]|0,t|0,b|0,e|0,f|0)|0;u=o;o=0;if(u&1)u=5;else{j=f+(e-b<<2)|0;c[h>>2]=j;u=28}}else{c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,j|0)|0;r=o;o=0;if(r&1){u=5;break a}l=c[h>>2]|0;c[h>>2]=l+4;c[l>>2]=j;l=b+1|0;break}default:l=b}b:do if((e-l|0)>1?(a[l>>0]|0)==48:0){j=l+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:{r=l;break b}}o=0;k=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,48)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+4;c[r>>2]=k;o=0;j=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,a[j>>0]|0)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+4;c[r>>2]=j;r=l+2|0}else r=l;while(0);if((r|0)!=(e|0)?(n=e+-1|0,r>>>0>>0):0){k=r;j=n;do{q=a[k>>0]|0;a[k>>0]=a[j>>0]|0;a[j>>0]=q;k=k+1|0;j=j+-1|0}while(k>>>0>>0)}o=0;m=ka(c[(c[m>>2]|0)+16>>2]|0,m|0)|0;q=o;o=0;if(!(q&1)){n=w+8|0;p=w+1|0;c:do if(r>>>0>>0){j=0;k=0;q=r;while(1){l=a[((a[w>>0]&1)==0?p:c[n>>2]|0)+k>>0]|0;if(l<<24>>24!=0&(j|0)==(l<<24>>24|0)){j=c[h>>2]|0;c[h>>2]=j+4;c[j>>2]=m;j=a[w>>0]|0;l=0;k=(k>>>0<(((j&1)==0?(j&255)>>>1:c[s>>2]|0)+-1|0)>>>0&1)+k|0}else l=j;o=0;j=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,a[q>>0]|0)|0;x=o;o=0;if(x&1)break;x=c[h>>2]|0;c[h>>2]=x+4;c[x>>2]=j;q=q+1|0;if(q>>>0>=e>>>0)break c;else j=l+1|0}j=Na()|0;break a}while(0);l=b;j=f+(r-l<<2)|0;k=c[h>>2]|0;if((j|0)!=(k|0)){b=k+-4|0;if(j>>>0>>0){do{x=c[j>>2]|0;c[j>>2]=c[b>>2];c[b>>2]=x;j=j+4|0;b=b+-4|0}while(j>>>0>>0);b=l;j=k;u=28}else{b=l;j=k;u=28}}else{b=l;u=28}}else u=5}while(0);if((u|0)==5)j=Na()|0;else if((u|0)==28){c[g>>2]=(d|0)==(e|0)?j:f+(d-b<<2)|0;Im(w);i=v;return}Im(w);Ya(j|0)}function Kp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+224|0;h=n+8|0;a=n;q=n+196|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,1,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,22,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(3,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=Uu(h,k,r,s,d,e)|0;i=n;return s|0}return 0} + function ut(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=i;i=i+16|0;s=u;q=u+8|0;a:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(c[l>>2]|0))break a;l=l+4|0;if((l|0)==(f|0)){l=f;break}}}while(0);c[k>>2]=h;c[g>>2]=e;n=j;r=b+8|0;b:do if(!((h|0)==(j|0)|(e|0)==(f|0))){b=h;m=l;c:while(1){w=d;h=c[w+4>>2]|0;l=s;c[l>>2]=c[w>>2];c[l+4>>2]=h;l=qk(c[r>>2]|0)|0;o=0;h=sa(21,b|0,g|0,m-e>>2|0,n-b|0,d|0)|0;w=o;o=0;if(w&1){v=9;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=8;break}switch(h|0){case 0:{p=1;break b}case -1:{l=b;v=14;break c}default:{}}l=(c[k>>2]|0)+h|0;c[k>>2]=l;if((l|0)==(j|0)){v=27;break}if((m|0)==(f|0)){e=c[g>>2]|0;b=l;l=f}else{l=qk(c[r>>2]|0)|0;o=0;e=ma(34,q|0,0,d|0)|0;w=o;o=0;if(w&1){v=35;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=34;break}if((e|0)==-1){p=2;break b}if(e>>>0>(n-(c[k>>2]|0)|0)>>>0){p=1;break b}if(e){l=q;while(1){m=a[l>>0]|0;w=c[k>>2]|0;c[k>>2]=w+1;a[w>>0]=m;e=e+-1|0;if(!e)break;else l=l+1|0}}e=(c[g>>2]|0)+4|0;c[g>>2]=e;d:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(c[l>>2]|0))break d;l=l+4|0;if((l|0)==(f|0)){l=f;break}}}while(0);b=c[k>>2]|0}if((b|0)==(j|0)|(e|0)==(f|0)){v=47;break b}else m=l}if((v|0)==8){w=Na(0)|0;ec(w)}else if((v|0)==9){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}else if((v|0)==14){c[k>>2]=l;e:do if((e|0)!=(c[g>>2]|0)){while(1){w=c[e>>2]|0;b=qk(c[r>>2]|0)|0;o=0;l=ma(34,l|0,w|0,s|0)|0;w=o;o=0;if(w&1){t=b;break}if((b|0)!=0?(o=0,ka(75,b|0)|0,w=o,o=0,w&1):0){v=18;break}if((l|0)==-1)break e;l=(c[k>>2]|0)+l|0;c[k>>2]=l;e=e+4|0;if((e|0)==(c[g>>2]|0))break e}if((v|0)==18){w=Na(0)|0;ec(w)}e=Na()|0;if((t|0)!=0?(o=0,ka(75,t|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}while(0);c[g>>2]=e;p=2;break}else if((v|0)==27){e=c[g>>2]|0;v=47;break}else if((v|0)==34){w=Na(0)|0;ec(w)}else if((v|0)==35){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}}else v=47;while(0);if((v|0)==47)p=(e|0)!=(f|0)&1;i=u;return p|0}function vt(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=i;i=i+16|0;t=u;a:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(a[l>>0]|0))break a;l=l+1|0;if((l|0)==(f|0)){l=f;break}}}while(0);c[k>>2]=h;c[g>>2]=e;p=j;r=b+8|0;b:do if(!((h|0)==(j|0)|(e|0)==(f|0))){b=h;n=l;c:while(1){m=d;l=c[m+4>>2]|0;h=t;c[h>>2]=c[m>>2];c[h+4>>2]=l;h=n;l=qk(c[r>>2]|0)|0;o=0;m=sa(22,b|0,g|0,h-e|0,p-b>>2|0,d|0)|0;w=o;o=0;if(w&1){v=9;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=8;break}switch(m|0){case 0:{q=2;break b}case -1:{l=b;v=14;break c}default:{}}b=(c[k>>2]|0)+(m<<2)|0;c[k>>2]=b;if((b|0)==(j|0)){v=31;break}e=c[g>>2]|0;if((n|0)==(f|0))l=f;else{l=qk(c[r>>2]|0)|0;o=0;e=va(20,b|0,e|0,1,d|0)|0;w=o;o=0;if(w&1){v=38;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=37;break}if(e){q=2;break b}c[k>>2]=(c[k>>2]|0)+4;e=(c[g>>2]|0)+1|0;c[g>>2]=e;d:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(a[l>>0]|0))break d;l=l+1|0;if((l|0)==(f|0)){l=f;break}}}while(0);b=c[k>>2]|0}if((b|0)==(j|0)|(e|0)==(f|0)){v=47;break b}else n=l}if((v|0)==8){w=Na(0)|0;ec(w)}else if((v|0)==9){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}else if((v|0)==14){c[k>>2]=l;e:do if((e|0)!=(c[g>>2]|0)){b=l;f:while(1){l=qk(c[r>>2]|0)|0;o=0;b=va(20,b|0,e|0,h-e|0,t|0)|0;w=o;o=0;if(w&1){v=19;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=18;break}switch(b|0){case -1:{v=25;break f}case -2:{v=26;break f}case 0:{e=e+1|0;break}default:e=e+b|0}b=(c[k>>2]|0)+4|0;c[k>>2]=b;if((e|0)==(c[g>>2]|0)){s=e;break e}}if((v|0)==18){w=Na(0)|0;ec(w)}else if((v|0)==19){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}else if((v|0)==25){c[g>>2]=e;q=2;break b}else if((v|0)==26){c[g>>2]=e;q=1;break b}}else s=e;while(0);c[g>>2]=s;q=(s|0)!=(f|0)&1;break}else if((v|0)==31){e=c[g>>2]|0;v=47;break}else if((v|0)==37){w=Na(0)|0;ec(w)}else if((v|0)==38){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}}else v=47;while(0);if((v|0)==47)q=(e|0)!=(f|0)&1;i=u;return q|0}function wt(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;j=i;i=i+16|0;h=j;c[g>>2]=e;e=qk(c[b+8>>2]|0)|0;o=0;b=ma(34,h|0,0,d|0)|0;d=o;o=0;if(d&1){h=Na()|0;if((e|0)!=0?(o=0,ka(75,e|0)|0,j=o,o=0,j&1):0){j=Na(0)|0;ec(j)}Ya(h|0)}if((e|0)!=0?(o=0,ka(75,e|0)|0,d=o,o=0,d&1):0){d=Na(0)|0;ec(d)}switch(b|0){case 0:case -1:{h=2;break}default:{b=b+-1|0;if(b>>>0<=(f-(c[g>>2]|0)|0)>>>0)if(!b)h=0;else while(1){d=a[h>>0]|0;f=c[g>>2]|0;c[g>>2]=f+1;a[f>>0]=d;b=b+-1|0;if(!b){h=0;break}else h=h+1|0}else h=1}}i=j;return h|0}function xt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+8|0;o=0;d=ka(75,c[b>>2]|0)|0;e=o;o=0;do if(e&1)f=16;else{o=0;e=ma(35,0,0,4)|0;a=o;o=0;if(a&1){a=Na(0)|0;if(!d)break;o=0;ka(75,d|0)|0;h=o;o=0;if(!(h&1))break;h=Na(0)|0;ec(h)}if((d|0)!=0?(o=0,ka(75,d|0)|0,h=o,o=0,h&1):0){h=Na(0)|0;ec(h)}if(!e){a=c[b>>2]|0;if(a){o=0;a=ka(75,a|0)|0;h=o;o=0;if(h&1){f=16;break}if((a|0)!=0?(o=0,ka(75,a|0)|0,h=o,o=0,h&1):0){h=Na(0)|0;ec(h)}else g=0}else g=1}else g=-1;return g|0}while(0);if((f|0)==16)a=Na(0)|0;ec(a);return 0}function yt(a){a=a|0;return 0}function zt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=e;j=a+8|0;a:do if((d|0)==(e|0)|(f|0)==0)a=0;else{a=0;i=0;while(1){h=qk(c[j>>2]|0)|0;o=0;g=ma(36,d|0,k-d|0,b|0)|0;n=o;o=0;if(n&1){m=h;break}if((h|0)!=0?(o=0,ka(75,h|0)|0,n=o,o=0,n&1):0){l=5;break}switch(g|0){case -2:case -1:break a;case 0:{d=d+1|0;g=1;break}default:d=d+g|0}a=g+a|0;i=i+1|0;if((d|0)==(e|0)|i>>>0>=f>>>0)break a}if((l|0)==5){n=Na(0)|0;ec(n)}a=Na()|0;if((m|0)!=0?(o=0,ka(75,m|0)|0,n=o,o=0,n&1):0){n=Na(0)|0;ec(n)}Ya(a|0)}while(0);return a|0}function At(a){a=a|0;var b=0,d=0;a=c[a+8>>2]|0;if(a){o=0;a=ka(75,a|0)|0;d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}if((a|0)!=0?(o=0,ka(75,a|0)|0,d=o,o=0,d&1):0){d=Na(0)|0;ec(d)}else b=4}else b=1;return b|0}function Bt(a){a=a|0;cj(a);return}function Ct(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Hv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Dt(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Iv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Et(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function Ft(a){a=a|0;return 0}function Gt(a){a=a|0;return 0}function Ht(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Jv(c,d,e,1114111,0)|0}function It(a){a=a|0;return 4}function Jt(a){a=a|0;cj(a);return}function Kt(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Kv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Lt(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Lv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Mt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function Nt(a){a=a|0;return 0}function Ot(a){a=a|0;return 0}function Pt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Mv(c,d,e,1114111,0)|0}function Qt(a){a=a|0;return 4}function Rt(a){a=a|0;cj(a);return}function St(a){a=a|0;cj(a);return}function Tt(b,d){b=b|0;d=d|0;c[b+4>>2]=d+-1;c[b>>2]=44384;a[b+8>>0]=46;a[b+9>>0]=44;b=b+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}function Ut(a,b){a=a|0;b=b|0;c[a+4>>2]=b+-1;c[a>>2]=44424;c[a+8>>2]=46;c[a+12>>2]=44;a=a+16|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Vt(a){a=a|0;c[a>>2]=44384;Im(a+12|0);return}function Wt(a){a=a|0;Vt(a);cj(a);return}function Xt(a){a=a|0;c[a>>2]=44424;Im(a+16|0);return}function Yt(a){a=a|0;Xt(a);cj(a);return}function Zt(b){b=b|0;return a[b+8>>0]|0}function _t(a){a=a|0;return c[a+8>>2]|0}function $t(b){b=b|0;return a[b+9>>0]|0}function au(a){a=a|0;return c[a+12>>2]|0}function bu(a,b){a=a|0;b=b|0;Fm(a,b+12|0);return}function cu(a,b){a=a|0;b=b|0;Fm(a,b+16|0);return}function du(a,b){a=a|0;b=b|0;Gm(a,59024,4);return}function eu(a,b){a=a|0;b=b|0;Um(a,44996,pl(44996)|0);return}function fu(a,b){a=a|0;b=b|0;Gm(a,59029,5);return}function gu(a,b){a=a|0;b=b|0;Um(a,45016,pl(45016)|0);return}function hu(a){a=a|0;switch(c[a+4>>2]&74|0){case 64:{a=8;break}case 8:{a=16;break}case 0:{a=0;break}default:a=10}return a|0}function iu(b){b=b|0;do if((a[2464]|0)==0?(Ha(2464)|0)!=0:0){if((a[2472]|0)==0?(Ha(2472)|0)!=0:0){b=45040;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=45208);kb(193,0,n|0)|0;Pa(2472)}o=0;ra(41,45040,59035)|0;b=o;o=0;if(((((((((((((!(b&1)?(o=0,ra(41,45052,59042)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45064,59049)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45076,59057)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45088,59067)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45100,59076)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45112,59083)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45124,59092)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45136,59096)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45148,59100)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45160,59104)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45172,59108)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45184,59112)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45196,59116)|0,b=o,o=0,!(b&1)):0){c[11302]=45040;Pa(2464);break}b=Na()|0;sb(2464);Ya(b|0)}while(0);return c[11302]|0}function ju(b){b=b|0;do if((a[2480]|0)==0?(Ha(2480)|0)!=0:0){if((a[2488]|0)==0?(Ha(2488)|0)!=0:0){b=45212;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=45380);kb(194,0,n|0)|0;Pa(2488)}o=0;ra(42,45212,45380)|0;b=o;o=0;if(((((((((((((!(b&1)?(o=0,ra(42,45224,45408)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45236,45436)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45248,45468)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45260,45508)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45272,45544)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45284,45572)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45296,45608)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45308,45624)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45320,45640)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45332,45656)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45344,45672)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45356,45688)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45368,45704)|0,b=o,o=0,!(b&1)):0){c[11430]=45212;Pa(2480);break}b=Na()|0;sb(2480);Ya(b|0)}while(0);return c[11430]|0}function ku(b){b=b|0;a:do if((a[2496]|0)==0?(Ha(2496)|0)!=0:0){if((a[2504]|0)==0?(Ha(2504)|0)!=0:0){b=45724;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=46012);kb(195,0,n|0)|0;Pa(2504)}o=0;ra(41,45724,59120)|0;b=o;o=0;do if((((((((((((((!(b&1)?(o=0,ra(41,45736,59128)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45748,59137)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45760,59143)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45772,59149)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45784,59153)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45796,59158)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45808,59163)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45820,59170)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45832,59180)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45844,59188)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45856,59197)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45868,59206)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45880,59210)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45892,59214)|0,b=o,o=0,!(b&1)):0){o=0;ra(41,45904,59218)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45916,59149)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45928,59222)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45940,59226)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45952,59230)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45964,59234)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45976,59238)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45988,59242)|0;b=o;o=0;if(b&1)break;o=0;ra(41,46e3,59246)|0;b=o;o=0;if(b&1)break;c[11503]=45724;Pa(2496);break a}while(0);b=Na()|0;sb(2496);Ya(b|0)}while(0);return c[11503]|0}function lu(b){b=b|0;a:do if((a[2512]|0)==0?(Ha(2512)|0)!=0:0){if((a[2520]|0)==0?(Ha(2520)|0)!=0:0){b=46016;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=46304);kb(196,0,n|0)|0;Pa(2520)}o=0;ra(42,46016,46304)|0;b=o;o=0;do if((((((((((((((!(b&1)?(o=0,ra(42,46028,46336)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46040,46372)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46052,46396)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46064,46420)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46076,46436)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46088,46456)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46100,46476)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46112,46504)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46124,46544)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46136,46576)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46148,46612)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46160,46648)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46172,46664)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46184,46680)|0,b=o,o=0,!(b&1)):0){o=0;ra(42,46196,46696)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46208,46420)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46220,46712)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46232,46728)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46244,46744)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46256,46760)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46268,46776)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46280,46792)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46292,46808)|0;b=o;o=0;if(b&1)break;c[11706]=46016;Pa(2512);break a}while(0);b=Na()|0;sb(2512);Ya(b|0)}while(0);return c[11706]|0}function mu(b){b=b|0;do if((a[2528]|0)==0?(Ha(2528)|0)!=0:0){if((a[2536]|0)==0?(Ha(2536)|0)!=0:0){b=46828;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=47116);kb(197,0,n|0)|0;Pa(2536)}o=0;ra(41,46828,59250)|0;b=o;o=0;if(!(b&1)?(o=0,ra(41,46840,59253)|0,b=o,o=0,!(b&1)):0){c[11779]=46828;Pa(2528);break}b=Na()|0;sb(2528);Ya(b|0)}while(0);return c[11779]|0}function nu(b){b=b|0;do if((a[2544]|0)==0?(Ha(2544)|0)!=0:0){if((a[2552]|0)==0?(Ha(2552)|0)!=0:0){b=47120;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=47408);kb(198,0,n|0)|0;Pa(2552)}o=0;ra(42,47120,47408)|0;b=o;o=0;if(!(b&1)?(o=0,ra(42,47132,47420)|0,b=o,o=0,!(b&1)):0){c[11858]=47120;Pa(2544);break}b=Na()|0;sb(2544);Ya(b|0)}while(0);return c[11858]|0}function ou(b){b=b|0;do if((a[2560]|0)==0?(Ha(2560)|0)!=0:0){o=0;wa(5,47436,59256,8);b=o;o=0;if(b&1){b=Na()|0;sb(2560);Ya(b|0)}else{kb(199,47436,n|0)|0;Pa(2560);break}}while(0);return 47436}function pu(b){b=b|0;var c=0;do if((a[2568]|0)==0?(Ha(2568)|0)!=0:0){o=0;b=ka(76,47448)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47484,47448,b|0),c=o,o=0,!(c&1)):0){kb(200,47484,n|0)|0;Pa(2568);break}c=Na()|0;sb(2568);Ya(c|0)}while(0);return 47484}function qu(b){b=b|0;do if((a[2576]|0)==0?(Ha(2576)|0)!=0:0){o=0;wa(5,47496,59265,8);b=o;o=0;if(b&1){b=Na()|0;sb(2576);Ya(b|0)}else{kb(199,47496,n|0)|0;Pa(2576);break}}while(0);return 47496}function ru(b){b=b|0;var c=0;do if((a[2584]|0)==0?(Ha(2584)|0)!=0:0){o=0;b=ka(76,47508)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47544,47508,b|0),c=o,o=0,!(c&1)):0){kb(200,47544,n|0)|0;Pa(2584);break}c=Na()|0;sb(2584);Ya(c|0)}while(0);return 47544}function su(b){b=b|0;do if((a[2592]|0)==0?(Ha(2592)|0)!=0:0){o=0;wa(5,47556,59274,20);b=o;o=0;if(b&1){b=Na()|0;sb(2592);Ya(b|0)}else{kb(199,47556,n|0)|0;Pa(2592);break}}while(0);return 47556}function tu(b){b=b|0;var c=0;do if((a[2600]|0)==0?(Ha(2600)|0)!=0:0){o=0;b=ka(76,47568)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47652,47568,b|0),c=o,o=0,!(c&1)):0){kb(200,47652,n|0)|0;Pa(2600);break}c=Na()|0;sb(2600);Ya(c|0)}while(0);return 47652}function uu(b){b=b|0;do if((a[2608]|0)==0?(Ha(2608)|0)!=0:0){o=0;wa(5,47664,59295,11);b=o;o=0;if(b&1){b=Na()|0;sb(2608);Ya(b|0)}else{kb(199,47664,n|0)|0;Pa(2608);break}}while(0);return 47664}function vu(b){b=b|0;var c=0;do if((a[2616]|0)==0?(Ha(2616)|0)!=0:0){o=0;b=ka(76,47676)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47724,47676,b|0),c=o,o=0,!(c&1)):0){kb(200,47724,n|0)|0;Pa(2616);break}c=Na()|0;sb(2616);Ya(c|0)}while(0);return 47724}function wu(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=44304;a=a+8|0;b=c[a>>2]|0;o=0;d=ua(3)|0;e=o;o=0;do if(!(e&1)){if((b|0)!=(d|0)?(o=0,ha(188,c[a>>2]|0),e=o,o=0,e&1):0)break;return}while(0);e=Na(0)|0;ec(e)}function xu(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+112|0;m=z;p=(g-f|0)/12|0;do if(p>>>0>100){m=Fl(p)|0;if((m|0)==0?(o=0,xa(6),y=o,o=0,y&1):0){l=0;s=6;break}l=m;s=11}else{l=0;s=11}while(0);a:do if((s|0)==11){if((f|0)==(g|0))n=0;else{s=f;q=0;r=m;while(1){n=a[s>>0]|0;if(!(n&1))n=(n&255)>>>1;else n=c[s+4>>2]|0;if(!n){a[r>>0]=2;n=q+1|0;p=p+-1|0}else{a[r>>0]=1;n=q}s=s+12|0;if((s|0)==(g|0))break;else{q=n;r=r+1|0}}}x=(f|0)==(g|0);y=(f|0)==(g|0);w=0;t=n;b:while(1){n=c[b>>2]|0;do if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;v=o;o=0;if(v&1){s=5;break b}if((n|0)==-1){c[b>>2]=0;n=0;break}else{n=c[b>>2]|0;break}}}else n=0;while(0);s=(n|0)==0;q=c[e>>2]|0;if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;n=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;v=o;o=0;if(v&1){s=5;break}if((n|0)==-1){c[e>>2]=0;q=0}}}else q=0;r=(q|0)==0;n=c[b>>2]|0;if(!((p|0)!=0&(s^r))){s=64;break}q=c[n+12>>2]|0;if((q|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;v=o;o=0;if(v&1){s=5;break}}else n=d[q>>0]|0;n=n&255;if(!k){o=0;n=ra(c[(c[h>>2]|0)+12>>2]|0,h|0,n|0)|0;v=o;o=0;if(v&1){s=5;break}}v=w+1|0;if(x){n=0;s=t}else{r=0;u=f;s=t;t=m;while(1){do if((a[t>>0]|0)==1){if(!(a[u>>0]&1))q=u+1|0;else q=c[u+8>>2]|0;q=a[q+w>>0]|0;if(!k){o=0;q=ra(c[(c[h>>2]|0)+12>>2]|0,h|0,q|0)|0;A=o;o=0;if(A&1){s=4;break b}}if(n<<24>>24!=q<<24>>24){a[t>>0]=0;q=r;p=p+-1|0;break}q=a[u>>0]|0;if(!(q&1))q=(q&255)>>>1;else q=c[u+4>>2]|0;if((q|0)==(v|0)){a[t>>0]=2;q=1;s=s+1|0;p=p+-1|0}else q=1}else q=r;while(0);u=u+12|0;if((u|0)==(g|0)){n=q;break}else{r=q;t=t+1|0}}}if(!n){w=v;t=s;continue}n=c[b>>2]|0;q=n+12|0;r=c[q>>2]|0;if((r|0)==(c[n+16>>2]|0)){o=0;ka(c[(c[n>>2]|0)+40>>2]|0,n|0)|0;A=o;o=0;if(A&1){s=5;break}}else c[q>>2]=r+1;if((s+p|0)>>>0<2|y){w=v;t=s;continue}else{n=f;r=s;s=m}while(1){if((a[s>>0]|0)==2){q=a[n>>0]|0;if(!(q&1))q=(q&255)>>>1;else q=c[n+4>>2]|0;if((q|0)!=(v|0)){a[s>>0]=0;r=r+-1|0}}n=n+12|0;if((n|0)==(g|0)){w=v;t=r;continue b}else s=s+1|0}}if((s|0)==4){f=Na()|0;break}else if((s|0)==5){f=Na()|0;break}else if((s|0)==64){do if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;A=o;o=0;if(A&1){s=6;break a}if((n|0)==-1){c[b>>2]=0;n=0;break}else{n=c[b>>2]|0;break}}}else n=0;while(0);p=(n|0)==0;do if(!r){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;n=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;A=o;o=0;if(A&1){s=6;break a}if((n|0)==-1){c[e>>2]=0;s=76;break}}if(!p)s=77}else s=76;while(0);if((s|0)==76?p:0)s=77;if((s|0)==77)c[j>>2]=c[j>>2]|2;c:do if((f|0)==(g|0))s=81;else while(1){if((a[m>>0]|0)==2)break c;f=f+12|0;if((f|0)==(g|0)){s=81;break}else m=m+1|0}while(0);if((s|0)==81){c[j>>2]=c[j>>2]|4;f=g}if(l)Gl(l);i=z;return f|0}}while(0);if((s|0)==6)f=Na()|0;if(l)Gl(l);Ya(f|0);return 0}function yu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){D=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=24;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(l){k=0;break}else k=0}l=a[B>>0]|0;l=(l&1)==0?(l&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+l|0)){o=0;wa(8,B|0,l<<1|0,0);n=o;o=0;if(n&1){D=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){D=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}}else l=d[l>>0]|0;if(Wo(l&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}else continue}else{c[m>>2]=k+1;continue}}if((D|0)==24){b=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;g=va(21,g|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){c[j>>2]=g;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=25;break a}if((b|0)==-1){c[f>>2]=0;D=49;break}}if(!g)D=50}else D=49;while(0);if((D|0)==49?g:0)D=50;if((D|0)==50)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=25}else D=25;while(0);if((D|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function zu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){E=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;k=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(k)break;else break b;o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;n=o;o=0;if(n&1){E=24;break b}if((m|0)!=-1)if(k)break;else break b;else{c[f>>2]=0;E=16;break}}else E=16;while(0);if((E|0)==16){E=0;if(k){l=0;break}else l=0}k=a[B>>0]|0;k=(k&1)==0?(k&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+k|0)){o=0;wa(8,B|0,k<<1|0,0);n=o;o=0;if(n&1){E=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){E=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+k}m=b+12|0;k=c[m>>2]|0;n=b+16|0;if((k|0)==(c[n>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}}else k=d[k>>0]|0;if(Wo(k&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}else continue}else{c[m>>2]=k+1;continue}}if((E|0)==24){b=Na()|0;break}F=a[C>>0]|0;if((((F&1)==0?(F&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){F=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=F}o=0;g=va(22,g|0,c[v>>2]|0,h|0,u|0)|0;k=D;F=o;o=0;if(!(F&1)){F=j;c[F>>2]=g;c[F+4>>2]=k;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;F=o;o=0;if(F&1){E=25;break a}if((b|0)==-1){c[f>>2]=0;E=49;break}}if(!g)E=50}else E=49;while(0);if((E|0)==49?g:0)E=50;if((E|0)==50)c[h>>2]=c[h>>2]|2;F=c[e>>2]|0;Im(B);Im(C);i=A;return F|0}else E=25}else E=25;while(0);if((E|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Au(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;B=i;i=i+240|0;u=B+202|0;l=B+200|0;D=B+24|0;C=B+12|0;w=B+8|0;z=B+40|0;A=B+4|0;x=B;v=hu(h)|0;kp(D,h,u,l);c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;if(!(a[C>>0]&1))e=10;else e=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,e|0,0);t=o;o=0;a:do if(!(t&1)){r=C+8|0;s=C+1|0;h=(a[C>>0]&1)==0?s:c[r>>2]|0;c[w>>2]=h;c[A>>2]=z;c[x>>2]=0;t=C+4|0;q=a[l>>0]|0;e=c[f>>2]|0;b:while(1){if(e){if((c[e+12>>2]|0)==(c[e+16>>2]|0)){o=0;l=ka(c[(c[e>>2]|0)+36>>2]|0,e|0)|0;p=o;o=0;if(p&1){E=24;break}if((l|0)==-1){c[f>>2]=0;e=0}}}else e=0;m=(e|0)==0;l=c[g>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(m)break;else break b;o=0;n=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){E=24;break b}if((n|0)!=-1)if(m)break;else break b;else{c[g>>2]=0;E=16;break}}else E=16;while(0);if((E|0)==16){E=0;if(m){l=0;break}else l=0}m=a[C>>0]|0;m=(m&1)==0?(m&255)>>>1:c[t>>2]|0;if((c[w>>2]|0)==(h+m|0)){o=0;wa(8,C|0,m<<1|0,0);p=o;o=0;if(p&1){E=24;break}if(!(a[C>>0]&1))h=10;else h=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,h|0,0);p=o;o=0;if(p&1){E=24;break}h=(a[C>>0]&1)==0?s:c[r>>2]|0;c[w>>2]=h+m}n=e+12|0;m=c[n>>2]|0;p=e+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[e>>2]|0)+36>>2]|0,e|0)|0;F=o;o=0;if(F&1){E=24;break}}else m=d[m>>0]|0;if(Wo(m&255,v,h,w,x,q,D,z,A,u)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[e>>2]|0)+40>>2]|0,e|0)|0;F=o;o=0;if(F&1){E=24;break}else continue}else{c[n>>2]=l+1;continue}}if((E|0)==24){e=Na()|0;break}F=a[D>>0]|0;if((((F&1)==0?(F&255)>>>1:c[D+4>>2]|0)|0)!=0?(y=c[A>>2]|0,(y-z|0)<160):0){F=c[x>>2]|0;c[A>>2]=y+4;c[y>>2]=F}o=0;h=va(23,h|0,c[w>>2]|0,j|0,v|0)|0;F=o;o=0;if(!(F&1)){b[k>>1]=h;Ur(D,z,c[A>>2]|0,j);if(e){if((c[e+12>>2]|0)==(c[e+16>>2]|0)){o=0;h=ka(c[(c[e>>2]|0)+36>>2]|0,e|0)|0;F=o;o=0;if(F&1){E=25;break}if((h|0)==-1){c[f>>2]=0;e=0}}}else e=0;h=(e|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)){o=0;e=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;F=o;o=0;if(F&1){E=25;break a}if((e|0)==-1){c[g>>2]=0;E=49;break}}if(!h)E=50}else E=49;while(0);if((E|0)==49?h:0)E=50;if((E|0)==50)c[j>>2]=c[j>>2]|2;F=c[f>>2]|0;Im(C);Im(D);i=B;return F|0}else E=25}else E=25;while(0);if((E|0)==25)e=Na()|0;Im(C);Im(D);Ya(e|0);return 0}function Bu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){D=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=24;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(l){k=0;break}else k=0}l=a[B>>0]|0;l=(l&1)==0?(l&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+l|0)){o=0;wa(8,B|0,l<<1|0,0);n=o;o=0;if(n&1){D=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){D=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}}else l=d[l>>0]|0;if(Wo(l&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}else continue}else{c[m>>2]=k+1;continue}}if((D|0)==24){b=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;g=va(24,g|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){c[j>>2]=g;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=25;break a}if((b|0)==-1){c[f>>2]=0;D=49;break}}if(!g)D=50}else D=49;while(0);if((D|0)==49?g:0)D=50;if((D|0)==50)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=25}else D=25;while(0);if((D|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Cu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){D=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=24;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(l){k=0;break}else k=0}l=a[B>>0]|0;l=(l&1)==0?(l&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+l|0)){o=0;wa(8,B|0,l<<1|0,0);n=o;o=0;if(n&1){D=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){D=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}}else l=d[l>>0]|0;if(Wo(l&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}else continue}else{c[m>>2]=k+1;continue}}if((D|0)==24){b=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;g=va(25,g|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){c[j>>2]=g;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=25;break a}if((b|0)==-1){c[f>>2]=0;D=49;break}}if(!g)D=50}else D=49;while(0);if((D|0)==49?g:0)D=50;if((D|0)==50)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=25}else D=25;while(0);if((D|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Du(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){E=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;k=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(k)break;else break b;o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;n=o;o=0;if(n&1){E=24;break b}if((m|0)!=-1)if(k)break;else break b;else{c[f>>2]=0;E=16;break}}else E=16;while(0);if((E|0)==16){E=0;if(k){l=0;break}else l=0}k=a[B>>0]|0;k=(k&1)==0?(k&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+k|0)){o=0;wa(8,B|0,k<<1|0,0);n=o;o=0;if(n&1){E=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){E=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+k}m=b+12|0;k=c[m>>2]|0;n=b+16|0;if((k|0)==(c[n>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}}else k=d[k>>0]|0;if(Wo(k&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}else continue}else{c[m>>2]=k+1;continue}}if((E|0)==24){b=Na()|0;break}F=a[C>>0]|0;if((((F&1)==0?(F&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){F=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=F}o=0;g=va(26,g|0,c[v>>2]|0,h|0,u|0)|0;k=D;F=o;o=0;if(!(F&1)){F=j;c[F>>2]=g;c[F+4>>2]=k;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;F=o;o=0;if(F&1){E=25;break a}if((b|0)==-1){c[f>>2]=0;E=49;break}}if(!g)E=50}else E=49;while(0);if((E|0)==49?g:0)E=50;if((E|0)==50)c[h>>2]=c[h>>2]|2;F=c[e>>2]|0;Im(B);Im(C);i=A;return F|0}else E=25}else E=25;while(0);if((E|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Eu(b,e,f,h,j,k){b=b|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;E=i;i=i+240|0;w=E+208|0;m=E+203|0;n=E+202|0;G=E+24|0;F=E+12|0;y=E+8|0;C=E+40|0;D=E+4|0;z=E;A=E+201|0;x=E+200|0;lp(G,h,w,m,n);c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;if(!(a[F>>0]&1))b=10;else b=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,b|0,0);v=o;o=0;a:do if(!(v&1)){t=F+8|0;u=F+1|0;h=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=h;c[D>>2]=C;c[z>>2]=0;a[A>>0]=1;a[x>>0]=69;v=F+4|0;s=a[m>>0]|0;r=a[n>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;m=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;q=o;o=0;if(q&1){H=24;break}if((m|0)==-1){c[e>>2]=0;b=0}}}else b=0;n=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(n)break;else break b;o=0;p=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;q=o;o=0;if(q&1){H=24;break b}if((p|0)!=-1)if(n)break;else break b;else{c[f>>2]=0;H=16;break}}else H=16;while(0);if((H|0)==16){H=0;if(n){m=0;break}else m=0}n=a[F>>0]|0;n=(n&1)==0?(n&255)>>>1:c[v>>2]|0;if((c[y>>2]|0)==(h+n|0)){o=0;wa(8,F|0,n<<1|0,0);q=o;o=0;if(q&1){H=24;break}if(!(a[F>>0]&1))h=10;else h=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,h|0,0);q=o;o=0;if(q&1){H=24;break}h=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=h+n}p=b+12|0;n=c[p>>2]|0;q=b+16|0;if((n|0)==(c[q>>2]|0)){o=0;n=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}}else n=d[n>>0]|0;if(mp(n&255,A,x,h,y,s,r,G,C,D,z,w)|0)break;m=c[p>>2]|0;if((m|0)==(c[q>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}else continue}else{c[p>>2]=m+1;continue}}if((H|0)==24){b=Na()|0;break}I=a[G>>0]|0;if(!((a[A>>0]|0)==0?1:(((I&1)==0?(I&255)>>>1:c[G+4>>2]|0)|0)==0)?(B=c[D>>2]|0,(B-C|0)<160):0){I=c[z>>2]|0;c[D>>2]=B+4;c[B>>2]=I}o=0;l=+ta(1,h|0,c[y>>2]|0,j|0);I=o;o=0;if(!(I&1)){g[k>>2]=l;Ur(G,C,c[D>>2]|0,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;h=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=25;break}if((h|0)==-1){c[e>>2]=0;b=0}}}else b=0;h=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;b=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;I=o;o=0;if(I&1){H=25;break a}if((b|0)==-1){c[f>>2]=0;H=49;break}}if(!h)H=50}else H=49;while(0);if((H|0)==49?h:0)H=50;if((H|0)==50)c[j>>2]=c[j>>2]|2;I=c[e>>2]|0;Im(F);Im(G);i=E;return I|0}else H=25}else H=25;while(0);if((H|0)==25)b=Na()|0;Im(F);Im(G);Ya(b|0);return 0}function Fu(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;E=i;i=i+240|0;w=E+208|0;m=E+203|0;n=E+202|0;G=E+24|0;F=E+12|0;y=E+8|0;C=E+40|0;D=E+4|0;z=E;A=E+201|0;x=E+200|0;lp(G,g,w,m,n);c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;if(!(a[F>>0]&1))b=10;else b=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,b|0,0);v=o;o=0;a:do if(!(v&1)){t=F+8|0;u=F+1|0;g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g;c[D>>2]=C;c[z>>2]=0;a[A>>0]=1;a[x>>0]=69;v=F+4|0;s=a[m>>0]|0;r=a[n>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;m=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;q=o;o=0;if(q&1){H=24;break}if((m|0)==-1){c[e>>2]=0;b=0}}}else b=0;n=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(n)break;else break b;o=0;p=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;q=o;o=0;if(q&1){H=24;break b}if((p|0)!=-1)if(n)break;else break b;else{c[f>>2]=0;H=16;break}}else H=16;while(0);if((H|0)==16){H=0;if(n){m=0;break}else m=0}n=a[F>>0]|0;n=(n&1)==0?(n&255)>>>1:c[v>>2]|0;if((c[y>>2]|0)==(g+n|0)){o=0;wa(8,F|0,n<<1|0,0);q=o;o=0;if(q&1){H=24;break}if(!(a[F>>0]&1))g=10;else g=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,g|0,0);q=o;o=0;if(q&1){H=24;break}g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g+n}p=b+12|0;n=c[p>>2]|0;q=b+16|0;if((n|0)==(c[q>>2]|0)){o=0;n=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}}else n=d[n>>0]|0;if(mp(n&255,A,x,g,y,s,r,G,C,D,z,w)|0)break;m=c[p>>2]|0;if((m|0)==(c[q>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}else continue}else{c[p>>2]=m+1;continue}}if((H|0)==24){b=Na()|0;break}I=a[G>>0]|0;if(!((a[A>>0]|0)==0?1:(((I&1)==0?(I&255)>>>1:c[G+4>>2]|0)|0)==0)?(B=c[D>>2]|0,(B-C|0)<160):0){I=c[z>>2]|0;c[D>>2]=B+4;c[B>>2]=I}o=0;l=+ta(2,g|0,c[y>>2]|0,j|0);I=o;o=0;if(!(I&1)){h[k>>3]=l;Ur(G,C,c[D>>2]|0,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;b=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;I=o;o=0;if(I&1){H=25;break a}if((b|0)==-1){c[f>>2]=0;H=49;break}}if(!g)H=50}else H=49;while(0);if((H|0)==49?g:0)H=50;if((H|0)==50)c[j>>2]=c[j>>2]|2;I=c[e>>2]|0;Im(F);Im(G);i=E;return I|0}else H=25}else H=25;while(0);if((H|0)==25)b=Na()|0;Im(F);Im(G);Ya(b|0);return 0}function Gu(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;E=i;i=i+240|0;w=E+208|0;m=E+203|0;n=E+202|0;G=E+24|0;F=E+12|0;y=E+8|0;C=E+40|0;D=E+4|0;z=E;A=E+201|0;x=E+200|0;lp(G,g,w,m,n);c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;if(!(a[F>>0]&1))b=10;else b=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,b|0,0);v=o;o=0;a:do if(!(v&1)){t=F+8|0;u=F+1|0;g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g;c[D>>2]=C;c[z>>2]=0;a[A>>0]=1;a[x>>0]=69;v=F+4|0;s=a[m>>0]|0;r=a[n>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;m=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;q=o;o=0;if(q&1){H=24;break}if((m|0)==-1){c[e>>2]=0;b=0}}}else b=0;n=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(n)break;else break b;o=0;p=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;q=o;o=0;if(q&1){H=24;break b}if((p|0)!=-1)if(n)break;else break b;else{c[f>>2]=0;H=16;break}}else H=16;while(0);if((H|0)==16){H=0;if(n){m=0;break}else m=0}n=a[F>>0]|0;n=(n&1)==0?(n&255)>>>1:c[v>>2]|0;if((c[y>>2]|0)==(g+n|0)){o=0;wa(8,F|0,n<<1|0,0);q=o;o=0;if(q&1){H=24;break}if(!(a[F>>0]&1))g=10;else g=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,g|0,0);q=o;o=0;if(q&1){H=24;break}g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g+n}p=b+12|0;n=c[p>>2]|0;q=b+16|0;if((n|0)==(c[q>>2]|0)){o=0;n=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}}else n=d[n>>0]|0;if(mp(n&255,A,x,g,y,s,r,G,C,D,z,w)|0)break;m=c[p>>2]|0;if((m|0)==(c[q>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}else continue}else{c[p>>2]=m+1;continue}}if((H|0)==24){b=Na()|0;break}I=a[G>>0]|0;if(!((a[A>>0]|0)==0?1:(((I&1)==0?(I&255)>>>1:c[G+4>>2]|0)|0)==0)?(B=c[D>>2]|0,(B-C|0)<160):0){I=c[z>>2]|0;c[D>>2]=B+4;c[B>>2]=I}o=0;l=+ta(3,g|0,c[y>>2]|0,j|0);I=o;o=0;if(!(I&1)){h[k>>3]=l;Ur(G,C,c[D>>2]|0,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;b=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;I=o;o=0;if(I&1){H=25;break a}if((b|0)==-1){c[f>>2]=0;H=49;break}}if(!g)H=50}else H=49;while(0);if((H|0)==49?g:0)H=50;if((H|0)==50)c[j>>2]=c[j>>2]|2;I=c[e>>2]|0;Im(F);Im(G);i=E;return I|0}else H=25}else H=25;while(0);if((H|0)==25)b=Na()|0;Im(F);Im(G);Ya(b|0);return 0}function Hu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=qk(b)|0;b=fl(a,d,g)|0;if((e|0)!=0?(o=0,ka(75,e|0)|0,g=o,o=0,g&1):0){g=Na(0)|0;ec(g)}i=f;return b|0}function Iu(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=i;i=i+112|0;l=y;n=(f-e|0)/12|0;do if(n>>>0>100){l=Fl(n)|0;if((l|0)==0?(o=0,xa(6),x=o,o=0,x&1):0){k=0;q=6;break}k=l;q=11}else{k=0;q=11}while(0);a:do if((q|0)==11){if((e|0)==(f|0))m=0;else{r=e;p=0;q=l;while(1){m=a[r>>0]|0;if(!(m&1))m=(m&255)>>>1;else m=c[r+4>>2]|0;if(!m){a[q>>0]=2;m=p+1|0;n=n+-1|0}else{a[q>>0]=1;m=p}r=r+12|0;if((r|0)==(f|0))break;else{p=m;q=q+1|0}}}w=(e|0)==(f|0);x=(e|0)==(f|0);v=0;s=n;b:while(1){n=c[b>>2]|0;do if(n){p=c[n+12>>2]|0;if((p|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;u=o;o=0;if(u&1){q=5;break b}}else n=c[p>>2]|0;if((n|0)==-1){c[b>>2]=0;r=1;break}else{r=(c[b>>2]|0)==0;break}}else r=1;while(0);p=c[d>>2]|0;if(p){n=c[p+12>>2]|0;if((n|0)==(c[p+16>>2]|0)){o=0;n=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;u=o;o=0;if(u&1){q=5;break}}else n=c[n>>2]|0;if((n|0)==-1){c[d>>2]=0;p=0;q=1}else q=0}else{p=0;q=1}n=c[b>>2]|0;if(!((s|0)!=0&(r^q))){q=66;break}p=c[n+12>>2]|0;if((p|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;u=o;o=0;if(u&1){q=5;break}}else n=c[p>>2]|0;if(!j){o=0;n=ra(c[(c[g>>2]|0)+28>>2]|0,g|0,n|0)|0;u=o;o=0;if(u&1){q=5;break}}u=v+1|0;if(w){n=0;r=s}else{r=0;t=e;q=s;s=l;while(1){do if((a[s>>0]|0)==1){if(!(a[t>>0]&1))p=t+4|0;else p=c[t+8>>2]|0;p=c[p+(v<<2)>>2]|0;if(!j){o=0;p=ra(c[(c[g>>2]|0)+28>>2]|0,g|0,p|0)|0;z=o;o=0;if(z&1){q=4;break b}}if((n|0)!=(p|0)){a[s>>0]=0;p=r;q=q+-1|0;break}p=a[t>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[t+4>>2]|0;if((p|0)==(u|0)){a[s>>0]=2;p=1;m=m+1|0;q=q+-1|0}else p=1}else p=r;while(0);t=t+12|0;if((t|0)==(f|0)){n=p;r=q;break}else{r=p;s=s+1|0}}}if(!n){v=u;s=r;continue}n=c[b>>2]|0;p=n+12|0;q=c[p>>2]|0;if((q|0)==(c[n+16>>2]|0)){o=0;ka(c[(c[n>>2]|0)+40>>2]|0,n|0)|0;z=o;o=0;if(z&1){q=5;break}}else c[p>>2]=q+4;if((m+r|0)>>>0<2|x){v=u;s=r;continue}else{n=e;q=l}while(1){if((a[q>>0]|0)==2){p=a[n>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[n+4>>2]|0;if((p|0)!=(u|0)){a[q>>0]=0;m=m+-1|0}}n=n+12|0;if((n|0)==(f|0)){v=u;s=r;continue b}else q=q+1|0}}if((q|0)==4){e=Na()|0;break}else if((q|0)==5){e=Na()|0;break}else if((q|0)==66){do if(n){m=c[n+12>>2]|0;if((m|0)==(c[n+16>>2]|0)){o=0;m=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;z=o;o=0;if(z&1){q=6;break a}}else m=c[m>>2]|0;if((m|0)==-1){c[b>>2]=0;n=1;break}else{n=(c[b>>2]|0)==0;break}}else n=1;while(0);do if(p){m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0)){o=0;m=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;z=o;o=0;if(z&1){q=6;break a}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else{q=81;break}else{c[d>>2]=0;q=79;break}}else q=79;while(0);if((q|0)==79?n:0)q=81;if((q|0)==81)c[h>>2]=c[h>>2]|2;c:do if((e|0)==(f|0))q=85;else while(1){if((a[l>>0]|0)==2)break c;e=e+12|0;if((e|0)==(f|0)){q=85;break}else l=l+1|0}while(0);if((q|0)==85){c[h>>2]=c[h>>2]|4;e=f}if(k)Gl(k);i=y;return e|0}}while(0);if((q|0)==6)e=Na()|0;if(k)Gl(k);Ya(e|0);return 0}function Ju(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){C=25;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k)break;else{j=l;break b}else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(k){j=0;break}else l=0}j=a[A>>0]|0;j=(j&1)==0?(j&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+j|0)){o=0;wa(8,A|0,j<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+j}k=f+12|0;j=c[k>>2]|0;m=f+16|0;if((j|0)==(c[m>>2]|0)){o=0;j=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}}else j=c[j>>2]|0;if(jp(j,t,b,u,v,n,B,x,y,s)|0){j=l;break}j=c[k>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}else{j=f;continue}}else{c[k>>2]=j+4;j=f;continue}}if((C|0)==25){b=Na()|0;break}D=a[B>>0]|0;if((((D&1)==0?(D&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){D=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=D}o=0;b=va(21,b|0,c[u>>2]|0,g|0,t|0)|0;D=o;o=0;if(!(D&1)){c[h>>2]=b;Ur(B,x,c[y>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;D=o;o=0;if(D&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;Im(A);Im(B);i=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Ku(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){f=c[k+12>>2]|0;if((f|0)==(c[k+16>>2]|0)){o=0;f=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;m=o;o=0;if(m&1){C=25;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(l)break;else break b;else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(l){k=0;break}else k=0}f=a[A>>0]|0;f=(f&1)==0?(f&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+f|0)){o=0;wa(8,A|0,f<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+f}l=j+12|0;f=c[l>>2]|0;m=j+16|0;if((f|0)==(c[m>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}}else f=c[f>>2]|0;if(jp(f,t,b,u,v,n,B,x,y,s)|0)break;f=c[l>>2]|0;if((f|0)==(c[m>>2]|0)){o=0;ka(c[(c[j>>2]|0)+40>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}else continue}else{c[l>>2]=f+4;continue}}if((C|0)==25){b=Na()|0;break}E=a[B>>0]|0;if((((E&1)==0?(E&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){E=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=E}o=0;b=va(22,b|0,c[u>>2]|0,g|0,t|0)|0;f=D;E=o;o=0;if(!(E&1)){E=h;c[E>>2]=b;c[E+4>>2]=f;Ur(B,x,c[y>>2]|0,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;E=c[d>>2]|0;Im(A);Im(B);i=z;return E|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Lu(d,e,f,g,h,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+320|0;t=A+208|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;np(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))d=10;else d=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,d|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;d=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=d;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=c[k>>2]|0;k=c[e>>2]|0;b:while(1){if(k){g=c[k+12>>2]|0;if((g|0)==(c[k+16>>2]|0)){o=0;g=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=25;break}}else g=c[g>>2]|0;if((g|0)==-1){c[e>>2]=0;g=0;l=1}else{g=k;l=0}}else{g=0;l=1}m=c[f>>2]|0;do if(m){k=c[m+12>>2]|0;if((k|0)==(c[m+16>>2]|0)){o=0;k=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;n=o;o=0;if(n&1){D=25;break b}}else k=c[k>>2]|0;if((k|0)!=-1)if(l)break;else{k=m;break b}else{c[f>>2]=0;D=17;break}}else D=17;while(0);if((D|0)==17){D=0;if(l){k=0;break}else m=0}k=a[B>>0]|0;k=(k&1)==0?(k&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(d+k|0)){o=0;wa(8,B|0,k<<1|0,0);n=o;o=0;if(n&1){D=25;break}if(!(a[B>>0]&1))d=10;else d=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,d|0,0);n=o;o=0;if(n&1){D=25;break}d=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=d+k}l=g+12|0;k=c[l>>2]|0;n=g+16|0;if((k|0)==(c[n>>2]|0)){o=0;k=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;E=o;o=0;if(E&1){D=25;break}}else k=c[k>>2]|0;if(jp(k,u,d,v,w,p,C,y,z,t)|0){k=m;break}k=c[l>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;E=o;o=0;if(E&1){D=25;break}else{k=g;continue}}else{c[l>>2]=k+4;k=g;continue}}if((D|0)==25){d=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;d=va(23,d|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){b[j>>1]=d;Ur(C,y,c[z>>2]|0,h);if(g){d=c[g+12>>2]|0;if((d|0)==(c[g+16>>2]|0)){o=0;d=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;E=o;o=0;if(E&1){D=26;break}}else d=c[d>>2]|0;if((d|0)==-1){c[e>>2]=0;g=1}else g=0}else g=1;do if(k){d=c[k+12>>2]|0;if((d|0)==(c[k+16>>2]|0)){o=0;d=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=26;break a}}else d=c[d>>2]|0;if((d|0)!=-1)if(g)break;else{D=53;break}else{c[f>>2]=0;D=51;break}}else D=51;while(0);if((D|0)==51?g:0)D=53;if((D|0)==53)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=26}else D=26;while(0);if((D|0)==26)d=Na()|0;Im(B);Im(C);Ya(d|0);return 0}function Mu(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){C=25;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k)break;else{j=l;break b}else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(k){j=0;break}else l=0}j=a[A>>0]|0;j=(j&1)==0?(j&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+j|0)){o=0;wa(8,A|0,j<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+j}k=f+12|0;j=c[k>>2]|0;m=f+16|0;if((j|0)==(c[m>>2]|0)){o=0;j=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}}else j=c[j>>2]|0;if(jp(j,t,b,u,v,n,B,x,y,s)|0){j=l;break}j=c[k>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}else{j=f;continue}}else{c[k>>2]=j+4;j=f;continue}}if((C|0)==25){b=Na()|0;break}D=a[B>>0]|0;if((((D&1)==0?(D&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){D=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=D}o=0;b=va(24,b|0,c[u>>2]|0,g|0,t|0)|0;D=o;o=0;if(!(D&1)){c[h>>2]=b;Ur(B,x,c[y>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;D=o;o=0;if(D&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;Im(A);Im(B);i=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Nu(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){C=25;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k)break;else{j=l;break b}else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(k){j=0;break}else l=0}j=a[A>>0]|0;j=(j&1)==0?(j&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+j|0)){o=0;wa(8,A|0,j<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+j}k=f+12|0;j=c[k>>2]|0;m=f+16|0;if((j|0)==(c[m>>2]|0)){o=0;j=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}}else j=c[j>>2]|0;if(jp(j,t,b,u,v,n,B,x,y,s)|0){j=l;break}j=c[k>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}else{j=f;continue}}else{c[k>>2]=j+4;j=f;continue}}if((C|0)==25){b=Na()|0;break}D=a[B>>0]|0;if((((D&1)==0?(D&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){D=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=D}o=0;b=va(25,b|0,c[u>>2]|0,g|0,t|0)|0;D=o;o=0;if(!(D&1)){c[h>>2]=b;Ur(B,x,c[y>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;D=o;o=0;if(D&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;Im(A);Im(B);i=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Ou(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){f=c[k+12>>2]|0;if((f|0)==(c[k+16>>2]|0)){o=0;f=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;m=o;o=0;if(m&1){C=25;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(l)break;else break b;else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(l){k=0;break}else k=0}f=a[A>>0]|0;f=(f&1)==0?(f&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+f|0)){o=0;wa(8,A|0,f<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+f}l=j+12|0;f=c[l>>2]|0;m=j+16|0;if((f|0)==(c[m>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}}else f=c[f>>2]|0;if(jp(f,t,b,u,v,n,B,x,y,s)|0)break;f=c[l>>2]|0;if((f|0)==(c[m>>2]|0)){o=0;ka(c[(c[j>>2]|0)+40>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}else continue}else{c[l>>2]=f+4;continue}}if((C|0)==25){b=Na()|0;break}E=a[B>>0]|0;if((((E&1)==0?(E&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){E=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=E}o=0;b=va(26,b|0,c[u>>2]|0,g|0,t|0)|0;f=D;E=o;o=0;if(!(E&1)){E=h;c[E>>2]=b;c[E+4>>2]=f;Ur(B,x,c[y>>2]|0,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;E=c[d>>2]|0;Im(A);Im(B);i=z;return E|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Pu(b,d,e,f,h,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;var k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=i;i=i+352|0;v=D+208|0;l=D+40|0;m=D+36|0;F=D+24|0;E=D+12|0;x=D+8|0;B=D+48|0;C=D+4|0;y=D;z=D+337|0;w=D+336|0;op(F,f,v,l,m);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);u=o;o=0;a:do if(!(u&1)){s=E+8|0;t=E+1|0;b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b;c[C>>2]=B;c[y>>2]=0;a[z>>0]=1;a[w>>0]=69;u=E+4|0;r=c[l>>2]|0;q=c[m>>2]|0;f=c[d>>2]|0;b:while(1){if(f){l=c[f+12>>2]|0;if((l|0)==(c[f+16>>2]|0)){o=0;l=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;p=o;o=0;if(p&1){G=25;break}}else l=c[l>>2]|0;if((l|0)==-1){c[d>>2]=0;f=0;n=1}else n=0}else{f=0;n=1}l=c[e>>2]|0;do if(l){m=c[l+12>>2]|0;if((m|0)==(c[l+16>>2]|0)){o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){G=25;break b}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else break b;else{c[e>>2]=0;G=17;break}}else G=17;while(0);if((G|0)==17){G=0;if(n){l=0;break}else l=0}m=a[E>>0]|0;m=(m&1)==0?(m&255)>>>1:c[u>>2]|0;if((c[x>>2]|0)==(b+m|0)){o=0;wa(8,E|0,m<<1|0,0);p=o;o=0;if(p&1){G=25;break}if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);p=o;o=0;if(p&1){G=25;break}b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b+m}n=f+12|0;m=c[n>>2]|0;p=f+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}}else m=c[m>>2]|0;if(pp(m,z,w,b,x,r,q,F,B,C,y,v)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}else continue}else{c[n>>2]=l+4;continue}}if((G|0)==25){b=Na()|0;break}H=a[F>>0]|0;if(!((a[z>>0]|0)==0?1:(((H&1)==0?(H&255)>>>1:c[F+4>>2]|0)|0)==0)?(A=c[C>>2]|0,(A-B|0)<160):0){H=c[y>>2]|0;c[C>>2]=A+4;c[A>>2]=H}o=0;k=+ta(1,b|0,c[x>>2]|0,h|0);H=o;o=0;if(!(H&1)){g[j>>2]=k;Ur(F,B,c[C>>2]|0,h);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;H=o;o=0;if(H&1){G=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{G=53;break}else{c[e>>2]=0;G=51;break}}else G=51;while(0);if((G|0)==51?f:0)G=53;if((G|0)==53)c[h>>2]=c[h>>2]|2;H=c[d>>2]|0;Im(E);Im(F);i=D;return H|0}else G=26}else G=26;while(0);if((G|0)==26)b=Na()|0;Im(E);Im(F);Ya(b|0);return 0}function Qu(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=i;i=i+352|0;v=D+208|0;l=D+40|0;m=D+36|0;F=D+24|0;E=D+12|0;x=D+8|0;B=D+48|0;C=D+4|0;y=D;z=D+337|0;w=D+336|0;op(F,f,v,l,m);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);u=o;o=0;a:do if(!(u&1)){s=E+8|0;t=E+1|0;b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b;c[C>>2]=B;c[y>>2]=0;a[z>>0]=1;a[w>>0]=69;u=E+4|0;r=c[l>>2]|0;q=c[m>>2]|0;f=c[d>>2]|0;b:while(1){if(f){l=c[f+12>>2]|0;if((l|0)==(c[f+16>>2]|0)){o=0;l=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;p=o;o=0;if(p&1){G=25;break}}else l=c[l>>2]|0;if((l|0)==-1){c[d>>2]=0;f=0;n=1}else n=0}else{f=0;n=1}l=c[e>>2]|0;do if(l){m=c[l+12>>2]|0;if((m|0)==(c[l+16>>2]|0)){o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){G=25;break b}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else break b;else{c[e>>2]=0;G=17;break}}else G=17;while(0);if((G|0)==17){G=0;if(n){l=0;break}else l=0}m=a[E>>0]|0;m=(m&1)==0?(m&255)>>>1:c[u>>2]|0;if((c[x>>2]|0)==(b+m|0)){o=0;wa(8,E|0,m<<1|0,0);p=o;o=0;if(p&1){G=25;break}if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);p=o;o=0;if(p&1){G=25;break}b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b+m}n=f+12|0;m=c[n>>2]|0;p=f+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}}else m=c[m>>2]|0;if(pp(m,z,w,b,x,r,q,F,B,C,y,v)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}else continue}else{c[n>>2]=l+4;continue}}if((G|0)==25){b=Na()|0;break}H=a[F>>0]|0;if(!((a[z>>0]|0)==0?1:(((H&1)==0?(H&255)>>>1:c[F+4>>2]|0)|0)==0)?(A=c[C>>2]|0,(A-B|0)<160):0){H=c[y>>2]|0;c[C>>2]=A+4;c[A>>2]=H}o=0;k=+ta(2,b|0,c[x>>2]|0,g|0);H=o;o=0;if(!(H&1)){h[j>>3]=k;Ur(F,B,c[C>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;H=o;o=0;if(H&1){G=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{G=53;break}else{c[e>>2]=0;G=51;break}}else G=51;while(0);if((G|0)==51?f:0)G=53;if((G|0)==53)c[g>>2]=c[g>>2]|2;H=c[d>>2]|0;Im(E);Im(F);i=D;return H|0}else G=26}else G=26;while(0);if((G|0)==26)b=Na()|0;Im(E);Im(F);Ya(b|0);return 0}function Ru(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=i;i=i+352|0;v=D+208|0;l=D+40|0;m=D+36|0;F=D+24|0;E=D+12|0;x=D+8|0;B=D+48|0;C=D+4|0;y=D;z=D+337|0;w=D+336|0;op(F,f,v,l,m);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);u=o;o=0;a:do if(!(u&1)){s=E+8|0;t=E+1|0;b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b;c[C>>2]=B;c[y>>2]=0;a[z>>0]=1;a[w>>0]=69;u=E+4|0;r=c[l>>2]|0;q=c[m>>2]|0;f=c[d>>2]|0;b:while(1){if(f){l=c[f+12>>2]|0;if((l|0)==(c[f+16>>2]|0)){o=0;l=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;p=o;o=0;if(p&1){G=25;break}}else l=c[l>>2]|0;if((l|0)==-1){c[d>>2]=0;f=0;n=1}else n=0}else{f=0;n=1}l=c[e>>2]|0;do if(l){m=c[l+12>>2]|0;if((m|0)==(c[l+16>>2]|0)){o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){G=25;break b}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else break b;else{c[e>>2]=0;G=17;break}}else G=17;while(0);if((G|0)==17){G=0;if(n){l=0;break}else l=0}m=a[E>>0]|0;m=(m&1)==0?(m&255)>>>1:c[u>>2]|0;if((c[x>>2]|0)==(b+m|0)){o=0;wa(8,E|0,m<<1|0,0);p=o;o=0;if(p&1){G=25;break}if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);p=o;o=0;if(p&1){G=25;break}b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b+m}n=f+12|0;m=c[n>>2]|0;p=f+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}}else m=c[m>>2]|0;if(pp(m,z,w,b,x,r,q,F,B,C,y,v)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}else continue}else{c[n>>2]=l+4;continue}}if((G|0)==25){b=Na()|0;break}H=a[F>>0]|0;if(!((a[z>>0]|0)==0?1:(((H&1)==0?(H&255)>>>1:c[F+4>>2]|0)|0)==0)?(A=c[C>>2]|0,(A-B|0)<160):0){H=c[y>>2]|0;c[C>>2]=A+4;c[A>>2]=H}o=0;k=+ta(3,b|0,c[x>>2]|0,g|0);H=o;o=0;if(!(H&1)){h[j>>3]=k;Ur(F,B,c[C>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;H=o;o=0;if(H&1){G=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{G=53;break}else{c[e>>2]=0;G=51;break}}else G=51;while(0);if((G|0)==51?f:0)G=53;if((G|0)==53)c[g>>2]=c[g>>2]|2;H=c[d>>2]|0;Im(E);Im(F);i=D;return H|0}else G=26}else G=26;while(0);if((G|0)==26)b=Na()|0;Im(E);Im(F);Ya(b|0);return 0}function Su(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;i=i+16|0;h=g;c[h>>2]=f;f=qk(d)|0;d=el(a,b,e,h)|0;if((f|0)!=0?(o=0,ka(75,f|0)|0,h=o,o=0,h&1):0){h=Na(0)|0;ec(h)}i=g;return d|0}function Tu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=qk(b)|0;o=0;b=ma(37,a|0,d|0,g|0)|0;a=o;o=0;if(a&1){b=Na()|0;if((e|0)!=0?(o=0,ka(75,e|0)|0,g=o,o=0,g&1):0){g=Na(0)|0;ec(g)}Ya(b|0)}else{if((e|0)!=0?(o=0,ka(75,e|0)|0,g=o,o=0,g&1):0){g=Na(0)|0;ec(g)}i=f;return b|0}return 0}function Uu(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0;p=i;i=i+16|0;n=p;j=c[b>>2]|0;a:do if(!j)j=0;else{q=d;l=f-q>>2;m=g+12|0;k=c[m>>2]|0;l=(k|0)>(l|0)?k-l|0:0;k=e;q=k-q|0;g=q>>2;if((q|0)>0?(Gb[c[(c[j>>2]|0)+48>>2]&63](j,d,g)|0)!=(g|0):0){c[b>>2]=0;j=0;break}do if((l|0)>0){Vm(n,l,h);o=0;g=ma(c[(c[j>>2]|0)+48>>2]|0,j|0,((a[n>>0]&1)==0?n+4|0:c[n+8>>2]|0)|0,l|0)|0;q=o;o=0;if(q&1){q=Na()|0;Wm(n);Ya(q|0)}if((g|0)==(l|0)){Wm(n);break}else{c[b>>2]=0;Wm(n);j=0;break a}}while(0);q=f-k|0;f=q>>2;if((q|0)>0?(Gb[c[(c[j>>2]|0)+48>>2]&63](j,e,f)|0)!=(f|0):0){c[b>>2]=0;j=0;break}c[m>>2]=0}while(0);i=p;return j|0}function Vu(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;i=c[a>>2]|0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0))if((Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1){c[a>>2]=0;i=0;break}else{i=c[a>>2]|0;break}}else i=0;while(0);j=(i|0)==0;i=c[e>>2]|0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0)?(Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1:0){c[e>>2]=0;r=11;break}if(j)r=13;else r=12}else r=11;while(0);if((r|0)==11)if(j)r=12;else{i=0;r=13}a:do if((r|0)==12){c[f>>2]=c[f>>2]|6;i=0}else if((r|0)==13){j=c[a>>2]|0;k=c[j+12>>2]|0;if((k|0)==(c[j+16>>2]|0))j=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else j=d[k>>0]|0;k=j&255;if(k<<24>>24>-1?(q=g+8|0,(b[(c[q>>2]|0)+(j<<24>>24<<1)>>1]&2048)!=0):0){m=(Gb[c[(c[g>>2]|0)+36>>2]&63](g,k,0)|0)<<24>>24;j=c[a>>2]|0;k=j+12|0;l=c[k>>2]|0;if((l|0)==(c[j+16>>2]|0)){Eb[c[(c[j>>2]|0)+40>>2]&127](j)|0;o=h;n=i;h=i;i=m}else{c[k>>2]=l+1;o=h;n=i;h=i;i=m}while(1){i=i+-48|0;p=o+-1|0;j=c[a>>2]|0;do if(j){if((c[j+12>>2]|0)==(c[j+16>>2]|0))if((Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0)==-1){c[a>>2]=0;j=0;break}else{j=c[a>>2]|0;break}}else j=0;while(0);l=(j|0)==0;if(h)if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;k=0;h=0}else{k=n;h=n}else k=n;else{k=n;h=0}j=c[a>>2]|0;if(!((o|0)>1&(l^(h|0)==0)))break;l=c[j+12>>2]|0;if((l|0)==(c[j+16>>2]|0))j=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else j=d[l>>0]|0;l=j&255;if(l<<24>>24<=-1)break a;if(!(b[(c[q>>2]|0)+(j<<24>>24<<1)>>1]&2048))break a;i=((Gb[c[(c[g>>2]|0)+36>>2]&63](g,l,0)|0)<<24>>24)+(i*10|0)|0;j=c[a>>2]|0;l=j+12|0;m=c[l>>2]|0;if((m|0)==(c[j+16>>2]|0)){Eb[c[(c[j>>2]|0)+40>>2]&127](j)|0;o=p;n=k;continue}else{c[l>>2]=m+1;o=p;n=k;continue}}do if(j){if((c[j+12>>2]|0)==(c[j+16>>2]|0))if((Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0)==-1){c[a>>2]=0;j=0;break}else{j=c[a>>2]|0;break}}else j=0;while(0);j=(j|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)?(Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0)==-1:0){c[e>>2]=0;r=50;break}if(j)break a}else r=50;while(0);if((r|0)==50?!j:0)break;c[f>>2]=c[f>>2]|2;break}c[f>>2]=c[f>>2]|4;i=0}while(0);return i|0}function Wu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=c[a>>2]|0;do if(g){h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))g=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[h>>2]|0;if((g|0)==-1){c[a>>2]=0;i=1;break}else{i=(c[a>>2]|0)==0;break}}else i=1;while(0);h=c[b>>2]|0;do if(h){g=c[h+12>>2]|0;if((g|0)==(c[h+16>>2]|0))g=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else g=c[g>>2]|0;if((g|0)!=-1)if(i){o=17;break}else{o=16;break}else{c[b>>2]=0;o=14;break}}else o=14;while(0);if((o|0)==14)if(i)o=16;else{h=0;o=17}a:do if((o|0)==16){c[d>>2]=c[d>>2]|6;g=0}else if((o|0)==17){g=c[a>>2]|0;i=c[g+12>>2]|0;if((i|0)==(c[g+16>>2]|0))g=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[i>>2]|0;if(!(Gb[c[(c[e>>2]|0)+12>>2]&63](e,2048,g)|0)){c[d>>2]=c[d>>2]|4;g=0;break}g=(Gb[c[(c[e>>2]|0)+52>>2]&63](e,g,0)|0)<<24>>24;i=c[a>>2]|0;j=i+12|0;k=c[j>>2]|0;if((k|0)==(c[i+16>>2]|0)){Eb[c[(c[i>>2]|0)+40>>2]&127](i)|0;m=f;l=h;j=h}else{c[j>>2]=k+4;m=f;l=h;j=h}while(1){g=g+-48|0;n=m+-1|0;h=c[a>>2]|0;do if(h){i=c[h+12>>2]|0;if((i|0)==(c[h+16>>2]|0))h=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=c[i>>2]|0;if((h|0)==-1){c[a>>2]=0;k=1;break}else{k=(c[a>>2]|0)==0;break}}else k=1;while(0);do if(j){h=c[j+12>>2]|0;if((h|0)==(c[j+16>>2]|0))h=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else h=c[h>>2]|0;if((h|0)==-1){c[b>>2]=0;j=0;f=0;h=1;break}else{j=l;f=l;h=(l|0)==0;break}}else{j=l;f=0;h=1}while(0);i=c[a>>2]|0;if(!((m|0)>1&(k^h)))break;h=c[i+12>>2]|0;if((h|0)==(c[i+16>>2]|0))h=Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0;else h=c[h>>2]|0;if(!(Gb[c[(c[e>>2]|0)+12>>2]&63](e,2048,h)|0))break a;g=((Gb[c[(c[e>>2]|0)+52>>2]&63](e,h,0)|0)<<24>>24)+(g*10|0)|0;h=c[a>>2]|0;i=h+12|0;k=c[i>>2]|0;if((k|0)==(c[h+16>>2]|0)){Eb[c[(c[h>>2]|0)+40>>2]&127](h)|0;m=n;l=j;j=f;continue}else{c[i>>2]=k+4;m=n;l=j;j=f;continue}}do if(i){h=c[i+12>>2]|0;if((h|0)==(c[i+16>>2]|0))h=Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0;else h=c[h>>2]|0;if((h|0)==-1){c[a>>2]=0;i=1;break}else{i=(c[a>>2]|0)==0;break}}else i=1;while(0);do if(j){h=c[j+12>>2]|0;if((h|0)==(c[j+16>>2]|0))h=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else h=c[h>>2]|0;if((h|0)!=-1)if(i)break a;else break;else{c[b>>2]=0;o=60;break}}else o=60;while(0);if((o|0)==60?!i:0)break;c[d>>2]=c[d>>2]|2}while(0);return g|0}function Xu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;e=(c[g>>2]|0)!=189;i=c[a>>2]|0;h=i;f=(c[d>>2]|0)-h|0;f=f>>>0<2147483647?f<<1:-1;h=(c[b>>2]|0)-h|0;i=Il(e?i:0,f)|0;if(!i)Sj();do if(!e){e=c[a>>2]|0;c[a>>2]=i;if(e){o=0;ha(c[g>>2]|0,e|0);i=o;o=0;if(i&1){i=Na(0)|0;ec(i)}else{j=c[a>>2]|0;break}}else j=i}else{c[a>>2]=i;j=i}while(0);c[g>>2]=201;c[b>>2]=j+h;c[d>>2]=(c[a>>2]|0)+f;return}function Yu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;e=(c[g>>2]|0)!=189;i=c[a>>2]|0;h=i;f=(c[d>>2]|0)-h|0;f=f>>>0<2147483647?f<<1:-1;h=(c[b>>2]|0)-h>>2;i=Il(e?i:0,f)|0;if(!i)Sj();do if(!e){e=c[a>>2]|0;c[a>>2]=i;if(e){o=0;ha(c[g>>2]|0,e|0);i=o;o=0;if(i&1){i=Na(0)|0;ec(i)}else{j=c[a>>2]|0;break}}else j=i}else{c[a>>2]=i;j=i}while(0);c[g>>2]=201;c[b>>2]=j+(h<<2);c[d>>2]=(c[a>>2]|0)+(f>>>2<<2);return}function Zu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=d;f=a[b>>0]|0;if(!(f&1)){g=10;k=(f&255)>>>1}else{f=c[b>>2]|0;g=(f&-2)+-1|0;k=c[b+4>>2]|0;f=f&255}j=e-h|0;do if((e|0)!=(d|0)){if((g-k|0)>>>0>>0){Tm(b,g,k+j-g|0,k,k,0,0);f=a[b>>0]|0}if(!(f&1))i=b+1|0;else i=c[b+8>>2]|0;h=e+(k-h)|0;if((d|0)!=(e|0)){f=d;g=i+k|0;while(1){a[g>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else g=g+1|0}}a[i+h>>0]=0;f=k+j|0;if(!(a[b>>0]&1)){a[b>>0]=f<<1;break}else{c[b+4>>2]=f;break}}while(0);return b|0}function _u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;e=(c[g>>2]|0)!=189;i=c[a>>2]|0;h=i;f=(c[d>>2]|0)-h|0;f=f>>>0<2147483647?f<<1:-1;h=(c[b>>2]|0)-h>>2;i=Il(e?i:0,f)|0;if(!i)Sj();do if(!e){e=c[a>>2]|0;c[a>>2]=i;if(e){o=0;ha(c[g>>2]|0,e|0);i=o;o=0;if(i&1){i=Na(0)|0;ec(i)}else{j=c[a>>2]|0;break}}else j=i}else{c[a>>2]=i;j=i}while(0);c[g>>2]=201;c[b>>2]=j+(h<<2);c[d>>2]=(c[a>>2]|0)+(f>>>2<<2);return}function $u(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=d;f=a[b>>0]|0;if(!(f&1)){g=1;k=(f&255)>>>1}else{f=c[b>>2]|0;g=(f&-2)+-1|0;k=c[b+4>>2]|0;f=f&255}j=e-h>>2;do if(j){if((g-k|0)>>>0>>0){an(b,g,k+j-g|0,k,k,0,0);f=a[b>>0]|0}if(!(f&1))i=b+4|0;else i=c[b+8>>2]|0;h=k+((e-h|0)>>>2)|0;if((d|0)!=(e|0)){f=d;g=i+(k<<2)|0;while(1){c[g>>2]=c[f>>2];f=f+4|0;if((f|0)==(e|0))break;else g=g+4|0}}c[i+(h<<2)>>2]=0;f=k+j|0;if(!(a[b>>0]&1)){a[b>>0]=f<<1;break}else{c[b+4>>2]=f;break}}while(0);return b|0}function av(b,d){b=b|0;d=d|0;var e=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a[b+128>>0]=0;do if(d){o=0;ia(125,b|0,d|0);e=o;o=0;if(e&1){e=Na()|0;Dv(b);Ya(e|0)}else{Uv(b,d);break}}while(0);return}function bv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43148)|0);return}function cv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43188)|0);return}function dv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44220)|0);return}function ev(a,b){a=a|0;b=b|0;xs(a,b,Hs(44212)|0);return}function fv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44280)|0);return}function gv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44288)|0);return}function hv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44344)|0);return}function iv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44352)|0);return}function jv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44360)|0);return}function kv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44368)|0);return}function lv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43260)|0);return}function mv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43332)|0);return}function nv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43392)|0);return}function ov(a,b){a=a|0;b=b|0;xs(a,b,Hs(43452)|0);return}function pv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43764)|0);return}function qv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43828)|0);return}function rv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43892)|0);return}function sv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43956)|0);return}function tv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43992)|0);return}function uv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44028)|0);return}function vv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44064)|0);return}function wv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44100)|0);return}function xv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43544)|0);return}function yv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43636)|0);return}function zv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43668)|0);return}function Av(a,b){a=a|0;b=b|0;xs(a,b,Hs(43700)|0);return}function Bv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44140)|0);return}function Cv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44180)|0);return}function Dv(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;do if(e){f=b+4|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}if((b+16|0)==(e|0)){a[b+128>>0]=0;break}else{cj(e);break}}while(0);return}function Ev(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=a+4|0;d=c[h>>2]|0;e=c[a>>2]|0;f=d-e>>2;if(f>>>0>=b>>>0){if(f>>>0>b>>>0?(g=e+(b<<2)|0,(d|0)!=(g|0)):0){do d=d+-4|0;while((d|0)!=(g|0));c[h>>2]=d}}else Tv(a,b-f|0);return}function Fv(a,b){a=a|0;b=b|0;var d=0;d=c[a+8>>2]|0;if((c[a+12>>2]|0)-d>>2>>>0>b>>>0)d=(c[d+(b<<2)>>2]|0)!=0;else d=0;return d|0}function Gv(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;d=c[d+4>>2]|0;a=(c[a>>2]|0)+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;Bb[b&255](a);return}function Hv(d,f,g,h,i,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0;c[g>>2]=d;c[j>>2]=h;if(l&2)if((i-h|0)<3)d=1;else{c[j>>2]=h+1;a[h>>0]=-17;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=-69;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=-65;m=4}else m=4;a:do if((m|0)==4){n=f;d=c[g>>2]|0;if(d>>>0>>0)while(1){l=b[d>>1]|0;m=l&65535;if(m>>>0>k>>>0){d=2;break a}do if((l&65535)<128){d=c[j>>2]|0;if((i-d|0)<1){d=1;break a}c[j>>2]=d+1;a[d>>0]=l}else{if((l&65535)<2048){d=c[j>>2]|0;if((i-d|0)<2){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>6|192;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((l&65535)<55296){d=c[j>>2]|0;if((i-d|0)<3){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>12|224;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>6&63|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((l&65535)>=56320){if((l&65535)<57344){d=2;break a}d=c[j>>2]|0;if((i-d|0)<3){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>12|224;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>6&63|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((n-d|0)<4){d=1;break a}d=d+2|0;l=e[d>>1]|0;if((l&64512|0)!=56320){d=2;break a}if((i-(c[j>>2]|0)|0)<4){d=1;break a}h=m&960;if(((h<<10)+65536|m<<10&64512|l&1023)>>>0>k>>>0){d=2;break a}c[g>>2]=d;d=(h>>>6)+1|0;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=d>>>2|240;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>2&15|d<<4&48|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m<<4&48|l>>>6&15|128;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=l&63|128}while(0);d=(c[g>>2]|0)+2|0;c[g>>2]=d;if(d>>>0>=f>>>0){d=0;break}}else d=0}while(0);return d|0}function Iv(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0;c[g>>2]=e;c[j>>2]=h;if(l&4){e=c[g>>2]|0;l=f;if((((l-e|0)>2?(a[e>>0]|0)==-17:0)?(a[e+1>>0]|0)==-69:0)?(a[e+2>>0]|0)==-65:0){c[g>>2]=e+3;m=c[j>>2]|0}else m=h}else{m=h;l=f}q=i;h=c[g>>2]|0;e=h>>>0>>0;a:do if(e&m>>>0>>0)while(1){e=a[h>>0]|0;o=e&255;if(o>>>0>k>>>0){e=2;break a}do if(e<<24>>24>-1){b[m>>1]=e&255;c[g>>2]=h+1}else{if((e&255)<194){e=2;break a}if((e&255)<224){if((l-h|0)<2){e=1;break a}e=d[h+1>>0]|0;if((e&192|0)!=128){e=2;break a}e=e&63|o<<6&1984;if(e>>>0>k>>>0){e=2;break a}b[m>>1]=e;c[g>>2]=h+2;break}if((e&255)<240){if((l-h|0)<3){e=1;break a}n=a[h+1>>0]|0;e=a[h+2>>0]|0;switch(o|0){case 224:{if((n&-32)<<24>>24!=-96){e=2;break a}break}case 237:{if((n&-32)<<24>>24!=-128){e=2;break a}break}default:if((n&-64)<<24>>24!=-128){e=2;break a}}e=e&255;if((e&192|0)!=128){e=2;break a}e=(n&255)<<6&4032|o<<12|e&63;if((e&65535)>>>0>k>>>0){e=2;break a}b[m>>1]=e;c[g>>2]=h+3;break}if((e&255)>=245){e=2;break a}if((l-h|0)<4){e=1;break a}n=a[h+1>>0]|0;e=a[h+2>>0]|0;h=a[h+3>>0]|0;switch(o|0){case 240:{if((n+112&255)>=48){e=2;break a}break}case 244:{if((n&-16)<<24>>24!=-128){e=2;break a}break}default:if((n&-64)<<24>>24!=-128){e=2;break a}}p=e&255;if((p&192|0)!=128){e=2;break a}e=h&255;if((e&192|0)!=128){e=2;break a}if((q-m|0)<4){e=1;break a}o=o&7;h=n&255;n=p<<6;e=e&63;if((h<<12&258048|o<<18|n&4032|e)>>>0>k>>>0){e=2;break a}b[m>>1]=h<<2&60|p>>>4&3|((h>>>4&3|o<<2)<<6)+16320|55296;p=m+2|0;c[j>>2]=p;b[p>>1]=e|n&960|56320;c[g>>2]=(c[g>>2]|0)+4}while(0);m=(c[j>>2]|0)+2|0;c[j>>2]=m;h=c[g>>2]|0;e=h>>>0>>0;if(!(e&m>>>0>>0)){r=39;break}}else r=39;while(0);if((r|0)==39)e=e&1;return e|0}function Jv(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c;if((((g&4|0)!=0?(n-b|0)>2:0)?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)g=(a[b+2>>0]|0)==-65?b+3|0:b;else g=b;a:do if((e|0)!=0&g>>>0>>0){m=g;h=0;b:while(1){g=a[m>>0]|0;l=g&255;if(l>>>0>f>>>0){g=m;h=42;break a}do if(g<<24>>24>-1)g=m+1|0;else{if((g&255)<194){g=m;h=42;break a}if((g&255)<224){if((n-m|0)<2){g=m;h=42;break a}g=d[m+1>>0]|0;if((g&192|0)!=128){g=m;h=42;break a}if((g&63|l<<6&1984)>>>0>f>>>0){g=m;h=42;break a}g=m+2|0;break}if((g&255)<240){g=m;if((n-g|0)<3){g=m;h=42;break a}j=a[m+1>>0]|0;i=a[m+2>>0]|0;switch(l|0){case 224:{if((j&-32)<<24>>24!=-96){h=20;break b}break}case 237:{if((j&-32)<<24>>24!=-128){h=22;break b}break}default:if((j&-64)<<24>>24!=-128){h=24;break b}}g=i&255;if((g&192|0)!=128){g=m;h=42;break a}if(((j&255)<<6&4032|l<<12&61440|g&63)>>>0>f>>>0){g=m;h=42;break a}g=m+3|0;break}if((g&255)>=245){g=m;h=42;break a}g=m;if((e-h|0)>>>0<2|(n-g|0)<4){g=m;h=42;break a}k=a[m+1>>0]|0;i=a[m+2>>0]|0;j=a[m+3>>0]|0;switch(l|0){case 240:{if((k+112&255)>=48){h=32;break b}break}case 244:{if((k&-16)<<24>>24!=-128){h=34;break b}break}default:if((k&-64)<<24>>24!=-128){h=36;break b}}i=i&255;if((i&192|0)!=128){g=m;h=42;break a}g=j&255;if((g&192|0)!=128){g=m;h=42;break a}if(((k&255)<<12&258048|l<<18&1835008|i<<6&4032|g&63)>>>0>f>>>0){g=m;h=42;break a}g=m+4|0;h=h+1|0}while(0);h=h+1|0;if(!(h>>>0>>0&g>>>0>>0)){h=42;break a}else m=g}if((h|0)==20){g=g-b|0;break}else if((h|0)==22){g=g-b|0;break}else if((h|0)==24){g=g-b|0;break}else if((h|0)==32){g=g-b|0;break}else if((h|0)==34){g=g-b|0;break}else if((h|0)==36){g=g-b|0;break}}else h=42;while(0);if((h|0)==42)g=g-b|0;return g|0}function Kv(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;c[e>>2]=b;c[h>>2]=f;l=g;if(j&2)if((l-f|0)<3)b=1;else{c[h>>2]=f+1;a[f>>0]=-17;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=-69;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=-65;k=4}else k=4;a:do if((k|0)==4){b=c[e>>2]|0;if(b>>>0>>0)while(1){j=c[b>>2]|0;if(j>>>0>i>>>0|(j&-2048|0)==55296){b=2;break a}do if(j>>>0>=128){if(j>>>0<2048){b=c[h>>2]|0;if((l-b|0)<2){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>6|192;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}b=c[h>>2]|0;g=l-b|0;if(j>>>0<65536){if((g|0)<3){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>12|224;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>6&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}else{if((g|0)<4){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>18|240;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>12&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>6&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}}else{b=c[h>>2]|0;if((l-b|0)<1){b=1;break a}c[h>>2]=b+1;a[b>>0]=j}while(0);b=(c[e>>2]|0)+4|0;c[e>>2]=b;if(b>>>0>=d>>>0){b=0;break}}else b=0}while(0);return b|0}function Lv(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0;c[f>>2]=b;c[i>>2]=g;if(k&4){b=c[f>>2]|0;k=e;if((((k-b|0)>2?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)?(a[b+2>>0]|0)==-65:0){c[f>>2]=b+3;g=c[i>>2]|0;p=k}else p=k}else p=e;k=c[f>>2]|0;b=k>>>0>>0;a:do if(b&g>>>0>>0)while(1){b=a[k>>0]|0;o=b&255;do if(b<<24>>24>-1){if(o>>>0>j>>>0){b=2;break a}c[g>>2]=o;c[f>>2]=k+1}else{if((b&255)<194){b=2;break a}if((b&255)<224){if((p-k|0)<2){b=1;break a}b=d[k+1>>0]|0;if((b&192|0)!=128){b=2;break a}b=b&63|o<<6&1984;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+2;break}if((b&255)<240){if((p-k|0)<3){b=1;break a}l=a[k+1>>0]|0;b=a[k+2>>0]|0;switch(o|0){case 224:{if((l&-32)<<24>>24!=-96){b=2;break a}break}case 237:{if((l&-32)<<24>>24!=-128){b=2;break a}break}default:if((l&-64)<<24>>24!=-128){b=2;break a}}b=b&255;if((b&192|0)!=128){b=2;break a}b=(l&255)<<6&4032|o<<12&61440|b&63;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+3;break}if((b&255)>=245){b=2;break a}if((p-k|0)<4){b=1;break a}n=a[k+1>>0]|0;b=a[k+2>>0]|0;l=a[k+3>>0]|0;switch(o|0){case 240:{if((n+112&255)>=48){b=2;break a}break}case 244:{if((n&-16)<<24>>24!=-128){b=2;break a}break}default:if((n&-64)<<24>>24!=-128){b=2;break a}}m=b&255;if((m&192|0)!=128){b=2;break a}b=l&255;if((b&192|0)!=128){b=2;break a}b=(n&255)<<12&258048|o<<18&1835008|m<<6&4032|b&63;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+4}while(0);g=(c[i>>2]|0)+4|0;c[i>>2]=g;k=c[f>>2]|0;b=k>>>0>>0;if(!(b&g>>>0>>0)){q=38;break}}else q=38;while(0);if((q|0)==38)b=b&1;return b|0}function Mv(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c;if((((g&4|0)!=0?(n-b|0)>2:0)?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)g=(a[b+2>>0]|0)==-65?b+3|0:b;else g=b;a:do if((e|0)!=0&g>>>0>>0){l=g;m=0;b:while(1){g=a[l>>0]|0;k=g&255;do if(g<<24>>24>-1){if(k>>>0>f>>>0){g=l;h=42;break a}g=l+1|0}else{if((g&255)<194){g=l;h=42;break a}if((g&255)<224){if((n-l|0)<2){g=l;h=42;break a}g=d[l+1>>0]|0;if((g&192|0)!=128){g=l;h=42;break a}if((g&63|k<<6&1984)>>>0>f>>>0){g=l;h=42;break a}g=l+2|0;break}if((g&255)<240){g=l;if((n-g|0)<3){g=l;h=42;break a}i=a[l+1>>0]|0;h=a[l+2>>0]|0;switch(k|0){case 224:{if((i&-32)<<24>>24!=-96){h=20;break b}break}case 237:{if((i&-32)<<24>>24!=-128){h=22;break b}break}default:if((i&-64)<<24>>24!=-128){h=24;break b}}g=h&255;if((g&192|0)!=128){g=l;h=42;break a}if(((i&255)<<6&4032|k<<12&61440|g&63)>>>0>f>>>0){g=l;h=42;break a}g=l+3|0;break}if((g&255)>=245){g=l;h=42;break a}g=l;if((n-g|0)<4){g=l;h=42;break a}j=a[l+1>>0]|0;h=a[l+2>>0]|0;i=a[l+3>>0]|0;switch(k|0){case 240:{if((j+112&255)>=48){h=32;break b}break}case 244:{if((j&-16)<<24>>24!=-128){h=34;break b}break}default:if((j&-64)<<24>>24!=-128){h=36;break b}}h=h&255;if((h&192|0)!=128){g=l;h=42;break a}g=i&255;if((g&192|0)!=128){g=l;h=42;break a}if(((j&255)<<12&258048|k<<18&1835008|h<<6&4032|g&63)>>>0>f>>>0){g=l;h=42;break a}g=l+4|0}while(0);m=m+1|0;if(!(m>>>0>>0&g>>>0>>0)){h=42;break a}else l=g}if((h|0)==20){g=g-b|0;break}else if((h|0)==22){g=g-b|0;break}else if((h|0)==24){g=g-b|0;break}else if((h|0)==32){g=g-b|0;break}else if((h|0)==34){g=g-b|0;break}else if((h|0)==36){g=g-b|0;break}}else h=42;while(0);if((h|0)==42)g=g-b|0;return g|0}function Nv(a){a=a|0;Im(45196);Im(45184);Im(45172);Im(45160);Im(45148);Im(45136);Im(45124);Im(45112);Im(45100);Im(45088);Im(45076);Im(45064);Im(45052);Im(45040);return}function Ov(a){a=a|0;Wm(45368);Wm(45356);Wm(45344);Wm(45332);Wm(45320);Wm(45308);Wm(45296);Wm(45284);Wm(45272);Wm(45260);Wm(45248);Wm(45236);Wm(45224);Wm(45212);return}function Pv(a){a=a|0;Im(46e3);Im(45988);Im(45976);Im(45964);Im(45952);Im(45940);Im(45928);Im(45916);Im(45904);Im(45892);Im(45880);Im(45868);Im(45856);Im(45844);Im(45832);Im(45820);Im(45808);Im(45796);Im(45784);Im(45772);Im(45760);Im(45748);Im(45736);Im(45724);return}function Qv(a){a=a|0;Wm(46292);Wm(46280);Wm(46268);Wm(46256);Wm(46244);Wm(46232);Wm(46220);Wm(46208);Wm(46196);Wm(46184);Wm(46172);Wm(46160);Wm(46148);Wm(46136);Wm(46124);Wm(46112);Wm(46100);Wm(46088);Wm(46076);Wm(46064);Wm(46052);Wm(46040);Wm(46028);Wm(46016);return}function Rv(a){a=a|0;Im(47104);Im(47092);Im(47080);Im(47068);Im(47056);Im(47044);Im(47032);Im(47020);Im(47008);Im(46996);Im(46984);Im(46972);Im(46960);Im(46948);Im(46936);Im(46924);Im(46912);Im(46900);Im(46888);Im(46876);Im(46864);Im(46852);Im(46840);Im(46828);return}function Sv(a){a=a|0;Wm(47396);Wm(47384);Wm(47372);Wm(47360);Wm(47348);Wm(47336);Wm(47324);Wm(47312);Wm(47300);Wm(47288);Wm(47276);Wm(47264);Wm(47252);Wm(47240);Wm(47228);Wm(47216);Wm(47204);Wm(47192);Wm(47180);Wm(47168);Wm(47156);Wm(47144);Wm(47132);Wm(47120);return}function Tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k;g=c[a+8>>2]|0;d=c[a+4>>2]|0;if(g-d>>2>>>0>>0){e=c[a>>2]|0;h=d-e>>2;f=h+b|0;if(f>>>0>1073741823)$i(a);d=g-e|0;if(d>>2>>>0<536870911){d=d>>1;d=d>>>0>>0?f:d}else d=1073741823;Vv(j,d,h,a+16|0);h=j+8|0;g=c[h>>2]|0;iw(g|0,0,b<<2|0)|0;c[h>>2]=g+(b<<2);Wv(a,j);Xv(j)}else Uv(a,b);i=k;return}function Uv(a,b){a=a|0;b=b|0;var d=0;d=a+4|0;a=b;b=c[d>>2]|0;do{c[b>>2]=0;b=(c[d>>2]|0)+4|0;c[d>>2]=b;a=a+-1|0}while((a|0)!=0);return}function Vv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;c[b+12>>2]=0;c[b+16>>2]=f;do if(d){g=f+112|0;if(d>>>0<29&(a[g>>0]|0)==0){a[g>>0]=1;break}else{f=bj(d<<2)|0;break}}else f=0;while(0);c[b>>2]=f;e=f+(e<<2)|0;c[b+8>>2]=e;c[b+4>>2]=e;c[b+12>>2]=f+(d<<2);return}function Wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=c[a>>2]|0;g=a+4|0;d=b+4|0;f=(c[g>>2]|0)-e|0;h=(c[d>>2]|0)+(0-(f>>2)<<2)|0;c[d>>2]=h;lw(h|0,e|0,f|0)|0;f=c[a>>2]|0;c[a>>2]=c[d>>2];c[d>>2]=f;f=b+8|0;e=c[g>>2]|0;c[g>>2]=c[f>>2];c[f>>2]=e;f=a+8|0;a=b+12|0;e=c[f>>2]|0;c[f>>2]=c[a>>2];c[a>>2]=e;c[b>>2]=c[d>>2];return}function Xv(b){b=b|0;var d=0,e=0,f=0;e=c[b+4>>2]|0;f=b+8|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}e=c[b>>2]|0;do if(e){d=c[b+16>>2]|0;if((d|0)==(e|0)){a[d+112>>0]=0;break}else{cj(e);break}}while(0);return}function Yv(b,d){b=b|0;d=d|0;var e=0;if(d>>>0>1073741823)$i(b);e=b+128|0;if(d>>>0<29&(a[e>>0]|0)==0){a[e>>0]=1;e=b+16|0}else e=bj(d<<2)|0;c[b+4>>2]=e;c[b>>2]=e;c[b+8>>2]=e+(d<<2);return}function Zv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)!=(b|0)){f=ck()|0;g=c[f>>2]|0;c[f>>2]=0;e=+gl(a,h,Xo()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}else{c[d>>2]=4;e=0.0}while(0);i=j;return +e}function _v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)!=(b|0)){f=ck()|0;g=c[f>>2]|0;c[f>>2]=0;e=+gl(a,h,Xo()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}else{c[d>>2]=4;e=0.0}while(0);i=j;return +e}function $v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)==(b|0)){c[d>>2]=4;e=0.0}else{f=ck()|0;g=c[f>>2]|0;c[f>>2]=0;e=+gl(a,h,Xo()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}while(0);i=j;return +e}function aw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;f=0;b=0;break}g=ck()|0;h=c[g>>2]|0;c[g>>2]=0;b=Xj(b,j,f,Xo()|0)|0;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(d|0)){c[e>>2]=4;f=0;b=0;break}if((f|0)==34){c[e>>2]=4;f=-1;b=-1}else f=D}else{c[e>>2]=4;f=0;b=0}while(0);D=f;i=k;return b|0}function bw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=ck()|0;j=c[h>>2]|0;c[h>>2]=0;b=Xj(b,k,f,Xo()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>4294967295|(g|0)==34){c[e>>2]=4;b=-1;break}else break}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function cw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=ck()|0;j=c[h>>2]|0;c[h>>2]=0;b=Xj(b,k,f,Xo()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>4294967295|(g|0)==34){c[e>>2]=4;b=-1;break}else break}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function dw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=ck()|0;j=c[h>>2]|0;c[h>>2]=0;b=Xj(b,k,f,Xo()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>65535|(g|0)==34){c[e>>2]=4;b=-1;break}else{b=b&65535;break}}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function ew(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;do if((a|0)!=(b|0)){g=ck()|0;h=c[g>>2]|0;c[g>>2]=0;a=Yj(a,j,e,Xo()|0)|0;e=D;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(b|0)){c[d>>2]=4;e=0;a=0;break}if((f|0)==34){c[d>>2]=4;j=(e|0)>0|(e|0)==0&a>>>0>0;D=j?2147483647:-2147483648;i=k;return (j?-1:0)|0}}else{c[d>>2]=4;e=0;a=0}while(0);D=e;i=k;return a|0}function fw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;a:do if((a|0)==(b|0)){c[d>>2]=4;a=0}else{g=ck()|0;h=c[g>>2]|0;c[g>>2]=0;a=Yj(a,j,e,Xo()|0)|0;e=D;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(b|0)){c[d>>2]=4;a=0;break}do if((f|0)==34){c[d>>2]=4;if((e|0)>0|(e|0)==0&a>>>0>0){a=2147483647;break a}}else{if((e|0)<-1|(e|0)==-1&a>>>0<2147483648){c[d>>2]=4;break}if((e|0)>0|(e|0)==0&a>>>0>2147483647){c[d>>2]=4;a=2147483647;break a}else break a}while(0);a=-2147483648}while(0);i=k;return a|0}function gw(){}function hw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (D=d,a-c>>>0|0)|0}function iw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function jw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (D=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function kw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>>c;return a>>>c|(b&(1<>>c-32|0}function lw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return Wa(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function mw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b<>>32-c;return a<0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else lw(b,c,d)|0;return b|0}function ow(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>c;return a>>>c|(b&(1<>c-32|0}function pw(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function qw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=$(e,f)|0;d=a>>>16;a=(c>>>16)+($(e,d)|0)|0;e=b>>>16;b=$(e,f)|0;return (D=(a>>>16)+($(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function rw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=hw(j^a,i^b,j,i)|0;g=D;a=f^j;b=e^i;return hw((ww(h,g,hw(f^c,e^d,f,e)|0,D,0)|0)^a,D^b,a,b)|0}function sw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=hw(h^a,g^b,h,g)|0;b=D;ww(a,b,hw(l^d,k^e,l,k)|0,D,j)|0;e=hw(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=D;i=f;return (D=d,e)|0}function tw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=qw(e,f)|0;a=D;return (D=($(b,f)|0)+($(d,e)|0)+a|a&0,c|0|0)|0}function uw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ww(a,b,c,d,0)|0}function vw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;ww(a,b,d,e,f)|0;i=g;return (D=c[f+4>>2]|0,c[f>>2]|0)|0}function ww(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (D=n,f)|0}else{if(!g){n=0;f=0;return (D=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (D=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(ba(i|0)|0)-(ba(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (D=n,f)|0}g=h-1|0;if(g&h){i=(ba(h|0)|0)+33-(ba(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (D=o,p)|0}else{p=pw(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (D=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (D=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (D=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((pw(i|0)|0)>>>0);return (D=o,p)|0}g=(ba(i|0)|0)-(ba(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (D=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=jw(m|0,l|0,-1,-1)|0;d=D;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;hw(k,d,e,n)|0;p=D;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=hw(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=D;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (D=o,p)|0}function xw(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return yb[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function yw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;zb[a&15](b|0,c|0,d|0,e|0,f|0)}function zw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return Ab[a&3](b|0,c|0,d|0,e|0,f|0,+g)|0}function Aw(a,b){a=a|0;b=b|0;Bb[a&255](b|0)}function Bw(a,b,c){a=a|0;b=b|0;c=c|0;Cb[a&127](b|0,c|0)}function Cw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Db[a&63](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Dw(a,b){a=a|0;b=b|0;return Eb[a&127](b|0)|0}function Ew(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Fb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function Fw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Gb[a&63](b|0,c|0,d|0)|0}function Gw(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;Hb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0)}function Hw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ib[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function Iw(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Jb[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function Jw(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;Kb[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function Kw(a,b,c){a=a|0;b=b|0;c=c|0;return Lb[a&63](b|0,c|0)|0}function Lw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Mb[a&31](b|0,c|0,d|0,e|0,f|0)|0}function Mw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Nb[a&3](b|0,c|0,d|0)}function Nw(a){a=a|0;return Ob[a&15]()|0}function Ow(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Pb[a&31](b|0,c|0,d|0,e|0)|0}function Pw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Qb[a&15](b|0,c|0,d|0)}function Qw(a){a=a|0;Rb[a&7]()}function Rw(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return Sb[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Sw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return Tb[a&7](b|0,c|0,d|0,e|0,+f)|0}function Tw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ub[a&63](b|0,c|0,d|0,e|0)}function Uw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ca(0);return 0}function Vw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(1)}function Ww(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;ca(2);return 0}function Xw(a){a=a|0;ca(3)}function Yw(a,b){a=a|0;b=b|0;ca(4)}function Zw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ca(5);return 0}function _w(a){a=a|0;ca(6);return 0}function $w(a){a=a|0;return cb(a|0)|0}function ax(a){a=a|0;return rb(a|0)|0}function bx(a){a=a|0;return hb(a|0)|0}function cx(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ca(7);return 0}function dx(a,b,c){a=a|0;b=b|0;c=c|0;ca(8);return 0}function ex(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;ca(9)}function fx(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ca(10)}function gx(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ca(11)}function hx(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;ca(12)}function ix(a,b){a=a|0;b=b|0;ca(13);return 0}function jx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(14);return 0}function kx(a,b,c){a=a|0;b=b|0;c=c|0;ca(15);return 0.0}function lx(){ca(16);return 0}function mx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(17);return 0}function nx(a,b,c){a=a|0;b=b|0;c=c|0;ca(18)}function ox(a,b,c){a=a|0;b=b|0;c=c|0;lb(a|0,b|0,c|0)}function px(){ca(19)}function qx(){pb()}function rx(){Xa()}function sx(){mb()}function tx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ca(20);return 0}function ux(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ca(21);return 0}function vx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(22)} + function di(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8900]|0;c[b+4580>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+256;j=b+160|0;g=b+156|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function ei(a){a=a|0;var b=0,d=0;c[a>>2]=35660;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function fi(a){a=a|0;var b=0,d=0;c[a>>2]=35660;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function gi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function hi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;pi(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function ii(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);ji(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function ji(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;k=b+172|0;y=(c[k>>2]|0)+4|0;if((c[b+28>>2]|0)==1)l=c[b+20>>2]|0;else l=1;d=$(l<<1,y)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))x=6;if((x|0)==6?(o=0,e=ka(67,d|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[D>>2]|0)+1|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!l)x=19;else{if(!(l>>>0>1073741823?(o=0,ha(178,z|0),w=o,o=0,w&1):0))x=17;if((x|0)==17?(f=l<<2,o=0,g=ka(67,f|0)|0,w=o,o=0,!(w&1)):0){c[z>>2]=g;x=g+(l<<2)|0;c[z+8>>2]=x;iw(g|0,0,f|0)|0;c[B>>2]=x;x=19;break}e=Na()|0;d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((x|0)==19){m=b+8|0;d=c[m>>2]|0;b:do if((d|0)>0){n=b+4596|0;p=$(l,y)|0;q=p+1|0;r=b+4600|0;s=b+160|0;t=b+168|0;u=b+164|0;v=b+156|0;w=b+88|0;j=b+4592|0;if((l|0)>0)h=0;else{h=0;while(1){g=c[C>>2]|0;e=g+1|0;c[n>>2]=e;f=g+q|0;c[r>>2]=f;if(!(h&1))e=q;else{c[n>>2]=f;c[r>>2]=e;e=1}l=c[s>>2]|0;if((l|0)<=(h|0)?(h|0)<((c[t>>2]|0)+l|0):0){l=c[w>>2]|0;o=0;Aa(c[(c[l>>2]|0)+8>>2]|0,l|0,g+(e+((c[v>>2]|0)-p))|0,c[u>>2]|0,y|0);l=o;o=0;if(l&1)break;d=c[m>>2]|0}h=h+1|0;if((h|0)>=(d|0)){x=50;break b}}e=Na()|0;break}c:while(1){e=c[C>>2]|0;d=e+1|0;c[n>>2]=d;e=e+q|0;c[r>>2]=e;if(h&1){c[n>>2]=e;c[r>>2]=d;d=e}g=c[z>>2]|0;e=d;f=0;do{c[j>>2]=c[g+(f<<2)>>2];x=c[k>>2]|0;a[e+x>>0]=a[e+(x+-1)>>0]|0;a[(c[r>>2]|0)+-1>>0]=a[c[n>>2]>>0]|0;o=0;ia(83,b|0,0);x=o;o=0;if(x&1){x=38;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[j>>2];e=(c[n>>2]|0)+y|0;c[n>>2]=e;d=c[r>>2]|0;c[r>>2]=d+y;f=f+1|0}while((f|0)<(l|0));x=c[s>>2]|0;if(((x|0)<=(h|0)?(h|0)<((c[t>>2]|0)+x|0):0)?(x=c[w>>2]|0,o=0,Aa(c[(c[x>>2]|0)+8>>2]|0,x|0,d+(y+((c[v>>2]|0)-p))|0,c[u>>2]|0,y|0),x=o,o=0,x&1):0){x=30;break}h=h+1|0;if((h|0)>=(c[m>>2]|0)){x=50;break b}}if((x|0)==30){e=Na()|0;break}else if((x|0)==38){e=Na()|0;break}}else x=50;while(0);do if((x|0)==50){o=0;ha(183,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);i=A;return}while(0);d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}function ki(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=b+4596|0;f=c[p>>2]|0;t=b+172|0;e=c[t>>2]|0;if((e|0)<=0)return;q=b+4600|0;r=b+4604|0;s=b+4592|0;k=f;i=d[f+-1>>0]|0;f=d[f>>0]|0;o=0;while(1){m=c[q>>2]|0;j=a[m+(o+-1)>>0]|0;n=j&255;h=o+1|0;g=d[k+h>>0]|0;l=c[r>>2]|0;k=f-i|0;i=i-n|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;m=m+o|0;if(!l){e=mi(b,j,m,e-o|0)|0;f=e+o|0;if((f|0)!=(c[t>>2]|0)){n=ni(b,n,d[(c[p>>2]|0)+f>>0]|0)|0;a[(c[q>>2]|0)+f>>0]=n;n=c[s>>2]|0;c[s>>2]=(n|0)<1?0:n+-1|0;e=e+1|0}h=e+o|0;g=c[p>>2]|0;f=d[g+(h+-1)>>0]|0;g=d[g+h>>0]|0}else{e=f-n>>31;if((e^i|0)<0)e=f;else e=n+((e^k|0)<0?0:k)|0;n=li(b,l,d[m>>0]|0,e,0)|0;a[(c[q>>2]|0)+o>>0]=n}e=c[t>>2]|0;if((e|0)<=(h|0))break;k=c[p>>2]|0;i=f;f=g;o=h}return}function li(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&255;return d|0}d=f&~(h>>31);d=d&255;return d|0}function mi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4592|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;iw(e|0,d|0,g|0)|0;return g|0}function ni(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=b-d|0;h=a+128|0;e=a+136|0;if((((g|0)>-1?g:0-g|0)|0)>(c[e>>2]|0)){b=$(oi(a,a+4568|0)|0,d-b>>31|1)|0;f=c[e>>2]|0;g=f<<1|1;b=($(b,g)|0)+d|0;if((b|0)>=(0-f|0)){e=c[h>>2]|0;if((e+f|0)<(b|0))b=b-($(c[a+132>>2]|0,g)|0)|0}else{b=($(c[a+132>>2]|0,g)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&255;return a|0}a=e&~(b>>31);a=a&255;return a|0}else{d=oi(a,a+4580|0)|0;g=c[e>>2]|0;f=g<<1|1;b=($(f,d)|0)+b|0;if((b|0)>=(0-g|0)){e=c[h>>2]|0;if((e+g|0)<(b|0))b=b-($(c[a+132>>2]|0,f)|0)|0}else{b=($(c[a+132>>2]|0,f)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&255;return a|0}a=e&~(b>>31);a=a&255;return a|0}return 0}function oi(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function pi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function qi(a){a=a|0;cj(a);return}function ri(a){a=a|0;return 50767}function si(a,b,c){a=a|0;b=b|0;c=c|0;Gm(a,50754,12);return}function ti(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+16|0;t=s;c[t>>2]=0;u=t+4|0;c[u>>2]=0;c[t+8>>2]=0;q=t+8|0;o=0;g=ka(67,1)|0;p=o;o=0;a:do if((!(p&1)?(p=g+1|0,a[g>>0]=e,c[t>>2]=g,c[u>>2]=p,c[q>>2]=p,o=0,ia(84,t|0,d&65535|0),p=o,o=0,!(p&1)):0)?(o=0,ia(84,t|0,b&65535|0),p=o,o=0,!(p&1)):0){m=f&255;g=c[u>>2]|0;e=c[q>>2]|0;if(g>>>0>=e>>>0){d=c[t>>2]|0;b=d;j=g-b+1|0;if((j|0)<0){o=0;ha(178,t|0);p=o;o=0;if(p&1){r=52;break}b=c[t>>2]|0;e=c[q>>2]|0;d=b}l=d;g=e-l|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;e=c[u>>2]|0;k=e-l|0;if(!g){g=0;j=0}else r=12}else{k=c[u>>2]|0;g=2147483647;e=k;k=k-l|0;r=12}if((r|0)==12){o=0;j=ka(67,g|0)|0;p=o;o=0;if(p&1){r=52;break}}a[j+k>>0]=m;n=e-l|0;p=j+(k-n)|0;lw(p|0,d|0,n|0)|0;c[t>>2]=p;c[u>>2]=j+(k+1);c[q>>2]=j+g;if(b)cj(b)}else{a[g>>0]=m;c[u>>2]=(c[u>>2]|0)+1}b:do if((f|0)>0){p=0;while(1){p=p+1|0;n=p&255;g=c[u>>2]|0;d=c[q>>2]|0;if(g>>>0>=d>>>0){b=c[t>>2]|0;e=b;j=g-e+1|0;if((j|0)<0){o=0;ha(178,t|0);m=o;o=0;if(m&1)break;b=c[t>>2]|0;e=b;d=c[q>>2]|0}m=b;g=d-m|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;d=c[u>>2]|0;k=d-m|0;if(!g){l=0;j=0}else r=25}else{k=c[u>>2]|0;g=2147483647;d=k;k=k-m|0;r=25}if((r|0)==25){r=0;o=0;j=ka(67,g|0)|0;l=o;o=0;if(l&1)break;else l=g}a[j+k>>0]=n;g=j+(k+1)|0;m=d-m|0;n=j+(k-m)|0;lw(n|0,b|0,m|0)|0;c[t>>2]=n;c[u>>2]=g;c[q>>2]=j+l;if(e){cj(e);g=c[u>>2]|0}}else{a[g>>0]=n;g=(c[u>>2]|0)+1|0;c[u>>2]=g}e=c[q>>2]|0;if(g>>>0>=e>>>0){d=c[t>>2]|0;b=d;j=g-b+1|0;if((j|0)<0){o=0;ha(178,t|0);n=o;o=0;if(n&1)break;b=c[t>>2]|0;e=c[q>>2]|0;d=b}m=d;g=e-m|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;j=c[u>>2]|0;k=j-m|0;if(!g){l=0;e=0}else r=36}else{k=c[u>>2]|0;g=2147483647;j=k;k=k-m|0;r=36}if((r|0)==36){r=0;o=0;e=ka(67,g|0)|0;n=o;o=0;if(n&1)break;else l=g}a[e+k>>0]=17;g=e+(k+1)|0;m=j-m|0;n=e+(k-m)|0;lw(n|0,d|0,m|0)|0;c[t>>2]=n;c[u>>2]=g;c[q>>2]=e+l;if(b){cj(b);g=c[u>>2]|0}}else{a[g>>0]=17;g=(c[u>>2]|0)+1|0;c[u>>2]=g}e=c[q>>2]|0;if(g>>>0>=e>>>0){d=c[t>>2]|0;b=d;j=g-b+1|0;if((j|0)<0){o=0;ha(178,t|0);n=o;o=0;if(n&1)break;b=c[t>>2]|0;e=c[q>>2]|0;d=b}l=d;g=e-l|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;e=c[u>>2]|0;k=e-l|0;if(!g){g=0;j=0}else r=48}else{k=c[u>>2]|0;g=2147483647;e=k;k=k-l|0;r=48}if((r|0)==48){r=0;o=0;j=ka(67,g|0)|0;n=o;o=0;if(n&1)break}a[j+k>>0]=0;m=e-l|0;n=j+(k-m)|0;lw(n|0,d|0,m|0)|0;c[t>>2]=n;c[u>>2]=j+(k+1);c[q>>2]=j+g;if(b)cj(b)}else{a[g>>0]=0;c[u>>2]=(c[u>>2]|0)+1}if((p|0)>=(f|0))break b}h=Na()|0;break a}while(0);o=0;k=ka(67,20)|0;f=o;o=0;if(!(f&1)){c[k>>2]=36800;a[k+4>>0]=-9;b=k+8|0;c[b>>2]=0;j=k+12|0;c[j>>2]=0;e=k+16|0;c[e>>2]=0;g=c[u>>2]|0;f=c[t>>2]|0;d=g-f|0;do if((g|0)!=(f|0)){if(!((d|0)<0?(o=0,ha(178,b|0),f=o,o=0,f&1):0))r=62;if((r|0)==62?(o=0,h=ka(67,d|0)|0,f=o,o=0,!(f&1)):0){c[j>>2]=h;c[b>>2]=h;c[e>>2]=h+d;g=c[t>>2]|0;e=c[u>>2]|0;if((g|0)==(e|0))break;do{a[h>>0]=a[g>>0]|0;h=(c[j>>2]|0)+1|0;c[j>>2]=h;g=g+1|0}while((g|0)!=(e|0));g=c[t>>2]|0;break}h=Na()|0;g=c[b>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}cj(k);break a}while(0);if(!g){i=s;return k|0}if((c[u>>2]|0)!=(g|0))c[u>>2]=g;cj(g);i=s;return k|0}else r=52}else r=52;while(0);if((r|0)==52)h=Na()|0;g=c[t>>2]|0;if(!g)Ya(h|0);if((c[u>>2]|0)!=(g|0))c[u>>2]=g;cj(g);Ya(h|0);return 0}function ui(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;r=u+28|0;w=u+16|0;t=u+4|0;s=u;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;p=bj(5)|0;c[w>>2]=p;q=w+8|0;c[q>>2]=p+5;a[p>>0]=74;a[p+1>>0]=70;a[p+2>>0]=73;a[p+3>>0]=70;a[p+4>>0]=0;c[x>>2]=p+5;o=0;ia(84,w|0,c[b>>2]&65535|0);p=o;o=0;a:do if(!(p&1)){m=c[b+4>>2]&255;d=c[x>>2]|0;f=c[q>>2]|0;if(d>>>0>=f>>>0){g=c[w>>2]|0;h=g;j=d-h+1|0;if((j|0)<0){o=0;ha(178,w|0);p=o;o=0;if(p&1){v=43;break}h=c[w>>2]|0;f=c[q>>2]|0;g=h}l=g;d=f-l|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?j:d;f=c[x>>2]|0;k=f-l|0;if(!d){d=0;j=0}else v=10}else{k=c[x>>2]|0;d=2147483647;f=k;k=k-l|0;v=10}if((v|0)==10){o=0;j=ka(67,d|0)|0;p=o;o=0;if(p&1){v=43;break}}a[j+k>>0]=m;n=f-l|0;p=j+(k-n)|0;lw(p|0,g|0,n|0)|0;c[w>>2]=p;c[x>>2]=j+(k+1);c[q>>2]=j+d;if(h)cj(h)}else{a[d>>0]=m;c[x>>2]=(c[x>>2]|0)+1}o=0;ia(84,w|0,c[b+8>>2]&65535|0);p=o;o=0;if(!(p&1)?(o=0,ia(84,w|0,c[b+12>>2]&65535|0),p=o,o=0,!(p&1)):0){p=b+16|0;n=c[p>>2]&255;d=c[x>>2]|0;g=c[q>>2]|0;if(d>>>0>=g>>>0){h=c[w>>2]|0;f=h;j=d-f+1|0;if((j|0)<0){o=0;ha(178,w|0);m=o;o=0;if(m&1){v=43;break}h=c[w>>2]|0;f=h;g=c[q>>2]|0}m=h;d=g-m|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?j:d;j=c[x>>2]|0;k=j-m|0;if(!d){l=0;g=0}else v=23}else{k=c[x>>2]|0;d=2147483647;j=k;k=k-m|0;v=23}if((v|0)==23){o=0;g=ka(67,d|0)|0;l=o;o=0;if(l&1){v=43;break}else l=d}a[g+k>>0]=n;d=g+(k+1)|0;m=j-m|0;n=g+(k-m)|0;lw(n|0,h|0,m|0)|0;c[w>>2]=n;c[x>>2]=d;c[q>>2]=g+l;if(f){cj(f);d=c[x>>2]|0}}else{a[d>>0]=n;d=(c[x>>2]|0)+1|0;c[x>>2]=d}n=b+20|0;m=c[n>>2]&255;f=c[q>>2]|0;if(d>>>0>=f>>>0){g=c[w>>2]|0;h=g;j=d-h+1|0;if((j|0)<0){o=0;ha(178,w|0);l=o;o=0;if(l&1){v=43;break}h=c[w>>2]|0;f=c[q>>2]|0;g=h}l=g;d=f-l|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?j:d;f=c[x>>2]|0;k=f-l|0;if(!d){d=0;j=0}else v=34}else{k=c[x>>2]|0;d=2147483647;f=k;k=k-l|0;v=34}if((v|0)==34){o=0;j=ka(67,d|0)|0;y=o;o=0;if(y&1){v=43;break}}a[j+k>>0]=m;m=f-l|0;y=j+(k-m)|0;lw(y|0,g|0,m|0)|0;c[w>>2]=y;c[x>>2]=j+(k+1);c[q>>2]=j+d;if(h)cj(h)}else{a[d>>0]=m;c[x>>2]=(c[x>>2]|0)+1}d=c[p>>2]|0;do if((d|0)>0){if(!(c[b+24>>2]|0)){c[s>>2]=c[x>>2];y=0+($(d*3|0,c[n>>2]|0)|0)|0;o=0;c[r>>2]=c[s>>2];va(15,w|0,r|0,0,y|0)|0;y=o;o=0;if(y&1){v=43;break a}else break}f=Ma(16)|0;o=0;wa(5,t|0,50792,57);y=o;o=0;if(!(y&1)){o=0;d=ua(1)|0;y=o;o=0;if(!(y&1)?(o=0,Aa(36,f|0,1,d|0,t|0),y=o,o=0,!(y&1)):0){o=0;wa(6,f|0,824,96);o=0;e=0}else e=1;d=Na()|0;Im(t);if(!e){e=d;break a}}else d=Na()|0;La(f|0);e=d;break a}while(0);o=0;k=ka(67,20)|0;y=o;o=0;if(!(y&1)){c[k>>2]=36800;a[k+4>>0]=-32;h=k+8|0;c[h>>2]=0;j=k+12|0;c[j>>2]=0;f=k+16|0;c[f>>2]=0;d=c[x>>2]|0;y=c[w>>2]|0;g=d-y|0;do if((d|0)!=(y|0)){if(!((g|0)<0?(o=0,ha(178,h|0),y=o,o=0,y&1):0))v=53;if((v|0)==53?(o=0,e=ka(67,g|0)|0,y=o,o=0,!(y&1)):0){c[j>>2]=e;c[h>>2]=e;c[f>>2]=e+g;d=c[w>>2]|0;f=c[x>>2]|0;if((d|0)==(f|0))break;do{a[e>>0]=a[d>>0]|0;e=(c[j>>2]|0)+1|0;c[j>>2]=e;d=d+1|0}while((d|0)!=(f|0));d=c[w>>2]|0;break}d=Na()|0;e=c[h>>2]|0;if(e){if((c[j>>2]|0)!=(e|0))c[j>>2]=e;cj(e)}cj(k);v=44;break a}while(0);if(!d){i=u;return k|0}if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);i=u;return k|0}else v=43}else v=43}else v=43;while(0);if((v|0)==43){d=Na()|0;v=44}if((v|0)==44)e=d;d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0);return 0}function vi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0;k=i;i=i+16|0;m=k;c[m>>2]=0;n=m+4|0;c[n>>2]=0;c[m+8>>2]=0;o=0;d=ka(67,1)|0;j=o;o=0;a:do if((((((!(j&1)?(j=d+1|0,a[d>>0]=1,c[m>>2]=d,c[n>>2]=j,c[m+8>>2]=j,o=0,ia(84,m|0,c[b>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+4>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+8>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+12>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+16>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,l=ka(67,20)|0,j=o,o=0,!(j&1)):0){c[l>>2]=36800;a[l+4>>0]=-8;g=l+8|0;c[g>>2]=0;j=l+12|0;c[j>>2]=0;b=l+16|0;c[b>>2]=0;d=c[n>>2]|0;p=c[m>>2]|0;f=d-p|0;do if((d|0)!=(p|0)){if(!((f|0)<0?(o=0,ha(178,g|0),p=o,o=0,p&1):0))h=11;if((h|0)==11?(o=0,e=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[j>>2]=e;c[g>>2]=e;c[b>>2]=e+f;d=c[m>>2]|0;b=c[n>>2]|0;if((d|0)==(b|0))break;do{a[e>>0]=a[d>>0]|0;e=(c[j>>2]|0)+1|0;c[j>>2]=e;d=d+1|0}while((d|0)!=(b|0));d=c[m>>2]|0;break}e=Na()|0;d=c[g>>2]|0;if(d){if((c[j>>2]|0)!=(d|0))c[j>>2]=d;cj(d)}cj(l);break a}while(0);if(!d){i=k;return l|0}if((c[n>>2]|0)!=(d|0))c[n>>2]=d;cj(d);i=k;return l|0}else h=25;while(0);if((h|0)==25)e=Na()|0;d=c[m>>2]|0;if(!d)Ya(e|0);if((c[n>>2]|0)!=(d|0))c[n>>2]=d;cj(d);Ya(e|0);return 0}function wi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=bj(5)|0;a[h>>0]=109;a[h+1>>0]=114;a[h+2>>0]=102;a[h+3>>0]=120;a[h+4>>0]=b;o=0;g=ka(67,20)|0;f=o;o=0;if(f&1){g=Na()|0;cj(h);Ya(g|0)}c[g>>2]=36800;a[g+4>>0]=-24;b=g+8|0;c[b>>2]=0;d=g+12|0;c[d>>2]=0;e=g+16|0;c[e>>2]=0;o=0;f=ka(67,5)|0;i=o;o=0;if(!(i&1)){c[d>>2]=f;c[b>>2]=f;c[e>>2]=f+5;a[f>>0]=109;i=(c[d>>2]|0)+1|0;c[d>>2]=i;f=h+1|0;a[i>>0]=a[f>>0]|0;i=(c[d>>2]|0)+1|0;c[d>>2]=i;f=f+1|0;a[i>>0]=a[f>>0]|0;i=(c[d>>2]|0)+1|0;c[d>>2]=i;f=f+1|0;a[i>>0]=a[f>>0]|0;i=(c[d>>2]|0)+1|0;c[d>>2]=i;a[i>>0]=a[f+1>>0]|0;c[d>>2]=(c[d>>2]|0)+1;cj(h);return g|0}i=Na()|0;cj(g);cj(h);Ya(i|0);return 0}function xi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+16|0;w=v;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;t=w+8|0;o=0;g=ka(67,1)|0;s=o;o=0;a:do if(!(s&1)){k=g+1|0;s=k;a[g>>0]=d;c[w>>2]=g;c[x>>2]=s;c[t>>2]=s;if((d|0)>0){j=k;s=0;do{r=s+b&255;if(j>>>0>=k>>>0){g=c[w>>2]|0;l=g;j=j-l+1|0;if((j|0)<0){o=0;ha(178,w|0);q=o;o=0;if(q&1){u=28;break}l=c[w>>2]|0;k=c[t>>2]|0;q=l}else q=g;p=q;g=k-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;k=c[x>>2]|0;m=k-p|0;if(!g){n=0;j=0}else u=13}else{m=c[x>>2]|0;g=2147483647;k=m;m=m-p|0;u=13}if((u|0)==13){u=0;o=0;j=ka(67,g|0)|0;n=o;o=0;if(n&1){u=28;break}else n=g}a[j+m>>0]=r;g=j+(m+1)|0;p=k-p|0;r=j+(m-p)|0;lw(r|0,q|0,p|0)|0;c[w>>2]=r;c[x>>2]=g;c[t>>2]=j+n;if(l){cj(l);g=c[x>>2]|0}}else{a[j>>0]=r;g=(c[x>>2]|0)+1|0;c[x>>2]=g}k=c[t>>2]|0;if(g>>>0>=k>>>0){l=c[w>>2]|0;j=l;m=g-j+1|0;if((m|0)<0){o=0;ha(178,w|0);r=o;o=0;if(r&1){u=28;break}l=c[w>>2]|0;j=l;k=c[t>>2]|0}p=l;g=k-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?m:g;m=c[x>>2]|0;k=m-p|0;if(!g){g=0;n=0}else u=24}else{k=c[x>>2]|0;g=2147483647;m=k;k=k-p|0;u=24}if((u|0)==24){u=0;o=0;n=ka(67,g|0)|0;r=o;o=0;if(r&1){u=28;break}}a[n+k>>0]=0;q=m-p|0;r=n+(k-q)|0;lw(r|0,l|0,q|0)|0;c[w>>2]=r;c[x>>2]=n+(k+1);c[t>>2]=n+g;if(j)cj(j)}else{a[g>>0]=0;c[x>>2]=(c[x>>2]|0)+1}s=s+1|0;j=c[x>>2]|0;k=c[t>>2]|0}while((s|0)<(d|0));if((u|0)==28){h=Na()|0;break}g=e&255;if(j>>>0>>0){a[j>>0]=g;j=(c[x>>2]|0)+1|0;c[x>>2]=j}else u=37}else{j=k;g=e&255;u=37}if((u|0)==37){l=c[w>>2]|0;m=l;n=j-m+1|0;if((n|0)<0){o=0;ha(178,w|0);e=o;o=0;if(e&1){u=29;break}m=c[w>>2]|0;k=c[t>>2]|0;l=m}r=l;j=k-r|0;if(j>>>0<1073741823){j=j<<1;j=j>>>0>>0?n:j;n=c[x>>2]|0;p=n-r|0;if(!j){q=0;k=0}else u=43}else{p=c[x>>2]|0;j=2147483647;n=p;p=p-r|0;u=43}if((u|0)==43){o=0;k=ka(67,j|0)|0;e=o;o=0;if(e&1){u=29;break}else q=j}a[k+p>>0]=g;j=k+(p+1)|0;b=n-r|0;e=k+(p-b)|0;lw(e|0,l|0,b|0)|0;c[w>>2]=e;c[x>>2]=j;c[t>>2]=k+q;if(m){cj(m);j=c[x>>2]|0}}r=f&255;g=c[t>>2]|0;if(j>>>0>=g>>>0){k=c[w>>2]|0;l=k;j=j-l+1|0;if((j|0)<0){o=0;ha(178,w|0);f=o;o=0;if(f&1){u=29;break}l=c[w>>2]|0;g=c[t>>2]|0;k=l}q=k;g=g-q|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;m=c[x>>2]|0;n=m-q|0;if(!g){p=0;j=0}else u=54}else{n=c[x>>2]|0;g=2147483647;m=n;n=n-q|0;u=54}if((u|0)==54){o=0;j=ka(67,g|0)|0;f=o;o=0;if(f&1){u=29;break}else p=g}a[j+n>>0]=r;g=j+(n+1)|0;e=m-q|0;f=j+(n-e)|0;lw(f|0,k|0,e|0)|0;c[w>>2]=f;c[x>>2]=g;c[t>>2]=j+p;if(l){cj(l);g=c[x>>2]|0}}else{a[j>>0]=r;g=(c[x>>2]|0)+1|0;c[x>>2]=g}j=c[t>>2]|0;if(g>>>0>=j>>>0){k=c[w>>2]|0;l=k;m=g-l+1|0;if((m|0)<0){o=0;ha(178,w|0);f=o;o=0;if(f&1){u=29;break}l=c[w>>2]|0;j=c[t>>2]|0;k=l}p=k;g=j-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?m:g;j=c[x>>2]|0;n=j-p|0;if(!g){g=0;m=0}else u=65}else{n=c[x>>2]|0;g=2147483647;j=n;n=n-p|0;u=65}if((u|0)==65){o=0;m=ka(67,g|0)|0;f=o;o=0;if(f&1){u=29;break}}a[m+n>>0]=0;e=j-p|0;f=m+(n-e)|0;lw(f|0,k|0,e|0)|0;c[w>>2]=f;c[x>>2]=m+(n+1);c[t>>2]=m+g;if(l)cj(l)}else{a[g>>0]=0;c[x>>2]=(c[x>>2]|0)+1}o=0;n=ka(67,20)|0;t=o;o=0;if(!(t&1)){c[n>>2]=36800;a[n+4>>0]=-38;l=n+8|0;c[l>>2]=0;m=n+12|0;c[m>>2]=0;j=n+16|0;c[j>>2]=0;g=c[x>>2]|0;t=c[w>>2]|0;k=g-t|0;do if((g|0)!=(t|0)){if(!((k|0)<0?(o=0,ha(178,l|0),t=o,o=0,t&1):0))u=72;if((u|0)==72?(o=0,h=ka(67,k|0)|0,t=o,o=0,!(t&1)):0){c[m>>2]=h;c[l>>2]=h;c[j>>2]=h+k;g=c[w>>2]|0;j=c[x>>2]|0;if((g|0)==(j|0))break;do{a[h>>0]=a[g>>0]|0;h=(c[m>>2]|0)+1|0;c[m>>2]=h;g=g+1|0}while((g|0)!=(j|0));g=c[w>>2]|0;break}h=Na()|0;g=c[l>>2]|0;if(g){if((c[m>>2]|0)!=(g|0))c[m>>2]=g;cj(g)}cj(n);break a}while(0);if(!g){i=v;return n|0}if((c[x>>2]|0)!=(g|0))c[x>>2]=g;cj(g);i=v;return n|0}else u=29}else u=29;while(0);if((u|0)==29)h=Na()|0;g=c[w>>2]|0;if(!g)Ya(h|0);if((c[x>>2]|0)!=(g|0))c[x>>2]=g;cj(g);Ya(h|0);return 0}function yi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=(d&65535)>>>8&255;o=b+4|0;e=c[o>>2]|0;p=b+8|0;f=c[p>>2]|0;if(e>>>0>=f>>>0){g=c[b>>2]|0;h=g;i=e-h+1|0;if((i|0)<0){$i(b);h=c[b>>2]|0;f=c[p>>2]|0;g=h}m=g;e=f-m|0;if(e>>>0<1073741823){e=e<<1;e=e>>>0>>0?i:e;i=c[o>>2]|0;f=i-m|0;if(!e){l=0;k=0;j=f;e=i}else q=8}else{f=c[o>>2]|0;e=2147483647;i=f;f=f-m|0;q=8}if((q|0)==8){l=e;k=bj(e)|0;j=f;e=i}a[k+j>>0]=n;f=k+(j+1)|0;m=e-m|0;n=k+(j-m)|0;lw(n|0,g|0,m|0)|0;c[b>>2]=n;c[o>>2]=f;c[p>>2]=k+l;if(h){cj(h);f=c[o>>2]|0}}else{a[e>>0]=n;f=(c[o>>2]|0)+1|0;c[o>>2]=f}m=d&255;e=c[p>>2]|0;if(f>>>0>>0){a[f>>0]=m;c[o>>2]=(c[o>>2]|0)+1;return}g=c[b>>2]|0;h=g;f=f-h+1|0;if((f|0)<0){$i(b);h=c[b>>2]|0;e=c[p>>2]|0;g=h}l=g;e=e-l|0;if(e>>>0<1073741823){e=e<<1;e=e>>>0>>0?f:e;i=c[o>>2]|0;f=i-l|0;if(!e){k=0;j=0;e=i}else q=18}else{f=c[o>>2]|0;e=2147483647;i=f;f=f-l|0;q=18}if((q|0)==18){k=e;j=bj(e)|0;e=i}a[j+f>>0]=m;d=e-l|0;q=j+(f-d)|0;lw(q|0,g|0,d|0)|0;c[b>>2]=q;c[o>>2]=j+(f+1);c[p>>2]=j+k;if(!h)return;cj(h);return}function zi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=c[b>>2]|0;q=c[d>>2]|0;p=q;k=g;n=e;l=f-n|0;if((l|0)<=0){r=q;return r|0}o=b+8|0;d=c[o>>2]|0;r=b+4|0;m=c[r>>2]|0;h=m;if((l|0)<=(d-h|0)){j=h-p|0;if((l|0)>(j|0)){i=e+j|0;if((i|0)==(f|0))d=m;else{h=i;d=m;do{a[d>>0]=a[h>>0]|0;d=(c[r>>2]|0)+1|0;c[r>>2]=d;h=h+1|0}while((h|0)!=(f|0))}if((j|0)>0)j=d;else{r=q;return r|0}}else{j=m;i=f}g=j-(g+(l-k+p))|0;d=q+g|0;if(d>>>0>>0){h=j;do{a[h>>0]=a[d>>0]|0;d=d+1|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h}while((d|0)!=(m|0))}nw(j+(0-g)|0,q|0,g|0)|0;nw(q|0,e|0,i-n|0)|0;r=q;return r|0}h=h-k+l|0;if((h|0)<0){$i(b);d=c[o>>2]|0;g=c[b>>2]|0}i=g;d=d-i|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?h:d;h=p-i|0;if(!d){i=0;l=0}else j=15}else{d=2147483647;h=p-i|0;j=15}if((j|0)==15){i=d;l=bj(d)|0}k=l+h|0;d=k;j=l+i|0;if((e|0)!=(f|0)){g=e;i=k;do{a[i>>0]=a[g>>0]|0;i=d+1|0;d=i;g=g+1|0}while((g|0)!=(f|0));g=c[b>>2]|0}e=p-g|0;f=l+(h-e)|0;lw(f|0,g|0,e|0)|0;p=(c[r>>2]|0)-p|0;e=d;lw(e|0,q|0,p|0)|0;d=c[b>>2]|0;c[b>>2]=f;c[r>>2]=e+p;c[o>>2]=j;if(!d){r=k;return r|0}cj(d);r=k;return r|0}function Ai(a){a=a|0;var b=0;c[a>>2]=36800;b=c[a+8>>2]|0;if(!b)return;a=a+12|0;if((c[a>>2]|0)!=(b|0))c[a>>2]=b;cj(b);return}function Bi(a){a=a|0;var b=0,d=0;c[a>>2]=36800;b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Ci(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Di(d,-1);Di(d,a[b+4>>0]|0);g=b+12|0;f=b+8|0;b=(c[g>>2]|0)-(c[f>>2]|0)+2|0;Di(d,(b&65535)>>>8&255);Di(d,b&255);b=c[f>>2]|0;if((c[g>>2]|0)==(b|0))return;else e=0;do{Di(d,a[b+e>>0]|0);e=e+1|0;b=c[f>>2]|0}while(e>>>0<((c[g>>2]|0)-b|0)>>>0);return}function Di(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=c[b+4>>2]|0;if(g){e=g+24|0;f=c[e>>2]|0;if((f|0)==(c[g+28>>2]|0)){Lb[c[(c[g>>2]|0)+52>>2]&63](g,d&255)|0;return}else{c[e>>2]=f+1;a[f>>0]=d;return}}e=b+16|0;f=c[e>>2]|0;if(f>>>0<(c[b+12>>2]|0)>>>0){c[e>>2]=f+1;a[(c[b+8>>2]|0)+f>>0]=d;return}e=Ma(16)|0;o=0;f=ua(1)|0;d=o;o=0;if(d&1){d=Na()|0;La(e|0);Ya(d|0)}o=0;wa(7,e|0,4,f|0);d=o;o=0;if(d&1){d=Na()|0;La(e|0);Ya(d|0)}else lb(e|0,824,96)}function Ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;f=(b|0)<4095?(b+128|0)/256|0:16;g=(d*3|0)+2+f|0;e=d+1|0;g=(g|0)<(e|0)|(g|0)>(b|0)?e:g;c[a+4>>2]=g;e=(f<<2|3)+(d*5|0)|0;e=(e|0)>(b|0)|(e|0)<(g|0)?g:e;c[a+8>>2]=e;d=(d*7|0)+4+(f*17|0)|0;c[a+12>>2]=(d|0)>(b|0)|(d|0)<(e|0)?e:d;c[a>>2]=b;c[a+16>>2]=64;return}function Fi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+128|0;k=m+100|0;f=m+16|0;e=m+112|0;l=m+4|0;n=m;g=f;h=b+20|0;j=g+84|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));c[f+16>>2]=c[b+4>>2];h=pc(e,f,b+56|0)|0;e=c[(c[h>>2]|0)+16>>2]|0;b=b+8|0;o=0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];e=ra(e|0,h|0,k|0)|0;b=o;o=0;do if(b&1)e=Na()|0;else{g=d+4|0;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];c[l+8>>2]=c[g+8>>2];g=d+16|0;b=c[g>>2]|0;k=l+8|0;c[k>>2]=(c[k>>2]|0)-b;k=l+4|0;c[k>>2]=(c[k>>2]|0)+b;k=c[(c[h>>2]|0)+12>>2]|0;c[n>>2]=e;o=0;e=va(k|0,h|0,n|0,l|0,((a[d>>0]|0)==0?0:(c[d+8>>2]|0)+b|0)|0)|0;l=o;o=0;if(l&1){e=Na()|0;f=c[n>>2]|0;c[n>>2]=0;if(!f)break;Bb[c[(c[f>>2]|0)+4>>2]&255](f);break}f=c[n>>2]|0;c[n>>2]=0;if(f)Bb[c[(c[f>>2]|0)+4>>2]&255](f);if(!(c[d+4>>2]|0))c[g>>2]=(c[g>>2]|0)+e;if(!h){i=m;return}Bb[c[(c[h>>2]|0)+4>>2]&255](h);i=m;return}while(0);if(!h)Ya(e|0);Bb[c[(c[h>>2]|0)+4>>2]&255](h);Ya(e|0)}function Gi(b,d){b=b|0;d=d|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];a[b+12>>0]=0;d=b+16|0;b=d+100|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(b|0));return}function Hi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+32|0;u=v+4|0;q=v+16|0;w=v;Ii(b);r=b+16|0;g=c[b+24>>2]|0;a:do if((g+-2|0)>>>0<=14){s=b+40|0;e=c[s>>2]|0;if(e>>>0>2)e=5;else{t=b+32|0;h=c[t>>2]|0;switch(h|0){case 0:{e=1;break a}case 4:{if((e|0)==2){e=2;break a}break}case 3:break;default:if(e){e=2;break a}}p=b+100|0;e=b+108|0;f=c[e>>2]|0;if((f|0)<1){f=c[r>>2]|0;c[e>>2]=f;e=c[b+20>>2]|0;c[b+112>>2]=e}else e=c[b+112>>2]|0;l=tw(e|0,((e|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;k=(g+7|0)/8|0;k=tw(l|0,D|0,k|0,((k|0)<0)<<31>>31|0)|0;l=d+4|0;e=c[l>>2]|0;j=d+8|0;if((e|0)!=0?(m=c[j>>2]|0,n=tw(h|0,((h|0)<0)<<31>>31|0,k|0,D|0)|0,g=D,0<(g|0)|0==(g|0)&m>>>0>>0):0){e=Ma(16)|0;o=0;f=ua(1)|0;w=o;o=0;if(!(w&1)?(o=0,wa(7,e|0,3,f|0),w=o,o=0,!(w&1)):0)lb(e|0,824,96);w=Na()|0;La(e|0);Ya(w|0)}m=b+52|0;n=b+12|0;if((h|0)>0)h=0;else{i=v;return}while(1){Ji(b,(h|0)==0);f=nc(q,r,m)|0;g=c[(c[f>>2]|0)+8>>2]|0;o=0;c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];g=ra(g|0,f|0,u|0)|0;x=o;o=0;if(x&1){g=32;break}x=c[(c[f>>2]|0)+16>>2]|0;c[w>>2]=g;o=0;fa(x|0,f|0,w|0,p|0,b|0,(a[n>>0]|0)!=0|0);x=o;o=0;if(x&1){g=30;break}g=c[w>>2]|0;c[w>>2]=0;if(g)Bb[c[(c[g>>2]|0)+4>>2]&255](g);if(!e)e=0;else{e=e+k|0;c[l>>2]=e;c[j>>2]=(c[j>>2]|0)-k}g=(c[s>>2]|0)==0;h=(g&1)+h|0;if(f)Bb[c[(c[f>>2]|0)+4>>2]&255](f);if(!g){g=34;break}if((h|0)>=(c[t>>2]|0)){g=34;break}}if((g|0)==30){e=Na()|0;g=c[w>>2]|0;c[w>>2]=0;if(g)Bb[c[(c[g>>2]|0)+4>>2]&255](g)}else if((g|0)==32){e=Na()|0;if(!f){x=e;Ya(x|0)}}else if((g|0)==34){i=v;return}Bb[c[(c[f>>2]|0)+4>>2]&255](f);x=e;Ya(x|0)}}else e=2;while(0);f=Ma(16)|0;o=0;g=ua(1)|0;x=o;o=0;if(!(x&1)?(o=0,wa(7,f|0,e|0,g|0),x=o,o=0,!(x&1)):0)lb(f|0,824,96);x=Na()|0;La(f|0);Ya(x|0)}function Ii(a){a=a|0;var b=0,c=0,d=0,e=0;if((Mi(a)|0)<<24>>24!=-40){b=Ma(16)|0;o=0;c=ua(1)|0;e=o;o=0;if(!(e&1)?(o=0,wa(7,b|0,5,c|0),e=o,o=0,!(e&1)):0)lb(b|0,824,96);e=Na()|0;La(b|0);Ya(e|0)}b=Mi(a)|0;if(b<<24>>24==-38)return;while(1){d=((Li(a)|0)&255)<<8;d=d|(Li(a)|0)&255;b=Ni(a,b)|0;c=-2-b+d|0;if((c|0)<0)break;if((c|0)>0){b=d+-2-b|0;c=0;do{Li(a)|0;c=c+1|0}while((c|0)!=(b|0))}b=Mi(a)|0;if(b<<24>>24==-38){e=8;break}}if((e|0)==8)return;b=Ma(16)|0;o=0;c=ua(1)|0;e=o;o=0;if(!(e&1)?(o=0,wa(7,b|0,5,c|0),e=o,o=0,!(e&1)):0)lb(b|0,824,96);e=Na()|0;La(b|0);Ya(e|0)}function Ji(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b){if((Li(a)|0)<<24>>24!=-1){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,12,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}if((Li(a)|0)<<24>>24!=-38){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,5,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}}Li(a)|0;Li(a)|0;d=Li(a)|0;e=d&255;do if(d<<24>>24==1){Li(a)|0;d=0;f=20}else{if((e|0)==(c[a+32>>2]|0)){b=Li(a)|0;if(!(d<<24>>24))break;else{d=0;f=20;break}}b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,2,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}while(0);if((f|0)==20)while(1){Li(a)|0;d=d+1|0;b=Li(a)|0;if((d|0)==(e|0))break;else f=20}c[a+36>>2]=b&255;f=Li(a)|0;d=a+40|0;c[d>>2]=f&255;if((f&255)>=3){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,5,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}if((Li(a)|0)<<24>>24){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,5,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}e=a+28|0;if(c[e>>2]|0)return;b=c[a+108>>2]|0;if(!b)b=c[a+16>>2]|0;if(!(c[d>>2]|0))d=1;else d=c[a+32>>2]|0;f=$(d,b)|0;c[e>>2]=$(f,((c[a+24>>2]|0)+7|0)/8|0)|0;return}function Ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((e|0)<=0)return;n=d+4|0;o=d+8|0;q=0;do{p=Li(b)|0;f=c[n>>2]|0;g=c[o>>2]|0;if(f>>>0>=g>>>0){h=c[d>>2]|0;i=h;j=f-i+1|0;if((j|0)<0){$i(d);i=c[d>>2]|0;g=c[o>>2]|0;h=i}m=h;f=g-m|0;if(f>>>0<1073741823){f=f<<1;f=f>>>0>>0?j:f;j=c[n>>2]|0;g=j-m|0;if(!f){l=0;k=0;f=j}else r=10}else{g=c[n>>2]|0;f=2147483647;j=g;g=g-m|0;r=10}if((r|0)==10){r=0;l=f;k=bj(f)|0;f=j}a[k+g>>0]=p;m=f-m|0;p=k+(g-m)|0;lw(p|0,h|0,m|0)|0;c[d>>2]=p;c[n>>2]=k+(g+1);c[o>>2]=k+l;if(i)cj(i)}else{a[f>>0]=p;c[n>>2]=(c[n>>2]|0)+1}q=q+1|0}while((q|0)!=(e|0));return}function Li(b){b=b|0;var e=0,f=0,g=0,h=0;f=c[b>>2]|0;if(f){b=f+12|0;e=c[b>>2]|0;if((e|0)==(c[f+16>>2]|0))b=Eb[c[(c[f>>2]|0)+40>>2]&127](f)|0;else{c[b>>2]=e+1;b=d[e>>0]|0}h=b&255;return h|0}g=b+8|0;h=c[g>>2]|0;if(h){b=b+4|0;e=c[b>>2]|0;f=a[e>>0]|0;if(!e){h=f;return h|0}c[b>>2]=e+1;c[g>>2]=h+-1;h=f;return h|0}b=Ma(16)|0;o=0;e=ua(1)|0;h=o;o=0;if(h&1){h=Na()|0;La(b|0);Ya(h|0)}o=0;wa(7,b|0,4,e|0);h=o;o=0;if(h&1){h=Na()|0;La(b|0);Ya(h|0)}else lb(b|0,824,96);return 0}function Mi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+176|0;b=d+152|0;k=d+16|0;h=d;j=Li(a)|0;e=j&255;if(j<<24>>24==-1){do b=Li(a)|0;while(b<<24>>24==-1);i=d;return b|0}j=k+56|0;g=k+4|0;c[k>>2]=36160;c[j>>2]=36180;o=0;ia(62,k+56|0,g|0);f=o;o=0;if(f&1){k=Na()|0;fn(j);Ya(k|0)}c[k+128>>2]=0;c[k+132>>2]=-1;c[k>>2]=36200;c[k+56>>2]=36220;o=0;ha(180,g|0);f=o;o=0;do if(f&1)b=Na()|0;else{c[g>>2]=36236;f=k+36|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[k+52>>2]=16;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;o=0;ia(63,g|0,b|0);d=o;o=0;if(d&1){k=Na()|0;Im(b);Im(f);nn(g);b=k;break}Im(b);c[k+((c[(c[k>>2]|0)+-12>>2]|0)+76)>>2]=48;o=0;b=ma(28,k|0,50907,62)|0;d=o;o=0;if(!(d&1)?(d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,c[d>>2]=c[d>>2]&-75|8,d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,c[d>>2]=c[d>>2]|16384,c[b+((c[(c[b>>2]|0)+-12>>2]|0)+12)>>2]=2,o=0,ra(38,b|0,e|0)|0,e=o,o=0,!(e&1)):0){d=Ma(16)|0;o=0;ia(64,h|0,g|0);e=o;o=0;if(!(e&1)){o=0;b=ua(1)|0;e=o;o=0;if(!(e&1)?(o=0,Aa(36,d|0,12,b|0,h|0),e=o,o=0,!(e&1)):0){o=0;wa(6,d|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(h);if(!a){h=b;c[k>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(f);nn(g);fn(j);Ya(h|0)}}else b=Na()|0;La(d|0);h=b;c[k>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(f);nn(g);fn(j);Ya(h|0)}h=Na()|0;c[k>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(f);nn(g);fn(j);Ya(h|0)}while(0);k=b;fn(j);Ya(k|0);return 0}function Ni(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0;d=i;i=i+320|0;j=d+300|0;m=d+152|0;k=d+288|0;n=d+16|0;l=d;switch(b<<24>>24){case -9:{c[a+24>>2]=(Li(a)|0)&255;p=((Li(a)|0)&255)<<8|(Li(a)|0)&255;c[a+16>>2]=((Li(a)|0)&255)<<8|(Li(a)|0)&255;c[a+20>>2]=p;c[a+32>>2]=(Li(a)|0)&255;p=6;i=d;return p|0}case -8:{p=Oi(a)|0;i=d;return p|0}case -24:{p=Pi(a)|0;i=d;return p|0}case -53:case -54:case -55:case -57:case -58:case -59:case -61:case -62:case -63:case -64:{h=m+56|0;f=m+4|0;c[m>>2]=36160;c[h>>2]=36180;o=0;ia(62,m+56|0,f|0);n=o;o=0;if(n&1){p=Na()|0;fn(h);Ya(p|0)}c[m+128>>2]=0;c[m+132>>2]=-1;c[m>>2]=36200;c[m+56>>2]=36220;o=0;ha(180,f|0);n=o;o=0;do if(n&1)a=Na()|0;else{c[f>>2]=36236;g=m+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[m+52>>2]=16;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;o=0;ia(63,f|0,j|0);n=o;o=0;if(n&1){a=Na()|0;Im(j);Im(g);nn(f);break}Im(j);o=0;a=ma(28,m|0,50970,26)|0;n=o;o=0;do if((!(n&1)?(o=0,e=ra(38,a|0,b&255|0)|0,n=o,o=0,!(n&1)):0)?(o=0,ma(28,e|0,50997,18)|0,n=o,o=0,!(n&1)):0){e=Ma(16)|0;o=0;ia(64,k|0,f|0);n=o;o=0;if(!(n&1)){o=0;a=ua(1)|0;n=o;o=0;if(!(n&1)?(o=0,Aa(36,e|0,10,a|0,k|0),n=o,o=0,!(n&1)):0){o=0;wa(6,e|0,824,96);o=0;d=0}else d=1;a=Na()|0;Im(k);if(!d)break}else a=Na()|0;La(e|0)}else p=20;while(0);if((p|0)==20)a=Na()|0;c[m>>2]=36200;c[h>>2]=36220;c[f>>2]=36236;Im(g);nn(f);fn(h);p=a;Ya(p|0)}while(0);p=a;fn(h);Ya(p|0)}case -25:case -32:case -2:{p=0;i=d;return p|0}default:{k=n+56|0;g=n+4|0;c[n>>2]=36160;c[k>>2]=36180;o=0;ia(62,n+56|0,g|0);m=o;o=0;if(m&1){p=Na()|0;fn(k);Ya(p|0)}c[n+128>>2]=0;c[n+132>>2]=-1;c[n>>2]=36200;c[n+56>>2]=36220;o=0;ha(180,g|0);m=o;o=0;do if(m&1)a=Na()|0;else{c[g>>2]=36236;h=n+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[n+52>>2]=16;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;o=0;ia(63,g|0,j|0);m=o;o=0;if(m&1){a=Na()|0;Im(j);Im(h);nn(g);break}Im(j);o=0;a=ma(28,n|0,51016,20)|0;m=o;o=0;do if((!(m&1)?(o=0,f=ra(38,a|0,b&255|0)|0,m=o,o=0,!(m&1)):0)?(o=0,ma(28,f|0,51037,13)|0,m=o,o=0,!(m&1)):0){e=Ma(16)|0;o=0;ia(64,l|0,g|0);m=o;o=0;if(!(m&1)){o=0;a=ua(1)|0;m=o;o=0;if(!(m&1)?(o=0,Aa(36,e|0,11,a|0,l|0),m=o,o=0,!(m&1)):0){o=0;wa(6,e|0,824,96);o=0;d=0}else d=1;a=Na()|0;Im(l);if(!d)break}else a=Na()|0;La(e|0)}else p=40;while(0);if((p|0)==40)a=Na()|0;c[n>>2]=36200;c[k>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(k);p=a;Ya(p|0)}while(0);p=a;fn(k);Ya(p|0)}}return 0}function Oi(a){a=a|0;var b=0;if((Li(a)|0)<<24>>24!=1){a=1;return a|0}b=((Li(a)|0)&255)<<8;c[a+52>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+56>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+60>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+64>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+68>>2]=b|(Li(a)|0)&255;a=11;return a|0}function Pi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;f=d;c[f>>2]=0;g=f+4|0;c[g>>2]=0;c[f+8>>2]=0;o=0;wa(9,a|0,f|0,4);b=o;o=0;a:do if(b&1)e=3;else{b=c[f>>2]|0;b:do if(!(ol(b,51051,4)|0)){o=0;b=ka(69,a|0)|0;h=o;o=0;if(h&1){e=3;break a}b=b&255;switch(b|0){case 3:case 2:case 1:case 0:{c[a+44>>2]=b;a=5;b=c[f>>2]|0;break b}case 5:case 4:{b=Ma(16)|0;o=0;a=ua(1)|0;h=o;o=0;if(!(h&1)?(o=0,wa(7,b|0,7,a|0),h=o,o=0,!(h&1)):0){o=0;wa(6,b|0,824,96);o=0;e=3;break a}a=Na()|0;La(b|0);break a}default:{b=Ma(16)|0;o=0;a=ua(1)|0;h=o;o=0;if(!(h&1)?(o=0,wa(7,b|0,5,a|0),h=o,o=0,!(h&1)):0){o=0;wa(6,b|0,824,96);o=0;e=3;break a}a=Na()|0;La(b|0);break a}}}else a=4;while(0);if(!b){i=d;return a|0}if((c[g>>2]|0)!=(b|0))c[g>>2]=b;cj(b);i=d;return a|0}while(0);if((e|0)==3)a=Na()|0;b=c[f>>2]|0;if(!b)Ya(a|0);if((c[g>>2]|0)!=(b|0))c[g>>2]=b;cj(b);Ya(a|0);return 0}function Qi(a){a=a|0;var b=0,d=0,e=0;e=c[(c[a>>2]|0)+-12>>2]|0;c[a+e>>2]=36200;b=a+(e+56)|0;c[b>>2]=36220;d=a+(e+4)|0;c[d>>2]=36236;Im(a+(e+36)|0);nn(d);fn(b);return}function Ri(a){a=a|0;return}function Si(a){a=a|0;cj(a);return}function Ti(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}function Ui(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f;b=wi(b)|0;c[g>>2]=b;d=a+28|0;e=c[d>>2]|0;if(e>>>0<(c[a+32>>2]|0)>>>0){c[e>>2]=b;c[d>>2]=e+4;c[g>>2]=0;i=f;return}o=0;ia(57,a+24|0,g|0);a=o;o=0;if(a&1){b=Na()|0;d=c[g>>2]|0;c[g>>2]=0;if(!d)Ya(b|0);Bb[c[(c[d>>2]|0)+4>>2]&255](d);Ya(b|0)}else{b=c[g>>2]|0;c[g>>2]=0;if(!b){i=f;return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);i=f;return}}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Di(a,-1);Di(a,-40);e=a+28|0;f=a+24|0;b=c[f>>2]|0;if((c[e>>2]|0)==(b|0)){Di(a,-1);Di(a,-39);a=a+16|0;a=c[a>>2]|0;return a|0}else d=0;do{g=c[b+(d<<2)>>2]|0;Cb[c[(c[g>>2]|0)+8>>2]&127](g,a);d=d+1|0;b=c[f>>2]|0}while(d>>>0<(c[e>>2]|0)-b>>2>>>0);Di(a,-1);Di(a,-39);g=a+16|0;g=c[g>>2]|0;return g|0}function Wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0;n=i;i=i+48|0;j=n+32|0;f=n+12|0;k=n+8|0;m=n+4|0;p=n;e=d+36|0;do if(((((c[e>>2]|0)==0?(c[d+40>>2]|0)==0:0)?(c[d+44>>2]|0)==0:0)?(c[d+48>>2]|0)==0:0)?(c[d+52>>2]|0)==0:0){e=c[d+8>>2]|0;if((e|0)<=12){g=a+28|0;h=a+32|0;break}Ei(f,(1<>2]|0);e=vi(f)|0;c[k>>2]=e;g=a+28|0;f=c[g>>2]|0;h=a+32|0;if(f>>>0<(c[h>>2]|0)>>>0){c[f>>2]=e;c[g>>2]=f+4;c[k>>2]=0;break}o=0;ia(57,a+24|0,k|0);j=o;o=0;if(!(j&1)){e=c[k>>2]|0;c[k>>2]=0;if(!e)break;Bb[c[(c[e>>2]|0)+4>>2]&255](e);break}d=Na()|0;e=c[k>>2]|0;c[k>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}else l=6;while(0);do if((l|0)==6){e=vi(e)|0;c[j>>2]=e;g=a+28|0;f=c[g>>2]|0;h=a+32|0;if(f>>>0<(c[h>>2]|0)>>>0){c[f>>2]=e;c[g>>2]=f+4;c[j>>2]=0;break}o=0;ia(57,a+24|0,j|0);l=o;o=0;if(!(l&1)){e=c[j>>2]|0;c[j>>2]=0;if(!e)break;Bb[c[(c[e>>2]|0)+4>>2]&255](e);break}d=Na()|0;e=c[j>>2]|0;c[j>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}while(0);e=a+20|0;f=(c[e>>2]|0)+1|0;c[e>>2]=f;e=c[d+24>>2]|0;j=(e|0)==0?1:c[d+16>>2]|0;e=xi(f,j,c[d+20>>2]|0,e)|0;c[m>>2]=e;f=c[g>>2]|0;do if(f>>>0<(c[h>>2]|0)>>>0){c[f>>2]=e;c[g>>2]=f+4;c[m>>2]=0}else{o=0;ia(57,a+24|0,m|0);l=o;o=0;if(!(l&1)){e=c[m>>2]|0;c[m>>2]=0;if(!e)break;Bb[c[(c[e>>2]|0)+4>>2]&255](e);break}d=Na()|0;e=c[m>>2]|0;c[m>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}while(0);k=bj(104)|0;c[k>>2]=36820;c[k+4>>2]=j;f=k+8|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];f=k+20|0;e=f+84|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));c[p>>2]=k;d=c[g>>2]|0;if(d>>>0<(c[h>>2]|0)>>>0){c[d>>2]=k;c[g>>2]=d+4;c[p>>2]=0;i=n;return}o=0;ia(57,a+24|0,p|0);a=o;o=0;if(a&1){d=Na()|0;e=c[p>>2]|0;c[p>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}else{d=c[p>>2]|0;c[p>>2]=0;if(!d){i=n;return}Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=n;return}}function Xi(b,d,e,f,g,h,j,k,l,m,n){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=i;i=i+96|0;p=q;o=ic(b,d,p,0)|0;if(o){g=o;i=q;return g|0}a[p+32>>0]=0;s=c[p+8>>2]|0;u=c[p>>2]|0;t=c[p+4>>2]|0;o=$(t,u)|0;r=c[p+16>>2]|0;o=$($(o,(s|0)<9?1:2)|0,r)|0;c[f>>2]=o;o=Fl(o)|0;c[e>>2]=o;c[g>>2]=u;c[h>>2]=t;c[j>>2]=s;c[k>>2]=c[p+12>>2];c[l>>2]=r;c[m>>2]=c[p+20>>2];c[n>>2]=c[p+24>>2];g=jc(o,c[f>>2]|0,b,d,0,0)|0;i=q;return g|0}function Yi(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;n=i;i=i+96|0;l=n+4|0;h=n;m=l;o=m+84|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));c[l+16>>2]=g;c[l+8>>2]=f;c[l>>2]=d;c[l+4>>2]=e;c[j>>2]=Fl(b)|0;c[h>>2]=0;d=hc(j,b,h,a,b,l,0)|0;c[k>>2]=c[h>>2];i=n;return d|0}function Zi(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d>>2]=b;b=c[9320]|0;cl(b,a,d)|0;Wk(10,b)|0;Ga()}function _i(a){a=a|0;Ka(51337,51366,1164,51442)}function $i(a){a=a|0;Ka(51463,51486,303,51442)}function aj(){var a=0,b=0;a=i;i=i+16|0;if(!(db(37024,4)|0)){b=$a(c[9255]|0)|0;i=a;return b|0}else Zi(51562,a);return 0}function bj(a){a=a|0;var b=0;b=(a|0)==0?1:a;a=Fl(b)|0;a:do if(!a){while(1){a=kj()|0;if(!a)break;Rb[a&7]();a=Fl(b)|0;if(a)break a}b=Ma(4)|0;c[b>>2]=36844;lb(b|0,592,78)}while(0);return a|0}function cj(a){a=a|0;Gl(a);return}function dj(a){a=a|0;cj(a);return}function ej(a){a=a|0;c[a>>2]=36844;return}function fj(a){a=a|0;return}function gj(a){a=a|0;cj(a);return}function hj(a){a=a|0;return 51611}function ij(a){a=a|0;var b=0;b=i;i=i+16|0;o=0;xa(a|0);a=o;o=0;if(!(a&1)){o=0;ia(85,51626,b|0);o=0}a=Na(0)|0;Va(a|0)|0;o=0;ia(85,51666,b+8|0);o=0;a=Na(0)|0;o=0;xa(3);b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else ec(a)}function jj(){var a=0,b=0,d=0;o=0;a=ua(2)|0;d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}if(((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(d=b+48|0,(c[d>>2]&-256|0)==1126902528?(c[d+4>>2]|0)==1129074247:0):0)ij(c[b+12>>2]|0);d=c[9208]|0;c[9208]=d+0;ij(d)}function kj(){var a=0;a=c[9214]|0;c[9214]=a+0;return a|0}function lj(a){a=a|0;return}function mj(a){a=a|0;c[a>>2]=36868;Vj(a+4|0);return}function nj(a){a=a|0;mj(a);cj(a);return}function oj(a){a=a|0;return c[a+4>>2]|0}function pj(a){a=a|0;return}function qj(a){a=a|0;c[a>>2]=36888;return}function rj(a){a=a|0;return}function sj(a){a=a|0;cj(a);return}function tj(a){a=a|0;return 51716}function uj(a){a=a|0;return}function vj(a){a=a|0;return}function wj(a){a=a|0;return}function xj(a){a=a|0;cj(a);return}function yj(a){a=a|0;cj(a);return}function zj(a){a=a|0;cj(a);return}function Aj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+64|0;g=h;if((a|0)!=(b|0))if((b|0)!=0?(f=Gj(b,656,672,0)|0,(f|0)!=0):0){b=g;e=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;Ub[c[(c[f>>2]|0)+28>>2]&63](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;i=h;return b|0}function Bj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function Cj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))Bj(0,b,d,e);return}function Dj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))Bj(0,b,d,e);else{a=c[a+8>>2]|0;Ub[c[(c[a>>2]|0)+28>>2]&63](a,b,d,e)}return}function Ej(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ub[c[(c[a>>2]|0)+28>>2]&63](a,b,d+f|0,(g&2|0)!=0?e:2);return}function Fj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((b|0)!=(c[d+8>>2]|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Ej(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Ej(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else Bj(0,d,e,f);while(0);return}function Gj(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r;p=c[d>>2]|0;o=d+(c[p+-8>>2]|0)|0;p=c[p+-4>>2]|0;c[q>>2]=f;c[q+4>>2]=d;c[q+8>>2]=e;c[q+12>>2]=g;g=q+16|0;d=q+20|0;e=q+24|0;h=q+28|0;j=q+32|0;k=q+40|0;l=(p|0)==(f|0);m=g;n=m+36|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do if(l){c[q+48>>2]=1;Ib[c[(c[f>>2]|0)+20>>2]&15](f,q,o,o,1,0);g=(c[e>>2]|0)==1?o:0}else{zb[c[(c[p>>2]|0)+24>>2]&15](p,q,o,1,0);switch(c[q+36>>2]|0){case 0:{g=(c[k>>2]|0)==1&(c[h>>2]|0)==1&(c[j>>2]|0)==1?c[d>>2]|0:0;break a}case 1:break;default:{g=0;break a}}if((c[e>>2]|0)!=1?!((c[k>>2]|0)==0&(c[h>>2]|0)==1&(c[j>>2]|0)==1):0){g=0;break}g=c[g>>2]|0}while(0);i=r;return g|0}function Hj(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;f=d+16|0;b=c[f>>2]|0;if(!b){c[f>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((b|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}b=d+24|0;f=c[b>>2]|0;if((f|0)==2){c[b>>2]=g;f=g}if((f|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function Ij(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){q=c[b+12>>2]|0;j=b+16+(q<<3)|0;Kj(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;i=c[b+8>>2]|0;if((i&2|0)==0?(k=d+36|0,(c[k>>2]|0)!=1):0){if(!(i&1)){i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[k>>2]|0)==1)break a;Kj(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+24|0;b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[k>>2]|0)==1?(c[i>>2]|0)==1:0)break a;Kj(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+54|0;while(1){if(a[i>>0]|0)break a;Kj(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(p=d+20|0,(c[p>>2]|0)!=(e|0)):0){c[d+32>>2]=f;m=d+44|0;if((c[m>>2]|0)==4)break;i=c[b+12>>2]|0;j=b+16+(i<<3)|0;k=d+52|0;f=d+53|0;n=d+54|0;l=b+8|0;o=d+24|0;b:do if((i|0)>0){i=0;h=0;b=b+16|0;while(1){a[k>>0]=0;a[f>>0]=0;Jj(b,d,e,e,1,g);if(a[n>>0]|0){q=20;break b}do if(a[f>>0]|0){if(!(a[k>>0]|0))if(!(c[l>>2]&1)){h=1;q=20;break b}else{h=1;break}if((c[o>>2]|0)==1)break b;if(!(c[l>>2]&2))break b;else{i=1;h=1}}while(0);b=b+8|0;if(b>>>0>=j>>>0){q=20;break}}}else{i=0;h=0;q=20}while(0);do if((q|0)==20){if((!i?(c[p>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h)break}else q=24;if((q|0)==24?h:0)break;c[m>>2]=4;break a}while(0);c[m>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Jj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ib[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e+h|0,(i&2|0)!=0?f:2,g);return}function Kj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;zb[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,(h&2|0)!=0?e:2,f);return}function Lj(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){j=c[b+8>>2]|0;zb[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(i=d+20|0,(c[i>>2]|0)!=(e|0)):0){c[d+32>>2]=f;f=d+44|0;if((c[f>>2]|0)==4)break;h=d+52|0;a[h>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ib[c[(c[b>>2]|0)+20>>2]&15](b,d,e,e,1,g);if(a[k>>0]|0){if(!(a[h>>0]|0)){h=1;j=13}}else{h=0;j=13}do if((j|0)==13){c[i>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(h)break}else j=16;if((j|0)==16?h:0)break;c[f>>2]=4;break a}while(0);c[f>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Mj(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(i=d+28|0,(c[i>>2]|0)!=1):0)c[i>>2]=f}else if((b|0)==(c[d>>2]|0)){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Nj(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((b|0)==(c[d+8>>2]|0))Hj(0,d,e,f,g);else{m=d+52|0;n=a[m>>0]|0;o=d+53|0;p=a[o>>0]|0;l=c[b+12>>2]|0;i=b+16+(l<<3)|0;a[m>>0]=0;a[o>>0]=0;Jj(b+16|0,d,e,f,g,h);a:do if((l|0)>1){j=d+24|0;k=b+8|0;l=d+54|0;b=b+24|0;do{if(a[l>>0]|0)break a;if(!(a[m>>0]|0)){if((a[o>>0]|0)!=0?(c[k>>2]&1|0)==0:0)break a}else{if((c[j>>2]|0)==1)break a;if(!(c[k>>2]&2))break a}a[m>>0]=0;a[o>>0]=0;Jj(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[m>>0]=n;a[o>>0]=p}return}function Oj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))Hj(0,b,d,e,f);else{a=c[a+8>>2]|0;Ib[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e,f,g)}return}function Pj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))Hj(0,b,d,e,f);return}function Qj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=c[d>>2];a=Gb[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];i=f;return a&1|0}function Rj(a){a=a|0;if(!a)a=0;else a=(Gj(a,656,704,0)|0)!=0;return a&1|0}function Sj(){var a=0;a=Ma(4)|0;ej(a);lb(a|0,592,78)}function Tj(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;f=i;i=i+48|0;h=f+32|0;d=f+24|0;j=f+16|0;g=f;f=f+36|0;a=aj()|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=c[9257];Zi(51919,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Gb[c[(c[608>>2]|0)+16>>2]&63](608,e,f)|0){j=c[f>>2]|0;f=c[9257]|0;j=Eb[c[(c[j>>2]|0)+8>>2]&127](j)|0;c[g>>2]=f;c[g+4>>2]=a;c[g+8>>2]=j;Zi(51833,g)}else{c[j>>2]=c[9257];c[j+4>>2]=a;Zi(51878,j)}}Zi(51957,h)}function Uj(){var a=0;a=i;i=i+16|0;if(!(Fa(37020,184)|0)){i=a;return}else Zi(51730,a)}function Vj(a){a=a|0;var b=0,d=0;d=(c[a>>2]|0)+-4|0;b=c[d>>2]|0;c[d>>2]=b+-1;if((b+-1|0)<0)cj((c[a>>2]|0)+-12|0);return}function Wj(a){a=a|0;var b=0;b=i;i=i+16|0;Gl(a);if(!(jb(c[9255]|0,0)|0)){i=b;return}else Zi(51780,b)}function Xj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=hl(a,b,c)|0;return a|0}function Yj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=il(a,b,c)|0;return a|0}function Zj(){return 37296}function _j(){return 37300}function $j(){return 37304}function ak(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function bk(a){a=a|0;if((a+-48|0)>>>0<10)a=1;else a=((a|32)+-97|0)>>>0<6;return a&1|0}function ck(){var a=0;if(!(c[9258]|0))a=37308;else a=c[(bb()|0)+60>>2]|0;return a|0}function dk(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[51978+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=52066;e=5;break}}if((e|0)==2)if(!c)b=52066;else{b=52066;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function ek(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,j=0.0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;L=i;i=i+512|0;H=L;switch(e|0){case 0:{K=24;J=-149;A=4;break}case 1:{K=53;J=-1074;A=4;break}case 2:{K=53;J=-1074;A=4;break}default:g=0.0}a:do if((A|0)==4){E=b+4|0;C=b+100|0;do{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0}while((ak(e)|0)!=0);b:do switch(e|0){case 43:case 45:{h=1-(((e|0)==45&1)<<1)|0;e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;I=h;break b}else{e=hk(b)|0;I=h;break b}}default:I=1}while(0);h=e;e=0;do{if((h|32|0)!=(a[53870+e>>0]|0))break;do if(e>>>0<7){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=hk(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{A=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{A=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[56747+e>>0]|0))break d;do if(e>>>0<2){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=hk(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==40)e=1;else{if(!(c[C>>2]|0)){g=s;break a}c[E>>2]=(c[E>>2]|0)+-1;g=s;break a}while(1){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0}else h=hk(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[C>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!k){c[(ck()|0)>>2]=22;gk(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{do if((h|0)==48){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|32|0)!=120){if(!(c[C>>2]|0)){e=48;break}c[E>>2]=(c[E>>2]|0)+-1;e=48;break}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=0}else{e=hk(b)|0;k=0}e:while(1){switch(e|0){case 46:{A=74;break e}case 48:break;default:{y=0;l=0;x=0;h=0;n=k;o=0;w=0;m=1.0;k=0;g=0.0;break e}}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=hk(b)|0;k=1;continue}}if((A|0)==74){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==48){k=0;h=0;do{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;k=jw(k|0,h|0,-1,-1)|0;h=D}while((e|0)==48);y=0;l=0;x=k;n=1;o=1;w=0;m=1.0;k=0;g=0.0}else{y=0;l=0;x=0;h=0;n=k;o=1;w=0;m=1.0;k=0;g=0.0}}while(1){u=e+-48|0;p=e|32;if(u>>>0>=10){v=(e|0)==46;if(!(v|(p+-97|0)>>>0<6)){p=x;u=y;break}if(v)if(!o){v=l;h=y;u=y;o=1;p=w;j=m}else{p=x;u=y;e=46;break}else A=86}else A=86;if((A|0)==86){A=0;e=(e|0)>57?p+-87|0:u;do if(!((y|0)<0|(y|0)==0&l>>>0<8)){if((y|0)<0|(y|0)==0&l>>>0<14){r=m*.0625;p=w;j=r;g=g+r*+(e|0);break}if((w|0)!=0|(e|0)==0){p=w;j=m}else{p=1;j=m;g=g+m*.5}}else{p=w;j=m;k=e+(k<<4)|0}while(0);l=jw(l|0,y|0,1,0)|0;v=x;u=D;n=1}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;y=u;x=v;e=d[e>>0]|0;w=p;m=j;continue}else{y=u;x=v;e=hk(b)|0;w=p;m=j;continue}}if(!n){e=(c[C>>2]|0)==0;if(!e)c[E>>2]=(c[E>>2]|0)+-1;if(f){if(!e?(z=c[E>>2]|0,c[E>>2]=z+-1,(o|0)!=0):0)c[E>>2]=z+-2}else gk(b,0);g=+(I|0)*0.0;break a}n=(o|0)==0;o=n?l:p;n=n?u:h;if((u|0)<0|(u|0)==0&l>>>0<8){h=u;do{k=k<<4;l=jw(l|0,h|0,1,0)|0;h=D}while((h|0)<0|(h|0)==0&l>>>0<8)}if((e|32|0)==112){h=tl(b,f)|0;e=D;if((h|0)==0&(e|0)==-2147483648){if(!f){gk(b,0);g=0.0;break a}if(!(c[C>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}}}else if(!(c[C>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}H=mw(o|0,n|0,2)|0;H=jw(H|0,D|0,-32,-1)|0;e=jw(H|0,D|0,h|0,e|0)|0;h=D;if(!k){g=+(I|0)*0.0;break a}if((h|0)>0|(h|0)==0&e>>>0>(0-J|0)>>>0){c[(ck()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}H=J+-106|0;G=((H|0)<0)<<31>>31;if((h|0)<(G|0)|(h|0)==(G|0)&e>>>0>>0){c[(ck()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((k|0)>-1){do{G=!(g>=.5);H=G&1|k<<1;k=H^1;g=g+(G?g:g+-1.0);e=jw(e|0,h|0,-1,-1)|0;h=D}while((H|0)>-1);l=e;m=g}else{l=e;m=g}e=hw(32,0,J|0,((J|0)<0)<<31>>31|0)|0;e=jw(l|0,h|0,e|0,D|0)|0;J=D;if(0>(J|0)|0==(J|0)&K>>>0>e>>>0)if((e|0)<0){e=0;A=127}else A=125;else{e=K;A=125}if((A|0)==125)if((e|0)<53)A=127;else{h=e;j=+(I|0);g=0.0}if((A|0)==127){g=+(I|0);h=e;j=g;g=+sk(+xk(1.0,84-e|0),g)}K=(k&1|0)==0&(m!=0.0&(h|0)<32);g=j*(K?0.0:m)+(g+j*+(((K&1)+k|0)>>>0))-g;if(!(g!=0.0))c[(ck()|0)>>2]=34;g=+yk(g,l);break a}else e=h;while(0);F=J+K|0;G=0-F|0;k=0;f:while(1){switch(e|0){case 46:{A=138;break f}case 48:break;default:{h=0;p=0;o=0;break f}}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=hk(b)|0;k=1;continue}}if((A|0)==138){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==48){h=0;e=0;while(1){h=jw(h|0,e|0,-1,-1)|0;k=D;e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==48)e=k;else{p=k;k=1;o=1;break}}}else{h=0;p=0;o=1}}c[H>>2]=0;n=e+-48|0;l=(e|0)==46;g:do if(l|n>>>0<10){B=H+496|0;y=0;v=0;w=l;A=p;u=k;z=o;k=0;l=0;o=0;h:while(1){do if(w)if(!z){h=y;p=v;z=1}else{p=A;e=y;n=v;break h}else{w=jw(y|0,v|0,1,0)|0;v=D;x=(e|0)!=48;if((l|0)>=125){if(!x){p=A;y=w;break}c[B>>2]=c[B>>2]|1;p=A;y=w;break}p=H+(l<<2)|0;if(k)n=e+-48+((c[p>>2]|0)*10|0)|0;c[p>>2]=n;k=k+1|0;n=(k|0)==9;p=A;y=w;u=1;k=n?0:k;l=(n&1)+l|0;o=x?w:o}while(0);e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;n=e+-48|0;w=(e|0)==46;if(!(w|n>>>0<10)){n=z;A=161;break g}else A=p}u=(u|0)!=0;A=169}else{y=0;v=0;u=k;n=o;k=0;l=0;o=0;A=161}while(0);do if((A|0)==161){B=(n|0)==0;h=B?y:h;p=B?v:p;u=(u|0)!=0;if(!((e|32|0)==101&u))if((e|0)>-1){e=y;n=v;A=169;break}else{e=y;n=v;A=171;break}n=tl(b,f)|0;e=D;if((n|0)==0&(e|0)==-2147483648){if(!f){gk(b,0);g=0.0;break}if(!(c[C>>2]|0)){n=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;n=0;e=0}}h=jw(n|0,e|0,h|0,p|0)|0;u=y;p=D;n=v;A=173}while(0);if((A|0)==169)if(c[C>>2]|0){c[E>>2]=(c[E>>2]|0)+-1;if(u){u=e;A=173}else A=172}else A=171;if((A|0)==171)if(u){u=e;A=173}else A=172;do if((A|0)==172){c[(ck()|0)>>2]=22;gk(b,0);g=0.0}else if((A|0)==173){e=c[H>>2]|0;if(!e){g=+(I|0)*0.0;break}if(((n|0)<0|(n|0)==0&u>>>0<10)&((h|0)==(u|0)&(p|0)==(n|0))?K>>>0>30|(e>>>K|0)==0:0){g=+(I|0)*+(e>>>0);break}b=(J|0)/-2|0;E=((b|0)<0)<<31>>31;if((p|0)>(E|0)|(p|0)==(E|0)&h>>>0>b>>>0){c[(ck()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}b=J+-106|0;E=((b|0)<0)<<31>>31;if((p|0)<(E|0)|(p|0)==(E|0)&h>>>0>>0){c[(ck()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(k){if((k|0)<9){n=H+(l<<2)|0;e=c[n>>2]|0;do{e=e*10|0;k=k+1|0}while((k|0)!=9);c[n>>2]=e}l=l+1|0}if((o|0)<9?(o|0)<=(h|0)&(h|0)<18:0){if((h|0)==9){g=+(I|0)*+((c[H>>2]|0)>>>0);break}if((h|0)<9){g=+(I|0)*+((c[H>>2]|0)>>>0)/+(c[37312+(8-h<<2)>>2]|0);break}b=K+27+($(h,-3)|0)|0;e=c[H>>2]|0;if((b|0)>30|(e>>>b|0)==0){g=+(I|0)*+(e>>>0)*+(c[37312+(h+-10<<2)>>2]|0);break}}e=(h|0)%9|0;if(!e){k=0;e=0}else{u=(h|0)>-1?e:e+9|0;n=c[37312+(8-u<<2)>>2]|0;if(l){o=1e9/(n|0)|0;k=0;e=0;p=0;do{C=H+(p<<2)|0;E=c[C>>2]|0;b=((E>>>0)/(n>>>0)|0)+e|0;c[C>>2]=b;e=$((E>>>0)%(n>>>0)|0,o)|0;b=(p|0)==(k|0)&(b|0)==0;p=p+1|0;h=b?h+-9|0:h;k=b?p&127:k}while((p|0)!=(l|0));if(e){c[H+(l<<2)>>2]=e;l=l+1|0}}else{k=0;l=0}e=0;h=9-u+h|0}i:while(1){v=(h|0)<18;w=(h|0)==18;x=H+(k<<2)|0;do{if(!v){if(!w)break i;if((c[x>>2]|0)>>>0>=9007199){h=18;break i}}n=0;o=l+127|0;while(1){u=o&127;p=H+(u<<2)|0;o=mw(c[p>>2]|0,0,29)|0;o=jw(o|0,D|0,n|0,0)|0;n=D;if(n>>>0>0|(n|0)==0&o>>>0>1e9){b=uw(o|0,n|0,1e9,0)|0;o=vw(o|0,n|0,1e9,0)|0;n=b}else n=0;c[p>>2]=o;b=(u|0)==(k|0);l=(u|0)!=(l+127&127|0)|b?l:(o|0)==0?u:l;if(b)break;else o=u+-1|0}e=e+-29|0}while((n|0)==0);k=k+127&127;if((k|0)==(l|0)){b=l+127&127;l=H+((l+126&127)<<2)|0;c[l>>2]=c[l>>2]|c[H+(b<<2)>>2];l=b}c[H+(k<<2)>>2]=n;h=h+9|0}j:while(1){y=l+1&127;x=H+((l+127&127)<<2)|0;while(1){v=(h|0)==18;w=(h|0)>27?9:1;u=v^1;while(1){o=k&127;p=(o|0)==(l|0);do if(!p){n=c[H+(o<<2)>>2]|0;if(n>>>0<9007199){A=219;break}if(n>>>0>9007199)break;n=k+1&127;if((n|0)==(l|0)){A=219;break}n=c[H+(n<<2)>>2]|0;if(n>>>0<254740991){A=219;break}if(!(n>>>0>254740991|u)){h=o;break j}}else A=219;while(0);if((A|0)==219?(A=0,v):0){A=220;break j}e=e+w|0;if((k|0)==(l|0))k=l;else break}u=(1<>>w;o=k;n=0;p=k;while(1){E=H+(p<<2)|0;b=c[E>>2]|0;k=(b>>>w)+n|0;c[E>>2]=k;n=$(b&u,v)|0;k=(p|0)==(o|0)&(k|0)==0;p=p+1&127;h=k?h+-9|0:h;k=k?p:o;if((p|0)==(l|0))break;else o=k}if(!n)continue;if((y|0)!=(k|0))break;c[x>>2]=c[x>>2]|1}c[H+(l<<2)>>2]=n;l=y}if((A|0)==220)if(p){c[H+(y+-1<<2)>>2]=0;h=l;l=y}else h=o;g=+((c[H+(h<<2)>>2]|0)>>>0);h=k+1&127;if((h|0)==(l|0)){l=k+2&127;c[H+(l+-1<<2)>>2]=0}r=+(I|0);j=r*(g*1.0e9+ +((c[H+(h<<2)>>2]|0)>>>0));v=e+53|0;p=v-J|0;u=(p|0)<(K|0);h=u&1;o=u?((p|0)<0?0:p):K;if((o|0)<53){M=+sk(+xk(1.0,105-o|0),j);m=+uk(j,+xk(1.0,53-o|0));q=M;g=m;m=M+(j-m)}else{q=0.0;g=0.0;m=j}n=k+2&127;do if((n|0)==(l|0))j=g;else{n=c[H+(n<<2)>>2]|0;do if(n>>>0>=5e8){if(n>>>0>5e8){g=r*.75+g;break}if((k+3&127|0)==(l|0)){g=r*.5+g;break}else{g=r*.75+g;break}}else{if((n|0)==0?(k+3&127|0)==(l|0):0)break;g=r*.25+g}while(0);if((53-o|0)<=1){j=g;break}if(+uk(g,1.0)!=0.0){j=g;break}j=g+1.0}while(0);g=m+j-q;do if((v&2147483647|0)>(-2-F|0)){if(+O(+g)>=9007199254740992.0){h=u&(o|0)==(p|0)?0:h;e=e+1|0;g=g*.5}if((e+50|0)<=(G|0)?!(j!=0.0&(h|0)!=0):0)break;c[(ck()|0)>>2]=34}while(0);g=+yk(g,e)}while(0);break a}default:{if(c[C>>2]|0)c[E>>2]=(c[E>>2]|0)+-1;c[(ck()|0)>>2]=22;gk(b,0);g=0.0;break a}}}}while(0);if((A|0)==23){h=(c[C>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[E>>2]=(c[E>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(I|0)*t}while(0);i=L;return +g}function fk(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(ck()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0}while((ak(i)|0)!=0);b:do switch(i|0){case 43:case 45:{j=((i|0)==45)<<31>>31;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0;p=j;break b}else{i=hk(b)|0;p=j;break b}}default:p=0}while(0);j=(e|0)==0;do if((e&-17|0)==0&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=hk(b)|0;if((d[53879+(i+1)>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){gk(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if((d[53879+(i+1)>>0]|0)>>>0>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;gk(b,0);c[(ck()|0)>>2]=22;h=0;g=0;break a}}while(0);if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;while(1){j=(i*10|0)+e|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=hk(b)|0;e=i+-48|0;if(!(e>>>0<10&j>>>0<429496729)){e=j;break}else i=j}j=0}else{e=0;j=0}f=i+-48|0;if(f>>>0<10){while(1){k=tw(e|0,j|0,10,0)|0;l=D;m=((f|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&k>>>0>~f>>>0){k=e;break}e=jw(k|0,l|0,f|0,m|0)|0;j=D;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;f=i+-48|0;if(!(f>>>0<10&(j>>>0<429496729|(j|0)==429496729&e>>>0<2576980378))){k=e;break}}if(f>>>0>9){i=k;e=p}else{e=10;n=72}}else{i=e;e=p}}else n=46;c:do if((n|0)==46){if(!(e+-1&e)){n=a[54136+((e*23|0)>>>5&7)>>0]|0;j=a[53879+(i+1)>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f|i<>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;f=j&255;if(!(k>>>0<134217728&f>>>0>>0))break;else i=k}f=0}else{f=0;k=0}l=kw(-1,-1,n|0)|0;m=D;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break}else i=f;while(1){k=mw(k|0,i|0,n|0)|0;f=D;k=j&255|k;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break c}else i=f}}j=a[53879+(i+1)>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f+($(i,e)|0)|0;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;f=j&255;if(!(k>>>0<119304647&f>>>0>>0))break;else i=k}f=0}else{k=0;f=0}if((j&255)>>>0>>0){n=uw(-1,-1,e|0,0)|0;o=D;m=f;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&k>>>0>n>>>0){j=m;n=72;break c}f=tw(k|0,m|0,e|0,0)|0;l=D;j=j&255;if(l>>>0>4294967295|(l|0)==-1&f>>>0>~j>>>0){j=m;n=72;break c}k=jw(j|0,0,f|0,l|0)|0;f=D;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;if((j&255)>>>0>=e>>>0){j=f;n=72;break}else m=f}}else{j=f;n=72}}while(0);if((n|0)==72)if((d[53879+(i+1)>>0]|0)>>>0>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0}while((d[53879+(i+1)>>0]|0)>>>0>>0);c[(ck()|0)>>2]=34;j=h;i=g;e=(g&1|0)==0&0==0?p:0}else{i=k;e=p}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(j>>>0>>0|(j|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(e|0)!=0)){c[(ck()|0)>>2]=34;g=jw(g|0,h|0,-1,-1)|0;h=D;break}if(j>>>0>h>>>0|(j|0)==(h|0)&i>>>0>g>>>0){c[(ck()|0)>>2]=34;break}}g=((e|0)<0)<<31>>31;g=hw(i^e|0,j^g|0,e|0,g|0)|0;h=D}while(0);D=h;return g|0}function gk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+4>>2]|0;e=c[a+8>>2]|0;f=e-d|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0))c[a+100>>2]=d+b;else c[a+100>>2]=e;return}function hk(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;i=c[f>>2]|0;if((i|0)!=0?(c[b+108>>2]|0)>=(i|0):0)j=4;else{e=Uk(b)|0;if((e|0)>=0){h=c[f>>2]|0;f=b+8|0;if(h){g=c[f>>2]|0;i=c[b+4>>2]|0;f=g;h=h-(c[b+108>>2]|0)+-1|0;if((f-i|0)>(h|0))c[b+100>>2]=i+h;else j=9}else{g=c[f>>2]|0;f=g;j=9}if((j|0)==9)c[b+100>>2]=f;f=c[b+4>>2]|0;if(g){b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((d[f>>0]|0|0)!=(e|0))a[f>>0]=e}else j=4}if((j|0)==4){c[b+100>>2]=0;e=-1}return e|0}function ik(a){a=a|0;if(a>>>0>4294963200){c[(ck()|0)>>2]=0-a;a=-1}return a|0}function jk(a){a=a|0;return 0}function kk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d|0}function lk(a,b){a=a|0;b=b|0;return -1|0}function mk(a){a=a|0;Gl(a);return}function nk(a,b){a=a|0;b=b|0;return (a+-48|0)>>>0<10|0}function ok(a,b){a=a|0;b=b|0;return bk(a)|0}function pk(b,c,d){b=b|0;c=c|0;d=d|0;if(((a[c>>0]|0)!=0?(ll(c,58885)|0)!=0:0)?(ll(c,54145)|0)!=0:0)d=0;else if(!d)d=Hl(1,4)|0;return d|0}function qk(a){a=a|0;var b=0,d=0;b=(bb()|0)+176|0;d=c[b>>2]|0;if(a)c[b>>2]=a;return d|0}function rk(a,b){a=+a;b=+b;var d=0,e=0;h[k>>3]=a;e=c[k>>2]|0;d=c[k+4>>2]|0;h[k>>3]=b;d=c[k+4>>2]&-2147483648|d&2147483647;c[k>>2]=e;c[k+4>>2]=d;return +(+h[k>>3])}function sk(a,b){a=+a;b=+b;return +(+rk(a,b))}function tk(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;h[k>>3]=a;d=c[k>>2]|0;m=c[k+4>>2]|0;h[k>>3]=b;n=c[k>>2]|0;o=c[k+4>>2]|0;e=kw(d|0,m|0,52)|0;e=e&2047;j=kw(n|0,o|0,52)|0;j=j&2047;p=m&-2147483648;i=mw(n|0,o|0,1)|0;l=D;a:do if(!((i|0)==0&(l|0)==0)?(g=o&2147483647,!(g>>>0>2146435072|(g|0)==2146435072&n>>>0>0|(e|0)==2047)):0){f=mw(d|0,m|0,1)|0;g=D;if(!(g>>>0>l>>>0|(g|0)==(l|0)&f>>>0>i>>>0))return +((f|0)==(i|0)&(g|0)==(l|0)?a*0.0:a);if(!e){e=mw(d|0,m|0,12)|0;f=D;if((f|0)>-1|(f|0)==-1&e>>>0>4294967295){g=e;e=0;do{e=e+-1|0;g=mw(g|0,f|0,1)|0;f=D}while((f|0)>-1|(f|0)==-1&g>>>0>4294967295)}else e=0;d=mw(d|0,m|0,1-e|0)|0;f=D}else f=m&1048575|1048576;if(!j){g=mw(n|0,o|0,12)|0;i=D;if((i|0)>-1|(i|0)==-1&g>>>0>4294967295){j=0;do{j=j+-1|0;g=mw(g|0,i|0,1)|0;i=D}while((i|0)>-1|(i|0)==-1&g>>>0>4294967295)}else j=0;n=mw(n|0,o|0,1-j|0)|0;m=D}else m=o&1048575|1048576;l=hw(d|0,f|0,n|0,m|0)|0;i=D;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;b:do if((e|0)>(j|0)){while(1){if(g)if((d|0)==(n|0)&(f|0)==(m|0))break;else{d=l;f=i}d=mw(d|0,f|0,1)|0;f=D;e=e+-1|0;l=hw(d|0,f|0,n|0,m|0)|0;i=D;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;if((e|0)<=(j|0))break b}b=a*0.0;break a}while(0);if(g)if((d|0)==(n|0)&(f|0)==(m|0)){b=a*0.0;break}else{f=i;d=l}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=mw(d|0,f|0,1)|0;f=D;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=jw(d|0,f|0,0,-1048576)|0;d=D;e=mw(e|0,0,52)|0;d=d|D;e=o|e}else{e=kw(d|0,f|0,1-e|0)|0;d=D}c[k>>2]=e;c[k+4>>2]=d|p;b=+h[k>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function uk(a,b){a=+a;b=+b;return +(+tk(a,b))}function vk(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=kw(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+vk(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=f+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function wk(a,b){a=+a;b=b|0;return +(+vk(a,b))}function xk(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=mw(d+1023|0,0,52)|0;b=D;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function yk(a,b){a=+a;b=b|0;return +(+xk(a,b))}function zk(a,b,c){a=a|0;b=b|0;c=c|0;return Ak(0,a,b,(c|0)!=0?c:37344)|0}function Ak(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;g=l;j=(f|0)==0?37348:f;f=c[j>>2]|0;a:do if(!d)if(!f)f=0;else k=15;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;g=f&255;if(f<<24>>24>-1){c[h>>2]=g;f=f<<24>>24!=0&1;break}f=g+-194|0;if(f>>>0>50){k=15;break}f=c[37076+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;k=9}}else{g=e;k=9}b:do if((k|0)==9){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){k=15;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){k=15;break a}}c[j>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[j>>2]=f;f=-2}}while(0);if((k|0)==15){c[j>>2]=0;c[(ck()|0)>>2]=84;f=-1}i=l;return f|0}function Bk(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0;return a&1|0}function Ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+1040|0;l=o+8|0;n=o;k=c[b>>2]|0;c[n>>2]=k;m=(a|0)!=0;e=m?e:256;a=m?a:l;g=k;a:do if((e|0)!=0&(k|0)!=0){j=e;k=g;e=0;while(1){g=d>>>2;h=g>>>0>=j>>>0;if(!(d>>>0>131|h)){g=k;break a}g=h?j:g;d=d-g|0;g=Dk(a,n,g,f)|0;if((g|0)==-1){e=d;break}p=(a|0)==(l|0);k=p?0:g;h=j-k|0;a=p?a:a+(g<<2)|0;e=g+e|0;g=c[n>>2]|0;if((j|0)!=(k|0)&(g|0)!=0){j=h;k=g}else{j=h;break a}}d=e;j=0;g=c[n>>2]|0;e=-1}else{j=e;e=0}while(0);b:do if((g|0)!=0?(j|0)!=0&(d|0)!=0:0){h=g;g=a;while(1){a=Ak(g,h,d,f)|0;if((a+2|0)>>>0<3)break;h=(c[n>>2]|0)+a|0;c[n>>2]=h;j=j+-1|0;e=e+1|0;if(!((j|0)!=0&(d|0)!=(a|0)))break b;else{d=d-a|0;g=g+4|0}}switch(a|0){case -1:{e=-1;break b}case 0:{c[n>>2]=0;break b}default:{c[f>>2]=0;break b}}}while(0);if(m)c[b>>2]=c[n>>2];i=o;return e|0}function Dk(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=c[e>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)!=0):0)if(!b){g=f;j=h;m=16}else{c[g>>2]=0;l=b;g=f;k=i;m=37}else if(!b){g=f;m=7}else{i=b;g=f;m=6}a:while(1)if((m|0)==6){if(!g){m=26;break}else b=i;while(1){i=a[h>>0]|0;do if(((i&255)+-1|0)>>>0<127?g>>>0>4&(h&3|0)==0:0){j=h;while(1){h=c[j>>2]|0;if((h+-16843009|h)&-2139062144){i=h;h=j;m=32;break}c[b>>2]=h&255;c[b+4>>2]=d[j+1>>0];c[b+8>>2]=d[j+2>>0];h=j+4|0;i=b+16|0;c[b+12>>2]=d[j+3>>0];g=g+-4|0;if(g>>>0>4){b=i;j=h}else{m=31;break}}if((m|0)==31){b=i;i=a[h>>0]|0;break}else if((m|0)==32){i=i&255;break}}while(0);i=i&255;if((i+-1|0)>>>0>=127)break;h=h+1|0;c[b>>2]=i;g=g+-1|0;if(!g){m=26;break a}else b=b+4|0}i=i+-194|0;if(i>>>0>50){m=48;break}l=b;k=c[37076+(i<<2)>>2]|0;h=h+1|0;m=37;continue}else if((m|0)==7){i=a[h>>0]|0;if(((i&255)+-1|0)>>>0<127?(h&3|0)==0:0){i=c[h>>2]|0;if(!((i+-16843009|i)&-2139062144))do{h=h+4|0;g=g+-4|0;i=c[h>>2]|0}while(((i+-16843009|i)&-2139062144|0)==0);i=i&255}i=i&255;if((i+-1|0)>>>0<127){g=g+-1|0;h=h+1|0;m=7;continue}i=i+-194|0;if(i>>>0>50){m=48;break}i=c[37076+(i<<2)>>2]|0;j=h+1|0;m=16;continue}else if((m|0)==16){m=(d[j>>0]|0)>>>3;if((m+-16|m+(i>>26))>>>0>7){m=17;break}h=j+1|0;if(i&33554432){if((a[h>>0]&-64)<<24>>24!=-128){m=20;break}h=j+2|0;if(i&524288){if((a[h>>0]&-64)<<24>>24!=-128){m=23;break}h=j+3|0}}g=g+-1|0;m=7;continue}else if((m|0)==37){i=d[h>>0]|0;m=i>>>3;if((m+-16|m+(k>>26))>>>0>7){m=38;break}j=h+1|0;b=i+-128|k<<6;if((b|0)<0){i=d[j>>0]|0;if((i&192|0)!=128){m=41;break}j=h+2|0;b=i+-128|b<<6;if((b|0)<0){i=d[j>>0]|0;if((i&192|0)!=128){m=44;break}b=i+-128|b<<6;h=h+3|0}else h=j}else h=j;c[l>>2]=b;i=l+4|0;g=g+-1|0;m=6;continue}if((m|0)==17){h=j+-1|0;m=47}else if((m|0)==20){h=j+-1|0;m=47}else if((m|0)==23){h=j+-1|0;m=47}else if((m|0)==26)c[e>>2]=h;else if((m|0)==38){b=l;i=k;h=h+-1|0;m=47}else if((m|0)==41){g=l;f=h+-1|0;m=52}else if((m|0)==44){g=l;f=h+-1|0;m=52}if((m|0)==47)if(!i)m=48;else{g=b;f=h;m=52}if((m|0)==48)if(!(a[h>>0]|0)){if(b){c[b>>2]=0;c[e>>2]=0}f=f-g|0}else{g=b;f=h;m=52}if((m|0)==52){c[(ck()|0)>>2]=84;if(!g)f=-1;else{c[e>>2]=f;f=-1}}return f|0}function Ek(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k;a:do if(!e)g=0;else{do if(f){j=(b|0)==0?g:b;g=a[e>>0]|0;b=g&255;if(g<<24>>24>-1){c[j>>2]=b;g=g<<24>>24!=0&1;break a}g=b+-194|0;if(g>>>0<=50){b=e+1|0;h=c[37076+(g<<2)>>2]|0;if(f>>>0<4?(h&-2147483648>>>((f*6|0)+-6|0)|0)!=0:0)break;g=d[b>>0]|0;f=g>>>3;if((f+-16|f+(h>>26))>>>0<=7){g=g+-128|h<<6;if((g|0)>=0){c[j>>2]=g;g=2;break a}b=d[e+2>>0]|0;if((b&192|0)==128){b=b+-128|g<<6;if((b|0)>=0){c[j>>2]=b;g=3;break a}g=d[e+3>>0]|0;if((g&192|0)==128){c[j>>2]=g+-128|b<<6;g=4;break a}}}}}while(0);c[(ck()|0)>>2]=84;g=-1}while(0);i=k;return g|0}function Fk(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(ck()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Gk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+272|0;j=m+8|0;l=m;h=c[b>>2]|0;c[l>>2]=h;k=(a|0)!=0;f=k?e:256;e=k?a:j;a=h;a:do if((f|0)!=0&(h|0)!=0){h=f;g=a;f=0;while(1){a=d>>>0>=h>>>0;if(!(a|d>>>0>32)){a=g;break a}a=a?h:d;d=d-a|0;a=Hk(e,l,a,0)|0;if((a|0)==-1){f=d;break}o=(e|0)==(j|0);n=o?0:a;g=h-n|0;e=o?e:e+a|0;f=a+f|0;a=c[l>>2]|0;if((h|0)!=(n|0)&(a|0)!=0){h=g;g=a}else{h=g;break a}}d=f;h=0;a=c[l>>2]|0;f=-1}else{h=f;f=0}while(0);b:do if((a|0)!=0?(h|0)!=0&(d|0)!=0:0){g=a;a=e;while(1){e=Fk(a,c[g>>2]|0,0)|0;if((e+1|0)>>>0<2)break;g=(c[l>>2]|0)+4|0;c[l>>2]=g;d=d+-1|0;f=f+1|0;if(!((h|0)!=(e|0)&(d|0)!=0))break b;else{h=h-e|0;a=a+e|0}}if(!e)c[l>>2]=0;else f=-1}while(0);if(k)c[b>>2]=c[l>>2];i=m;return f|0}function Hk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;a:do if(!b){b=c[d>>2]|0;f=c[b>>2]|0;if(!f)e=0;else{e=0;do{if(f>>>0>127){f=Fk(j,f,0)|0;if((f|0)==-1){e=-1;break a}}else f=1;e=f+e|0;b=b+4|0;f=c[b>>2]|0}while((f|0)!=0)}}else{b:do if(e>>>0>3){f=e;g=c[d>>2]|0;while(1){h=c[g>>2]|0;if((h+-1|0)>>>0>126){if(!h)break;h=Fk(b,h,0)|0;if((h|0)==-1){e=-1;break a}b=b+h|0;f=f-h|0}else{a[b>>0]=h;b=b+1|0;f=f+-1|0;g=c[d>>2]|0}g=g+4|0;c[d>>2]=g;if(f>>>0<=3)break b}a[b>>0]=0;c[d>>2]=0;e=e-f|0;break a}else f=e;while(0);if(f){g=c[d>>2]|0;while(1){h=c[g>>2]|0;if((h+-1|0)>>>0>126){if(!h){g=19;break}h=Fk(j,h,0)|0;if((h|0)==-1){e=-1;break a}if(f>>>0>>0){g=22;break}Fk(b,c[g>>2]|0,0)|0;b=b+h|0;f=f-h|0}else{a[b>>0]=h;b=b+1|0;f=f+-1|0;g=c[d>>2]|0}g=g+4|0;c[d>>2]=g;if(!f)break a}if((g|0)==19){a[b>>0]=0;c[d>>2]=0;e=e-f|0;break}else if((g|0)==22){e=e-f|0;break}}}while(0);i=k;return e|0}function Ik(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Fk(a,b,0)|0;return a|0}function Jk(a){a=a|0;return 0}function Kk(a){a=a|0;return}function Lk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;k=e&255;a[l>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(Tk(b)|0)){h=c[g>>2]|0;j=4}else f=-1;else j=4;do if((j|0)==4){g=b+20|0;j=c[g>>2]|0;if(j>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[g>>2]=j+1;a[j>>0]=k;break}if((Gb[c[b+36>>2]&63](b,l,1)|0)==1)f=d[l>>0]|0;else f=-1}while(0);i=m;return f|0}function Mk(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=ik(nb(6,d|0)|0)|0;i=b;return a|0}function Nk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;h=m+16|0;g=m;f=m+32|0;c[f>>2]=d;j=f+4|0;l=b+48|0;n=c[l>>2]|0;c[j>>2]=e-((n|0)!=0&1);k=b+44|0;c[f+8>>2]=c[k>>2];c[f+12>>2]=n;if(!(c[9258]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=ik(vb(145,h|0)|0)|0}else{ob(185,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=ik(vb(145,g|0)|0)|0;gb(0)}if((f|0)>=1){j=c[j>>2]|0;if(f>>>0>j>>>0){h=c[k>>2]|0;g=b+4|0;c[g>>2]=h;c[b+8>>2]=h+(f-j);if(!(c[l>>2]|0))f=e;else{c[g>>2]=h+1;a[d+(e+-1)>>0]=a[h>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=m;return f|0}function Ok(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((ik(ub(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[9258]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=ik(wb(146,n|0)|0)|0}else{ob(186,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=ik(wb(146,m|0)|0)|0;gb(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=8;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,(eb(54,f|0)|0)!=0):0)a[b+75>>0]=-1;f=Pk(b,d,e)|0;i=g;return f|0}function Rk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=jl(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;lw(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function Sk(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Gb[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function Tk(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Uk(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;if((c[a+8>>2]|0)==0?(Sk(a)|0)!=0:0)b=-1;else if((Gb[c[a+32>>2]&63](a,b,1)|0)==1)b=d[b>>0]|0;else b=-1;i=e;return b|0}function Vk(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=wl(a)|0;break}d=(Jk(a)|0)==0;b=wl(a)|0;if(!d)Kk(a)}else{if(!(c[9323]|0))b=0;else b=Vk(c[9323]|0)|0;Ea(37060);a=c[9264]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=Jk(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=wl(a)|0|b;if(d)Kk(a);a=c[a+56>>2]|0}while((a|0)!=0);fb(37060)}while(0);return b|0}function Wk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((c[d+76>>2]|0)>=0?(Jk(d)|0)!=0:0){if((a[d+75>>0]|0)!=(b|0)?(f=d+20|0,g=c[f>>2]|0,g>>>0<(c[d+16>>2]|0)>>>0):0){c[f>>2]=g+1;a[g>>0]=b;e=b&255}else e=Lk(d,b)|0;Kk(d)}else i=3;do if((i|0)==3){if((a[d+75>>0]|0)!=(b|0)?(h=d+20|0,e=c[h>>2]|0,e>>>0<(c[d+16>>2]|0)>>>0):0){c[h>>2]=e+1;a[e>>0]=b;e=b&255;break}e=Lk(d,b)|0}while(0);return e|0}function Xk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(Tk(e)|0)){g=c[f>>2]|0;h=4}else f=0;else h=4;a:do if((h|0)==4){i=e+20|0;h=c[i>>2]|0;if((g-h|0)>>>0>>0){f=Gb[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((Gb[c[e+36>>2]&63](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);lw(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function Yk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=$(d,b)|0;if((c[e+76>>2]|0)>-1){g=(Jk(e)|0)==0;a=Xk(a,f,e)|0;if(!g)Kk(e)}else a=Xk(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function Zk(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(Jk(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=Uk(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=Uk(a)|0;break}}while(0);return b|0}function _k(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=el(a,b,d,g)|0;i=f;return e|0}function $k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=fl(a,b,f)|0;i=e;return d|0}function al(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;do if((b|0)!=-1){if((c[d+76>>2]|0)>-1)g=Jk(d)|0;else g=0;if(!((c[d+8>>2]|0)==0?(Sk(d)|0)!=0:0))h=6;if((h|0)==6?(e=d+4|0,f=c[e>>2]|0,f>>>0>((c[d+44>>2]|0)+-8|0)>>>0):0){h=f+-1|0;c[e>>2]=h;a[h>>0]=b;c[d>>2]=c[d>>2]&-17;if(!g)break;Kk(d);break}if(g){Kk(d);b=-1}else b=-1}else b=-1;while(0);return b|0}function bl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j;f=Fl(240)|0;do if(f){c[e>>2]=c[d>>2];e=el(f,240,b,e)|0;if(e>>>0<240){b=Il(f,e+1|0)|0;c[a>>2]=(b|0)!=0?b:f;break}Gl(f);if((e|0)>=0?(h=e+1|0,g=Fl(h)|0,c[a>>2]=g,(g|0)!=0):0)e=el(g,h,b,d)|0;else e=-1}else e=-1;while(0);i=j;return e|0}function cl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=c[e>>2];if((xl(0,d,o,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)m=Jk(b)|0;else m=0;e=c[b>>2]|0;n=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=p;j=b+28|0;c[j>>2]=p;k=b+20|0;c[k>>2]=p;c[e>>2]=80;l=b+16|0;c[l>>2]=p+80;f=xl(b,d,o,q,r)|0;if(h){Gb[c[b+36>>2]&63](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[l>>2]=0;c[j>>2]=0;c[k>>2]=0}}else f=xl(b,d,o,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|n;if(m)Kk(b);e=(e&32|0)==0?f:-1}i=s;return e|0}function dl(e,f,j){e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=i;i=i+304|0;H=P+16|0;J=P+8|0;I=P+33|0;K=P;y=P+32|0;if((c[e+76>>2]|0)>-1)O=Jk(e)|0;else O=0;k=a[f>>0]|0;a:do if(k<<24>>24){L=e+4|0;M=e+100|0;G=e+108|0;z=e+8|0;A=I+10|0;B=I+33|0;C=J+4|0;E=I+46|0;F=I+94|0;m=k;k=0;n=f;s=0;l=0;f=0;b:while(1){c:do if(!(ak(m&255)|0)){m=(a[n>>0]|0)==37;d:do if(m){q=n+1|0;o=a[q>>0]|0;e:do switch(o<<24>>24){case 37:break d;case 42:{x=0;o=n+2|0;break}default:{o=(o&255)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[H>>2]=c[j>>2];while(1){x=(c[H>>2]|0)+(4-1)&~(4-1);m=c[x>>2]|0;c[H>>2]=x+4;if(o>>>0>1)o=o+-1|0;else break}x=m;o=n+3|0;break e}o=(c[j>>2]|0)+(4-1)&~(4-1);x=c[o>>2]|0;c[j>>2]=o+4;o=q}}while(0);m=a[o>>0]|0;n=m&255;if((n+-48|0)>>>0<10){m=0;while(1){q=(m*10|0)+-48+n|0;o=o+1|0;m=a[o>>0]|0;n=m&255;if((n+-48|0)>>>0>=10)break;else m=q}}else q=0;if(m<<24>>24==109){o=o+1|0;r=a[o>>0]|0;m=(x|0)!=0&1;l=0;f=0}else{r=m;m=0}n=o+1|0;switch(r&255|0){case 104:{w=(a[n>>0]|0)==104;n=w?o+2|0:n;o=w?-2:-1;break}case 108:{w=(a[n>>0]|0)==108;n=w?o+2|0:n;o=w?3:1;break}case 106:{o=3;break}case 116:case 122:{o=1;break}case 76:{o=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{n=o;o=0;break}default:{N=152;break b}}r=d[n>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:o;switch(r|0){case 99:{w=s;v=(q|0)<1?1:q;break}case 91:{w=s;v=q;break}case 110:{if(!x){o=s;break c}switch(t|0){case -2:{a[x>>0]=s;o=s;break c}case -1:{b[x>>1]=s;o=s;break c}case 0:{c[x>>2]=s;o=s;break c}case 1:{c[x>>2]=s;o=s;break c}case 3:{o=x;c[o>>2]=s;c[o+4>>2]=((s|0)<0)<<31>>31;o=s;break c}default:{o=s;break c}}}default:{gk(e,0);do{o=c[L>>2]|0;if(o>>>0<(c[M>>2]|0)>>>0){c[L>>2]=o+1;o=d[o>>0]|0}else o=hk(e)|0}while((ak(o)|0)!=0);o=c[L>>2]|0;if(c[M>>2]|0){o=o+-1|0;c[L>>2]=o}w=(c[G>>2]|0)+s+o-(c[z>>2]|0)|0;v=q}}gk(e,v);o=c[L>>2]|0;q=c[M>>2]|0;if(o>>>0>>0)c[L>>2]=o+1;else{if((hk(e)|0)<0){N=152;break b}q=c[M>>2]|0}if(q)c[L>>2]=(c[L>>2]|0)+-1;f:do switch(r|0){case 91:case 99:case 115:{u=(r|0)==99;g:do if((r&239|0)==99){iw(I|0,-1,257)|0;a[I>>0]=0;if((r|0)==115){a[B>>0]=0;a[A>>0]=0;a[A+1>>0]=0;a[A+2>>0]=0;a[A+3>>0]=0;a[A+4>>0]=0}}else{Q=n+1|0;s=(a[Q>>0]|0)==94;o=s&1;r=s?Q:n;n=s?n+2|0:Q;iw(I|0,s&1|0,257)|0;a[I>>0]=0;switch(a[n>>0]|0){case 45:{s=(o^1)&255;a[E>>0]=s;n=r+2|0;break}case 93:{s=(o^1)&255;a[F>>0]=s;n=r+2|0;break}default:s=(o^1)&255}while(1){o=a[n>>0]|0;h:do switch(o<<24>>24){case 0:{N=152;break b}case 93:break g;case 45:{r=n+1|0;o=a[r>>0]|0;switch(o<<24>>24){case 93:case 0:{o=45;break h}default:{}}n=a[n+-1>>0]|0;if((n&255)<(o&255)){n=n&255;do{n=n+1|0;a[I+n>>0]=s;o=a[r>>0]|0}while((n|0)<(o&255|0));n=r}else n=r;break}default:{}}while(0);a[I+((o&255)+1)>>0]=s;n=n+1|0}}while(0);r=u?v+1|0:31;s=(t|0)==1;t=(m|0)!=0;i:do if(s){if(t){f=Fl(r<<2)|0;if(!f){l=0;N=152;break b}}else f=x;c[J>>2]=0;c[C>>2]=0;l=0;j:while(1){q=(f|0)==0;do{k:while(1){o=c[L>>2]|0;if(o>>>0<(c[M>>2]|0)>>>0){c[L>>2]=o+1;o=d[o>>0]|0}else o=hk(e)|0;if(!(a[I+(o+1)>>0]|0))break j;a[y>>0]=o;switch(Ak(K,y,1,J)|0){case -1:{l=0;N=152;break b}case -2:break;default:break k}}if(!q){c[f+(l<<2)>>2]=c[K>>2];l=l+1|0}}while(!(t&(l|0)==(r|0)));l=r<<1|1;o=Il(f,l<<2)|0;if(!o){l=0;N=152;break b}Q=r;r=l;f=o;l=Q}if(!(Bk(J)|0)){l=0;N=152;break b}else{q=l;l=0}}else{if(t){l=Fl(r)|0;if(!l){l=0;f=0;N=152;break b}else o=0;while(1){do{f=c[L>>2]|0;if(f>>>0<(c[M>>2]|0)>>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=hk(e)|0;if(!(a[I+(f+1)>>0]|0)){q=o;f=0;break i}a[l+o>>0]=f;o=o+1|0}while((o|0)!=(r|0));f=r<<1|1;o=Il(l,f)|0;if(!o){f=0;N=152;break b}else{Q=r;r=f;l=o;o=Q}}}if(!x){l=q;while(1){f=c[L>>2]|0;if(f>>>0>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=hk(e)|0;if(!(a[I+(f+1)>>0]|0)){q=0;l=0;f=0;break i}l=c[M>>2]|0}}else{l=0;while(1){f=c[L>>2]|0;if(f>>>0>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=hk(e)|0;if(!(a[I+(f+1)>>0]|0)){q=l;l=x;f=0;break i}a[x+l>>0]=f;q=c[M>>2]|0;l=l+1|0}}}while(0);o=c[L>>2]|0;if(c[M>>2]|0){o=o+-1|0;c[L>>2]=o}o=o-(c[z>>2]|0)+(c[G>>2]|0)|0;if(!o)break b;if(!((o|0)==(v|0)|u^1))break b;do if(t)if(s){c[x>>2]=f;break}else{c[x>>2]=l;break}while(0);if(!u){if(f)c[f+(q<<2)>>2]=0;if(!l){l=0;break f}a[l+q>>0]=0}break}case 120:case 88:case 112:{o=16;N=134;break}case 111:{o=8;N=134;break}case 117:case 100:{o=10;N=134;break}case 105:{o=0;N=134;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{p=+ek(e,t,0);if((c[G>>2]|0)==((c[z>>2]|0)-(c[L>>2]|0)|0))break b;if(x)switch(t|0){case 0:{g[x>>2]=p;break f}case 1:{h[x>>3]=p;break f}case 2:{h[x>>3]=p;break f}default:break f}break}default:{}}while(0);l:do if((N|0)==134){N=0;o=fk(e,o,0,-1,-1)|0;if((c[G>>2]|0)==((c[z>>2]|0)-(c[L>>2]|0)|0))break b;if((x|0)!=0&(r|0)==112){c[x>>2]=o;break}if(x)switch(t|0){case -2:{a[x>>0]=o;break l}case -1:{b[x>>1]=o;break l}case 0:{c[x>>2]=o;break l}case 1:{c[x>>2]=o;break l}case 3:{Q=x;c[Q>>2]=o;c[Q+4>>2]=D;break l}default:break l}}while(0);k=((x|0)!=0&1)+k|0;o=(c[G>>2]|0)+w+(c[L>>2]|0)-(c[z>>2]|0)|0;break c}while(0);n=n+(m&1)|0;gk(e,0);m=c[L>>2]|0;if(m>>>0<(c[M>>2]|0)>>>0){c[L>>2]=m+1;m=d[m>>0]|0}else m=hk(e)|0;if((m|0)!=(d[n>>0]|0)){N=21;break b}o=s+1|0}else{while(1){m=n+1|0;if(!(ak(d[m>>0]|0)|0))break;else n=m}gk(e,0);do{m=c[L>>2]|0;if(m>>>0<(c[M>>2]|0)>>>0){c[L>>2]=m+1;m=d[m>>0]|0}else m=hk(e)|0}while((ak(m)|0)!=0);m=c[L>>2]|0;if(c[M>>2]|0){m=m+-1|0;c[L>>2]=m}o=(c[G>>2]|0)+s+m-(c[z>>2]|0)|0}while(0);n=n+1|0;m=a[n>>0]|0;if(!(m<<24>>24))break a;else s=o}if((N|0)==21){if(c[M>>2]|0)c[L>>2]=(c[L>>2]|0)+-1;if((k|0)!=0|(m|0)>-1)break;else{k=0;N=153}}else if((N|0)==152)if(!k){k=m;N=153}if((N|0)==153){m=k;k=-1}if(m){Gl(l);Gl(f)}}else k=0;while(0);if(O)Kk(e);i=P;return k|0}function el(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;g=n+112|0;m=n;h=m;j=37352;k=h+112|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;l=4}else{c[(ck()|0)>>2]=75;d=-1}else{g=b;l=4}if((l|0)==4){l=-2-g|0;l=d>>>0>l>>>0?l:d;c[m+48>>2]=l;b=m+20|0;c[b>>2]=g;c[m+44>>2]=g;d=g+l|0;g=m+16|0;c[g>>2]=d;c[m+28>>2]=d;d=cl(m,e,f)|0;if(l){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=n;return d|0}function fl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+112|0;e=g;f=e;h=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=29;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=dl(e,b,d)|0;i=g;return h|0}function gl(a,b,c){a=a|0;b=b|0;c=c|0;return +(+zl(a,b,2))}function hl(a,b,c){a=a|0;b=b|0;c=c|0;a=Al(a,b,c,-1,-1)|0;return a|0}function il(a,b,c){a=a|0;b=b|0;c=c|0;a=Al(a,b,c,0,-2147483648)|0;return a|0}function jl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=$(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return ((e|0)!=0?b:0)|0}function kl(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function ll(b,c){b=b|0;c=c|0;var d=0,e=0;e=a[b>>0]|0;d=a[c>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=d<<24>>24)c=e;else{do{b=b+1|0;c=c+1|0;e=a[b>>0]|0;d=a[c>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=d<<24>>24));c=e}return (c&255)-(d&255)|0}function ml(a,b){a=a|0;b=b|0;kl(a,b)|0;return a|0}function nl(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function ol(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)c=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);c=(f&255)-(d[c>>0]|0)|0}return c|0}function pl(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function ql(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d){e=a;while(1){d=d+-1|0;c[e>>2]=c[b>>2];if(!d)break;else{b=b+4|0;e=e+4|0}}}return a|0}function rl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(d|0)==0;if(a-b>>2>>>0>>0){if(!e)do{d=d+-1|0;c[a+(d<<2)>>2]=c[b+(d<<2)>>2]}while((d|0)!=0)}else if(!e){e=b;b=a;while(1){d=d+-1|0;c[b>>2]=c[e>>2];if(!d)break;else{e=e+4|0;b=b+4|0}}}return a|0}function sl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d){e=a;while(1){d=d+-1|0;c[e>>2]=b;if(!d)break;else e=e+4|0}}return a|0}function tl(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;e=c[i>>2]|0;j=a+100|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[j>>2]|0)!=0:0){c[i>>2]=(c[i>>2]|0)+-1;h=f}else h=f;break}default:h=0}if((e+-48|0)>>>0>9)if(!(c[j>>2]|0)){f=-2147483648;e=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=-2147483648;e=0}else{f=0;do{f=e+-48+(f*10|0)|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0}while((e+-48|0)>>>0<10&(f|0)<214748364);b=((f|0)<0)<<31>>31;if((e+-48|0)>>>0<10){do{b=tw(f|0,b|0,10,0)|0;f=D;e=jw(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=jw(e|0,D|0,b|0,f|0)|0;b=D;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));g=f}else g=f;if((e+-48|0)>>>0<10)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0}while((e+-48|0)>>>0<10);if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;a=(h|0)!=0;e=hw(0,0,g|0,b|0)|0;f=a?D:b;e=a?e:g}D=f;return e|0}function ul(a){a=a|0;if(!(c[a+68>>2]|0))Kk(a);return}function vl(a){a=a|0;if(!(c[a+68>>2]|0))Kk(a);return}function wl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(Gb[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)Gb[c[a+40>>2]&63](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0} + +// EMSCRIPTEN_END_FUNCS + var yb=[Uw,Qq,Uq,Or,Sr,Xr,Zr,xu,Iu,Uw,Uw,Uw,Uw,Uw,Uw,Uw];var zb=[Vw,ii,Yh,Mh,Ah,oh,ch,Sg,Bg,Mj,Lj,Ij,Vw,Vw,Vw,Vw];var Ab=[Ww,bs,hs,Ww];var Bb=[Xw,ei,fi,Uh,Vh,Ih,Jh,wh,xh,kh,lh,_g,$g,Og,Pg,xg,yg,kg,lg,_f,$f,Of,Pf,Cf,Df,qf,rf,ye,ze,le,me,tc,uc,Pd,Td,Qd,bo,eo,co,fo,kd,ld,Qi,md,dd,ed,Ic,Jc,Qc,Rc,Xc,Yc,nd,od,ud,vd,Bd,Cd,Id,Jd,je,ke,He,Ie,Oe,Pe,Ve,We,af,bf,Mg,Ng,Dm,qi,Ai,Bi,Ri,Si,fj,gj,mj,nj,rj,sj,uj,xj,vj,wj,yj,zj,Cn,Tl,Zl,nn,cm,im,Bm,Cm,on,Dn,Rn,Tn,Sn,Un,Xn,Zn,Yn,_n,ko,mo,lo,no,uo,vo,en,wo,xo,yo,Ao,Ks,Eo,Fo,Jo,Ko,Yo,Zo,qp,rp,Fp,Gp,Sp,Tp,pq,qq,Nq,Pq,Sq,Tq,Wq,Xq,fr,gr,qr,rr,Br,Cr,Mr,Nr,Vr,Wr,$r,as,fs,gs,ls,ms,qs,rs,ys,zs,at,bt,wu,tt,Vt,Wt,Xt,Yt,zo,Js,Ms,kt,Bt,Jt,Rt,St,Ti,Ii,$i,sc,pn,Wn,_d,Eg,Wj,ul,vl,Ml,mk,Pr,Rr,Ls,Gv,Nv,Ov,Pv,Qv,Rv,Sv,Im,Wm,Gl,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw];var Cb=[Yw,hi,Xh,Lh,zh,nh,bh,Rg,Ag,mg,ag,Qf,Ef,sf,Ae,ne,vc,qn,Ci,Fi,Ul,Yl,dm,hm,Fn,_q,$q,ar,br,dr,er,jr,kr,lr,mr,or,pr,ur,vr,wr,xr,zr,Ar,Fr,Gr,Hr,Ir,Kr,Lr,ps,us,bu,du,fu,cu,eu,gu,kc,Ui,Gi,Hi,Ji,kn,Cc,Ec,go,dn,Qm,Zd,re,jf,wf,If,Uf,eg,qg,Dg,Ug,eh,qh,Ch,Oh,_h,ki,yi,Zi,sm,qm,hn,oo,rm,Om,_m,Zm,av,bv,cv,dv,ev,fv,st,gv,hv,iv,jv,kv,lv,mv,nv,ov,pv,qv,rv,sv,tv,uv,vv,wv,xv,yv,zv,Av,Bv,Cv,Ev,Yv,Yw,Yw];var Db=[Zw,Lo,Mo,No,Oo,Po,Qo,Ro,So,To,Uo,Vo,_o,$o,ap,bp,cp,dp,ep,fp,gp,hp,ip,xp,zp,Kp,Mp,Vp,Wp,Xp,Zp,$p,sq,tq,uq,wq,yq,es,ks,cd,Uu,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw];var Eb=[_w,un,vn,hd,yn,ri,hj,oj,tj,Mk,Vl,Kn,Mn,Nn,Jn,_l,$l,em,xn,jm,km,qo,Up,iu,ku,mu,su,uu,ou,qu,rq,ju,lu,nu,tu,vu,pu,ru,Yq,Zq,cr,hr,ir,nr,sr,tr,yr,Dr,Er,Jr,xt,yt,At,Zt,$t,_t,au,ot,pt,rt,Ft,Gt,It,Nt,Ot,Qt,ui,bj,jn,Li,Vn,$n,$w,ax,bx,qk,pl,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w];var Fb=[cx,Qr,Yr,cx];var Gb=[dx,rn,wn,An,um,vm,Aj,Bl,Pk,Ok,Nk,Qk,Gn,Ln,Wl,Pn,fm,Do,Io,ns,ss,dt,ft,it,Ns,Us,Xs,_s,Dc,yl,Rm,pk,Zu,$u,Fk,Ek,zk,bl,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx];var Hb=[ex,ds,js,ex];var Ib=[fx,fd,Pj,Oj,Nj,Hn,sn,os,ts,fx,fx,fx,fx,fx,fx,fx];var Jb=[gx,wp,Cp,Jp,Op,gx,gx,gx];var Kb=[hx,Tr,_r,cs,is,hx,hx,hx];var Lb=[ix,gi,Wh,Kh,yh,mh,ah,Qg,zg,og,cg,Sf,Gf,uf,Ce,pe,xc,id,jd,On,Xl,am,Qn,zn,gm,lm,Bn,ct,et,gt,Ss,Vs,Ys,Vi,oc,qc,io,Is,jo,ok,nk,Km,Xm,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix];var Mb=[jx,Bo,Go,sp,tp,yp,Ep,Hp,Ip,Lp,Qp,jt,wt,zt,$s,nt,qt,Et,Ht,Mt,Pt,Gk,Ck,jx,jx,jx,jx,jx,jx,jx,jx,jx];var Nb=[kx,$v,_v,Zv];var Ob=[lx,lc,aj,Xo,Bs,Cs,Ds,Zj,$j,_j,lx,lx,lx,lx,lx,lx];var Pb=[mx,ng,bg,Rf,Ff,tf,Be,oe,wc,ht,Ps,Qs,Rs,Zs,ti,zi,Hu,Tu,Dk,kk,Ak,fw,ew,dw,cw,bw,aw,mx,mx,mx,mx,mx];var Qb=[nx,tm,si,ro,Wi,Gm,ox,Am,Mm,Ki,xm,to,Xu,Yu,_u,Um];var Rb=[px,qx,Tj,rx,Uj,sx,Sj,px];var Sb=[tx,bq,Aq,ut,vt,lt,mt,Ct,Dt,Kt,Lt,tx,tx,tx,tx,tx];var Tb=[ux,Ap,Dp,Np,Pp,ux,ux,ux];var Ub=[vx,Ud,Vd,Rd,Sd,gd,Kc,Lc,Sc,Tc,Zc,_c,pd,qd,wd,xd,Dd,Ed,Kd,Ld,Je,Ke,Qe,Re,Xe,Ye,cf,df,Cj,Dj,Fj,In,tn,Co,Ho,dc,zm,yc,zc,Ac,Bc,Fc,Gc,Hc,De,Ee,Fe,Ge,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx];return{_jpegls_encode:Yi,___cxa_can_catch:Qj,_free:Gl,_jpegls_decode:Xi,___cxa_is_pointer_type:Rj,_i64Add:jw,_memmove:nw,_i64Subtract:hw,_memset:iw,_malloc:Fl,_memcpy:lw,_bitshift64Lshr:kw,_bitshift64Shl:mw,__GLOBAL__I_000101:Nl,__GLOBAL__sub_I_jpegls_cpp:rc,__GLOBAL__sub_I_iostream_cpp:Ol,runPostSets:gw,stackAlloc:Vb,stackSave:Wb,stackRestore:Xb,establishStackSpace:Yb,setThrew:Zb,setTempRet0:ac,getTempRet0:bc,dynCall_iiiiiiii:xw,dynCall_viiiii:yw,dynCall_iiiiiid:zw,dynCall_vi:Aw,dynCall_vii:Bw,dynCall_iiiiiii:Cw,dynCall_ii:Dw,dynCall_iiiiiiiiiiii:Ew,dynCall_iiii:Fw,dynCall_viiiiiiiiiiiiiii:Gw,dynCall_viiiiii:Hw,dynCall_viiiiiii:Iw,dynCall_viiiiiiiiii:Jw,dynCall_iii:Kw,dynCall_iiiiii:Lw,dynCall_diii:Mw,dynCall_i:Nw,dynCall_iiiii:Ow,dynCall_viii:Pw,dynCall_v:Qw,dynCall_iiiiiiiii:Rw,dynCall_iiiiid:Sw,dynCall_viiii:Tw}}) + + + // EMSCRIPTEN_END_ASM + (Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _jpegls_encode=Module["_jpegls_encode"]=asm["_jpegls_encode"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _free=Module["_free"]=asm["_free"];var _jpegls_decode=Module["_jpegls_decode"]=asm["_jpegls_decode"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _memmove=Module["_memmove"]=asm["_memmove"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _memset=Module["_memset"]=asm["_memset"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var __GLOBAL__sub_I_iostream_cpp=Module["__GLOBAL__sub_I_iostream_cpp"]=asm["__GLOBAL__sub_I_iostream_cpp"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var __GLOBAL__sub_I_jpegls_cpp=Module["__GLOBAL__sub_I_jpegls_cpp"]=asm["__GLOBAL__sub_I_jpegls_cpp"];var __GLOBAL__I_000101=Module["__GLOBAL__I_000101"]=asm["__GLOBAL__I_000101"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_iiiiiid=Module["dynCall_iiiiiid"]=asm["dynCall_iiiiiid"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiiiiiiiiiii=Module["dynCall_iiiiiiiiiiii"]=asm["dynCall_iiiiiiiiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiiiiiiiiiiiii=Module["dynCall_viiiiiiiiiiiiiii"]=asm["dynCall_viiiiiiiiiiiiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_iiiiid=Module["dynCall_iiiiid"]=asm["dynCall_iiiiid"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run() + + + + + + return Module; +}; + + +/*** EXPORTS FROM exports-loader ***/ +module.exports = CharLS; + +/***/ }), + +/***/ "../codecs/jpeg.js": +/*!*************************!*\ + !*** ../codecs/jpeg.js ***! + \*************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +// jshint ignore: start + +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / + /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* + Copyright 2011 notmasteryet + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +// - The JPEG specification can be found in the ITU CCITT Recommendation T.81 +// (www.w3.org/Graphics/JPEG/itu-t81.pdf) +// - The JFIF specification can be found in the JPEG File Interchange Format +// (www.w3.org/Graphics/JPEG/jfif3.pdf) +// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters +// in PostScript Level 2, Technical Note #5116 +// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf) + +var ColorSpace = {Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4}; +var JpegImage = (function jpegImage() { + "use strict"; + var dctZigZag = new Int32Array([ + 0, + 1, 8, + 16, 9, 2, + 3, 10, 17, 24, + 32, 25, 18, 11, 4, + 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, + 7, 14, 21, 28, 35, 42, 49, 56, + 57, 50, 43, 36, 29, 22, 15, + 23, 30, 37, 44, 51, 58, + 59, 52, 45, 38, 31, + 39, 46, 53, 60, + 61, 54, 47, + 55, 62, + 63 + ]); + + var dctCos1 = 4017; // cos(pi/16) + var dctSin1 = 799; // sin(pi/16) + var dctCos3 = 3406; // cos(3*pi/16) + var dctSin3 = 2276; // sin(3*pi/16) + var dctCos6 = 1567; // cos(6*pi/16) + var dctSin6 = 3784; // sin(6*pi/16) + var dctSqrt2 = 5793; // sqrt(2) + var dctSqrt1d2 = 2896; // sqrt(2) / 2 + + function constructor() { + } + + function buildHuffmanTable(codeLengths, values) { + var k = 0, code = [], i, j, length = 16; + while (length > 0 && !codeLengths[length - 1]) + length--; + code.push({children: [], index: 0}); + var p = code[0], q; + for (i = 0; i < length; i++) { + for (j = 0; j < codeLengths[i]; j++) { + p = code.pop(); + p.children[p.index] = values[k]; + while (p.index > 0) { + p = code.pop(); + } + p.index++; + code.push(p); + while (code.length <= i) { + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + k++; + } + if (i + 1 < length) { + // p here points to last code + code.push(q = {children: [], index: 0}); + p.children[p.index] = q.children; + p = q; + } + } + return code[0].children; + } + + function getBlockBufferOffset(component, row, col) { + return 64 * ((component.blocksPerLine + 1) * row + col); + } + + function decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successivePrev, successive) { + var precision = frame.precision; + var samplesPerLine = frame.samplesPerLine; + var scanLines = frame.scanLines; + var mcusPerLine = frame.mcusPerLine; + var progressive = frame.progressive; + var maxH = frame.maxH, maxV = frame.maxV; + + var startOffset = offset, bitsData = 0, bitsCount = 0; + + function readBit() { + if (bitsCount > 0) { + bitsCount--; + return (bitsData >> bitsCount) & 1; + } + bitsData = data[offset++]; + if (bitsData == 0xFF) { + var nextByte = data[offset++]; + if (nextByte) { + throw "unexpected marker: " + ((bitsData << 8) | nextByte).toString(16); + } + // unstuff 0 + } + bitsCount = 7; + return bitsData >>> 7; + } + + function decodeHuffman(tree) { + var node = tree; + var bit; + while ((bit = readBit()) !== null) { + node = node[bit]; + if (typeof node === 'number') + return node; + if (typeof node !== 'object') + throw "invalid huffman sequence"; + } + return null; + } + + function receive(length) { + var n = 0; + while (length > 0) { + var bit = readBit(); + if (bit === null) + return; + n = (n << 1) | bit; + length--; + } + return n; + } + + function receiveAndExtend(length) { + var n = receive(length); + if (n >= 1 << (length - 1)) + return n; + return n + (-1 << length) + 1; + } + + function decodeBaseline(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : receiveAndExtend(t); + component.blockData[offset] = (component.pred += diff); + var k = 1; + while (k < 64) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) + break; + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s); + k++; + } + } + + function decodeDCFirst(component, offset) { + var t = decodeHuffman(component.huffmanTableDC); + var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive); + component.blockData[offset] = (component.pred += diff); + } + + function decodeDCSuccessive(component, offset) { + component.blockData[offset] |= readBit() << successive; + } + + var eobrun = 0; + function decodeACFirst(component, offset) { + if (eobrun > 0) { + eobrun--; + return; + } + var k = spectralStart, e = spectralEnd; + while (k <= e) { + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15, r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r) - 1; + break; + } + k += 16; + continue; + } + k += r; + var z = dctZigZag[k]; + component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive); + k++; + } + } + + var successiveACState = 0, successiveACNextValue; + function decodeACSuccessive(component, offset) { + var k = spectralStart, e = spectralEnd, r = 0; + while (k <= e) { + var z = dctZigZag[k]; + switch (successiveACState) { + case 0: // initial state + var rs = decodeHuffman(component.huffmanTableAC); + var s = rs & 15; + r = rs >> 4; + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r); + successiveACState = 4; + } else { + r = 16; + successiveACState = 1; + } + } else { + if (s !== 1) + throw "invalid ACn encoding"; + successiveACNextValue = receiveAndExtend(s); + successiveACState = r ? 2 : 3; + } + continue; + case 1: // skipping r zero items + case 2: + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } else { + r--; + if (r === 0) + successiveACState = successiveACState == 2 ? 3 : 0; + } + break; + case 3: // set value for a zero item + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } else { + component.blockData[offset + z] = successiveACNextValue << successive; + successiveACState = 0; + } + break; + case 4: // eob + if (component.blockData[offset + z]) { + component.blockData[offset + z] += (readBit() << successive); + } + break; + } + k++; + } + if (successiveACState === 4) { + eobrun--; + if (eobrun === 0) + successiveACState = 0; + } + } + + function decodeMcu(component, decode, mcu, row, col) { + var mcuRow = (mcu / mcusPerLine) | 0; + var mcuCol = mcu % mcusPerLine; + var blockRow = mcuRow * component.v + row; + var blockCol = mcuCol * component.h + col; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + + function decodeBlock(component, decode, mcu) { + var blockRow = (mcu / component.blocksPerLine) | 0; + var blockCol = mcu % component.blocksPerLine; + var offset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, offset); + } + + var componentsLength = components.length; + var component, i, j, k, n; + var decodeFn; + if (progressive) { + if (spectralStart === 0) + decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; + else + decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; + } else { + decodeFn = decodeBaseline; + } + + var mcu = 0, marker; + var mcuExpected; + if (componentsLength == 1) { + mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; + } else { + mcuExpected = mcusPerLine * frame.mcusPerColumn; + } + if (!resetInterval) { + resetInterval = mcuExpected; + } + + var h, v; + while (mcu < mcuExpected) { + // reset interval stuff + for (i = 0; i < componentsLength; i++) { + components[i].pred = 0; + } + eobrun = 0; + + if (componentsLength == 1) { + component = components[0]; + for (n = 0; n < resetInterval; n++) { + decodeBlock(component, decodeFn, mcu); + mcu++; + } + } else { + for (n = 0; n < resetInterval; n++) { + for (i = 0; i < componentsLength; i++) { + component = components[i]; + h = component.h; + v = component.v; + for (j = 0; j < v; j++) { + for (k = 0; k < h; k++) { + decodeMcu(component, decodeFn, mcu, j, k); + } + } + } + mcu++; + } + } + + // find marker + bitsCount = 0; + marker = (data[offset] << 8) | data[offset + 1]; + if (marker <= 0xFF00) { + throw "marker was not found"; + } + + if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx + offset += 2; + } else { + break; + } + } + + return offset - startOffset; + } + + // A port of poppler's IDCT method which in turn is taken from: + // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, + // "Practical Fast 1-D DCT Algorithms with 11 Multiplications", + // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, + // 988-991. + function quantizeAndInverse(component, blockBufferOffset, p) { + var qt = component.quantizationTable; + var v0, v1, v2, v3, v4, v5, v6, v7, t; + var i; + + // dequant + for (i = 0; i < 64; i++) { + p[i] = component.blockData[blockBufferOffset + i] * qt[i]; + } + + // inverse DCT on rows + for (i = 0; i < 8; ++i) { + var row = 8 * i; + + // check for all-zero AC coefficients + if (p[1 + row] === 0 && p[2 + row] === 0 && p[3 + row] === 0 && + p[4 + row] === 0 && p[5 + row] === 0 && p[6 + row] === 0 && + p[7 + row] === 0) { + t = (dctSqrt2 * p[0 + row] + 512) >> 10; + p[0 + row] = t; + p[1 + row] = t; + p[2 + row] = t; + p[3 + row] = t; + p[4 + row] = t; + p[5 + row] = t; + p[6 + row] = t; + p[7 + row] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0 + row] + 128) >> 8; + v1 = (dctSqrt2 * p[4 + row] + 128) >> 8; + v2 = p[2 + row]; + v3 = p[6 + row]; + v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8; + v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8; + v5 = p[3 + row] << 4; + v6 = p[5 + row] << 4; + + // stage 3 + t = (v0 - v1 + 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0 + row] = v0 + v7; + p[7 + row] = v0 - v7; + p[1 + row] = v1 + v6; + p[6 + row] = v1 - v6; + p[2 + row] = v2 + v5; + p[5 + row] = v2 - v5; + p[3 + row] = v3 + v4; + p[4 + row] = v3 - v4; + } + + // inverse DCT on columns + for (i = 0; i < 8; ++i) { + var col = i; + + // check for all-zero AC coefficients + if (p[1 * 8 + col] === 0 && p[2 * 8 + col] === 0 && p[3 * 8 + col] === 0 && + p[4 * 8 + col] === 0 && p[5 * 8 + col] === 0 && p[6 * 8 + col] === 0 && + p[7 * 8 + col] === 0) { + t = (dctSqrt2 * p[i + 0] + 8192) >> 14; + p[0 * 8 + col] = t; + p[1 * 8 + col] = t; + p[2 * 8 + col] = t; + p[3 * 8 + col] = t; + p[4 * 8 + col] = t; + p[5 * 8 + col] = t; + p[6 * 8 + col] = t; + p[7 * 8 + col] = t; + continue; + } + + // stage 4 + v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12; + v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12; + v2 = p[2 * 8 + col]; + v3 = p[6 * 8 + col]; + v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12; + v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12; + v5 = p[3 * 8 + col]; + v6 = p[5 * 8 + col]; + + // stage 3 + t = (v0 - v1 + 1) >> 1; + v0 = (v0 + v1 + 1) >> 1; + v1 = t; + t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12; + v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12; + v3 = t; + t = (v4 - v6 + 1) >> 1; + v4 = (v4 + v6 + 1) >> 1; + v6 = t; + t = (v7 + v5 + 1) >> 1; + v5 = (v7 - v5 + 1) >> 1; + v7 = t; + + // stage 2 + t = (v0 - v3 + 1) >> 1; + v0 = (v0 + v3 + 1) >> 1; + v3 = t; + t = (v1 - v2 + 1) >> 1; + v1 = (v1 + v2 + 1) >> 1; + v2 = t; + t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12; + v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12; + v7 = t; + t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12; + v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12; + v6 = t; + + // stage 1 + p[0 * 8 + col] = v0 + v7; + p[7 * 8 + col] = v0 - v7; + p[1 * 8 + col] = v1 + v6; + p[6 * 8 + col] = v1 - v6; + p[2 * 8 + col] = v2 + v5; + p[5 * 8 + col] = v2 - v5; + p[3 * 8 + col] = v3 + v4; + p[4 * 8 + col] = v3 - v4; + } + + // convert to 8-bit integers + for (i = 0; i < 64; ++i) { + var index = blockBufferOffset + i; + var q = p[i]; + q = (q <= -2056 / component.bitConversion) ? 0 : + (q >= 2024 / component.bitConversion) ? 255 / component.bitConversion : + (q + 2056 / component.bitConversion) >> 4; + component.blockData[index] = q; + } + } + + function buildComponentData(frame, component) { + var lines = []; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + var computationBuffer = new Int32Array(64); + + var i, j, ll = 0; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var offset = getBlockBufferOffset(component, blockRow, blockCol); + quantizeAndInverse(component, offset, computationBuffer); + } + } + return component.blockData; + } + + function clampToUint8(a) { + return a <= 0 ? 0 : a >= 255 ? 255 : a | 0; + } + + constructor.prototype = { + load: function load(path) { + var handleData = (function (data) { + this.parse(data); + if (this.onload) + this.onload(); + }).bind(this); + + if (path.indexOf("data:") > -1) { + var offset = path.indexOf("base64,") + 7; + var data = atob(path.substring(offset)); + var arr = new Uint8Array(data.length); + for (var i = data.length - 1; i >= 0; i--) { + arr[i] = data.charCodeAt(i); + } + handleData(data); + } else { + var xhr = new XMLHttpRequest(); + xhr.open("GET", path, true); + xhr.responseType = "arraybuffer"; + xhr.onload = (function () { + // TODO catch parse error + var data = new Uint8Array(xhr.response); + handleData(data); + }).bind(this); + xhr.send(null); + } + }, + parse: function parse(data) { + + function readUint16() { + var value = (data[offset] << 8) | data[offset + 1]; + offset += 2; + return value; + } + + function readDataBlock() { + var length = readUint16(); + var array = data.subarray(offset, offset + length - 2); + offset += array.length; + return array; + } + + function prepareComponents(frame) { + var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); + var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); + for (var i = 0; i < frame.components.length; i++) { + component = frame.components[i]; + var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); + var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); + var blocksPerLineForMcu = mcusPerLine * component.h; + var blocksPerColumnForMcu = mcusPerColumn * component.v; + + var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); + component.blockData = new Int16Array(blocksBufferSize); + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + } + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + + var offset = 0, length = data.length; + var jfif = null; + var adobe = null; + var pixels = null; + var frame, resetInterval; + var quantizationTables = []; + var huffmanTablesAC = [], huffmanTablesDC = []; + var fileMarker = readUint16(); + if (fileMarker != 0xFFD8) { // SOI (Start of Image) + throw "SOI not found"; + } + + fileMarker = readUint16(); + while (fileMarker != 0xFFD9) { // EOI (End of image) + var i, j, l; + switch (fileMarker) { + case 0xFFE0: // APP0 (Application Specific) + case 0xFFE1: // APP1 + case 0xFFE2: // APP2 + case 0xFFE3: // APP3 + case 0xFFE4: // APP4 + case 0xFFE5: // APP5 + case 0xFFE6: // APP6 + case 0xFFE7: // APP7 + case 0xFFE8: // APP8 + case 0xFFE9: // APP9 + case 0xFFEA: // APP10 + case 0xFFEB: // APP11 + case 0xFFEC: // APP12 + case 0xFFED: // APP13 + case 0xFFEE: // APP14 + case 0xFFEF: // APP15 + case 0xFFFE: // COM (Comment) + var appData = readDataBlock(); + + if (fileMarker === 0xFFE0) { + if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && + appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\x00' + jfif = { + version: {major: appData[5], minor: appData[6]}, + densityUnits: appData[7], + xDensity: (appData[8] << 8) | appData[9], + yDensity: (appData[10] << 8) | appData[11], + thumbWidth: appData[12], + thumbHeight: appData[13], + thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) + }; + } + } + // TODO APP1 - Exif + if (fileMarker === 0xFFEE) { + if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && + appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\x00' + adobe = { + version: appData[6], + flags0: (appData[7] << 8) | appData[8], + flags1: (appData[9] << 8) | appData[10], + transformCode: appData[11] + }; + } + } + break; + + case 0xFFDB: // DQT (Define Quantization Tables) + var quantizationTablesLength = readUint16(); + var quantizationTablesEnd = quantizationTablesLength + offset - 2; + while (offset < quantizationTablesEnd) { + var quantizationTableSpec = data[offset++]; + var tableData = new Int32Array(64); + if ((quantizationTableSpec >> 4) === 0) { // 8 bit values + for (j = 0; j < 64; j++) { + var z = dctZigZag[j]; + tableData[z] = data[offset++]; + } + } else if ((quantizationTableSpec >> 4) === 1) { //16 bit + for (j = 0; j < 64; j++) { + var zz = dctZigZag[j]; + tableData[zz] = readUint16(); + } + } else + throw "DQT: invalid table spec"; + quantizationTables[quantizationTableSpec & 15] = tableData; + } + break; + + case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT) + case 0xFFC1: // SOF1 (Start of Frame, Extended DCT) + case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT) + if (frame) { + throw "Only single frame JPEGs supported"; + } + readUint16(); // skip data length + frame = {}; + frame.extended = (fileMarker === 0xFFC1); + frame.progressive = (fileMarker === 0xFFC2); + frame.precision = data[offset++]; + frame.scanLines = readUint16(); + frame.samplesPerLine = readUint16(); + frame.components = []; + frame.componentIds = {}; + var componentsCount = data[offset++], componentId; + var maxH = 0, maxV = 0; + for (i = 0; i < componentsCount; i++) { + componentId = data[offset]; + var h = data[offset + 1] >> 4; + var v = data[offset + 1] & 15; + if (maxH < h) + maxH = h; + if (maxV < v) + maxV = v; + var qId = data[offset + 2]; + l = frame.components.push({ + h: h, + v: v, + quantizationTable: quantizationTables[qId], + quantizationTableId: qId, + bitConversion: 255 / ((1 << frame.precision) - 1) + }); + frame.componentIds[componentId] = l - 1; + offset += 3; + } + frame.maxH = maxH; + frame.maxV = maxV; + prepareComponents(frame); + break; + + case 0xFFC4: // DHT (Define Huffman Tables) + var huffmanLength = readUint16(); + for (i = 2; i < huffmanLength; ) { + var huffmanTableSpec = data[offset++]; + var codeLengths = new Uint8Array(16); + var codeLengthSum = 0; + for (j = 0; j < 16; j++, offset++) + codeLengthSum += (codeLengths[j] = data[offset]); + var huffmanValues = new Uint8Array(codeLengthSum); + for (j = 0; j < codeLengthSum; j++, offset++) + huffmanValues[j] = data[offset]; + i += 17 + codeLengthSum; + + ((huffmanTableSpec >> 4) === 0 ? + huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = + buildHuffmanTable(codeLengths, huffmanValues); + } + break; + + case 0xFFDD: // DRI (Define Restart Interval) + readUint16(); // skip data length + resetInterval = readUint16(); + break; + + case 0xFFDA: // SOS (Start of Scan) + var scanLength = readUint16(); + var selectorsCount = data[offset++]; + var components = [], component; + for (i = 0; i < selectorsCount; i++) { + var componentIndex = frame.componentIds[data[offset++]]; + component = frame.components[componentIndex]; + var tableSpec = data[offset++]; + component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; + component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; + components.push(component); + } + var spectralStart = data[offset++]; + var spectralEnd = data[offset++]; + var successiveApproximation = data[offset++]; + var processed = decodeScan(data, offset, + frame, components, resetInterval, + spectralStart, spectralEnd, + successiveApproximation >> 4, successiveApproximation & 15); + offset += processed; + break; + case 0xFFFF: // Fill bytes + if (data[offset] !== 0xFF) { // Avoid skipping a valid marker. + offset--; + } + break; + default: + if (data[offset - 3] == 0xFF && + data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { + // could be incorrect encoding -- last 0xFF byte of the previous + // block was eaten by the encoder + offset -= 3; + break; + } + throw "unknown JPEG marker " + fileMarker.toString(16); + } + fileMarker = readUint16(); + } + + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + switch (frame.components.length) + { + case 1: + this.colorspace = ColorSpace.Grayscale; + break; + case 3: + if (this.adobe) + this.colorspace = ColorSpace.AdobeRGB; + else + this.colorspace = ColorSpace.RGB; + break; + case 4: + this.colorspace = ColorSpace.CYMK; + break; + default: + this.colorspace = ColorSpace.Unknown; + } + for (var i = 0; i < frame.components.length; i++) { + var component = frame.components[i]; + if (!component.quantizationTable && component.quantizationTableId !== null) + component.quantizationTable = quantizationTables[component.quantizationTableId]; + this.components.push({ + output: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV, + blocksPerLine: component.blocksPerLine, + blocksPerColumn: component.blocksPerColumn, + bitConversion: component.bitConversion + }); + } + }, + getData16: function getData16(width, height) { + if (this.components.length !== 1) + throw 'Unsupported color mode'; + var scaleX = this.width / width, scaleY = this.height / height; + + var component, componentScaleX, componentScaleY; + var x, y, i; + var offset = 0; + var numComponents = this.components.length; + var dataLength = width * height * numComponents; + var data = new Uint16Array(dataLength); + var componentLine; + + // lineData is reused for all components. Assume first component is + // the biggest + var lineData = new Uint16Array((this.components[0].blocksPerLine << 3) * + this.components[0].blocksPerColumn * 8); + + // First construct image data ... + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + + var j, k, ll = 0; + var lineOffset = 0; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + var scanLine = blockRow << 3; + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol); + var offset = 0, sample = blockCol << 3; + for (j = 0; j < 8; j++) { + var lineOffset = (scanLine + j) * samplesPerLine; + for (k = 0; k < 8; k++) { + lineData[lineOffset + sample + k] = + component.output[bufferOffset + offset++]; + } + } + } + } + + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + + var cx, cy; + var index; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + cy = 0 | (y * componentScaleY); + cx = 0 | (x * componentScaleX); + index = cy * samplesPerLine + cx; + data[offset] = lineData[index]; + offset += numComponents; + } + } + } + return data; + }, + getData: function getData(width, height) { + var scaleX = this.width / width, scaleY = this.height / height; + + var component, componentScaleX, componentScaleY; + var x, y, i; + var offset = 0; + var Y, Cb, Cr, K, C, M, Ye, R, G, B; + var colorTransform; + var numComponents = this.components.length; + var dataLength = width * height * numComponents; + var data = new Uint8Array(dataLength); + var componentLine; + + // lineData is reused for all components. Assume first component is + // the biggest + var lineData = new Uint8Array((this.components[0].blocksPerLine << 3) * + this.components[0].blocksPerColumn * 8); + + // First construct image data ... + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + var blocksPerLine = component.blocksPerLine; + var blocksPerColumn = component.blocksPerColumn; + var samplesPerLine = blocksPerLine << 3; + + var j, k, ll = 0; + var lineOffset = 0; + for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + var scanLine = blockRow << 3; + for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { + var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol); + var offset = 0, sample = blockCol << 3; + for (j = 0; j < 8; j++) { + var lineOffset = (scanLine + j) * samplesPerLine; + for (k = 0; k < 8; k++) { + lineData[lineOffset + sample + k] = + component.output[bufferOffset + offset++] * component.bitConversion; + } + } + } + } + + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + + var cx, cy; + var index; + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + cy = 0 | (y * componentScaleY); + cx = 0 | (x * componentScaleX); + index = cy * samplesPerLine + cx; + data[offset] = lineData[index]; + offset += numComponents; + } + } + } + + // ... then transform colors, if necessary + switch (numComponents) { + case 1: + case 2: + break; + // no color conversion for one or two compoenents + + case 3: + // The default transform for three components is true + colorTransform = true; + // The adobe transform marker overrides any previous setting + if (this.adobe && this.adobe.transformCode) + colorTransform = true; + else if (typeof this.colorTransform !== 'undefined') + colorTransform = !!this.colorTransform; + + if (colorTransform) { + for (i = 0; i < dataLength; i += numComponents) { + Y = data[i ]; + Cb = data[i + 1]; + Cr = data[i + 2]; + + R = clampToUint8(Y - 179.456 + 1.402 * Cr); + G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr); + B = clampToUint8(Y - 226.816 + 1.772 * Cb); + + data[i ] = R; + data[i + 1] = G; + data[i + 2] = B; + } + } + break; + case 4: + if (!this.adobe) + throw 'Unsupported color mode (4 components)'; + // The default transform for four components is false + colorTransform = false; + // The adobe transform marker overrides any previous setting + if (this.adobe && this.adobe.transformCode) + colorTransform = true; + else if (typeof this.colorTransform !== 'undefined') + colorTransform = !!this.colorTransform; + + if (colorTransform) { + for (i = 0; i < dataLength; i += numComponents) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + + C = clampToUint8(434.456 - Y - 1.402 * Cr); + M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr); + Y = clampToUint8(481.816 - Y - 1.772 * Cb); + + data[i ] = C; + data[i + 1] = M; + data[i + 2] = Y; + // K is unchanged + } + } + break; + default: + throw 'Unsupported color mode'; + } + return data; + } + }; + + return constructor; +})(); + + +/*** EXPORTS FROM exports-loader ***/ +module.exports = JpegImage; + +/***/ }), + +/***/ "../codecs/jpegLossless.js": +/*!*********************************!*\ + !*** ../codecs/jpegLossless.js ***! + \*********************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jpeg = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15 + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (decode)"); + } + } + + current = this.stream.get16(); + } + + if ((current < 0xFFC0) || (current > 0xFFC7)) { + throw new Error("ERROR: could not handle arithmetic code!"); + } + + this.frame.read(this.stream); + current = this.stream.get16(); + + do { + while (current !== 0x0FFDA) { // SOS + switch (current) { + case 0xFFC4: // DHT + this.huffTable.read(this.stream, this.HuffTab); + break; + case 0xFFCC: // DAC + throw new Error("Program doesn't support arithmetic coding. (format throw new IOException)"); + case 0xFFDB: + this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE); + break; + case 0xFFDD: + this.restartInterval = this.readNumber(); + break; + case 0xFFE0: + case 0xFFE1: + case 0xFFE2: + case 0xFFE3: + case 0xFFE4: + case 0xFFE5: + case 0xFFE6: + case 0xFFE7: + case 0xFFE8: + case 0xFFE9: + case 0xFFEA: + case 0xFFEB: + case 0xFFEC: + case 0xFFED: + case 0xFFEE: + case 0xFFEF: + this.readApp(); + break; + case 0xFFFE: + this.readComment(); + break; + default: + if ((current >> 8) !== 0xFF) { + throw new Error("ERROR: format throw new IOException! (Parser.decode)"); + } + } + + current = this.stream.get16(); + } + + this.precision = this.frame.precision; + this.components = this.frame.components; + + if (!this.numBytes) { + this.numBytes = parseInt(Math.ceil(this.precision / 8)); + } + + if (this.numBytes == 1) { + this.mask = 0xFF; + } else { + this.mask = 0xFFFF; + } + + this.scan.read(this.stream); + this.numComp = this.scan.numComp; + this.selection = this.scan.selection; + + if (this.numBytes === 1) { + if (this.numComp === 3) { + this.getter = this.getValueRGB; + this.setter = this.setValueRGB; + this.output = this.outputRGB; + } else { + this.getter = this.getValue8; + this.setter = this.setValue8; + this.output = this.outputSingle; + } + } else { + this.getter = this.getValue16; + this.setter = this.setValue16; + this.output = this.outputSingle; + } + + switch (this.selection) { + case 2: + this.selector = this.select2; + break; + case 3: + this.selector = this.select3; + break; + case 4: + this.selector = this.select4; + break; + case 5: + this.selector = this.select5; + break; + case 6: + this.selector = this.select6; + break; + case 7: + this.selector = this.select7; + break; + default: + this.selector = this.select1; + break; + } + + this.scanComps = this.scan.components; + this.quantTables = this.quantTable.quantTables; + + for (i = 0; i < this.numComp; i+=1) { + compN = this.scanComps[i].scanCompSel; + this.qTab[i] = this.quantTables[this.components[compN].quantTableSel]; + this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp; + this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0]; + this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1]; + } + + this.xDim = this.frame.dimX; + this.yDim = this.frame.dimY; + if (this.numBytes == 1) { + this.outputData = new Uint8Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + } else { + this.outputData = new Uint16Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp)); + } + + scanNum+=1; + + while (true) { // Decode one scan + temp[0] = 0; + index[0] = 0; + + for (i = 0; i < 10; i+=1) { + pred[i] = (1 << (this.precision - 1)); + } + + if (this.restartInterval === 0) { + current = this.decodeUnit(pred, temp, index); + + while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) { + this.output(pred); + current = this.decodeUnit(pred, temp, index); + } + + break; //current=MARKER + } + + for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) { + this.restarting = (mcuNum == 0); + current = this.decodeUnit(pred, temp, index); + this.output(pred); + + if (current !== 0) { + break; + } + } + + if (current === 0) { + if (this.markerIndex !== 0) { + current = (0xFF00 | this.marker); + this.markerIndex = 0; + } else { + current = this.stream.get16(); + } + } + + if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && + (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) { + break; //current=MARKER + } + } + + if ((current === 0xFFDC) && (scanNum === 1)) { //DNL + this.readNumber(); + current = this.stream.get16(); + } + } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0)); + + return this.outputData; + }; + + + + jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) { + if (this.numComp == 1) { + return this.decodeSingle(prev, temp, index); + } else if (this.numComp == 3) { + return this.decodeRGB(prev, temp, index); + } else { + return -1; + } + }; + + + + jpeg.lossless.Decoder.prototype.select1 = function (compOffset) { + return this.getPreviousX(compOffset); + }; + + + + jpeg.lossless.Decoder.prototype.select2 = function (compOffset) { + return this.getPreviousY(compOffset); + }; + + + + jpeg.lossless.Decoder.prototype.select3 = function (compOffset) { + return this.getPreviousXY(compOffset); + }; + + + + jpeg.lossless.Decoder.prototype.select4 = function (compOffset) { + return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset); + }; + + + + jpeg.lossless.Decoder.prototype.select5 = function (compOffset) { + return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1); + }; + + + + jpeg.lossless.Decoder.prototype.select6 = function (compOffset) { + return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1); + }; + + + + jpeg.lossless.Decoder.prototype.select7 = function (compOffset) { + return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2); + }; + + + + jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) { + /*jslint bitwise: true */ + + var value, actab, dctab, qtab, ctrC, i, k, j; + + prev[0] = this.selector(0); + prev[1] = this.selector(1); + prev[2] = this.selector(2); + + for (ctrC = 0; ctrC < this.numComp; ctrC+=1) { + qtab = this.qTab[ctrC]; + actab = this.acTab[ctrC]; + dctab = this.dcTab[ctrC]; + for (i = 0; i < this.nBlock[ctrC]; i+=1) { + for (k = 0; k < this.IDCT_Source.length; k+=1) { + this.IDCT_Source[k] = 0; + } + + value = this.getHuffmanValue(dctab, temp, index); + + if (value >= 0xFF00) { + return value; + } + + prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index); + this.IDCT_Source[0] *= qtab[0]; + + for (j = 1; j < 64; j+=1) { + value = this.getHuffmanValue(actab, temp, index); + + if (value >= 0xFF00) { + return value; + } + + j += (value >> 4); + + if ((value & 0x0F) === 0) { + if ((value >> 4) === 0) { + break; + } + } else { + this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j]; + } + } + } + } + + return 0; + }; + + + + jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) { + /*jslint bitwise: true */ + + var value, i, n, nRestart; + + if (this.restarting) { + this.restarting = false; + prev[0] = (1 << (this.frame.precision - 1)); + } else { + prev[0] = this.selector(); + } + + for (i = 0; i < this.nBlock[0]; i+=1) { + value = this.getHuffmanValue(this.dcTab[0], temp, index); + if (value >= 0xFF00) { + return value; + } + + n = this.getn(prev, value, temp, index); + nRestart = (n >> 8); + + if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) { + return nRestart; + } + + prev[0] += n; + } + + return 0; + }; + + + + // Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8 + // bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256. + // HuffTab[*][*][0-256] is always the only 1st-layer table. + // + // An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal + // + // HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) + // ): + // return: Huffman Value of table + // 0xFF?? if it receives a MARKER + // Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...) + // temp temp storage for remainded bits + // index index to bit of temp + // in FILE pointer + // Effect: + // temp store new remainded bits + // index change to new index + // in change to new position + // NOTE: + // Initial by temp=0; index=0; + // NOTE: (explain temp and index) + // temp: is always in the form at calling time or returning time + // | byte 4 | byte 3 | byte 2 | byte 1 | + // | 0 | 0 | 00000000 | 00000??? | if not a MARKER + // ^index=3 (from 0 to 15) + // 321 + // NOTE (marker and marker_index): + // If get a MARKER from 'in', marker=the low-byte of the MARKER + // and marker_index=9 + // If marker_index=9 then index is always > 8, or HuffmanValue() + // will not be called + jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) { + /*jslint bitwise: true */ + + var code, input, mask; + mask = 0xFFFF; + + if (index[0] < 8) { + temp[0] <<= 8; + input = this.stream.get8(); + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + temp[0] |= input; + } else { + index[0] -= 8; + } + + code = table[temp[0] >> index[0]]; + + if ((code & jpeg.lossless.Decoder.MSB) !== 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } + + temp[0] &= (mask >> (16 - index[0])); + temp[0] <<= 8; + input = this.stream.get8(); + + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + + temp[0] |= input; + code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])]; + index[0] += 8; + } + + index[0] += 8 - (code >> 8); + + if (index[0] < 0) { + throw new Error("index=" + index[0] + " temp=" + temp[0] + " code=" + code + " in HuffmanValue()"); + } + + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return 0xFF00 | this.marker; + } + + temp[0] &= (mask >> (16 - index[0])); + return code & 0xFF; + }; + + + + jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) { + /*jslint bitwise: true */ + + var result, one, n_one, mask, input; + one = 1; + n_one = -1; + mask = 0xFFFF; + + if (n === 0) { + return 0; + } + + if (n === 16) { + if (PRED[0] >= 0) { + return -32768; + } else { + return 32768; + } + } + + index[0] -= n; + + if (index[0] >= 0) { + if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } + + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); + } else { + temp[0] <<= 8; + input = this.stream.get8(); + + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + + temp[0] |= input; + index[0] += 8; + + if (index[0] < 0) { + if (this.markerIndex !== 0) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } + + temp[0] <<= 8; + input = this.stream.get8(); + + if (input === 0xFF) { + this.marker = this.stream.get8(); + if (this.marker !== 0) { + this.markerIndex = 9; + } + } + + temp[0] |= input; + index[0] += 8; + } + + if (index[0] < 0) { + throw new Error("index=" + index[0] + " in getn()"); + } + + if (index[0] < this.markerIndex) { + this.markerIndex = 0; + return (0xFF00 | this.marker) << 8; + } + + result = temp[0] >> index[0]; + temp[0] &= (mask >> (16 - index[0])); + } + + if (result < (one << (n - 1))) { + result += (n_one << n) + 1; + } + + return result; + }; + + + + jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) { + /*jslint bitwise: true */ + + if (this.xLoc > 0) { + return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset); + } else if (this.yLoc > 0) { + return this.getPreviousY(compOffset); + } else { + return (1 << (this.frame.precision - 1)); + } + }; + + + + jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) { + /*jslint bitwise: true */ + + if ((this.xLoc > 0) && (this.yLoc > 0)) { + return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset); + } else { + return this.getPreviousY(compOffset); + } + }; + + + + jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) { + /*jslint bitwise: true */ + + if (this.yLoc > 0) { + return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset); + } else { + return this.getPreviousX(compOffset); + } + }; + + + + jpeg.lossless.Decoder.prototype.isLastPixel = function () { + return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1)); + }; + + + + jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) { + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]); + + this.xLoc+=1; + + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } + } + }; + + + + jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) { + var offset = ((this.yLoc * this.xDim) + this.xLoc); + + if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) { + this.setter(offset, PRED[0], 0); + this.setter(offset, PRED[1], 1); + this.setter(offset, PRED[2], 2); + + this.xLoc+=1; + + if (this.xLoc >= this.xDim) { + this.yLoc+=1; + this.xLoc = 0; + } + } + }; + + jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) { + this.outputData[index] = val; + }; + + jpeg.lossless.Decoder.prototype.getValue8 = function (index) { + return this.outputData[index]; // mask should not be necessary because outputData is either Int8Array or Int16Array + }; + + var littleEndian = (function() { + var buffer = new ArrayBuffer(2); + new DataView(buffer).setInt16(0, 256, true /* littleEndian */); + // Int16Array uses the platform's endianness. + return new Int16Array(buffer)[0] === 256; + })(); + + if (littleEndian) { + // just reading from an array is fine then. Int16Array will use platform endianness. + jpeg.lossless.Decoder.prototype.setValue16 = jpeg.lossless.Decoder.prototype.setValue8; + jpeg.lossless.Decoder.prototype.getValue16 = jpeg.lossless.Decoder.prototype.getValue8; + } + else { + // If platform is big-endian, we will need to convert to little-endian + jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) { + this.outputData[index] = ((val & 0xFF) << 8) | ((val >> 8) & 0xFF); + }; + + jpeg.lossless.Decoder.prototype.getValue16 = function (index) { + var val = this.outputData[index]; + return ((val & 0xFF) << 8) | ((val >> 8) & 0xFF); + }; + } + + jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) { + // this.outputData.setUint8(index * 3 + compOffset, val); + this.outputData[index * 3 + compOffset] = val; + }; + + jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) { + // return this.outputData.getUint8(index * 3 + compOffset); + return this.outputData[index * 3 + compOffset]; + }; + + + + jpeg.lossless.Decoder.prototype.readApp = function() { + var count = 0, length = this.stream.get16(); + count += 2; + + while (count < length) { + this.stream.get8(); + count+=1; + } + + return length; + }; + + + + jpeg.lossless.Decoder.prototype.readComment = function () { + var sb = "", count = 0, length; + + length = this.stream.get16(); + count += 2; + + while (count < length) { + sb += this.stream.get8(); + count+=1; + } + + return sb; + }; + + + + jpeg.lossless.Decoder.prototype.readNumber = function() { + var Ld = this.stream.get16(); + + if (Ld !== 4) { + throw new Error("ERROR: Define number format throw new IOException [Ld!=4]"); + } + + return this.stream.get16(); + }; + + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.Decoder; + } + + },{"./data-stream.js":2,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-header.js":9,"./utils.js":10}],4:[function(require,module,exports){ + /* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + + /* + * Copyright (C) Helmut Dersch + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ***/ + var jpeg = jpeg || {}; + jpeg.lossless = jpeg.lossless || {}; + jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null); + jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); + + + /*** Constructor ***/ + jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () { + this.components = []; // Components + this.dimX = 0; // Number of samples per line + this.dimY = 0; // Number of lines + this.numComp = 0; // Number of component in the frame + this.precision = 0; // Sample Precision (from the original image) + }; + + + + /*** Prototype Methods ***/ + + jpeg.lossless.FrameHeader.prototype.read = function (data) { + /*jslint bitwise: true */ + + var count = 0, length, i, c, temp; + + length = data.get16(); + count += 2; + + this.precision = data.get8(); + count+=1; + + this.dimY = data.get16(); + count += 2; + + this.dimX = data.get16(); + count += 2; + + this.numComp = data.get8(); + count+=1; + for (i = 1; i <= this.numComp; i+=1) { + if (count > length) { + throw new Error("ERROR: frame format error"); + } + + c = data.get8(); + count+=1; + + if (count >= length) { + throw new Error("ERROR: frame format error [c>=Lf]"); + } + + temp = data.get8(); + count+=1; + + if (!this.components[c]) { + this.components[c] = new jpeg.lossless.ComponentSpec(); + } + + this.components[c].hSamp = temp >> 4; + this.components[c].vSamp = temp & 0x0F; + this.components[c].quantTableSel = data.get8(); + count+=1; + } + + if (count !== length) { + throw new Error("ERROR: frame format error [Lf!=count]"); + } + + return 1; + }; + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.FrameHeader; + } + + },{"./component-spec.js":1,"./data-stream.js":2}],5:[function(require,module,exports){ + /* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + + /* + * Copyright (C) Helmut Dersch + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ***/ + var jpeg = jpeg || {}; + jpeg.lossless = jpeg.lossless || {}; + jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); + jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null); + + + /*** Constructor ***/ + jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () { + this.l = jpeg.lossless.Utils.createArray(4, 2, 16); + this.th = []; + this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200); + this.tc = jpeg.lossless.Utils.createArray(4, 2); + + this.tc[0][0] = 0; + this.tc[1][0] = 0; + this.tc[2][0] = 0; + this.tc[3][0] = 0; + this.tc[0][1] = 0; + this.tc[1][1] = 0; + this.tc[2][1] = 0; + this.tc[3][1] = 0; + this.th[0] = 0; + this.th[1] = 0; + this.th[2] = 0; + this.th[3] = 0; + }; + + + + /*** Static Pseudo-constants ***/ + + jpeg.lossless.HuffmanTable.MSB = 0x80000000; + + + /*** Prototype Methods ***/ + + jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) { + /*jslint bitwise: true */ + + var count = 0, length, temp, t, c, i, j; + + length = data.get16(); + count += 2; + + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; + if (t > 3) { + throw new Error("ERROR: Huffman table ID > 3"); + } + + c = temp >> 4; + if (c > 2) { + throw new Error("ERROR: Huffman table [Table class > 2 ]"); + } + + this.th[t] = 1; + this.tc[t][c] = 1; + + for (i = 0; i < 16; i+=1) { + this.l[t][c][i] = data.get8(); + count+=1; + } + + for (i = 0; i < 16; i+=1) { + for (j = 0; j < this.l[t][c][i]; j+=1) { + if (count > length) { + throw new Error("ERROR: Huffman table format error [count>Lh]"); + } + + this.v[t][c][i][j] = data.get8(); + count+=1; + } + } + } + + if (count !== length) { + throw new Error("ERROR: Huffman table format error [count!=Lf]"); + } + + for (i = 0; i < 4; i+=1) { + for (j = 0; j < 2; j+=1) { + if (this.tc[i][j] !== 0) { + this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]); + } + } + } + + return 1; + }; + + + + // Build_HuffTab() + // Parameter: t table ID + // c table class ( 0 for DC, 1 for AC ) + // L[i] # of codewords which length is i + // V[i][j] Huffman Value (length=i) + // Effect: + // build up HuffTab[t][c] using L and V. + jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) { + /*jslint bitwise: true */ + + var currentTable, temp, k, i, j, n; + temp = 256; + k = 0; + + for (i = 0; i < 8; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i + 1)); n+=1) { + tab[k] = V[i][j] | ((i + 1) << 8); + k+=1; + } + } + } + + for (i = 1; k < 256; i+=1, k+=1) { + tab[k] = i | jpeg.lossless.HuffmanTable.MSB; + } + + currentTable = 1; + k = 0; + + for (i = 8; i < 16; i+=1) { // i+1 is Code length + for (j = 0; j < L[i]; j+=1) { + for (n = 0; n < (temp >> (i - 7)); n+=1) { + tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8); + k+=1; + } + + if (k >= 256) { + if (k > 256) { + throw new Error("ERROR: Huffman table error(1)!"); + } + + k = 0; + currentTable+=1; + } + } + } + }; + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.HuffmanTable; + } + + },{"./data-stream.js":2,"./utils.js":10}],6:[function(require,module,exports){ + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ****/ + + /** + * jpeg + * @type {*|{}} + */ + var jpeg = jpeg || {}; + + /** + * jpeg.lossless + * @type {*|{}} + */ + jpeg.lossless = jpeg.lossless || {}; + + + jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null); + jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); + jpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null); + jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null); + jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null); + jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null); + jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null); + jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null); + jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null); + + + /*** Exports ***/ + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg; + } + + },{"./component-spec.js":1,"./data-stream.js":2,"./decoder.js":3,"./frame-header.js":4,"./huffman-table.js":5,"./quantization-table.js":7,"./scan-component.js":8,"./scan-header.js":9,"./utils.js":10}],7:[function(require,module,exports){ + /* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + + /* + * Copyright (C) Helmut Dersch + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ***/ + var jpeg = jpeg || {}; + jpeg.lossless = jpeg.lossless || {}; + jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); + jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null); + + + /*** Constructor ***/ + jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () { + this.precision = []; // Quantization precision 8 or 16 + this.tq = []; // 1: this table is presented + this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables + + this.tq[0] = 0; + this.tq[1] = 0; + this.tq[2] = 0; + this.tq[3] = 0; + }; + + + + /*** Static Methods ***/ + + jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) { + /*jslint bitwise: true */ + + var i; + + for (i = 0; i < 8; i+=1) { + qtab[table[(0 * 8) + i]] *= 90; + qtab[table[(4 * 8) + i]] *= 90; + qtab[table[(2 * 8) + i]] *= 118; + qtab[table[(6 * 8) + i]] *= 49; + qtab[table[(5 * 8) + i]] *= 71; + qtab[table[(1 * 8) + i]] *= 126; + qtab[table[(7 * 8) + i]] *= 25; + qtab[table[(3 * 8) + i]] *= 106; + } + + for (i = 0; i < 8; i+=1) { + qtab[table[0 + (8 * i)]] *= 90; + qtab[table[4 + (8 * i)]] *= 90; + qtab[table[2 + (8 * i)]] *= 118; + qtab[table[6 + (8 * i)]] *= 49; + qtab[table[5 + (8 * i)]] *= 71; + qtab[table[1 + (8 * i)]] *= 126; + qtab[table[7 + (8 * i)]] *= 25; + qtab[table[3 + (8 * i)]] *= 106; + } + + for (i = 0; i < 64; i+=1) { + qtab[i] >>= 6; + } + }; + + + /*** Prototype Methods ***/ + + jpeg.lossless.QuantizationTable.prototype.read = function (data, table) { + /*jslint bitwise: true */ + + var count = 0, length, temp, t, i; + + length = data.get16(); + count += 2; + + while (count < length) { + temp = data.get8(); + count+=1; + t = temp & 0x0F; + + if (t > 3) { + throw new Error("ERROR: Quantization table ID > 3"); + } + + this.precision[t] = temp >> 4; + + if (this.precision[t] === 0) { + this.precision[t] = 8; + } else if (this.precision[t] === 1) { + this.precision[t] = 16; + } else { + throw new Error("ERROR: Quantization table precision error"); + } + + this.tq[t] = 1; + + if (this.precision[t] === 8) { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } + + this.quantTables[t][i] = data.get8(); + count+=1; + } + + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } else { + for (i = 0; i < 64; i+=1) { + if (count > length) { + throw new Error("ERROR: Quantization table format error"); + } + + this.quantTables[t][i] = data.get16(); + count += 2; + } + + jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table); + } + } + + if (count !== length) { + throw new Error("ERROR: Quantization table error [count!=Lq]"); + } + + return 1; + }; + + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.QuantizationTable; + } + + },{"./data-stream.js":2,"./utils.js":10}],8:[function(require,module,exports){ + /* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + + /* + * Copyright (C) Helmut Dersch + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ***/ + var jpeg = jpeg || {}; + jpeg.lossless = jpeg.lossless || {}; + + + /*** Constructor ***/ + jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () { + this.acTabSel = 0; // AC table selector + this.dcTabSel = 0; // DC table selector + this.scanCompSel = 0; // Scan component selector + }; + + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.ScanComponent; + } + + },{}],9:[function(require,module,exports){ + /* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + + /* + * Copyright (C) Helmut Dersch + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ***/ + var jpeg = jpeg || {}; + jpeg.lossless = jpeg.lossless || {}; + jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null); + jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null); + + + /*** Constructor ***/ + jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () { + this.ah = 0; + this.al = 0; + this.numComp = 0; // Number of components in the scan + this.selection = 0; // Start of spectral or predictor selection + this.spectralEnd = 0; // End of spectral selection + this.components = []; + }; + + + /*** Prototype Methods ***/ + + jpeg.lossless.ScanHeader.prototype.read = function(data) { + /*jslint bitwise: true */ + + var count = 0, length, i, temp; + + length = data.get16(); + count += 2; + + this.numComp = data.get8(); + count+=1; + + for (i = 0; i < this.numComp; i+=1) { + this.components[i] = new jpeg.lossless.ScanComponent(); + + if (count > length) { + throw new Error("ERROR: scan header format error"); + } + + this.components[i].scanCompSel = data.get8(); + count+=1; + + temp = data.get8(); + count+=1; + + this.components[i].dcTabSel = (temp >> 4); + this.components[i].acTabSel = (temp & 0x0F); + } + + this.selection = data.get8(); + count+=1; + + this.spectralEnd = data.get8(); + count+=1; + + temp = data.get8(); + this.ah = (temp >> 4); + this.al = (temp & 0x0F); + count+=1; + + if (count !== length) { + throw new Error("ERROR: scan header format error [count!=Ns]"); + } + + return 1; + }; + + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.ScanHeader; + } + + },{"./data-stream.js":2,"./scan-component.js":8}],10:[function(require,module,exports){ + /* + * Copyright (C) 2015 Michael Martinez + * Changes: Added support for selection values 2-7, fixed minor bugs & + * warnings, split into multiple class files, and general clean up. + * + * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT. + */ + + /* + * Copyright (C) Helmut Dersch + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /*jslint browser: true, node: true */ + /*global require, module */ + + "use strict"; + + /*** Imports ***/ + var jpeg = jpeg || {}; + jpeg.lossless = jpeg.lossless || {}; + + + /*** Constructor ***/ + jpeg.lossless.Utils = jpeg.lossless.Utils || {}; + + + /*** Static methods ***/ + + // http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript + jpeg.lossless.Utils.createArray = function (length) { + var arr = new Array(length || 0), + i = length; + + if (arguments.length > 1) { + var args = Array.prototype.slice.call(arguments, 1); + while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args); + } + + return arr; + }; + + + // http://stackoverflow.com/questions/18638900/javascript-crc32 + jpeg.lossless.Utils.makeCRCTable = function(){ + var c; + var crcTable = []; + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + crcTable[n] = c; + } + return crcTable; + }; + + jpeg.lossless.Utils.crc32 = function(dataView) { + var uint8view = new Uint8Array(dataView.buffer); + var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable()); + var crc = 0 ^ (-1); + + for (var i = 0; i < uint8view.length; i++ ) { + crc = (crc >>> 8) ^ crcTable[(crc ^ uint8view[i]) & 0xFF]; + } + + return (crc ^ (-1)) >>> 0; + }; + + + /*** Exports ***/ + + var moduleType = typeof module; + if ((moduleType !== 'undefined') && module.exports) { + module.exports = jpeg.lossless.Utils; + } + +},{}]},{},[6])(6) +}); + + +/***/ }), + +/***/ "../codecs/jpx.min.js": +/*!****************************!*\ + !*** ../codecs/jpx.min.js ***! + \****************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/*! image-JPEG2000 - v0.3.1 - 2015-08-26 | https://github.com/OHIF/image-JPEG2000 */ +"use strict";var PDFJS = {};function info(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.infos&&console.log("Info: "+a)}function warn(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.warnings&&console.log("Warning: "+a)}function error(a){if(arguments.length>1){var b=["Error:"];b.push.apply(b,arguments),console.log.apply(console,b),a=[].join.call(arguments," ")}else console.log("Error: "+a);throw console.log(backtrace()),UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown),new Error(a)}function backtrace(){try{throw new Error}catch(a){return a.stack?a.stack.split("\n").slice(2).join("\n"):""}}function assert(a,b){a||error(b)}function combineUrl(a,b){if(!b)return a;if(/^[a-z][a-z0-9+\-.]*:/i.test(b))return b;var c;if("/"===b.charAt(0))return c=a.indexOf("://"),"/"===b.charAt(1)?++c:c=a.indexOf("/",c+3),a.substring(0,c)+b;var d=a.length;c=a.lastIndexOf("#"),d=c>=0?c:d,c=a.lastIndexOf("?",d),d=c>=0?c:d;var e=a.lastIndexOf("/",d);return a.substring(0,e+1)+b}function isValidUrl(a,b){if(!a)return!1;var c=/^[a-z][a-z0-9+\-.]*(?=:)/i.exec(a);if(!c)return b;switch(c=c[0].toLowerCase()){case"http":case"https":case"ftp":case"mailto":case"tel":return!0;default:return!1}}function shadow(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!1}),c}function bytesToString(a){assert(null!==a&&"object"==typeof a&&void 0!==a.length,"Invalid argument for bytesToString");var b=a.length,c=8192;if(c>b)return String.fromCharCode.apply(null,a);for(var d=[],e=0;b>e;e+=c){var f=Math.min(e+c,b),g=a.subarray(e,f);d.push(String.fromCharCode.apply(null,g))}return d.join("")}function stringToBytes(a){assert("string"==typeof a,"Invalid argument for stringToBytes");for(var b=a.length,c=new Uint8Array(b),d=0;b>d;++d)c[d]=255&a.charCodeAt(d);return c}function string32(a){return String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)}function log2(a){for(var b=1,c=0;a>b;)b<<=1,c++;return c}function readInt8(a,b){return a[b]<<24>>24}function readUint16(a,b){return a[b]<<8|a[b+1]}function readUint32(a,b){return(a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3])>>>0}function isLittleEndian(){var a=new Uint8Array(2);a[0]=1;var b=new Uint16Array(a.buffer);return 1===b[0]}function hasCanvasTypedArrays(){var a=document.createElement("canvas");a.width=a.height=1;var b=a.getContext("2d"),c=b.createImageData(1,1);return"undefined"!=typeof c.data.buffer}function stringToPDFString(a){var b,c=a.length,d=[];if("þ"===a[0]&&"ÿ"===a[1])for(b=2;c>b;b+=2)d.push(String.fromCharCode(a.charCodeAt(b)<<8|a.charCodeAt(b+1)));else for(b=0;c>b;++b){var e=PDFStringTranslateTable[a.charCodeAt(b)];d.push(e?String.fromCharCode(e):a.charAt(b))}return d.join("")}function stringToUTF8String(a){return decodeURIComponent(escape(a))}function isEmptyObj(a){for(var b in a)return!1;return!0}function isBool(a){return"boolean"==typeof a}function isInt(a){return"number"==typeof a&&(0|a)===a}function isNum(a){return"number"==typeof a}function isString(a){return"string"==typeof a}function isNull(a){return null===a}function isName(a){return a instanceof Name}function isCmd(a,b){return a instanceof Cmd&&(void 0===b||a.cmd===b)}function isDict(a,b){if(!(a instanceof Dict))return!1;if(!b)return!0;var c=a.get("Type");return isName(c)&&c.name===b}function isArray(a){return a instanceof Array}function isStream(a){return"object"==typeof a&&null!==a&&void 0!==a.getBytes}function isArrayBuffer(a){return"object"==typeof a&&null!==a&&void 0!==a.byteLength}function isRef(a){return a instanceof Ref}function createPromiseCapability(){var a={};return a.promise=new Promise(function(b,c){a.resolve=b,a.reject=c}),a}function MessageHandler(a,b){this.name=a,this.comObj=b,this.callbackIndex=1,this.postMessageTransfers=!0;var c=this.callbacksCapabilities={},d=this.actionHandler={};d.console_log=[function(a){console.log.apply(console,a)}],d.console_error=[function(a){console.error.apply(console,a)}],d._unsupported_feature=[function(a){UnsupportedManager.notify(a)}],b.onmessage=function(a){var e=a.data;if(e.isReply){var f=e.callbackId;if(e.callbackId in c){var g=c[f];delete c[f],"error"in e?g.reject(e.error):g.resolve(e.data)}else error("Cannot resolve callback "+f)}else if(e.action in d){var h=d[e.action];e.callbackId?Promise.resolve().then(function(){return h[0].call(h[1],e.data)}).then(function(a){b.postMessage({isReply:!0,callbackId:e.callbackId,data:a})},function(a){b.postMessage({isReply:!0,callbackId:e.callbackId,error:a})}):h[0].call(h[1],e.data)}else error("Unknown action from worker: "+e.action)}}function loadJpegStream(a,b,c){var d=new Image;d.onload=function(){c.resolve(a,d)},d.onerror=function(){c.resolve(a,null),warn("Error during JPEG image loading")},d.src=b}var JpxImage=function(){function a(){this.failOnCorruptedImage=!1}function b(a,b){a.x0=Math.ceil(b.XOsiz/a.XRsiz),a.x1=Math.ceil(b.Xsiz/a.XRsiz),a.y0=Math.ceil(b.YOsiz/a.YRsiz),a.y1=Math.ceil(b.Ysiz/a.YRsiz),a.width=a.x1-a.x0,a.height=a.y1-a.y0}function c(a,b){for(var c,d=a.SIZ,e=[],f=Math.ceil((d.Xsiz-d.XTOsiz)/d.XTsiz),g=Math.ceil((d.Ysiz-d.YTOsiz)/d.YTsiz),h=0;g>h;h++)for(var i=0;f>i;i++)c={},c.tx0=Math.max(d.XTOsiz+i*d.XTsiz,d.XOsiz),c.ty0=Math.max(d.YTOsiz+h*d.YTsiz,d.YOsiz),c.tx1=Math.min(d.XTOsiz+(i+1)*d.XTsiz,d.Xsiz),c.ty1=Math.min(d.YTOsiz+(h+1)*d.YTsiz,d.Ysiz),c.width=c.tx1-c.tx0,c.height=c.ty1-c.ty0,c.components=[],e.push(c);a.tiles=e;for(var j=d.Csiz,k=0,l=j;l>k;k++)for(var m=b[k],n=0,o=e.length;o>n;n++){var p={};c=e[n],p.tcx0=Math.ceil(c.tx0/m.XRsiz),p.tcy0=Math.ceil(c.ty0/m.YRsiz),p.tcx1=Math.ceil(c.tx1/m.XRsiz),p.tcy1=Math.ceil(c.ty1/m.YRsiz),p.width=p.tcx1-p.tcx0,p.height=p.tcy1-p.tcy0,c.components[k]=p}}function d(a,b,c){var d=b.codingStyleParameters,e={};return d.entropyCoderWithCustomPrecincts?(e.PPx=d.precinctsSizes[c].PPx,e.PPy=d.precinctsSizes[c].PPy):(e.PPx=15,e.PPy=15),e.xcb_=c>0?Math.min(d.xcb,e.PPx-1):Math.min(d.xcb,e.PPx),e.ycb_=c>0?Math.min(d.ycb,e.PPy-1):Math.min(d.ycb,e.PPy),e}function e(a,b,c){var d=1<b.trx0?Math.ceil(b.trx1/d)-Math.floor(b.trx0/d):0,j=b.try1>b.try0?Math.ceil(b.try1/e)-Math.floor(b.try0/e):0,k=i*j;b.precinctParameters={precinctWidth:d,precinctHeight:e,numprecinctswide:i,numprecinctshigh:j,numprecincts:k,precinctWidthInSubband:g,precinctHeightInSubband:h}}function f(a,b,c){var d,e,f,g,h=c.xcb_,i=c.ycb_,j=1<>h,m=b.tby0>>i,n=b.tbx1+j-1>>h,o=b.tby1+k-1>>i,p=b.resolution.precinctParameters,q=[],r=[];for(e=m;o>e;e++)for(d=l;n>d;d++){f={cbx:d,cby:e,tbx0:j*d,tby0:k*e,tbx1:j*(d+1),tby1:k*(e+1)},f.tbx0_=Math.max(b.tbx0,f.tbx0),f.tby0_=Math.max(b.tby0,f.tby0),f.tbx1_=Math.min(b.tbx1,f.tbx1),f.tby1_=Math.min(b.tby1,f.tby1);var s=Math.floor((f.tbx0_-b.tbx0)/p.precinctWidthInSubband),t=Math.floor((f.tby0_-b.tby0)/p.precinctHeightInSubband);if(g=s+t*p.numprecinctswide,f.precinctNumber=g,f.subbandType=b.type,f.Lblock=3,!(f.tbx1_<=f.tbx0_||f.tby1_<=f.tby0_)){q.push(f);var u=r[g];void 0!==u?(du.cbxMax&&(u.cbxMax=d),eu.cbyMax&&(u.cbyMax=e)):r[g]=u={cbxMin:d,cbyMin:e,cbxMax:d,cbyMax:e},f.precinct=u}}b.codeblockParameters={codeblockWidth:h,codeblockHeight:i,numcodeblockwide:n-l+1,numcodeblockhigh:o-m+1},b.codeblocks=q,b.precincts=r}function g(a,b,c){for(var d=[],e=a.subbands,f=0,g=e.length;g>f;f++)for(var h=e[f],i=h.codeblocks,j=0,k=i.length;k>j;j++){var l=i[j];l.precinctNumber===b&&d.push(l)}return{layerNumber:c,codeblocks:d}}function h(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;e>j;j++){for(;h>=k;k++){for(;f>l;l++){var a=d.components[l];if(!(k>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[k],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,j);return m++,i}m=0}}l=0}k=0}}}function i(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;h>=j;j++){for(;e>k;k++){for(;f>l;l++){var a=d.components[l];if(!(j>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[j],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,k);return m++,i}m=0}}l=0}k=0}}}function j(a){var b,c,d,e,f=a.SIZ,h=a.currentTile.index,i=a.tiles[h],j=i.codingStyleDefaultParameters.layersCount,k=f.Csiz,l=0;for(d=0;k>d;d++){var m=i.components[d];l=Math.max(l,m.codingStyleParameters.decompositionLevelsCount)}var n=new Int32Array(l+1);for(c=0;l>=c;++c){var o=0;for(d=0;k>d;++d){var p=i.components[d].resolutions;c=c;c++){for(;ed;d++){var a=i.components[d];if(!(c>a.codingStyleParameters.decompositionLevelsCount)){var f=a.resolutions[c],h=f.precinctParameters.numprecincts;if(!(e>=h)){for(;j>b;){var m=g(f,e,b);return b++,m}b=0}}}d=0}e=0}}}function k(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=h,j=0,k=0,l=0,o=0,p=0;this.nextPacket=function(){for(;pl;l++){for(var a=d.components[l],b=a.codingStyleParameters.decompositionLevelsCount;b>=k;k++){var c=a.resolutions[k],n=h.components[l].resolutions[k],q=m(o,p,n,i,c);if(null!==q){for(;e>j;){var r=g(c,q,j);return j++,r}j=0}}k=0}l=0}o=0}}}function l(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=0,j=0,k=0,l=0,o=0;this.nextPacket=function(){for(;f>k;++k){for(var a=d.components[k],b=h.components[k],c=a.codingStyleParameters.decompositionLevelsCount;o=j;j++){var n=a.resolutions[j],p=b.resolutions[j],q=m(l,o,p,b,n);if(null!==q){for(;e>i;){var r=g(n,q,i);return i++,r}i=0}}j=0}l=0}o=0}}}function m(a,b,c,d,e){var f=a*d.minWidth,g=b*d.minHeight;if(f%c.width!==0||g%c.height!==0)return null;var h=g/c.width*e.precinctParameters.numprecinctswide;return f/c.height+h}function n(a){for(var b=a.components.length,c=Number.MAX_VALUE,d=Number.MAX_VALUE,e=0,f=0,g=new Array(b),h=0;b>h;h++){for(var i=a.components[h],j=i.codingStyleParameters.decompositionLevelsCount,k=new Array(j+1),l=Number.MAX_VALUE,m=Number.MAX_VALUE,n=0,o=0,p=1,q=j;q>=0;--q){var r=i.resolutions[q],s=p*r.precinctParameters.precinctWidth,t=p*r.precinctParameters.precinctHeight;l=Math.min(l,s),m=Math.min(m,t),n=Math.max(n,r.precinctParameters.numprecinctswide),o=Math.max(o,r.precinctParameters.numprecinctshigh),k[q]={width:s,height:t},p<<=1}c=Math.min(c,l),d=Math.min(d,m),e=Math.max(e,n),f=Math.max(f,o),g[h]={resolutions:k,minWidth:l,minHeight:m,maxNumWide:n,maxNumHigh:o}}return{components:g,minWidth:c,minHeight:d,maxNumWide:e,maxNumHigh:f}}function o(a){for(var b=a.SIZ,c=a.currentTile.index,g=a.tiles[c],m=b.Csiz,n=0;m>n;n++){for(var o=g.components[n],p=o.codingStyleParameters.decompositionLevelsCount,q=[],r=[],s=0;p>=s;s++){var t=d(a,o,s),u={},v=1<l;){if(c+k>=b.length)throw new Error("Unexpected EOF");var d=b[c+k];k++,m?(j=j<<7|d,l+=7,m=!1):(j=j<<8|d,l+=8),255===d&&(m=!0)}return l-=a,j>>>l&(1<a?a+3:(a=e(5),31>a?a+6:(a=e(7),a+37))}for(var j,k=0,l=0,m=!1,n=a.currentTile.index,o=a.tiles[n],p=a.COD.sopMarkerUsed,q=a.COD.ephMarkerUsed,r=o.packetsIterator;d>k;)try{h(),p&&f(145)&&g(4);var s=r.nextPacket();if(void 0===s)return;if(!e(1))continue;for(var t,u=s.layerNumber,x=[],y=0,z=s.codeblocks.length;z>y;y++){t=s.codeblocks[y];var A,B=t.precinct,C=t.cbx-B.cbxMin,D=t.cby-B.cbyMin,E=!1,F=!1;if(void 0!==t.included)E=!!e(1);else{B=t.precinct;var G,H;if(void 0!==B.inclusionTree)G=B.inclusionTree;else{var I=B.cbxMax-B.cbxMin+1,J=B.cbyMax-B.cbyMin+1;G=new w(I,J),H=new v(I,J),B.inclusionTree=G,B.zeroBitPlanesTree=H}for(G.reset(C,D,u);;){if(k>=b.length)return;if(G.isAboveThreshold())break;if(G.isKnown())G.nextLevel();else if(e(1)){if(G.setKnown(),G.isLeaf()){t.included=!0,E=F=!0;break}G.nextLevel()}else G.incrementValue()}}if(E){if(F){for(H=B.zeroBitPlanesTree,H.reset(C,D);;){if(k>=b.length)return;if(e(1)){if(A=!H.nextLevel())break}else H.incrementValue()}t.zeroBitPlanes=H.value}for(var K=i();e(1);)t.Lblock++;var L=log2(K),M=(1<K?L-1:L)+t.Lblock,N=e(M);x.push({codeblock:t,codingpasses:K,dataLength:N})}}for(h(),q&&f(146);x.length>0;){var O=x.shift();t=O.codeblock,void 0===t.data&&(t.data=[]),t.data.push({data:b,start:c+k,end:c+k+O.dataLength,codingpasses:O.codingpasses}),k+=O.dataLength}}catch(P){return}return k}function q(a,b,c,d,e,f,g,h){for(var i=d.tbx0,j=d.tby0,k=d.tbx1-d.tbx0,l=d.codeblocks,m="H"===d.type.charAt(0)?1:0,n="H"===d.type.charAt(1)?b:0,o=0,p=l.length;p>o;++o){var q=l[o],r=q.tbx1_-q.tbx0_,s=q.tby1_-q.tby0_;if(0!==r&&0!==s&&void 0!==q.data){var t,u;t=new x(r,s,q.subbandType,q.zeroBitPlanes,f),u=2;var v,w,y,z=q.data,A=0,B=0;for(v=0,w=z.length;w>v;v++)y=z[v],A+=y.end-y.start,B+=y.codingpasses;var C=new Int16Array(A),D=0;for(v=0,w=z.length;w>v;v++){y=z[v];var E=y.data.subarray(y.start,y.end);C.set(E,D),D+=E.length}var F=new ArithmeticDecoder(C,0,A);for(t.setDecoder(F),v=0;B>v;v++){switch(u){case 0:t.runSignificancePropogationPass();break;case 1:t.runMagnitudeRefinementPass();break;case 2:t.runCleanupPass(),h&&t.checkSegmentationSymbol()}u=(u+1)%3}var G,H,I,J=q.tbx0_-i+(q.tby0_-j)*k,K=t.coefficentsSign,L=t.coefficentsMagnitude,M=t.bitsDecoded,N=g?0:.5;D=0;var O="LL"!==d.type;for(v=0;s>v;v++){var P=J/k|0,Q=2*P*(b-k)+m+n;for(G=0;r>G;G++){if(H=L[D],0!==H){H=(H+N)*e,0!==K[D]&&(H=-H),I=M[D];var R=O?Q+(J<<1):J;g&&I>=f?a[R]=H:a[R]=H*(1<=r;r++){for(var s=d.resolutions[r],t=s.trx1-s.trx0,v=s.try1-s.try0,w=new Float32Array(t*v),x=0,y=s.subbands.length;y>x;x++){var B,C;i?(B=h[p].mu,C=h[p].epsilon,p++):(B=h[0].mu,C=h[0].epsilon+(r>0?1-r:0));var D=s.subbands[x],E=u[D.type],F=m?1:Math.pow(2,l+E-C)*(1+B/2048),G=j+C-1;q(w,t,v,D,F,G,m,k)}o.push({width:t,height:v,items:w})}var H=n.calculate(o,d.tcx0,d.tcy0);return{left:d.tcx0,top:d.tcy0,width:H.width,height:H.height,items:H.items}}function s(a){for(var b=a.SIZ,c=a.components,d=b.Csiz,e=[],f=0,g=a.tiles.length;g>f;f++){var h,i=a.tiles[f],j=[];for(h=0;d>h;h++)j[h]=r(a,i,h);var k=j[0],l=c[0].isSigned;if(l)var m=new Int16Array(k.items.length*d);else var m=new Uint16Array(k.items.length*d);var n,o,p,q,s,t,u,v,w,x,y,z,A,B,C,D={left:k.left,top:k.top,width:k.width,height:k.height,items:m},E=0;if(i.codingStyleDefaultParameters.multipleComponentTransform){var F=4===d,G=j[0].items,H=j[1].items,I=j[2].items,J=F?j[3].items:null;n=c[0].precision-8,o=(128<t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],z=v-(x+w>>2),y=z+x,A=z+w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;else for(t=0;u>t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],y=v+1.402*x,z=v-.34413*w-.71414*x,A=v+1.772*w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;if(F)for(t=0,E=3;u>t;t++,E+=4)B=J[t],m[E]=q>=B?0:B>=s?255:B+o>>n}else for(h=0;d>h;h++)if(8===c[h].precision){var M=j[h].items;for(n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=q>=C?0:C>=p?255:C+o>>n,E+=d}else{var l=c[h].isSigned,M=j[h].items;if(l)for(E=h,t=0,u=M.length;u>t;t++)m[E]=M[t],E+=d;else{n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=Math.max(Math.min(C+o,N),0),E+=d}}e.push(D)}return e}function t(a,b){for(var c=a.SIZ,d=c.Csiz,e=a.tiles[b],f=0;d>f;f++){var g=e.components[f],h=void 0!==a.currentTile.QCC[f]?a.currentTile.QCC[f]:a.currentTile.QCD;g.quantizationParameters=h;var i=void 0!==a.currentTile.COC[f]?a.currentTile.COC[f]:a.currentTile.COD;g.codingStyleParameters=i}e.codingStyleDefaultParameters=a.currentTile.COD}var u={LL:0,LH:1,HL:1,HH:2};a.prototype={parse:function(a){var b=readUint16(a,0);if(65359===b)return void this.parseCodestream(a,0,a.length);for(var c=0,d=a.length;d>c;){var e=8,f=readUint32(a,c),g=readUint32(a,c+4);if(c+=e,1===f&&(f=4294967296*readUint32(a,c)+readUint32(a,c+4),c+=8,e+=8),0===f&&(f=d-c+e),e>f)throw new Error("JPX Error: Invalid box field size");var h=f-e,i=!0;switch(g){case 1785737832:i=!1;break;case 1668246642:var j=a[c];a[c+1],a[c+2];if(1===j){var k=readUint32(a,c+3);switch(k){case 16:case 17:case 18:break;default:warn("Unknown colorspace "+k)}}else 2===j&&info("ICC profile not supported");break;case 1785737827:this.parseCodestream(a,c,c+h);break;case 1783636e3:218793738!==readUint32(a,c)&&warn("Invalid JP2 signature");break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var l=String.fromCharCode(g>>24&255,g>>16&255,g>>8&255,255&g);warn("Unsupported header type "+g+" ("+l+")")}i&&(c+=h)}},parseImageProperties:function(a){for(var b=a.getByte();b>=0;){var c=b;b=a.getByte();var d=c<<8|b;if(65361===d){a.skip(4);var e=a.getInt32()>>>0,f=a.getInt32()>>>0,g=a.getInt32()>>>0,h=a.getInt32()>>>0;a.skip(16);var i=a.getUint16();return this.width=e-g,this.height=f-h,this.componentsCount=i,void(this.bitsPerComponent=8)}}throw new Error("JPX Error: No size marker found in JPX stream")},parseCodestream:function(a,d,e){var f={};try{for(var g=!1,h=d;e>h+1;){var i=readUint16(a,h);h+=2;var j,k,l,m,n,q,r=0;switch(i){case 65359:f.mainHeader=!0;break;case 65497:break;case 65361:r=readUint16(a,h);var u={};u.Xsiz=readUint32(a,h+4),u.Ysiz=readUint32(a,h+8),u.XOsiz=readUint32(a,h+12),u.YOsiz=readUint32(a,h+16),u.XTsiz=readUint32(a,h+20),u.YTsiz=readUint32(a,h+24),u.XTOsiz=readUint32(a,h+28),u.YTOsiz=readUint32(a,h+32);var v=readUint16(a,h+36);u.Csiz=v;var w=[];j=h+38;for(var x=0;v>x;x++){var y={precision:(127&a[j])+1,isSigned:!!(128&a[j]),XRsiz:a[j+1],YRsiz:a[j+1]};b(y,u),w.push(y)}f.SIZ=u,f.components=w,c(f,w),f.QCC=[],f.COC=[];break;case 65372:r=readUint16(a,h);var z={};switch(j=h+2,k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+k)}for(z.noQuantization=8===m,z.scalarExpounded=n,z.guardBits=k>>5,l=[];r+h>j;){var A={};8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A)}z.SPqcds=l,f.mainHeader?f.QCD=z:(f.currentTile.QCD=z,f.currentTile.QCC=[]);break;case 65373:r=readUint16(a,h);var B={};j=h+2;var C;switch(f.SIZ.Csiz<257?C=a[j++]:(C=readUint16(a,j),j+=2),k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+k)}for(B.noQuantization=8===m,B.scalarExpounded=n,B.guardBits=k>>5,l=[];r+h>j;)A={},8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A);B.SPqcds=l,f.mainHeader?f.QCC[C]=B:f.currentTile.QCC[C]=B;break;case 65362:r=readUint16(a,h);var D={};j=h+2;var E=a[j++];D.entropyCoderWithCustomPrecincts=!!(1&E),D.sopMarkerUsed=!!(2&E),D.ephMarkerUsed=!!(4&E),D.progressionOrder=a[j++],D.layersCount=readUint16(a,j),j+=2,D.multipleComponentTransform=a[j++],D.decompositionLevelsCount=a[j++],D.xcb=(15&a[j++])+2,D.ycb=(15&a[j++])+2;var F=a[j++];if(D.selectiveArithmeticCodingBypass=!!(1&F),D.resetContextProbabilities=!!(2&F),D.terminationOnEachCodingPass=!!(4&F),D.verticalyStripe=!!(8&F),D.predictableTermination=!!(16&F),D.segmentationSymbolUsed=!!(32&F),D.reversibleTransformation=a[j++],D.entropyCoderWithCustomPrecincts){for(var G=[];r+h>j;){var H=a[j++];G.push({PPx:15&H,PPy:H>>4})}D.precinctsSizes=G}var I=[];if(D.selectiveArithmeticCodingBypass&&I.push("selectiveArithmeticCodingBypass"),D.resetContextProbabilities&&I.push("resetContextProbabilities"),D.terminationOnEachCodingPass&&I.push("terminationOnEachCodingPass"),D.verticalyStripe&&I.push("verticalyStripe"),D.predictableTermination&&I.push("predictableTermination"),I.length>0)throw g=!0,new Error("JPX Error: Unsupported COD options ("+I.join(", ")+")");f.mainHeader?f.COD=D:(f.currentTile.COD=D,f.currentTile.COC=[]);break;case 65424:r=readUint16(a,h),q={},q.index=readUint16(a,h+2),q.length=readUint32(a,h+4),q.dataEnd=q.length+h-2,q.partIndex=a[h+8],q.partsCount=a[h+9],f.mainHeader=!1,0===q.partIndex&&(q.COD=f.COD,q.COC=f.COC.slice(0),q.QCD=f.QCD,q.QCC=f.QCC.slice(0)),f.currentTile=q;break;case 65427:q=f.currentTile,0===q.partIndex&&(t(f,q.index),o(f)),r=q.dataEnd-h,p(f,a,h,r);break;case 65365:case 65367:case 65368:case 65380:r=readUint16(a,h);break;case 65363:throw new Error("JPX Error: Codestream code 0xFF53 (COC) is not implemented");default:throw new Error("JPX Error: Unknown codestream code: "+i.toString(16))}h+=r}}catch(J){if(g||this.failOnCorruptedImage)throw J;warn("Trying to recover from "+J.message)}this.tiles=s(f),this.width=f.SIZ.Xsiz-f.SIZ.XOsiz,this.height=f.SIZ.Ysiz-f.SIZ.YOsiz,this.componentsCount=f.SIZ.Csiz}};var v=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){var e={width:a,height:b,items:[]};this.levels.push(e),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b){for(var c,d=0,e=0;d>=1,b>>=1,d++}d--,c=this.levels[d],c.items[c.index]=e,this.currentLevel=d,delete this.value},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]++},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];return a--,0>a?(this.value=c,!1):(this.currentLevel=a,b=this.levels[a],b.items[b.index]=c,!0)}},a}(),w=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){for(var e=new Uint8Array(a*b),f=new Uint8Array(a*b),g=0,h=e.length;h>g;g++)e[g]=0,f[g]=0;var i={width:a,height:b,items:e,status:f};this.levels.push(i),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b,c){this.currentStopValue=c;for(var d=0;d>=1,b>>=1,d++}this.currentLevel=this.levels.length-1,this.minValue=this.levels[this.currentLevel].items[0]},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]=a.items[a.index]+1,a.items[a.index]>this.minValue&&(this.minValue=a.items[a.index])},nextLevel:function(){var a=this.currentLevel;if(a--,0>a)return!1;this.currentLevel=a;var b=this.levels[a];return b.items[b.index]this.minValue&&(this.minValue=b.items[b.index]),!0},isLeaf:function(){return 0===this.currentLevel},isAboveThreshold:function(){var a=this.currentLevel,b=this.levels[a];return b.items[b.index]>this.currentStopValue},isKnown:function(){var a=this.currentLevel,b=this.levels[a];return b.status[b.index]>0},setKnown:function(){var a=this.currentLevel,b=this.levels[a];b.status[b.index]=1}},a}(),x=function(){function a(a,b,c,g,h){this.width=a,this.height=b,this.contextLabelTable="HH"===c?f:"HL"===c?e:d;var i=a*b;this.neighborsSignificance=new Uint8Array(i),this.coefficentsSign=new Uint8Array(i),this.coefficentsMagnitude=h>14?new Uint32Array(i):h>6?new Uint16Array(i):new Uint8Array(i),this.processingFlags=new Uint8Array(i);var j=new Uint8Array(i);if(0!==g)for(var k=0;i>k;k++)j[k]=g;this.bitsDecoded=j,this.reset()}var b=17,c=18,d=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),e=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),f=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);return a.prototype={setDecoder:function(a){this.decoder=a},reset:function(){this.contexts=new Int8Array(19),this.contexts[0]=8,this.contexts[b]=92,this.contexts[c]=6},setNeighborsSignificance:function(a,b,c){var d,e=this.neighborsSignificance,f=this.width,g=this.height,h=b>0,i=f>b+1;a>0&&(d=c-f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),g>a+1&&(d=c+f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),h&&(e[c-1]+=1),i&&(e[c+1]+=1),e[c]|=128},runSignificancePropogationPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.coefficentsMagnitude,e=this.coefficentsSign,f=this.neighborsSignificance,g=this.processingFlags,h=this.contexts,i=this.contextLabelTable,j=this.bitsDecoded,k=-2,l=1,m=2,n=0;c>n;n+=4)for(var o=0;b>o;o++)for(var p=n*b+o,q=0;4>q;q++,p+=b){var r=n+q;if(r>=c)break;if(g[p]&=k,!d[p]&&f[p]){var s=i[f[p]],t=a.readBit(h,s);if(t){var u=this.decodeSignBit(r,o,p);e[p]=u,d[p]=1,this.setNeighborsSignificance(r,o,p),g[p]|=m}j[p]++,g[p]|=l}}},decodeSignBit:function(a,b,c){var d,e,f,g,h,i,j=this.width,k=this.height,l=this.coefficentsMagnitude,m=this.coefficentsSign;g=b>0&&0!==l[c-1],j>b+1&&0!==l[c+1]?(f=m[c+1],g?(e=m[c-1],d=1-f-e):d=1-f-f):g?(e=m[c-1],d=1-e-e):d=0;var n=3*d;return g=a>0&&0!==l[c-j],k>a+1&&0!==l[c+j]?(f=m[c+j],g?(e=m[c-j],d=1-f-e+n):d=1-f-f+n):g?(e=m[c-j],d=1-e-e+n):d=n,d>=0?(h=9+d,i=this.decoder.readBit(this.contexts,h)):(h=9-d,i=1^this.decoder.readBit(this.contexts,h)),i},runMagnitudeRefinementPass:function(){for(var a,b=this.decoder,c=this.width,d=this.height,e=this.coefficentsMagnitude,f=this.neighborsSignificance,g=this.contexts,h=this.bitsDecoded,i=this.processingFlags,j=1,k=2,l=c*d,m=4*c,n=0;l>n;n=a){a=Math.min(l,n+m);for(var o=0;c>o;o++)for(var p=n+o;a>p;p+=c)if(e[p]&&0===(i[p]&j)){var q=16;if(0!==(i[p]&k)){i[p]^=k;var r=127&f[p];q=0===r?15:14}var s=b.readBit(g,q);e[p]=e[p]<<1|s,h[p]++,i[p]|=j}}},runCleanupPass:function(){for(var a,d=this.decoder,e=this.width,f=this.height,g=this.neighborsSignificance,h=this.coefficentsMagnitude,i=this.coefficentsSign,j=this.contexts,k=this.contextLabelTable,l=this.bitsDecoded,m=this.processingFlags,n=1,o=2,p=e,q=2*e,r=3*e,s=0;f>s;s=a){a=Math.min(s+4,f);for(var t=s*e,u=f>s+3,v=0;e>v;v++){var w,x=t+v,y=u&&0===m[x]&&0===m[x+p]&&0===m[x+q]&&0===m[x+r]&&0===g[x]&&0===g[x+p]&&0===g[x+q]&&0===g[x+r],z=0,A=x,B=s;if(y){var C=d.readBit(j,c);if(!C){l[x]++,l[x+p]++,l[x+q]++,l[x+r]++;continue}z=d.readBit(j,b)<<1|d.readBit(j,b),0!==z&&(B=s+z,A+=z*e),w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o,A=x;for(var D=s;B>=D;D++,A+=e)l[A]++;z++}for(B=s+z;a>B;B++,A+=e)if(!h[A]&&0===(m[A]&n)){var E=k[g[A]],F=d.readBit(j,E);1===F&&(w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o),l[A]++}}}},checkSegmentationSymbol:function(){var a=this.decoder,c=this.contexts,d=a.readBit(c,b)<<3|a.readBit(c,b)<<2|a.readBit(c,b)<<1|a.readBit(c,b);if(10!==d)throw new Error("JPX Error: Invalid segmentation symbol")}},a}(),y=function(){function a(){}return a.prototype.calculate=function(a,b,c){for(var d=a[0],e=1,f=a.length;f>e;e++)d=this.iterate(d,a[e],b,c);return d},a.prototype.extend=function(a,b,c){var d=b-1,e=b+1,f=b+c-2,g=b+c;a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d]=a[e],a[g]=a[f]},a.prototype.iterate=function(a,b,c,d){var e,f,g,h,i,j,k=a.width,l=a.height,m=a.items,n=b.width,o=b.height,p=b.items;for(g=0,e=0;l>e;e++)for(h=2*e*n,f=0;k>f;f++,g++,h+=2)p[h]=m[g];m=a.items=null;var q=4,r=new Float32Array(n+2*q);if(1===n){if(0!==(1&c))for(j=0,g=0;o>j;j++,g+=n)p[g]*=.5}else for(j=0,g=0;o>j;j++,g+=n)r.set(p.subarray(g,g+n),q),this.extend(r,q,n),this.filter(r,q,n),p.set(r.subarray(q,q+n),g);var s=16,t=[];for(e=0;s>e;e++)t.push(new Float32Array(o+2*q));var u,v=0;if(a=q+o,1===o){if(0!==(1&d))for(i=0;n>i;i++)p[i]*=.5}else for(i=0;n>i;i++){if(0===v){for(s=Math.min(n-i,s),g=i,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)t[u][h]=p[g+u];v=s}v--;var w=t[v];if(this.extend(w,q,o),this.filter(w,q,o),0===v)for(g=i-s+1,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)p[g+u]=t[u][h]}return{width:n,height:o,items:p}},a}(),z=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f,g,h,i=-1.586134342059924,j=-.052980118572961,k=.882911075530934,l=.443506852043971,m=1.230174104914001,n=1/m;for(e=b-3,f=d+4;f--;e+=2)a[e]*=n;for(e=b-2,g=l*a[e-1],f=d+3;f--&&(h=l*a[e+1],a[e]=m*a[e]-g-h,f--);e+=2)e+=2,g=l*a[e+1],a[e]=m*a[e]-g-h;for(e=b-1,g=k*a[e-1],f=d+2;f--&&(h=k*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=k*a[e+1],a[e]-=g+h;for(e=b,g=j*a[e-1],f=d+1;f--&&(h=j*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=j*a[e+1],a[e]-=g+h;if(0!==d)for(e=b+1,g=i*a[e-1],f=d;f--&&(h=i*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=i*a[e+1],a[e]-=g+h},a}(),A=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f;for(e=b,f=d+1;f--;e+=2)a[e]-=a[e-1]+a[e+1]+2>>2;for(e=b+1,f=d;f--;e+=2)a[e]+=a[e-1]+a[e+1]>>1},a}();return a}(),ArithmeticDecoder=function(){function a(a,b,c){this.data=a,this.bp=b,this.dataEnd=c,this.chigh=a[b],this.clow=0,this.byteIn(),this.chigh=this.chigh<<7&65535|this.clow>>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var b=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{ +qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];return a.prototype={byteIn:function(){var a=this.data,b=this.bp;if(255===a[b]){var c=a[b+1];c>143?(this.clow+=65280,this.ct=8):(b++,this.clow+=a[b]<<9,this.ct=7,this.bp=b)}else b++,this.clow+=b65535&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a,c){var d,e=a[c]>>1,f=1&a[c],g=b[e],h=g.qe,i=this.a-h;if(this.chighi?(i=h,d=f,e=g.nmps):(i=h,d=1^f,1===g.switchFlag&&(f=d),e=g.nlps);else{if(this.chigh-=h,0!==(32768&i))return this.a=i,f;h>i?(d=1^f,1===g.switchFlag&&(f=d),e=g.nlps):(d=f,e=g.nmps)}do 0===this.ct&&this.byteIn(),i<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,this.ct--;while(0===(32768&i));return this.a=i,a[c]=e<<1|f,d}},a}(),globalScope="undefined"==typeof window?this:window,isWorker="undefined"==typeof window,FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0],TextRenderingMode={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},AnnotationType={WIDGET:1,TEXT:2,LINK:3},StreamType={UNKNOWN:0,FLATE:1,LZW:2,DCT:3,JPX:4,JBIG:5,A85:6,AHX:7,CCF:8,RL:9},FontType={UNKNOWN:0,TYPE1:1,TYPE1C:2,CIDFONTTYPE0:3,CIDFONTTYPE0C:4,TRUETYPE:5,CIDFONTTYPE2:6,TYPE3:7,OPENTYPE:8,TYPE0:9,MMTYPE1:10};globalScope.PDFJS||(globalScope.PDFJS={}),globalScope.PDFJS.pdfBug=!1,PDFJS.VERBOSITY_LEVELS={errors:0,warnings:1,infos:5};var OPS=PDFJS.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91},UNSUPPORTED_FEATURES=PDFJS.UNSUPPORTED_FEATURES={unknown:"unknown",forms:"forms",javaScript:"javaScript",smask:"smask",shadingPattern:"shadingPattern",font:"font"},UnsupportedManager=PDFJS.UnsupportedManager=function(){var a=[];return{listen:function(b){a.push(b)},notify:function(b){warn('Unsupported feature "'+b+'"');for(var c=0,d=a.length;d>c;c++)a[c](b)}}}();PDFJS.isValidUrl=isValidUrl,PDFJS.shadow=shadow;var PasswordResponses=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},PasswordException=function(){function a(a,b){this.name="PasswordException",this.message=a,this.code=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.PasswordException=PasswordException;var UnknownErrorException=function(){function a(a,b){this.name="UnknownErrorException",this.message=a,this.details=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnknownErrorException=UnknownErrorException;var InvalidPDFException=function(){function a(a){this.name="InvalidPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.InvalidPDFException=InvalidPDFException;var MissingPDFException=function(){function a(a){this.name="MissingPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.MissingPDFException=MissingPDFException;var UnexpectedResponseException=function(){function a(a,b){this.name="UnexpectedResponseException",this.message=a,this.status=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnexpectedResponseException=UnexpectedResponseException;var NotImplementedException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="NotImplementedException",a.constructor=a,a}(),MissingDataException=function(){function a(a,b){this.begin=a,this.end=b,this.message="Missing data ["+a+", "+b+")"}return a.prototype=new Error,a.prototype.name="MissingDataException",a.constructor=a,a}(),XRefParseException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="XRefParseException",a.constructor=a,a}();Object.defineProperty(PDFJS,"isLittleEndian",{configurable:!0,get:function(){return shadow(PDFJS,"isLittleEndian",isLittleEndian())}}),Object.defineProperty(PDFJS,"hasCanvasTypedArrays",{configurable:!0,get:function(){return shadow(PDFJS,"hasCanvasTypedArrays",hasCanvasTypedArrays())}});var Uint32ArrayView=function(){function a(a,b){this.buffer=a,this.byteLength=a.length,this.length=void 0===b?this.byteLength>>2:b,c(this.length)}function b(a){return{get:function(){var b=this.buffer,c=a<<2;return(b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24)>>>0},set:function(b){var c=this.buffer,d=a<<2;c[d]=255&b,c[d+1]=b>>8&255,c[d+2]=b>>16&255,c[d+3]=b>>>24&255}}}function c(c){for(;c>d;)Object.defineProperty(a.prototype,d,b(d)),d++}a.prototype=Object.create(null);var d=0;return a}(),IDENTITY_MATRIX=[1,0,0,1,0,0],Util=PDFJS.Util=function(){function a(){}var b=["rgb(",0,",",0,",",0,")"];return a.makeCssRgb=function(a,c,d){return b[1]=a,b[3]=c,b[5]=d,b.join("")},a.transform=function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},a.applyTransform=function(a,b){var c=a[0]*b[0]+a[1]*b[2]+b[4],d=a[0]*b[1]+a[1]*b[3]+b[5];return[c,d]},a.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2],d=(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,e=(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c;return[d,e]},a.getAxialAlignedBoundingBox=function(b,c){var d=a.applyTransform(b,c),e=a.applyTransform(b.slice(2,4),c),f=a.applyTransform([b[0],b[3]],c),g=a.applyTransform([b[2],b[1]],c);return[Math.min(d[0],e[0],f[0],g[0]),Math.min(d[1],e[1],f[1],g[1]),Math.max(d[0],e[0],f[0],g[0]),Math.max(d[1],e[1],f[1],g[1])]},a.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]},a.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]},a.singularValueDecompose2dScale=function(a){var b=[a[0],a[2],a[1],a[3]],c=a[0]*b[0]+a[1]*b[2],d=a[0]*b[1]+a[1]*b[3],e=a[2]*b[0]+a[3]*b[2],f=a[2]*b[1]+a[3]*b[3],g=(c+f)/2,h=Math.sqrt((c+f)*(c+f)-4*(c*f-e*d))/2,i=g+h||1,j=g-h||1;return[Math.sqrt(i),Math.sqrt(j)]},a.normalizeRect=function(a){var b=a.slice(0);return a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]),a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]),b},a.intersect=function(b,c){function d(a,b){return a-b}var e=[b[0],b[2],c[0],c[2]].sort(d),f=[b[1],b[3],c[1],c[3]].sort(d),g=[];return b=a.normalizeRect(b),c=a.normalizeRect(c),e[0]===b[0]&&e[1]===c[0]||e[0]===c[0]&&e[1]===b[0]?(g[0]=e[1],g[2]=e[2],f[0]===b[1]&&f[1]===c[1]||f[0]===c[1]&&f[1]===b[1]?(g[1]=f[1],g[3]=f[2],g):!1):!1},a.sign=function(a){return 0>a?-1:1},a.appendToArray=function(a,b){Array.prototype.push.apply(a,b)},a.prependToArray=function(a,b){Array.prototype.unshift.apply(a,b)},a.extendObj=function(a,b){for(var c in b)a[c]=b[c]},a.getInheritableProperty=function(a,b){for(;a&&!a.has(b);)a=a.get("Parent");return a?a.get(b):null},a.inherit=function(a,b,c){a.prototype=Object.create(b.prototype),a.prototype.constructor=a;for(var d in c)a.prototype[d]=c[d]},a.loadScript=function(a,b){var c=document.createElement("script"),d=!1;c.setAttribute("src",a),b&&(c.onload=function(){d||b(),d=!0}),document.getElementsByTagName("head")[0].appendChild(c)},a}(),PageViewport=PDFJS.PageViewport=function(){function a(a,b,c,d,e,f){this.viewBox=a,this.scale=b,this.rotation=c,this.offsetX=d,this.offsetY=e;var g,h,i,j,k=(a[2]+a[0])/2,l=(a[3]+a[1])/2;switch(c%=360,c=0>c?c+360:c){case 180:g=-1,h=0,i=0,j=1;break;case 90:g=0,h=1,i=1,j=0;break;case 270:g=0,h=-1,i=-1,j=0;break;default:g=1,h=0,i=0,j=-1}f&&(i=-i,j=-j);var m,n,o,p;0===g?(m=Math.abs(l-a[1])*b+d,n=Math.abs(k-a[0])*b+e,o=Math.abs(a[3]-a[1])*b,p=Math.abs(a[2]-a[0])*b):(m=Math.abs(k-a[0])*b+d,n=Math.abs(l-a[1])*b+e,o=Math.abs(a[2]-a[0])*b,p=Math.abs(a[3]-a[1])*b),this.transform=[g*b,h*b,i*b,j*b,m-g*b*k-i*b*l,n-h*b*k-j*b*l],this.width=o,this.height=p,this.fontScale=b}return a.prototype={clone:function(b){b=b||{};var c="scale"in b?b.scale:this.scale,d="rotation"in b?b.rotation:this.rotation;return new a(this.viewBox.slice(),c,d,this.offsetX,this.offsetY,b.dontFlip)},convertToViewportPoint:function(a,b){return Util.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=Util.applyTransform([a[0],a[1]],this.transform),c=Util.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],c[0],c[1]]},convertToPdfPoint:function(a,b){return Util.applyInverseTransform([a,b],this.transform)}},a}(),PDFStringTranslateTable=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];PDFJS.createPromiseCapability=createPromiseCapability,function(){function a(a){this._status=b,this._handlers=[];try{a.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(c){this._reject(c)}}if(globalScope.Promise)return"function"!=typeof globalScope.Promise.all&&(globalScope.Promise.all=function(a){var b,c,d=0,e=[],f=new globalScope.Promise(function(a,d){b=a,c=d});return a.forEach(function(a,f){d++,a.then(function(a){e[f]=a,d--,0===d&&b(e)},c)}),0===d&&b(e),f}),"function"!=typeof globalScope.Promise.resolve&&(globalScope.Promise.resolve=function(a){return new globalScope.Promise(function(b){b(a)})}),"function"!=typeof globalScope.Promise.reject&&(globalScope.Promise.reject=function(a){return new globalScope.Promise(function(b,c){c(a)})}),void("function"!=typeof globalScope.Promise.prototype["catch"]&&(globalScope.Promise.prototype["catch"]=function(a){return globalScope.Promise.prototype.then(void 0,a)}));var b=0,c=1,d=2,e=500,f={handlers:[],running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(a){a._status!==b&&(this.handlers=this.handlers.concat(a._handlers),a._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(var a=1,b=Date.now()+a;this.handlers.length>0;){var e=this.handlers.shift(),f=e.thisPromise._status,g=e.thisPromise._value;try{f===c?"function"==typeof e.onResolve&&(g=e.onResolve(g)):"function"==typeof e.onReject&&(g=e.onReject(g),f=c,e.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(e.thisPromise))}catch(h){f=d,g=h}if(e.nextPromise._updateStatus(f,g),Date.now()>=b)break}return this.handlers.length>0?void setTimeout(this.runHandlers.bind(this),0):void(this.running=!1)},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var b=0;be){var c=this.unhandledRejections[b].promise._value,d="Unhandled rejection: "+c;c.stack&&(d+="\n"+c.stack),warn(d),this.unhandledRejections.splice(b),b--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),e))}};a.all=function(b){function c(a){g._status!==d&&(i=[],f(a))}var e,f,g=new a(function(a,b){e=a,f=b}),h=b.length,i=[];if(0===h)return e(i),g;for(var j=0,k=b.length;k>j;++j){var l=b[j],m=function(a){return function(b){g._status!==d&&(i[a]=b,h--,0===h&&e(i))}}(j);a.isPromise(l)?l.then(m,c):m(l)}return g},a.isPromise=function(a){return a&&"function"==typeof a.then},a.resolve=function(b){return new a(function(a){a(b)})},a.reject=function(b){return new a(function(a,c){c(b)})},a.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(b,e){if(this._status!==c&&this._status!==d){if(b===c&&a.isPromise(e))return void e.then(this._updateStatus.bind(this,c),this._updateStatus.bind(this,d));this._status=b,this._value=e,b===d&&0===this._handlers.length&&(this._unhandledRejection=!0,f.addUnhandledRejection(this)),f.scheduleHandlers(this)}},_resolve:function(a){this._updateStatus(c,a)},_reject:function(a){this._updateStatus(d,a)},then:function(b,c){var d=new a(function(a,b){this.resolve=a,this.reject=b});return this._handlers.push({thisPromise:this,onResolve:b,onReject:c,nextPromise:d}),f.scheduleHandlers(this),d},"catch":function(a){return this.then(void 0,a)}},globalScope.Promise=a}();var StatTimer=function(){function a(a,b,c){for(;a.lengthb;++b){var g=d[b].name;g.length>f&&(f=g.length)}for(b=0,c=d.length;c>b;++b){var h=d[b],i=h.end-h.start;e+=a(h.name," ",f)+" "+i+"ms\n"}return e}},b}();PDFJS.createBlob=function(a,b){if("undefined"!=typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;return c.append(a),c.getBlob(b)},PDFJS.createObjectURL=function(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(b,c){if(!PDFJS.disableCreateObjectURL&&"undefined"!=typeof URL&&URL.createObjectURL){var d=PDFJS.createBlob(b,c);return URL.createObjectURL(d)}for(var e="data:"+c+";base64,",f=0,g=b.length;g>f;f+=3){var h=255&b[f],i=255&b[f+1],j=255&b[f+2],k=h>>2,l=(3&h)<<4|i>>4,m=g>f+1?(15&i)<<2|j>>6:64,n=g>f+2?63&j:64;e+=a[k]+a[l]+a[m]+a[n]}return e}}(),MessageHandler.prototype={on:function(a,b,c){var d=this.actionHandler;d[a]&&error('There is already an actionName called "'+a+'"'),d[a]=[b,c]},send:function(a,b,c){var d={action:a,data:b};this.postMessage(d,c)},sendWithPromise:function(a,b,c){var d=this.callbackIndex++,e={action:a,data:b,callbackId:d},f=createPromiseCapability();this.callbacksCapabilities[d]=f;try{this.postMessage(e,c)}catch(g){f.reject(g)}return f.promise},postMessage:function(a,b){b&&this.postMessageTransfers?this.comObj.postMessage(a,b):this.comObj.postMessage(a)}}; + + +/*** EXPORTS FROM exports-loader ***/ +module.exports = JpxImage; + +/***/ }), + +/***/ "../codecs/openJPEG-FixedMemory.js": +/*!*****************************************!*\ + !*** ../codecs/openJPEG-FixedMemory.js ***! + \*****************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +/*! OpenJPEG.js - v0.2.0 - 2016-06-07 | (c) 2016 Chris Hafey | https://github.com/chafey/openjpeg */ + +// Notes: +// - Had to add export default at the bottom +// - Had to patch parsejsfunc, see https://github.com/svaarala/duktape/issues/410 +var OpenJPEG = function(Module) { + Module = Module || {}; + +var Module;if(!Module)Module=(typeof OpenJPEG!=="undefined"?OpenJPEG:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module["stringToUTF16"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module["lengthBytesUTF16"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module["stringToUTF32"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module["lengthBytesUTF32"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||4e8;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+25664;__ATINIT__.push();allocate([131,192,202,161,69,182,251,63,127,251,58,112,206,136,234,63,127,251,58,112,206,136,234,63,131,192,202,161,69,182,251,63,225,122,20,174,71,225,252,63,94,186,73,12,2,43,249,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,248,63,0,0,0,0,0,0,6,64,0,0,0,0,0,128,21,64,92,143,194,245,40,92,37,64,215,163,112,61,10,87,53,64,246,40,92,143,194,85,69,64,133,235,81,184,30,85,85,64,102,102,102,102,102,86,101,64,205,204,204,204,204,84,117,64,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,173,250,92,109,197,254,230,63,86,125,174,182,98,127,237,63,199,75,55,137,65,96,249,63,242,210,77,98,16,88,8,64,250,126,106,188,116,19,24,64,133,235,81,184,30,5,40,64,0,0,0,0,0,0,56,64,92,143,194,245,40,252,71,64,236,81,184,30,133,251,87,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,113,61,10,215,163,112,255,63,104,145,237,124,63,181,16,64,117,147,24,4,86,206,32,64,102,102,102,102,102,230,48,64,236,81,184,30,133,235,64,64,92,143,194,245,40,236,80,64,154,153,153,153,153,233,96,64,154,153,153,153,153,233,112,64,51,51,51,51,51,231,128,64,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,164,112,61,10,215,163,0,64,236,81,184,30,133,235,14,64,119,190,159,26,47,157,32,64,174,71,225,122,20,46,49,64,123,20,174,71,225,90,65,64,246,40,92,143,194,101,81,64,154,153,153,153,153,105,97,64,154,153,153,153,153,105,113,64,154,153,153,153,153,105,129,64,0,0,0,0,0,0,0,0,4,0,0,0,67,80,82,76,0,0,0,0,0,0,0,0,76,82,67,80,0,0,0,0,3,0,0,0,80,67,82,76,0,0,0,0,1,0,0,0,82,76,67,80,0,0,0,0,2,0,0,0,82,80,67,76,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,144,255,0,0,12,0,0,0,1,0,0,0,82,255,0,0,20,0,0,0,2,0,0,0,83,255,0,0,20,0,0,0,3,0,0,0,94,255,0,0,20,0,0,0,4,0,0,0,92,255,0,0,20,0,0,0,5,0,0,0,93,255,0,0,20,0,0,0,6,0,0,0,95,255,0,0,20,0,0,0,7,0,0,0,81,255,0,0,2,0,0,0,8,0,0,0,85,255,0,0,4,0,0,0,9,0,0,0,87,255,0,0,4,0,0,0,10,0,0,0,88,255,0,0,16,0,0,0,11,0,0,0,96,255,0,0,4,0,0,0,12,0,0,0,97,255,0,0,16,0,0,0,13,0,0,0,145,255,0,0,0,0,0,0,0,0,0,0,99,255,0,0,4,0,0,0,14,0,0,0,100,255,0,0,20,0,0,0,15,0,0,0,116,255,0,0,20,0,0,0,16,0,0,0,120,255,0,0,4,0,0,0,17,0,0,0,117,255,0,0,20,0,0,0,18,0,0,0,119,255,0,0,20,0,0,0,19,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,4,0,0,0,8,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,32,32,80,106,20,0,0,0,112,121,116,102,21,0,0,0,104,50,112,106,22,0,0,0,114,100,104,105,23,0,0,0,114,108,111,99,24,0,0,0,99,99,112,98,25,0,0,0,114,108,99,112,26,0,0,0,112,97,109,99,27,0,0,0,102,101,100,99,28,0,0,0,1,86,0,0,0,0,0,0,164,4,0,0,180,4,0,0,1,86,0,0,1,0,0,0,180,4,0,0,164,4,0,0,1,52,0,0,0,0,0,0,196,4,0,0,68,5,0,0,1,52,0,0,1,0,0,0,212,4,0,0,84,5,0,0,1,24,0,0,0,0,0,0,228,4,0,0,164,5,0,0,1,24,0,0,1,0,0,0,244,4,0,0,180,5,0,0,193,10,0,0,0,0,0,0,4,5,0,0,4,6,0,0,193,10,0,0,1,0,0,0,20,5,0,0,20,6,0,0,33,5,0,0,0,0,0,0,36,5,0,0,36,8,0,0,33,5,0,0,1,0,0,0,52,5,0,0,52,8,0,0,33,2,0,0,0,0,0,0,68,9,0,0,164,8,0,0,33,2,0,0,1,0,0,0,84,9,0,0,180,8,0,0,1,86,0,0,0,0,0,0,100,5,0,0,84,5,0,0,1,86,0,0,1,0,0,0,116,5,0,0,68,5,0,0,1,84,0,0,0,0,0,0,132,5,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,5,0,0,84,6,0,0,1,72,0,0,0,0,0,0,164,5,0,0,68,6,0,0,1,72,0,0,1,0,0,0,180,5,0,0,84,6,0,0,1,56,0,0,0,0,0,0,196,5,0,0,68,6,0,0,1,56,0,0,1,0,0,0,212,5,0,0,84,6,0,0,1,48,0,0,0,0,0,0,228,5,0,0,164,6,0,0,1,48,0,0,1,0,0,0,244,5,0,0,180,6,0,0,1,36,0,0,0,0,0,0,4,6,0,0,196,6,0,0,1,36,0,0,1,0,0,0,20,6,0,0,212,6,0,0,1,28,0,0,0,0,0,0,36,6,0,0,4,7,0,0,1,28,0,0,1,0,0,0,52,6,0,0,20,7,0,0,1,22,0,0,0,0,0,0,36,8,0,0,36,7,0,0,1,22,0,0,1,0,0,0,52,8,0,0,52,7,0,0,1,86,0,0,0,0,0,0,100,6,0,0,84,6,0,0,1,86,0,0,1,0,0,0,116,6,0,0,68,6,0,0,1,84,0,0,0,0,0,0,132,6,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,6,0,0,84,6,0,0,1,81,0,0,0,0,0,0,164,6,0,0,100,6,0,0,1,81,0,0,1,0,0,0,180,6,0,0,116,6,0,0,1,72,0,0,0,0,0,0,196,6,0,0,132,6,0,0,1,72,0,0,1,0,0,0,212,6,0,0,148,6,0,0,1,56,0,0,0,0,0,0,228,6,0,0,164,6,0,0,1,56,0,0,1,0,0,0,244,6,0,0,180,6,0,0,1,52,0,0,0,0,0,0,4,7,0,0,196,6,0,0,1,52,0,0,1,0,0,0,20,7,0,0,212,6,0,0,1,48,0,0,0,0,0,0,36,7,0,0,228,6,0,0,1,48,0,0,1,0,0,0,52,7,0,0,244,6,0,0,1,40,0,0,0,0,0,0,68,7,0,0,228,6,0,0,1,40,0,0,1,0,0,0,84,7,0,0,244,6,0,0,1,36,0,0,0,0,0,0,100,7,0,0,4,7,0,0,1,36,0,0,1,0,0,0,116,7,0,0,20,7,0,0,1,34,0,0,0,0,0,0,132,7,0,0,36,7,0,0,1,34,0,0,1,0,0,0,148,7,0,0,52,7,0,0,1,28,0,0,0,0,0,0,164,7,0,0,68,7,0,0,1,28,0,0,1,0,0,0,180,7,0,0,84,7,0,0,1,24,0,0,0,0,0,0,196,7,0,0,100,7,0,0,1,24,0,0,1,0,0,0,212,7,0,0,116,7,0,0,1,22,0,0,0,0,0,0,228,7,0,0,132,7,0,0,1,22,0,0,1,0,0,0,244,7,0,0,148,7,0,0,1,20,0,0,0,0,0,0,4,8,0,0,164,7,0,0,1,20,0,0,1,0,0,0,20,8,0,0,180,7,0,0,1,18,0,0,0,0,0,0,36,8,0,0,196,7,0,0,1,18,0,0,1,0,0,0,52,8,0,0,212,7,0,0,1,17,0,0,0,0,0,0,68,8,0,0,228,7,0,0,1,17,0,0,1,0,0,0,84,8,0,0,244,7,0,0,193,10,0,0,0,0,0,0,100,8,0,0,4,8,0,0,193,10,0,0,1,0,0,0,116,8,0,0,20,8,0,0,193,9,0,0,0,0,0,0,132,8,0,0,36,8,0,0,193,9,0,0,1,0,0,0,148,8,0,0,52,8,0,0,161,8,0,0,0,0,0,0,164,8,0,0,68,8,0,0,161,8,0,0,1,0,0,0,180,8,0,0,84,8,0,0,33,5,0,0,0,0,0,0,196,8,0,0,100,8,0,0,33,5,0,0,1,0,0,0,212,8,0,0,116,8,0,0,65,4,0,0,0,0,0,0,228,8,0,0,132,8,0,0,65,4,0,0,1,0,0,0,244,8,0,0,148,8,0,0,161,2,0,0,0,0,0,0,4,9,0,0,164,8,0,0,161,2,0,0,1,0,0,0,20,9,0,0,180,8,0,0,33,2,0,0,0,0,0,0,36,9,0,0,196,8,0,0,33,2,0,0,1,0,0,0,52,9,0,0,212,8,0,0,65,1,0,0,0,0,0,0,68,9,0,0,228,8,0,0,65,1,0,0,1,0,0,0,84,9,0,0,244,8,0,0,17,1,0,0,0,0,0,0,100,9,0,0,4,9,0,0,17,1,0,0,1,0,0,0,116,9,0,0,20,9,0,0,133,0,0,0,0,0,0,0,132,9,0,0,36,9,0,0,133,0,0,0,1,0,0,0,148,9,0,0,52,9,0,0,73,0,0,0,0,0,0,0,164,9,0,0,68,9,0,0,73,0,0,0,1,0,0,0,180,9,0,0,84,9,0,0,37,0,0,0,0,0,0,0,196,9,0,0,100,9,0,0,37,0,0,0,1,0,0,0,212,9,0,0,116,9,0,0,21,0,0,0,0,0,0,0,228,9,0,0,132,9,0,0,21,0,0,0,1,0,0,0,244,9,0,0,148,9,0,0,9,0,0,0,0,0,0,0,4,10,0,0,164,9,0,0,9,0,0,0,1,0,0,0,20,10,0,0,180,9,0,0,5,0,0,0,0,0,0,0,36,10,0,0,196,9,0,0,5,0,0,0,1,0,0,0,52,10,0,0,212,9,0,0,1,0,0,0,0,0,0,0,36,10,0,0,228,9,0,0,1,0,0,0,1,0,0,0,52,10,0,0,244,9,0,0,1,86,0,0,0,0,0,0,68,10,0,0,68,10,0,0,1,86,0,0,1,0,0,0,84,10,0,0,84,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,11,0,0,12,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,38,94,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,64,4,32,0,32,2,128,0,128,8,16,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,0,3,128,4,0,6,128,7,0,9,128,10,0,12,128,13,0,15,128,16,0,18,128,19,0,21,128,22,0,24,128,25,0,27,128,28,0,30,128,31,0,33,128,34,0,36,128,37,0,39,128,40,0,42,128,43,0,45,128,46,0,48,128,49,0,51,128,52,0,54,128,55,0,57,128,58,0,60,128,61,0,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,0,81,128,82,0,84,128,85,0,87,128,88,0,90,128,91,0,93,128,94,0,96,128,97,0,99,128,100,0,102,128,103,0,105,128,106,0,108,128,109,0,111,128,112,0,114,128,115,0,117,128,118,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,128,38,128,39,128,40,128,41,0,43,0,44,0,45,128,46,128,47,0,49,0,50,128,51,128,52,0,54,0,55,128,56,0,58,0,59,128,60,0,62,128,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,128,81,0,83,128,84,0,86,0,88,128,89,0,91,0,93,128,94,128,96,0,98,0,100,128,101,128,103,0,105,0,107,0,109,128,110,128,112,128,114,128,116,0,118,0,120,0,122,0,124,0,126,0,24,128,23,0,23,128,22,0,22,128,21,0,21,128,20,0,20,128,19,0,19,128,18,0,18,128,17,0,17,128,16,0,16,128,15,0,15,128,14,0,14,128,13,0,13,128,12,0,12,128,11,0,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,0,5,128,4,0,4,128,3,0,3,128,2,0,2,128,1,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,1,128,1,0,2,128,2,0,3,128,3,0,4,128,4,0,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,0,11,128,11,0,12,128,12,0,13,128,13,0,14,128,14,0,15,128,15,0,16,128,16,0,17,128,17,0,18,128,18,0,19,128,19,0,20,128,20,0,21,128,21,0,22,128,22,0,23,128,23,0,32,0,31,0,30,0,29,0,28,0,27,128,26,128,25,128,24,128,23,0,23,0,22,0,21,128,20,128,19,0,19,0,18,128,17,128,16,0,16,0,15,128,14,0,14,0,13,128,12,0,12,128,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,128,5,0,5,128,4,0,4,0,4,128,3,0,3,0,3,128,2,128,2,0,2,0,2,128,1,128,1,0,1,0,1,0,1,128,0,128,0,128,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,116,104,101,32,100,101,99,111,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,104,101,97,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,33,0,91,69,82,82,79,82,93,32,37,115,0,83,116,114,101,97,109,32,114,101,97,99,104,101,100,32,105,116,115,32,101,110,100,32,33,10,0,69,114,114,111,114,32,111,110,32,119,114,105,116,105,110,103,32,115,116,114,101,97,109,33,10,0,83,116,114,101,97,109,32,101,114,114,111,114,33,10,0,50,46,49,46,48,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,115,101,116,117,112,95,100,101,99,111,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,114,101,97,100,95,104,101,97,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,119,98,0,114,98,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,44,37,100,93,10,0,68,101,112,114,101,99,97,116,101,100,32,102,105,101,108,100,115,32,99,112,95,99,105,110,101,109,97,32,111,114,32,99,112,95,114,115,105,122,32,97,114,101,32,117,115,101,100,10,80,108,101,97,115,101,32,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32,111,110,108,121,32,116,104,101,32,114,115,105,122,32,102,105,101,108,100,10,83,101,101,32,111,112,101,110,106,112,101,103,46,104,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,10,0,84,104,101,32,100,101,115,105,114,101,100,32,109,97,120,105,109,117,109,32,99,111,100,101,115,116,114,101,97,109,32,115,105,122,101,32,104,97,115,32,108,105,109,105,116,101,100,10,97,116,32,108,101,97,115,116,32,111,110,101,32,111,102,32,116,104,101,32,100,101,115,105,114,101,100,32,113,117,97,108,105,116,121,32,108,97,121,101,114,115,10,0,74,80,69,71,32,50,48,48,48,32,83,99,97,108,97,98,108,101,32,68,105,103,105,116,97,108,32,67,105,110,101,109,97,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,49,32,115,105,110,103,108,101,32,113,117,97,108,105,116,121,32,108,97,121,101,114,45,62,32,78,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,45,62,32,82,97,116,101,32,111,102,32,116,104,101,32,108,97,115,116,32,108,97,121,101,114,32,40,37,51,46,49,102,41,32,119,105,108,108,32,98,101,32,117,115,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,60,61,32,53,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,53,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,54,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,51,48,50,48,56,51,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,48,52,49,54,54,54,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,51,32,99,111,109,112,111,110,101,110,116,115,45,62,32,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,115,105,103,110,101,100,0,117,110,115,105,103,110,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,80,114,101,99,105,115,105,111,110,32,111,102,32,101,97,99,104,32,99,111,109,112,111,110,101,110,116,32,115,104,97,108,108,32,98,101,32,49,50,32,98,105,116,115,32,117,110,115,105,103,110,101,100,45,62,32,65,116,32,108,101,97,115,116,32,99,111,109,112,111,110,101,110,116,32,37,100,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,32,98,105,116,115,44,32,37,115,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,50,48,52,56,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,49,48,56,48,10,45,62,32,73,110,112,117,116,32,105,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,52,48,57,54,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,50,49,54,48,10,45,62,32,73,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,52,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,76,111,110,103,32,84,101,114,109,32,83,116,111,114,97,103,101,32,112,114,111,102,105,108,101,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,66,114,111,97,100,99,97,115,116,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,73,77,70,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,97,114,116,45,50,32,112,114,111,102,105,108,101,32,100,101,102,105,110,101,100,10,98,117,116,32,110,111,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,46,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,85,110,115,117,112,112,111,114,116,101,100,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,117,115,101,114,32,101,110,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,37,115,37,115,0,67,114,101,97,116,101,100,32,98,121,32,79,112,101,110,74,80,69,71,32,118,101,114,115,105,111,110,32,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,104,101,99,107,105,110,103,32,116,104,101,32,112,111,99,32,118,97,108,117,101,115,46,10,0,77,105,115,115,105,110,103,32,112,97,99,107,101,116,115,32,112,111,115,115,105,98,108,101,32,108,111,115,115,32,111,102,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,101,109,112,32,98,117,102,102,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,70,97,105,108,101,100,32,116,111,32,105,110,118,101,114,115,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,110,111,114,109,115,32,10,0,70,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,106,50,107,32,109,99,116,32,101,110,99,111,100,105,110,103,10,0,67,97,110,110,111,116,32,112,101,114,102,111,114,109,32,77,67,84,32,111,110,32,99,111,109,112,111,110,101,110,116,115,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,115,105,122,101,115,46,32,68,105,115,97,98,108,105,110,103,32,77,67,84,46,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,10,0,73,110,99,111,110,115,105,115,116,101,110,116,32,109,97,114,107,101,114,32,115,105,122,101,10,0,77,97,114,107,101,114,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,32,119,105,116,104,32,105,116,115,32,112,111,115,105,116,105,111,110,10,0,77,97,114,107,101,114,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,104,101,97,100,101,114,10,0,78,111,116,32,115,117,114,101,32,104,111,119,32,116,104,97,116,32,104,97,112,112,101,110,101,100,46,10,0,70,97,105,108,32,116,111,32,114,101,97,100,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,32,40,37,35,120,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,116,108,32,109,97,114,107,101,114,10,0,84,105,108,101,32,112,97,114,116,32,108,101,110,103,116,104,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,79,84,32,109,97,114,107,101,114,10,0,111,112,106,95,106,50,107,95,97,112,112,108,121,95,110,98,95,116,105,108,101,95,112,97,114,116,115,95,99,111,114,114,101,99,116,105,111,110,32,101,114,114,111,114,10,0,78,111,110,32,99,111,110,102,111,114,109,97,110,116,32,99,111,100,101,115,116,114,101,97,109,32,84,80,115,111,116,61,61,84,78,115,111,116,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,84,32,109,97,114,107,101,114,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,84,32,100,97,116,97,10,0,67,97,110,110,111,116,32,100,101,99,111,100,101,32,116,105,108,101,44,32,109,101,109,111,114,121,32,101,114,114,111,114,10,0,72,101,97,100,101,114,32,111,102,32,116,105,108,101,32,37,100,32,47,32,37,100,32,104,97,115,32,98,101,101,110,32,114,101,97,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,46,10,0,78,111,32,69,79,67,32,109,97,114,107,101,114,46,32,80,111,115,115,105,98,108,121,32,97,32,116,114,117,110,99,97,116,101,100,32,115,116,114,101,97,109,10,0,83,116,114,101,97,109,32,100,111,101,115,32,110,111,116,32,101,110,100,32,119,105,116,104,32,69,79,67,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,44,32,101,120,112,101,99,116,101,100,32,83,79,84,10,0,78,101,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,98,101,102,111,114,101,32,98,101,103,105,110,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,99,111,100,101,115,116,114,101,97,109,0,78,111,32,100,101,99,111,100,101,100,32,97,114,101,97,32,112,97,114,97,109,101,116,101,114,115,44,32,115,101,116,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,116,111,32,116,104,101,32,119,104,111,108,101,32,105,109,97,103,101,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,83,105,122,101,32,120,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,119,61,37,100,41,46,10,0,83,105,122,101,32,121,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,104,61,37,100,41,46,10,0,83,101,116,116,105,110,103,32,100,101,99,111,100,105,110,103,32,97,114,101,97,32,116,111,32,37,100,44,37,100,44,37,100,44,37,100,10,0,87,114,111,110,103,32,102,108,97,103,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,102,111,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,116,120,48,61,37,100,44,32,116,121,48,61,37,100,10,0,9,32,116,100,120,61,37,100,44,32,116,100,121,61,37,100,10,0,9,32,116,119,61,37,100,44,32,116,104,61,37,100,10,0,125,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,100,101,120,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,77,97,105,110,32,104,101,97,100,101,114,32,115,116,97,114,116,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,9,32,77,97,105,110,32,104,101],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([97,100,101,114,32,101,110,100,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,0,9,32,77,97,114,107,101,114,32,108,105,115,116,58,32,123,10,0,9,9,32,116,121,112,101,61,37,35,120,44,32,112,111,115,61,37,108,108,105,44,32,108,101,110,61,37,100,10,0,9,32,125,10,0,9,32,84,105,108,101,32,105,110,100,101,120,58,32,123,10,0,9,9,32,110,98,32,111,102,32,116,105,108,101,45,112,97,114,116,32,105,110,32,116,105,108,101,32,91,37,100,93,61,37,100,10,0,9,9,9,32,116,105,108,101,45,112,97,114,116,91,37,100,93,58,32,115,116,97,114,95,112,111,115,61,37,108,108,105,44,32,101,110,100,95,104,101,97,100,101,114,61,37,108,108,105,44,32,101,110,100,95,112,111,115,61,37,108,108,105,46,10,0,91,68,69,86,93,32,68,117,109,112,32,97,110,32,105,109,97,103,101,95,104,101,97,100,101,114,32,115,116,114,117,99,116,32,123,10,0,73,109,97,103,101,32,105,110,102,111,32,123,10,0,37,115,32,120,48,61,37,100,44,32,121,48,61,37,100,10,0,37,115,32,120,49,61,37,100,44,32,121,49,61,37,100,10,0,37,115,32,110,117,109,99,111,109,112,115,61,37,100,10,0,37,115,9,32,99,111,109,112,111,110,101,110,116,32,37,100,32,123,10,0,37,115,125,10,0,91,68,69,86,93,32,68,117,109,112,32,97,110,32,105,109,97,103,101,95,99,111,109,112,95,104,101,97,100,101,114,32,115,116,114,117,99,116,32,123,10,0,37,115,32,100,120,61,37,100,44,32,100,121,61,37,100,10,0,37,115,32,112,114,101,99,61,37,100,10,0,37,115,32,115,103,110,100,61,37,100,10,0,87,101,32,110,101,101,100,32,97,110,32,105,109,97,103,101,32,112,114,101,118,105,111,117,115,108,121,32,99,114,101,97,116,101,100,46,10,0,84,105,108,101,32,105,110,100,101,120,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,117,115,101,114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,37,100,32,40,109,97,120,32,61,32,37,100,41,32,10,0,82,101,115,111,108,117,116,105,111,110,32,102,97,99,116,111,114,32,105,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,114,101,115,111,108,117,116,105,111,110,32,105,110,32,116,104,101,32,99,111,109,112,111,110,101,110,116,46,10,0,84,104,101,32,103,105,118,101,110,32,116,105,108,101,32,105,110,100,101,120,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,46,0,116,105,108,101,32,110,117,109,98,101,114,32,37,100,32,47,32,37,100,10,0,69,114,114,111,114,32,97,108,108,111,99,97,116,105,110,103,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,100,97,116,97,46,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,101,110,99,111,100,101,32,97,108,108,32,116,105,108,101,115,10,0,83,105,122,101,32,109,105,115,109,97,116,99,104,32,98,101,116,119,101,101,110,32,116,105,108,101,32,100,97,116,97,32,97,110,100,32,115,101,110,116,32,100,97,116,97,46,0,70,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,105,109,97,103,101,32,104,101,97,100,101,114,46,0,69,114,114,111,114,32,119,104,105,108,101,32,111,112,106,95,106,50,107,95,112,114,101,95,119,114,105,116,101,95,116,105,108,101,32,119,105,116,104,32,116,105,108,101,32,105,110,100,101,120,32,61,32,37,100,10,0,69,114,114,111,114,32,119,104,105,108,101,32,111,112,106,95,106,50,107,95,112,111,115,116,95,119,114,105,116,101,95,116,105,108,101,32,119,105,116,104,32,116,105,108,101,32,105,110,100,101,120,32,61,32,37,100,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,105,108,101,32,67,111,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,66,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,84,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,67,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,79,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,116,104,101,32,67,79,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,80,79,67,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,84,76,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,81,67,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,83,81,99,100,32,83,81,99,99,32,101,108,101,109,101,110,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,79,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,81,67,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,81,67,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,79,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,67,79,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,104,101,32,83,73,90,32,109,97,114,107,101,114,10,0,78,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,105,115,32,116,111,111,32,104,105,103,104,32,105,110,32,99,111,109,112,97,114,105,115,111,110,32,116,111,32,116,104,101,32,115,105,122,101,32,111,102,32,116,105,108,101,115,10,0,67,97,110,110,111,116,32,101,110,99,111,100,101,32,116,105,108,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,111,110,101,32,116,105,108,101,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,115,101,101,107,32,102,117,110,99,116,105,111,110,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,32,37,100,47,37,100,10,0,84,105,108,101,32,37,100,47,37,100,32,104,97,115,32,98,101,101,110,32,100,101,99,111,100,101,100,46,10,0,73,109,97,103,101,32,100,97,116,97,32,104,97,115,32,98,101,101,110,32,117,112,100,97,116,101,100,32,119,105,116,104,32,116,105,108,101,32,37,100,46,10,10,0,84,105,108,101,32,114,101,97,100,44,32,100,101,99,111,100,101,100,32,97,110,100,32,117,112,100,97,116,101,100,32,105,115,32,110,111,116,32,116,104,101,32,100,101,115,105,114,101,100,32,111,110,101,32,40,37,100,32,118,115,32,37,100,41,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,115,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,32,37,100,47,37,100,10,0,9,32,100,101,102,97,117,108,116,32,116,105,108,101,32,123,10,0,9,9,32,99,115,116,121,61,37,35,120,10,0,9,9,32,112,114,103,61,37,35,120,10,0,9,9,32,110,117,109,108,97,121,101,114,115,61,37,100,10,0,9,9,32,109,99,116,61,37,120,10,0,9,9,32,99,111,109,112,32,37,100,32,123,10,0,9,9,9,32,99,115,116,121,61,37,35,120,10,0,9,9,9,32,110,117,109,114,101,115,111,108,117,116,105,111,110,115,61,37,100,10,0,9,9,9,32,99,98,108,107,119,61,50,94,37,100,10,0,9,9,9,32,99,98,108,107,104,61,50,94,37,100,10,0,9,9,9,32,99,98,108,107,115,116,121,61,37,35,120,10,0,9,9,9,32,113,109,102,98,105,100,61,37,100,10,0,9,9,9,32,112,114,101,99,99,105,110,116,115,105,122,101,32,40,119,44,104,41,61,0,40,37,100,44,37,100,41,32,0,9,9,9,32,113,110,116,115,116,121,61,37,100,10,0,9,9,9,32,110,117,109,103,98,105,116,115,61,37,100,10,0,9,9,9,32,115,116,101,112,115,105,122,101,115,32,40,109,44,101,41,61,0,9,9,9,32,114,111,105,115,104,105,102,116,61,37,100,10,0,9,9,32,125,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,79,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,116,114,97,110,115,102,111,114,109,97,116,105,111,110,32,115,116,97,103,101,115,46,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,67,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,100,97,116,97,32,115,112,97,110,110,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,77,67,67,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,99,111,108,108,101,99,116,105,111,110,115,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,111,116,104,101,114,32,116,104,97,110,32,97,114,114,97,121,32,100,101,99,111,114,114,101,108,97,116,105,111,110,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,32,105,110,100,105,120,32,115,104,117,102,102,108,101,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,111,117,116,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,105,110,100,105,120,101,115,10,0,67,114,114,111,114,32,114,101,97,100,105,110,103,32,67,66,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,84,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,99,116,32,100,97,116,97,32,119,105,116,104,105,110,32,109,117,108,116,105,112,108,101,32,77,67,84,32,114,101,99,111,114,100,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,77,67,84,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,77,67,84,32,109,97,114,107,101,114,115,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,82,71,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,84,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,84,32,109,97,114,107,101,114,58,32,112,97,99,107,101,116,32,104,101,97,100,101,114,32,104,97,118,101,32,98,101,101,110,32,112,114,101,118,105,111,117,115,108,121,32,102,111,117,110,100,32,105,110,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,40,80,80,77,32,109,97,114,107,101,114,41,46,10,0,90,112,112,116,32,37,117,32,97,108,114,101,97,100,121,32,114,101,97,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,77,32,109,97,114,107,101,114,10,0,90,112,112,109,32,37,117,32,97,108,114,101,97,100,121,32,114,101,97,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,76,84,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,76,77,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,84,76,77,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,32,115,105,122,101,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,32,105,115,32,105,108,108,101,103,97,108,32,45,62,32,37,100,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,110,117,109,98,101,114,32,111,102,32,112,97,114,97,109,101,116,101,114,115,32,40,32,37,100,32,118,115,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,101,103,97,116,105,118,101,32,111,114,32,122,101,114,111,32,105,109,97,103,101,32,115,105,122,101,32,40,37,100,32,120,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,105,110,118,97,108,105,100,32,116,105,108,101,32,115,105,122,101,32,40,116,100,120,58,32,37,100,44,32,116,100,121,58,32,37,100,41,10,0,80,114,101,118,101,110,116,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,32,40,120,49,58,32,37,100,44,32,121,49,58,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,105,108,108,101,103,97,108,32,116,105,108,101,32,111,102,102,115,101,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,83,73,90,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32,99,111,109,112,32,61,32,37,100,32,58,32,100,120,61,37,117,32,100,121,61,37,117,10,32,40,115,104,111,117,108,100,32,98,101,32,98,101,116,119,101,101,110,32,49,32,97,110,100,32,50,53,53,32,97,99,99,111,114,100,105,110,103,32,116,104,101,32,74,80,69,71,50,48,48,48,32,110,111,114,109,41,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,115,32,58,32,37,117,32,120,32,37,117,32,40,109,97,120,105,109,117,109,32,102,105,120,101,100,32,98,121,32,106,112,101,103,50,48,48,48,32,110,111,114,109,32,105,115,32,54,53,53,51,53,32,116,105,108,101,115,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,79,67,32,109,97,114,107,101,114,10,0,84,111,111,32,109,97,110,121,32,80,79,67,115,32,37,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,81,67,67,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,32,110,117,109,98,101,114,58,32,37,100,44,32,114,101,103,97,114,100,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,37,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,81,99,100,32,111,114,32,83,81,99,99,32,101,108,101,109,101,110,116,10,0,87,104,105,108,101,32,114,101,97,100,105,110,103,32,67,67,80,95,81,78,84,83,84,89,32,101,108,101,109,101,110,116,32,105,110,115,105,100,101,32,81,67,68,32,111,114,32,81,67,67,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,44,32,110,117,109,98,101,114,32,111,102,32,115,117,98,98,97,110,100,115,32,40,37,100,41,32,105,115,32,103,114,101,97,116,101,114,32,116,111,32,79,80,74,95,74,50,75,95,77,65,88,66,65,78,68,83,32,40,37,100,41,46,32,83,111,32,119,101,32,108,105,109,105,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,115,116,111,114,101,100,32,116,111,32,79,80,74,95,74,50,75,95,77,65,88,66,65,78,68,83,32,40,37,100,41,32,97,110,100,32,115,107,105,112,32,116,104,101,32,114,101,115,116,46,32,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,81,67,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,82,71,78,32,109,97,114,107,101,114,10,0,98,97,100,32,99,111,109,112,111,110,101,110,116,32,110,117,109,98,101,114,32,105,110,32,82,71,78,32,40,37,100,32,119,104,101,110,32,116,104,101,114,101,32,97,114,101,32,111,110,108,121,32,37,100,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,67,32,109,97,114,107,101,114,32,40,98,97,100,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,10,0,73,110,118,97,108,105,100,32,118,97,108,117,101,32,102,111,114,32,110,117,109,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,44,32,109,97,120,32,118,97,108,117,101,32,105,115,32,115,101,116,32,105,110,32,111,112,101,110,106,112,101,103,46,104,32,97,116,32,37,100,10,0,69,114,114,111,114,32,100,101,99,111,100,105,110,103,32,99,111,109,112,111,110,101,110,116,32,37,100,46,10,84,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,116,111,32,114,101,109,111,118,101,32,105,115,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,111,102,32,116,104,105,115,32,99,111,109,112,111,110,101,110,116,10,77,111,100,105,102,121,32,116,104,101,32,99,112,95,114,101,100,117,99,101,32,112,97,114,97,109,101,116,101,114,46,10,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,44,32,73,110,118,97,108,105,100,32,99,98,108,107,119,47,99,98,108,107,104,32,99,111,109,98,105,110,97,116,105,111,110,10,0,73,110,118,97,108,105,100,32,112,114,101,99,105,110,99,116,32,115,105,122,101,10,0,67,79,68,32,109,97,114,107,101,114,32,97,108,114,101,97,100,121,32,114,101,97,100,46,32,78,111,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,67,79,68,32,109,97,114,107,101,114,32,112,101,114,32,116,105,108,101,46,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,68,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,110,32,83,99,111,100,32,118,97,108,117,101,32,105,110,32,67,79,68,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,110,32,112,114,111,103,114,101,115,115,105,111,110,32,111,114,100,101,114,32,105,110,32,67,79,68,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,105,110,32,67,79,68,32,109,97,114,107,101,114,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,45,54,53,53,51,53,93,10,0,73,110,118,97,108,105,100,32,116,105,108,101,32,110,117,109,98,101,114,32,37,100,10,0,69,109,112,116,121,32,83,79,84,32,109,97,114,107,101,114,32,100,101,116,101,99,116,101,100,58,32,80,115,111,116,61,37,100,46,10,0,80,115,111,116,32,118,97,108,117,101,32,105,115,32,110,111,116,32,99,111,114,114,101,99,116,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,74,80,69,71,50,48,48,48,32,110,111,114,109,58,32,37,100,46,10,0,80,115,111,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,108,101,45,112,97,114,116,32,105,115,32,101,113,117,97,108,32,116,111,32,122,101,114,111,44,32,119,101,32,97,115,115,117,109,105,110,103,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,116,105,108,101,45,112,97,114,116,32,111,102,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,46,10,0,73,110,32,83,79,84,32,109,97,114,107,101,114,44,32,84,80,83,111,116,32,40,37,100,41,32,105,115,32,110,111,116,32,118,97,108,105,100,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,45,112,97,114,116,32,40,37,100,41,44,32,103,105,118,105,110,103,32,117,112,10,0,73,110,32,83,79,84,32,109,97,114,107,101,114,44,32,84,80,83,111,116,32,40,37,100,41,32,105,115,32,110,111,116,32,118,97,108,105,100,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,45,112,97,114,116,32,40,104,101,97,100,101,114,41,32,40,37,100,41,44,32,103,105,118,105,110,103,32,117,112,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,83,79,84,32,109,97,114,107,101,114,46,32,84,105,108,101,32,105,110,100,101,120,32,97,108,108,111,99,97,116,105,111,110,32,102,97,105,108,101,100,10,0,83,116,97,114,116,32,116,111,32,114,101,97,100,32,106,50,107,32,109,97,105,110,32,104,101,97,100,101,114,32,40,37,100,41,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,109,104,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,97,32,83,79,67,32,109,97,114,107,101,114,32,10,0,65,32,109,97,114,107,101,114,32,73,68,32,119,97,115,32,101,120,112,101,99,116,101,100,32,40,48,120,102,102,45,45,41,32,105,110,115,116,101,97,100,32,111,102,32,37,46,56,120,10,0,85,110,107,110,111,119,110,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,32,109,97,114,107,101,114,32,104,97,118,101,32,98,101,101,110,32,100,101,116,101,99,116,101,100,32,97,110,100,32,103,101,110,101,114,97,116,101,100,32,101,114,114,111,114,46,10,0,77,97,114,107,101,114,32,104,97,110,100,108,101,114,32,102,117,110,99,116,105,111,110,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,10,0,114,101,113,117,105,114,101,100,32,83,73,90,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,114,101,113,117,105,114,101,100,32,67,79,68,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,114,101,113,117,105,114,101,100,32,81,67,68,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,98,121,116,101,115,32,116,111,32,114,101,97,100,32,78,112,112,109,10,0,67,111,114,114,117,112,116,101,100,32,80,80,77,32,109,97,114,107,101,114,115,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,77,32,100,97,116,97,10,0,77,97,105,110,32,104,101,97,100,101,114,32,104,97,115,32,98,101,101,110,32,99,111,114,114,101,99,116,108,121,32,100,101,99,111,100,101,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,32,105,110,32,116,104,101,32,74,80,50,32,102,105,108,101,10,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,119,104,105,108,101,32,115,101,116,116,105,110,103,32,117,112,32,74,80,50,32,101,110,99,111,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,119,104,101,110,32,115,101,116,117,112,32,116,104,101,32,74,80,50,32,101,110,99,111,100,101,114,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,115,112,101,99,105,102,105,101,100,32,98,117,116,32,117,110,107,110,111,119,110,32,101,110,117,109,99,115,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,115,112,101,99,105,102,105,101,100,32,98,117,116,32,110,111,116,32,101,110,111,117,103,104,32,105,109,97,103,101,32,99,111,109,112,111,110,101,110,116,115,32,102,111,114,32,97,110,32,97,117,116,111,109,97,116,105,99,32,99,100,101,102,32,98,111,120,32,99,114,101,97,116,105,111,110,46,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,112,111,115,105,116,105,111,110,32,99,111,110,102,108,105,99,116,115,32,119,105,116,104,32,99,111,108,111,114,32,99,104,97,110,110,101,108,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,77,117,108,116,105,112,108,101,32,97,108,112,104,97,32,99,104,97,110,110,101,108,115,32,115,112,101,99,105,102,105,101,100,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,115,101,116,117,112,32,116,104,101,32,74,80,50,32,101,110,99,111,100,101,114,10,0,74,80,50,32,98,111,120,32,119,104,105,99,104,32,97,114,101,32,97,102,116,101,114,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,111,108,100,32,74,80,50,32,72,101,97,100,101,114,32,100,97,116,97,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,119,114,105,116,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,102,116,121,112,32,100,97,116,97,10,0,69,114,114,111,114,32,119,104,105,108,101,32,119,114,105,116,105,110,103,32,102,116,121,112,32,100,97,116,97,32,116,111,32,115,116,114,101,97,109,10,0,70,97,105,108,101,100,32,116,111,32,115,101,101,107,32,105,110,32,116,104,101,32,115,116,114,101,97,109,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,106,112,101,103,50,48,48,48,32,102,105,108,101,32,104,101,97,100,101,114,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,115,105,122,101,115,32,104,105,103,104,101,114,32,116,104,97,110,32,50,94,51,50,10,0,98,97,100,32,112,108,97,99,101,100,32,106,112,101,103,32,99,111,100,101,115,116,114,101,97,109,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,111,102,32,117,110,100,101,102,105,110,101,100,32,115,105,122,101,115,10,0,105,110,118,97,108,105,100,32,98,111,120,32,115,105,122,101,32,37,100,32,40,37,120,41,10,0,70,111,117,110,100,32,97,32,109,105,115,112,108,97,99,101,100,32,39,37,99,37,99,37,99,37,99,39,32,98,111,120,32,111,117,116,115,105,100,101,32,106,112,50,104,32,98,111,120,10,0,74,80,69,71,50,48,48,48,32,72,101,97,100,101,114,32,98,111,120,32,110,111,116,32,114,101,97,100,32,121,101,116,44,32,39,37,99,37,99,37,99,37,99,39,32,98,111,120,32,119,105,108,108,32,98,101,32,105,103,110,111,114,101,100,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,115,107,105,112,112,105,110,103,32,74,80,69,71,50,48,48,48,32,98,111,120,44,32,115,116,114,101,97,109,32,101,114,114,111,114,10,0,73,110,118,97,108,105,100,32,98,111,120,32,115,105,122,101,32,37,100,32,102,111,114,32,98,111,120,32,39,37,99,37,99,37,99,37,99,39,46,32,78,101,101,100,32,37,100,32,98,121,116,101,115,44,32,37,100,32,98,121,116,101,115,32,114,101,109,97,105,110,105,110,103,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,106,112,101,103,50,48,48,48,32,98,111,120,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,114,101,97,100,105,110,103,32,74,80,69,71,50,48,48,48,32,98,111,120,44,32,115,116,114,101,97,109,32,101,114,114,111,114,10,0,77,97,108,102,111,114,109,101,100,32,74,80,50,32,102,105,108,101,32,102,111,114,109,97,116,58,32,102,105,114,115,116,32,98,111,120,32,109,117,115,116,32,98,101,32,74,80,69,71,32,50,48,48,48,32,115,105,103,110,97,116,117,114,101,32,98,111,120,10,0,77,97,108,102,111,114,109,101,100,32,74,80,50,32,102,105,108,101,32,102,111,114,109,97,116,58,32,115,101,99,111,110,100,32,98,111,120,32,109,117,115,116,32,98,101,32,102,105,108,101,32,116,121,112,101,32,98,111,120,10,0,73,110,115,117,102,102,105,99,105,101,110,116,32,100,97,116,97,32,102,111,114,32,67,68,69,70,32,98,111,120,46,10,0,78,117,109,98,101,114,32,111,102,32,99,104,97,110,110,101,108,32,100,101,115,99,114,105,112,116,105,111,110,32,105,115,32,101,113,117,97,108,32,116,111,32,122,101,114,111,32,105,110,32,67,68,69,70,32,98,111,120,46,10,0,78,101,101,100,32,116,111,32,114,101,97,100,32,97,32,80,67,76,82,32,98,111,120,32,98,101,102,111,114,101,32,116,104,101,32,67,77,65,80,32,98,111,120,46,10,0,79,110,108,121,32,111,110,101,32,67,77,65,80,32,98,111,120,32,105,115,32,97,108,108,111,119,101,100,46,10,0,73,110,115,117,102,102,105,99,105,101,110,116,32,100,97,116,97,32,102,111,114,32,67,77,65,80,32,98,111,120,46,10,0,73,110,118,97,108,105,100,32,80,67,76,82,32,98,111,120,46,32,82,101,112,111,114,116,115,32,37,100,32,101,110,116,114,105,101,115,10,0,73,110,118,97,108,105,100,32,80,67,76,82,32,98,111,120,46,32,82,101,112,111,114,116,115,32,48,32,112,97,108,101,116,116,101,32,99,111,108,117,109,110,115,10,0,65,32,66,80,67,67,32,104,101,97,100,101,114,32,98,111,120,32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,108,116,104,111,117,103,104,32,66,80,67,32,103,105,118,101,110,32,98,121,32,116,104,101,32,73,72,68,82,32,98,111,120,32,40,37,100,41,32,105,110,100,105,99,97,116,101,32,99,111,109,112,111,110,101,110,116,115,32,98,105,116,32,100,101,112,116,104,32,105,115,32,99,111,110,115,116,97,110,116,10,0,66,97,100,32,66,80,67,67,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,65,32,99,111,110,102,111,114,109,105,110,103,32,74,80,50,32,114,101,97,100,101,114,32,115,104,97,108,108,32,105,103,110,111,114,101,32,97,108,108,32,67,111,108,111,117,114,32,83,112,101,99,105,102,105,99,97,116,105,111,110,32,98,111,120,101,115,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,44,32,115,111,32,119,101,32,105,103,110,111,114,101,32,116,104,105,115,32,111,110,101,46,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,58,32,37,100,41,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,67,73,69,76,97,98,44,32,98,97,100,32,115,105,122,101,58,32,37,100,41,10,0,67,79,76,82,32,66,79,88,32,109,101,116,104,32,118,97,108,117,101,32,105,115,32,110,111,116,32,97,32,114,101,103,117,108,97,114,32,118,97,108,117,101,32,40,37,100,41,44,32,115,111,32,119,101,32,119,105,108,108,32,105,103,110,111,114,101,32,116,104,101,32,101,110,116,105,114,101,32,67,111,108,111,117,114,32,83,112,101,99,105,102,105,99,97,116,105,111,110,32,98,111,120,46,32,10,0,66,97,100,32,105,109,97,103,101,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,105,109,97,103,101,32,104,101,97,100,101,114,32,40,105,104,100,114,41,10,0,74,80,50,32,73,72,68,82,32,98,111,120,58,32,99,111,109,112,114,101,115,115,105,111,110,32,116,121,112,101,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,97,32,99,111,110,102,111,114,109,105,110,103,32,74,80,50,32,102,105,108,101,32,40,37,100,41,32,10,0,84,104,101,32,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,102,105,114,115,116,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,111,102,32,108,101,115,115,32,116,104,97,110,32,56,32,98,121,116,101,115,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,88,76,32,98,111,120,32,111,102,32,108,101,115,115,32,116,104,97,110,32,49,54,32,98,121,116,101,115,10,0,66,111,120,32,108,101,110,103,116,104,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,46,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,58,32,98,111,120,32,108,101,110,103,116,104,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,46,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,58,32,110,111,32,39,105,104,100,114,39,32,98,111,120,46,10,0,84,104,101,32,102,116,121,112,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,115,101,99,111,110,100,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,69,114,114,111,114,32,119,105,116,104,32,70,84,89,80,32,115,105,103,110,97,116,117,114,101,32,66,111,120,32,115,105,122,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,119,105,116,104,32,70,84,89,80,32,66,111,120,10,0,84,104,101,32,115,105,103,110,97,116,117,114,101,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,102,105,114,115,116,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,69,114,114,111,114,32,119,105,116,104,32,74,80,32,115,105,103,110,97,116,117,114,101,32,66,111,120,32,115,105,122,101,10,0,69,114,114,111,114,32,119,105,116,104,32,74,80,32,83,105,103,110,97,116,117,114,101,32,58,32,98,97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,10,0,111,112,106,95,106,112,50,95,97,112,112,108,121,95,99,100,101,102,58,32,99,110,61,37,100,44,32,110,117,109,99,111,109,112,115,61,37,100,10,0,111,112,106,95,106,112,50,95,97,112,112,108,121,95,99,100,101,102,58,32,97,99,110,61,37,100,44,32,110,117,109,99,111,109,112,115,61,37,100,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,32,105,110,100,101,120,32,37,100,32,40,62,61,32,37,100,41,46,10,0,73,110,99,111,109,112,108,101,116,101,32,99,104,97,110,110,101,108,32,100,101,102,105,110,105,116,105,111,110,115,46,10,0,85,110,101,120,112,101,99,116,101,100,32,79,79,77,46,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,47,112,97,108,101,116,116,101,32,105,110,100,101,120,32,102,111,114,32,100,105,114,101,99,116,32,109,97,112,112,105,110,103,32,37,100,46,10,0,67,111,109,112,111,110,101,110,116,32,37,100,32,105,115,32,109,97,112,112,101,100,32,116,119,105,99,101,46,10,0,68,105,114,101,99,116,32,117,115,101,32,97,116,32,35,37,100,32,104,111,119,101,118,101,114,32,112,99,111,108,61,37,100,46,10,0,67,111,109,112,111,110,101,110,116,32,37,100,32,100,111,101,115,110,39,116,32,104,97,118,101,32,97,32,109,97,112,112,105,110,103,46,10,0,67,111,109,112,111,110,101,110,116,32,109,97,112,112,105,110,103,32,115,101,101,109,115,32,119,114,111,110,103,46,32,84,114,121,105,110,103,32,116,111,32,99,111,114,114,101,99,116,46,10,0,84,105,108,101,115,32,100,111,110,39,116,32,97,108,108,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,100,105,109,101,110,115,105,111,110,46,32,83,107,105,112,32,116,104,101,32,77,67,84,32,115,116,101,112,46,10,0,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,40,37,100,41,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,97,32,77,67,84,46,32,83,107,105,112,32,116,104,101,32,77,67,84,32,115,116,101,112,46,10,0,116,105,108,101,115,32,114,101,113,117,105,114,101,32,97,116,32,108,101,97,115,116,32,111,110,101,32,114,101,115,111,108,117,116,105,111,110,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,105,108,101,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,105,108,101,32,114,101,115,111,108,117,116,105,111,110,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,98,97,110,100,32,112,114,101,99,105,110,116,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,117,114,114,101,110,116,32,112,114,101,99,105,110,99,116,32,99,111,100,101,98,108,111,99,107,32,101,108,101,109,101,110,116,10,0,78,111,32,105,110,99,108,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,32,105,109,115,98,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,97,103,45,116,114,101,101,10,0,116,103,116,95,99,114,101,97,116,101,32,116,114,101,101,45,62,110,117,109,110,111,100,101,115,32,61,61,32,48,44,32,110,111,32,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,97,103,45,116,114,101,101,32,110,111,100,101,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,105,110,105,116,105,97,108,105,122,101,32,116,104,101,32,116,97,103,32,116,114,101,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,97,32,110,101,119,32,118,97,108,105,100,97,116,105,111,110,32,112,114,111,99,101,100,117,114,101,10,0,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,3,3,6,3,6,6,8,3,6,6,8,6,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,9,10,12,13,10,10,13,13,12,13,12,13,13,13,13,13,9,10,12,11,10,9,13,12,12,11,12,11,13,12,13,12,9,10,12,11,10,10,11,11,12,13,9,10,13,13,10,10,9,10,12,13,10,9,11,12,12,11,9,10,13,12,10,9,9,10,12,13,10,9,11,12,12,13,12,13,11,12,11,12,9,10,12,11,10,10,11,11,12,11,12,11,11,11,11,11,9,10,12,11,10,9,13,12,12,13,9,10,11,12,10,9,9,10,12,13,10,10,13,13,12,11,9,10,11,11,10,10,9,10,12,13,10,10,13,13,12,11,9,10,11,11,10,10,9,10,12,11,10,9,13,12,12,13,9,10,11,12,10,9,9,10,12,11,10,10,11,11,12,11,12,11,11,11,11,11,9,10,12,13,10,9,11,12,12,13,12,13,11,12,11,12,9,10,12,13,10,9,11,12,12,11,9,10,13,12,10,9,9,10,12,11,10,10,11,11,12,13,9,10,13,13,10,10,9,10,12,11,10,9,13,12,12,11,12,11,13,12,13,12,9,10,12,13,10,10,13,13,12,13,12,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,114,101,97,100,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,109,97,120,32,40,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,114,101,97,100,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,99,117,114,114,101,110,116,32,115,105,122,101,32,40,37,100,32,62,32,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,115,107,105,112,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,109,97,120,32,40,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,102,111,114,32,101,120,112,101,99,116,101,100,32,83,79,80,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,83,79,80,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,102,111,114,32,101,120,112,101,99,116,101,100,32,69,80,72,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,69,80,72,32,109,97,114,107,101,114,10,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,114,119,97],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+25118);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}Module["_i64Subtract"]=_i64Subtract;var _floorf=Math_floor;Module["_bitshift64Ashr"]=_bitshift64Ashr;var _SItoF=true;Module["_memset"]=_memset;var _BDtoILow=true;var _ceilf=Math_ceil;Module["_bitshift64Shl"]=_bitshift64Shl;function _abort(){Module["abort"]()}function ___lock(){}function ___unlock(){}Module["_i64Add"]=_i64Add;var _floor=Math_floor;var _sqrt=Math_sqrt;var PATH=undefined;function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(!window["setImmediate"]){var setImmediates=[];var emscriptenMainLoopMessageId="__emcc";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener("message",Browser_setImmediate_messageHandler,true);window["setImmediate"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window["setImmediate"](Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor="black"}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;if(typeof Browser.vrDevice==="undefined")Browser.vrDevice=null;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=event.wheelDelta;break;case"wheel":delta=event["deltaY"];break;default:throw"unrecognized mouse wheel event: "+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}Module["_bitshift64Lshr"]=_bitshift64Lshr;var _BDtoIHigh=true;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall("vi",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,"cannot pop if something else added meanwhile!");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _llvm_pow_f64=Math_pow;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}var _BItoD=true;function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer)___syscall146.buffer=[];var buffer=___syscall146.buffer;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>2]=d;if((c[a+8>>2]|0)==16)k=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else k=c[a+12>>2]|0;g=(c[a+80>>2]|0)+16|0;h=(c[g>>2]|0)>>>0<257?1:2;j=h+1|0;if(j>>>0>d>>>0){Ub(e,1,14585,m)|0;e=0;i=m;return e|0}c[f>>2]=d-j;qb(b,l,h);d=c[l>>2]|0;if(d>>>0>=(c[g>>2]|0)>>>0){Ub(e,1,14611,m+8|0)|0;e=0;i=m;return e|0}qb(b+h|0,(c[k+5584>>2]|0)+(d*1080|0)|0,1);if(!(Fe(a,c[l>>2]|0,b+j|0,f,e)|0)){Ub(e,1,14585,m+16|0)|0;e=0;i=m;return e|0}if(!(c[f>>2]|0)){e=1;i=m;return e|0}Ub(e,1,14585,m+24|0)|0;e=0;i=m;return e|0}function ge(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k+8|0;f=k+20|0;h=c[(c[a+80>>2]|0)+16>>2]|0;g=h>>>0<257?1:2;if((g+2|0)!=(d|0)){Ub(e,1,14502,k)|0;j=0;i=k;return j|0}if((c[a+8>>2]|0)==16)a=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else a=c[a+12>>2]|0;qb(b,f,g);qb(b+g|0,k+16|0,1);d=c[f>>2]|0;if(d>>>0>>0){qb(b+(g+1)|0,(c[a+5584>>2]|0)+(d*1080|0)+808|0,1);j=1;i=k;return j|0}else{c[j>>2]=d;c[j+4>>2]=h;Ub(e,1,14528,j)|0;j=0;i=k;return j|0}return 0}function he(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+12|0;c[f>>2]=d;if(!(Ee(a,0,b,f,e)|0)){Ub(e,1,14476,h)|0;g=0;i=h;return g|0}if(c[f>>2]|0){Ub(e,1,14476,h+8|0)|0;g=0;i=h;return g|0}if((c[a+8>>2]|0)==16)f=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else f=c[a+12>>2]|0;f=c[f+5584>>2]|0;d=a+80|0;if((c[(c[d>>2]|0)+16>>2]|0)>>>0<=1){g=1;i=h;return g|0}e=f+24|0;a=f+804|0;g=f+28|0;b=1;while(1){c[f+1104>>2]=c[e>>2];c[f+1884>>2]=c[a>>2];Ui(f+1108|0,g|0,776)|0;b=b+1|0;if(b>>>0>=(c[(c[d>>2]|0)+16>>2]|0)>>>0){f=1;break}else f=f+1080|0}i=h;return f|0}function ie(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;n=o+32|0;m=o+24|0;l=o+16|0;g=o+8|0;f=o;k=o+40|0;h=o+36|0;c[k>>2]=d;j=a+80|0;do if((c[(c[j>>2]|0)+16>>2]|0)>>>0<257){if(d){qb(b,h,1);g=b+1|0;b=d+-1|0;break}Ub(e,1,14129,f)|0;n=0;i=o;return n|0}else{if(d>>>0>=2){qb(b,h,2);g=b+2|0;b=d+-2|0;break}Ub(e,1,14129,g)|0;n=0;i=o;return n|0}while(0);c[k>>2]=b;f=c[h>>2]|0;b=c[(c[j>>2]|0)+16>>2]|0;if(f>>>0>=b>>>0){c[l>>2]=f;c[l+4>>2]=b;Ub(e,1,14155,l)|0;n=0;i=o;return n|0}if(!(Ee(a,f,g,k,e)|0)){Ub(e,1,14129,m)|0;n=0;i=o;return n|0}if(!(c[k>>2]|0)){n=1;i=o;return n|0}Ub(e,1,14129,n)|0;n=0;i=o;return n|0}function je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+16|0;h=t+8|0;s=t+12|0;r=c[(c[b+80>>2]|0)+16>>2]|0;q=r>>>0<257?1:2;p=(q<<1)+5|0;g=(e>>>0)/(p>>>0)|0;if((g|0)==0|((e>>>0)%(p>>>0)|0|0)!=0){Ub(f,1,14085,t)|0;s=0;i=t;return s|0}if((c[b+8>>2]|0)==16)p=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else p=c[b+12>>2]|0;e=p+5636|0;b=a[e>>0]|0;if(!(b&4))o=0;else o=(c[p+420>>2]|0)+1|0;n=o+g|0;if(n>>>0>31){c[h>>2]=n;Ub(f,1,14111,h)|0;s=0;i=t;return s|0}a[e>>0]=b|4;if(o>>>0>>0){f=q+1|0;m=p+8|0;h=q+3|0;j=q|4;k=j+q|0;l=k+1|0;b=d;g=o;e=p+424+(o*148|0)|0;while(1){qb(b,e,1);qb(b+1|0,e+4|0,q);d=e+8|0;qb(b+f|0,d,2);u=c[d>>2]|0;o=c[m>>2]|0;c[d>>2]=u>>>0>>0?u:o;qb(b+h|0,e+12|0,1);d=e+16|0;qb(b+j|0,d,q);qb(b+k|0,s,1);c[e+36>>2]=c[s>>2];o=c[d>>2]|0;c[d>>2]=o>>>0>>0?o:r;g=g+1|0;if(g>>>0>=n>>>0)break;else{b=b+l|0;e=e+148|0}}}c[p+420>>2]=n+-1;u=1;i=t;return u|0}function ke(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=i;i=i+144|0;L=M+128|0;H=M+120|0;G=M+112|0;F=M+104|0;E=M+96|0;D=M+88|0;A=M+72|0;t=M+64|0;r=M+56|0;q=M+48|0;p=M+40|0;s=M+32|0;l=M+24|0;j=M+16|0;h=M+136|0;w=M+132|0;J=c[d+80>>2]|0;K=d+88|0;if(f>>>0<36){Ub(g,1,13440,M)|0;g=0;i=M;return g|0}I=f+-36|0;o=(I>>>0)/3|0;if((I>>>0)%3|0){Ub(g,1,13440,M+8|0)|0;g=0;i=M;return g|0}qb(e,h,2);b[K>>1]=c[h>>2];x=J+8|0;qb(e+2|0,x,4);B=J+12|0;qb(e+6|0,B,4);qb(e+10|0,J,4);n=J+4|0;qb(e+14|0,n,4);v=d+100|0;qb(e+18|0,v,4);z=d+104|0;qb(e+22|0,z,4);u=d+92|0;qb(e+26|0,u,4);y=d+96|0;qb(e+30|0,y,4);qb(e+34|0,h,2);k=e+36|0;f=c[h>>2]|0;if(f>>>0>=16385){c[j>>2]=f;Ub(g,1,13468,j)|0;g=0;i=M;return g|0}f=f&65535;I=J+16|0;c[I>>2]=f;if((f|0)!=(o|0)){c[l>>2]=f;c[l+4>>2]=o;Ub(g,1,13529,l)|0;g=0;i=M;return g|0}l=c[J>>2]|0;m=c[x>>2]|0;if(m>>>0>l>>>0){f=c[n>>2]|0;e=c[B>>2]|0;if(f>>>0>>0){h=c[v>>2]|0;j=c[z>>2]|0;if(!(_(j,h)|0)){c[p>>2]=h;c[p+4>>2]=j;Ub(g,1,13705,p)|0;g=0;i=M;return g|0}s=Zi(e|0,0,m|0,0)|0;if(!((s|0)==(_(e,m)|0)&(C|0)==0)){c[q>>2]=m;c[q+4>>2]=e;Ub(g,1,13766,q)|0;g=0;i=M;return g|0}m=c[u>>2]|0;p=Si(m|0,0,h|0,0)|0;q=C;n=c[y>>2]|0;s=Si(n|0,0,j|0,0)|0;if(m>>>0<=l>>>0?n>>>0<=f>>>0&(p|0-q)>>>0>l>>>0&(s|0-C)>>>0>f>>>0:0){e=Qc(o,52)|0;o=J+24|0;c[o>>2]=e;if(!e){c[I>>2]=0;Ub(g,1,13852,t)|0;g=0;i=M;return g|0}a:do if(c[I>>2]|0){l=d+168|0;f=0;j=e;while(1){qb(k,w,1);c[j+24>>2]=(c[w>>2]&127)+1;c[j+32>>2]=(c[w>>2]|0)>>>7;qb(k+1|0,w,1);c[j>>2]=c[w>>2];qb(k+2|0,w,1);h=c[w>>2]|0;c[j+4>>2]=h;e=c[j>>2]|0;if((h+-1|0)>>>0>254|(e+-1|0)>>>0>254)break;c[j+36>>2]=0;c[j+40>>2]=c[l>>2];f=f+1|0;if(f>>>0>=(c[I>>2]|0)>>>0)break a;else{k=k+3|0;j=j+52|0}}c[A>>2]=f;c[A+4>>2]=e;c[A+8>>2]=h;Ub(g,1,13900,A)|0;g=0;i=M;return g|0}while(0);m=c[u>>2]|0;l=c[v>>2]|0;k=((c[x>>2]|0)+-1-m+l|0)/(l|0)|0;c[d+112>>2]=k;j=c[y>>2]|0;h=c[z>>2]|0;e=((c[B>>2]|0)+-1-j+h|0)/(h|0)|0;c[d+116>>2]=e;if(!((e|0)==0|(k|0)==0)?k>>>0<=(65535/(e>>>0)|0)>>>0:0){n=_(k,e)|0;f=d+28|0;if(!(a[d+76>>0]&2)){c[f>>2]=0;c[d+32>>2]=0;c[d+36>>2]=k;c[d+40>>2]=e}else{c[f>>2]=(((c[f>>2]|0)-m|0)>>>0)/(l>>>0)|0;D=d+32|0;c[D>>2]=(((c[D>>2]|0)-j|0)>>>0)/(h>>>0)|0;D=d+36|0;c[D>>2]=((c[D>>2]|0)+-1-m+l|0)/(l|0)|0;D=d+40|0;c[D>>2]=((c[D>>2]|0)+-1-j+h|0)/(h|0)|0}D=Qc(n,5640)|0;k=d+164|0;c[k>>2]=D;if(!D){Ub(g,1,13852,E)|0;g=0;i=M;return g|0}E=Qc(c[I>>2]|0,1080)|0;e=d+12|0;c[(c[e>>2]|0)+5584>>2]=E;if(!E){Ub(g,1,13852,F)|0;g=0;i=M;return g|0}F=Qc(10,20)|0;f=c[e>>2]|0;c[f+5612>>2]=F;if(!F){Ub(g,1,13852,G)|0;g=0;i=M;return g|0}c[f+5620>>2]=10;G=Qc(10,20)|0;f=c[e>>2]|0;c[f+5624>>2]=G;if(!G){Ub(g,1,13852,H)|0;g=0;i=M;return g|0}c[f+5632>>2]=10;j=c[I>>2]|0;if(j){h=c[o>>2]|0;f=f+5584|0;e=0;do{if(!(c[h+(e*52|0)+32>>2]|0))c[(c[f>>2]|0)+(e*1080|0)+1076>>2]=1<<(c[h+(e*52|0)+24>>2]|0)+-1;e=e+1|0}while(e>>>0>>0)}b:do if(n){f=c[k>>2]|0;H=Qc(j,1080)|0;c[f+5584>>2]=H;if(H){e=0;while(1){e=e+1|0;if(e>>>0>=n>>>0)break b;H=Qc(c[I>>2]|0,1080)|0;c[f+11224>>2]=H;if(!H)break;else f=f+5640|0}}Ub(g,1,13852,L)|0;g=0;i=M;return g|0}while(0);c[d+8>>2]=4;_b(J,K);g=1;i=M;return g|0}c[D>>2]=k;c[D+4>>2]=e;Ub(g,1,14002,D)|0;g=0;i=M;return g|0}Ub(g,1,13808,r)|0;g=0;i=M;return g|0}}else{e=c[B>>2]|0;f=c[n>>2]|0}c[s>>2]=m-l;c[s+4>>2]=e-f;Ub(g,1,13643,s)|0;g=0;i=M;return g|0}function le(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;i=i+32|0;a=f+12|0;if(d>>>0<2){Ub(e,1,13414,f)|0;e=0;i=f;return e|0}qb(b,f+16|0,1);qb(b+1|0,a,1);b=c[a>>2]|0;if(!(((d+-2|0)>>>0)%(((b>>>5&2)+2+(b>>>4&3)|0)>>>0)|0)){e=1;i=f;return e|0}Ub(e,1,13414,f+8|0)|0;e=0;i=f;return e|0}function me(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=i;i=i+16|0;if(!c){Ub(d,1,13388,a)|0;b=0}else b=1;i=a;return b|0}function ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k+8|0;h=k+12|0;if(!d){Ub(e,1,13362,k)|0;e=0;i=k;return e|0}qb(b,k+16|0,1);f=d+-1|0;if(!f){e=1;i=k;return e|0}else{g=0;a=0}do{b=b+1|0;qb(b,h,1);d=c[h>>2]|0;if(!(d&128))a=0;else a=(d&127|a)<<7;g=g+1|0}while((g|0)!=(f|0));if(!a){e=1;i=k;return e|0}Ub(e,1,13362,j)|0;e=0;i=k;return e|0}function oe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;o=p+32|0;l=p+24|0;h=p+16|0;g=p+8|0;n=p+36|0;if(e>>>0<2){Ub(f,1,13276,p)|0;o=0;i=p;return o|0}m=b+184|0;a[m>>0]=a[m>>0]|1;qb(d,n,1);m=d+1|0;k=e+-1|0;j=b+124|0;e=c[j>>2]|0;do if(e){g=b+120|0;d=c[n>>2]|0;if((c[g>>2]|0)>>>0<=d>>>0){b=d+1|0;d=Tc(e,b<<3)|0;if(d){c[j>>2]=d;e=c[g>>2]|0;Qi(d+(e<<3)|0,0,b-e<<3|0)|0;c[g>>2]=b;e=c[j>>2]|0;break}Ub(f,1,13302,h)|0;o=0;i=p;return o|0}}else{d=(c[n>>2]|0)+1|0;e=Qc(d,8)|0;c[j>>2]=e;if(e){c[b+120>>2]=d;break}Ub(f,1,13302,g)|0;o=0;i=p;return o|0}while(0);d=c[n>>2]|0;if(c[e+(d<<3)>>2]|0){c[l>>2]=d;Ub(f,1,13340,l)|0;o=0;i=p;return o|0}l=Pc(k)|0;e=c[n>>2]|0;d=c[j>>2]|0;c[d+(e<<3)>>2]=l;if(!l){Ub(f,1,13302,o)|0;o=0;i=p;return o|0}else{c[d+(e<<3)+4>>2]=k;Ui(c[d+(c[n>>2]<<3)>>2]|0,m|0,k|0)|0;o=1;i=p;return o|0}return 0}function pe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r+40|0;o=r+32|0;k=r+24|0;j=r+16|0;p=r+44|0;if(e>>>0<2){Ub(f,1,13127,r)|0;q=0;i=r;return q|0}if(a[b+184>>0]&1){Ub(f,1,13153,r+8|0)|0;q=0;i=r;return q|0}h=c[b+200>>2]|0;g=c[b+164>>2]|0;n=g+(h*5640|0)+5636|0;a[n>>0]=a[n>>0]|2;qb(d,p,1);n=d+1|0;m=e+-1|0;l=g+(h*5640|0)+5164|0;d=c[l>>2]|0;do if(d){g=g+(h*5640|0)+5160|0;b=c[p>>2]|0;if((c[g>>2]|0)>>>0<=b>>>0){e=b+1|0;b=Tc(d,e<<3)|0;if(b){c[l>>2]=b;d=c[g>>2]|0;Qi(b+(d<<3)|0,0,e-d<<3|0)|0;c[g>>2]=e;d=c[l>>2]|0;break}Ub(f,1,8775,k)|0;q=0;i=r;return q|0}}else{b=(c[p>>2]|0)+1|0;d=Qc(b,8)|0;c[l>>2]=d;if(d){c[g+(h*5640|0)+5160>>2]=b;break}Ub(f,1,8775,j)|0;q=0;i=r;return q|0}while(0);b=c[p>>2]|0;if(c[d+(b<<3)>>2]|0){c[o>>2]=b;Ub(f,1,13254,o)|0;q=0;i=r;return q|0}o=Pc(m)|0;d=c[p>>2]|0;b=c[l>>2]|0;c[b+(d<<3)>>2]=o;if(!o){Ub(f,1,8775,q)|0;q=0;i=r;return q|0}else{c[b+(d<<3)+4>>2]=m;Ui(c[b+(c[p>>2]<<3)>>2]|0,n|0,m|0)|0;q=1;i=r;return q|0}return 0}function qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=i;i=i+16|0;if((c[(c[a+80>>2]|0)+16>>2]<<2|0)==(d|0)){e=1;i=b;return e|0}Ub(e,1,13101,b)|0;e=0;i=b;return e|0}function re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function se(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;r=s+40|0;q=s+32|0;l=s+24|0;p=s+44|0;if((c[a+8>>2]|0)==16)j=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else j=c[a+12>>2]|0;if(d>>>0<2){Ub(e,1,12933,s)|0;r=0;i=s;return r|0}qb(b,p,2);if(c[p>>2]|0){Ub(e,2,12959,s+8|0)|0;r=1;i=s;return r|0}if(d>>>0<7){Ub(e,1,12933,s+16|0)|0;r=0;i=s;return r|0}qb(b+2|0,p,2);n=b+4|0;o=c[p>>2]&255;k=j+5612|0;f=c[k>>2]|0;m=j+5616|0;a=c[m>>2]|0;a:do if(!a){g=0;h=f}else{g=0;h=f;do{if((c[h+8>>2]|0)==(o|0))break a;h=h+20|0;g=g+1|0}while(g>>>0>>0)}while(0);if((g|0)==(a|0)){g=j+5620|0;do if((a|0)==(c[g>>2]|0)){a=a+10|0;c[g>>2]=a;a=Tc(f,a*20|0)|0;if(a){c[k>>2]=a;f=c[m>>2]|0;Qi(a+(f*20|0)|0,0,((c[g>>2]|0)-f|0)*20|0)|0;f=c[k>>2]|0;a=c[m>>2]|0;break}Uc(c[k>>2]|0);c[k>>2]=0;c[g>>2]=0;c[m>>2]=0;Ub(e,1,13019,l)|0;r=0;i=s;return r|0}while(0);c[m>>2]=a+1;h=f+(a*20|0)|0}g=h+12|0;a=c[g>>2]|0;if(a){Uc(a);c[g>>2]=0}c[h+8>>2]=o;o=c[p>>2]|0;c[h+4>>2]=o>>>8&3;c[h>>2]=o>>>10&3;qb(n,p,2);if(c[p>>2]|0){Ub(e,2,13057,q)|0;r=1;i=s;return r|0}a=d+-6|0;f=Pc(a)|0;c[g>>2]=f;if(!f){Ub(e,1,12933,r)|0;r=0;i=s;return r|0}else{Ui(f|0,b+6|0,a|0)|0;c[h+16>>2]=a;r=1;i=s;return r|0}return 0}function te(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+32|0;f=j+16|0;h=j+12|0;a=a+80|0;g=c[(c[a>>2]|0)+16>>2]|0;if((g+2|0)!=(d|0)){Ub(e,1,12907,j)|0;h=0;i=j;return h|0}qb(b,f,2);if((c[f>>2]|0)!=(g|0)){Ub(e,1,12907,j+8|0)|0;h=0;i=j;return h|0}if(!g){h=1;i=j;return h|0}f=b+2|0;b=0;a=c[(c[a>>2]|0)+24>>2]|0;while(1){qb(f,h,1);c[a+32>>2]=(c[h>>2]|0)>>>7&1;c[a+24>>2]=(c[h>>2]&127)+1;b=b+1|0;if((b|0)==(g|0)){a=1;break}else{f=f+1|0;a=a+52|0}}i=j;return a|0}function ue(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+144|0;I=J+120|0;H=J+112|0;G=J+104|0;F=J+96|0;E=J+88|0;D=J+80|0;C=J+72|0;B=J+64|0;A=J+56|0;z=J+48|0;p=J+40|0;o=J+32|0;m=J+24|0;x=J+136|0;u=J+132|0;v=J+128|0;w=J+124|0;if((c[b+8>>2]|0)==16)q=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else q=c[b+12>>2]|0;if(e>>>0<2){Ub(f,1,12567,J)|0;I=0;i=J;return I|0}qb(d,x,2);if(c[x>>2]|0){Ub(f,2,12593,J+8|0)|0;I=1;i=J;return I|0}if(e>>>0<7){Ub(f,1,12567,J+16|0)|0;I=0;i=J;return I|0}qb(d+2|0,u,1);n=d+3|0;l=q+5624|0;g=c[l>>2]|0;y=q+5628|0;b=c[y>>2]|0;a:do if(!b){j=0;h=g}else{k=c[u>>2]|0;j=0;h=g;do{if((c[h>>2]|0)==(k|0))break a;h=h+20|0;j=j+1|0}while(j>>>0>>0)}while(0);if((j|0)==(b|0)){h=q+5632|0;do if((b|0)==(c[h>>2]|0)){b=b+10|0;c[h>>2]=b;b=Tc(g,b*20|0)|0;if(b){c[l>>2]=b;g=c[y>>2]|0;Qi(b+(g*20|0)|0,0,((c[h>>2]|0)-g|0)*20|0)|0;g=c[l>>2]|0;b=c[y>>2]|0;break}Uc(c[l>>2]|0);c[l>>2]=0;c[h>>2]=0;c[y>>2]=0;Ub(f,1,12639,m)|0;I=0;i=J;return I|0}while(0);h=g+(b*20|0)|0}c[h>>2]=c[u>>2];qb(n,x,2);if(c[x>>2]|0){Ub(f,2,12593,o)|0;I=1;i=J;return I|0}qb(d+5|0,v,2);g=c[v>>2]|0;if(g>>>0>1){Ub(f,2,12677,p)|0;I=1;i=J;return I|0}b=e+-7|0;b:do if(g){r=h+4|0;s=h+16|0;t=h+8|0;e=h+12|0;p=q+5612|0;o=q+5616|0;m=d+7|0;n=0;c:while(1){if(b>>>0<3){g=27;break}qb(m,x,1);if((c[x>>2]|0)!=1){g=29;break}qb(m+1|0,w,2);g=b+-3|0;j=c[w>>2]|0;k=(j>>>15)+1|0;j=j&32767;c[r>>2]=j;h=(_(k,j)|0)+2|0;if(g>>>0>>0){g=31;break}b=m+3|0;l=g-h|0;if(j){g=0;do{qb(b,x,k);if((c[x>>2]|0)!=(g|0)){g=34;break c}b=b+k|0;g=g+1|0}while(g>>>0<(c[r>>2]|0)>>>0)}qb(b,w,2);g=b+2|0;h=c[w>>2]|0;j=(h>>>15)+1|0;h=h&32767;c[w>>2]=h;if((h|0)!=(c[r>>2]|0)){g=37;break}b=(_(j,h)|0)+3|0;if(l>>>0>>0){g=39;break}b=l-b|0;if(h){h=0;do{qb(g,x,j);if((c[x>>2]|0)!=(h|0)){g=42;break c}g=g+j|0;h=h+1|0}while(h>>>0<(c[r>>2]|0)>>>0)}qb(g,x,3);m=g+3|0;a[s>>0]=((c[x>>2]|0)>>>16^1)&1|a[s>>0]&-2;c[t>>2]=0;c[e>>2]=0;l=c[x>>2]|0;h=l&255;c[u>>2]=h;if(h){j=c[o>>2]|0;if(!j){g=50;break}k=0;g=c[p>>2]|0;while(1){if((c[g+8>>2]|0)==(h|0))break;k=k+1|0;if(k>>>0>=j>>>0){g=50;break c}else g=g+20|0}c[t>>2]=g}h=l>>>8&255;c[u>>2]=h;if(h){j=c[o>>2]|0;if(!j){g=57;break}k=0;g=c[p>>2]|0;while(1){if((c[g+8>>2]|0)==(h|0))break;k=k+1|0;if(k>>>0>=j>>>0){g=57;break c}else g=g+20|0}c[e>>2]=g}n=n+1|0;if(n>>>0>=(c[v>>2]|0)>>>0)break b}if((g|0)==27){Ub(f,1,12567,z)|0;I=0;i=J;return I|0}else if((g|0)==29){Ub(f,2,12721,A)|0;I=1;i=J;return I|0}else if((g|0)==31){Ub(f,1,12567,B)|0;I=0;i=J;return I|0}else if((g|0)==34){Ub(f,2,12787,C)|0;I=1;i=J;return I|0}else if((g|0)==37){Ub(f,2,12841,D)|0;I=1;i=J;return I|0}else if((g|0)==39){Ub(f,1,12567,E)|0;I=0;i=J;return I|0}else if((g|0)==42){Ub(f,2,12787,F)|0;I=1;i=J;return I|0}else if((g|0)==50){Ub(f,1,12567,G)|0;I=0;i=J;return I|0}else if((g|0)==57){Ub(f,1,12567,H)|0;I=0;i=J;return I|0}}while(0);if(!b){c[y>>2]=(c[y>>2]|0)+1;I=1;i=J;return I|0}else{Ub(f,1,12567,I)|0;I=0;i=J;return I|0}return 0}function ve(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;r=s+24|0;q=s+20|0;n=a+80|0;f=c[n>>2]|0;if((c[a+8>>2]|0)==16)g=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else g=c[a+12>>2]|0;if(!d){Ub(e,1,12486,s)|0;r=0;i=s;return r|0}qb(b,q,1);a=c[q>>2]|0;if(a>>>0>1){Ub(e,2,12512,s+8|0)|0;r=1;i=s;return r|0}if((a+1|0)!=(d|0)){Ub(e,2,12486,s+16|0)|0;r=0;i=s;return r|0}m=g+5584|0;a=c[f+16>>2]|0;if(a){d=0;e=c[m>>2]|0;while(1){c[e+1076>>2]=0;d=d+1|0;if(d>>>0>=a>>>0)break;else e=e+1080|0}}l=g+5604|0;a=c[l>>2]|0;if(a){Uc(a);c[l>>2]=0}if(!(c[q>>2]|0)){r=1;i=s;return r|0}k=g+5624|0;h=g+5628|0;j=0;while(1){b=b+1|0;qb(b,r,1);a=c[n>>2]|0;f=c[k>>2]|0;g=c[h>>2]|0;if(((g|0)!=0?!((g|0)==0?1:(c[f>>2]|0)!=(c[r>>2]|0)):0)?(o=c[f+4>>2]|0,p=a+16|0,(o|0)==(c[p>>2]|0)):0){a=c[f+8>>2]|0;if(a){d=_(o,o)|0;g=_(c[1036+(c[a>>2]<<2)>>2]|0,d)|0;if((c[a+16>>2]|0)!=(g|0)){a=0;d=32;break}e=Pc(d<<2)|0;c[l>>2]=e;if(!e){a=0;d=32;break}Xa[c[1052+(c[a>>2]<<2)>>2]&15](c[a+12>>2]|0,e,d)}a=c[f+12>>2]|0;if(a){d=c[p>>2]|0;g=_(d,c[1036+(c[a>>2]<<2)>>2]|0)|0;if((c[a+16>>2]|0)!=(g|0)){a=0;d=32;break}g=Pc(d<<2)|0;if(!g){a=0;d=32;break}Xa[c[1068+(c[a>>2]<<2)>>2]&15](c[a+12>>2]|0,g,d);a=c[p>>2]|0;if(a){d=0;e=g;f=c[m>>2]|0;while(1){c[f+1076>>2]=c[e>>2];d=d+1|0;if((d|0)==(a|0))break;else{e=e+4|0;f=f+1080|0}}}Uc(g)}}j=j+1|0;if(j>>>0>=(c[q>>2]|0)>>>0){a=1;d=32;break}}if((d|0)==32){i=s;return a|0}return 0}function we(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){qb(a,f,2);c[b>>2]=c[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+2|0}}i=g;return}function xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){qb(a,f,4);c[b>>2]=c[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=g;return}function ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=i;i=i+16|0;f=h;if(!d){i=h;return}e=0;while(1){ub(a,f);c[b>>2]=~~+g[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=h;return}function ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){sb(a,f);c[b>>2]=~~+h[f>>3];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+8|0}}i=g;return}function Ae(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=i;i=i+16|0;f=h;if(!d){i=h;return}e=0;while(1){qb(a,f,2);g[b>>2]=+((c[f>>2]|0)>>>0);e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+2|0}}i=h;return}function Be(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=i;i=i+16|0;f=h;if(!d){i=h;return}e=0;while(1){qb(a,f,4);g[b>>2]=+((c[f>>2]|0)>>>0);e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=h;return}function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){ub(a,f);c[b>>2]=c[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=g;return}function De(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;if(!c){i=f;return}d=0;while(1){sb(a,e);g[b>>2]=+h[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}i=f;return}function Ee(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+8|0;k=n+20|0;if((c[a+8>>2]|0)==16)a=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else a=c[a+12>>2]|0;m=c[a+5584>>2]|0;a=c[e>>2]|0;if(!a){Ub(f,1,14224,n)|0;b=0;i=n;return b|0}c[e>>2]=a+-1;qb(d,k,1);d=d+1|0;g=c[k>>2]&31;j=m+(b*1080|0)+24|0;c[j>>2]=g;c[m+(b*1080|0)+804>>2]=(c[k>>2]|0)>>>5;do if((g|0)==1){a=1;l=8}else{a=(c[e>>2]|0)>>>((g|0)!=0&1);if(a>>>0>97){c[h>>2]=a;c[h+4>>2]=97;c[h+8>>2]=97;Ub(f,2,14260,h)|0;g=c[j>>2]|0}f=(a|0)==0;if(g)if(f){a=0;l=20;break}else{l=8;break}if(!f){g=0;while(1){qb(d,k,1);if(g>>>0<97){c[m+(b*1080|0)+28+(g<<3)>>2]=(c[k>>2]|0)>>>3;c[m+(b*1080|0)+28+(g<<3)+4>>2]=0}g=g+1|0;if((g|0)==(a|0))break;else d=d+1|0}}a=(c[e>>2]|0)-a|0}while(0);if((l|0)==8){g=0;while(1){qb(d,k,2);if(g>>>0<97){c[m+(b*1080|0)+28+(g<<3)>>2]=(c[k>>2]|0)>>>11;c[m+(b*1080|0)+28+(g<<3)+4>>2]=c[k>>2]&2047}g=g+1|0;if((g|0)==(a|0)){l=20;break}else d=d+2|0}}if((l|0)==20)a=(c[e>>2]|0)-(a<<1)|0;c[e>>2]=a;if((c[j>>2]|0)!=1){b=1;i=n;return b|0}a=m+(b*1080|0)+28|0;d=m+(b*1080|0)+32|0;g=1;do{e=(c[a>>2]|0)-(((g+-1|0)>>>0)/3|0)|0;c[m+(b*1080|0)+28+(g<<3)>>2]=(e|0)>0?e:0;c[m+(b*1080|0)+28+(g<<3)+4>>2]=c[d>>2];g=g+1|0}while((g|0)!=97);a=1;i=n;return a|0}function Fe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;p=r+40|0;l=r+32|0;k=r+16|0;j=r+8|0;o=r+44|0;h=a+8|0;if((c[h>>2]|0)==16)g=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else g=c[a+12>>2]|0;m=c[g+5584>>2]|0;if((c[e>>2]|0)>>>0<5){Ub(f,1,14664,r)|0;e=0;i=r;return e|0}n=m+(b*1080|0)+4|0;qb(d,n,1);g=(c[n>>2]|0)+1|0;c[n>>2]=g;if(g>>>0>33){c[j>>2]=g;c[j+4>>2]=33;Ub(f,1,14699,j)|0;e=0;i=r;return e|0}if((c[a+168>>2]|0)>>>0>=g>>>0){c[k>>2]=b;Ub(f,1,14776,k)|0;c[h>>2]=c[h>>2]|32768;e=0;i=r;return e|0}j=m+(b*1080|0)+8|0;qb(d+1|0,j,1);c[j>>2]=(c[j>>2]|0)+2;a=m+(b*1080|0)+12|0;qb(d+2|0,a,1);k=(c[a>>2]|0)+2|0;c[a>>2]=k;j=c[j>>2]|0;if(j>>>0>10|k>>>0>10|(j+k|0)>>>0>12){Ub(f,1,14934,r+24|0)|0;e=0;i=r;return e|0}qb(d+3|0,m+(b*1080|0)+16|0,1);qb(d+4|0,m+(b*1080|0)+20|0,1);h=(c[e>>2]|0)+-5|0;c[e>>2]=h;g=c[n>>2]|0;if(!(c[m+(b*1080|0)>>2]&1)){if(!g){e=1;i=r;return e|0}else g=0;do{c[m+(b*1080|0)+812+(g<<2)>>2]=15;c[m+(b*1080|0)+944+(g<<2)>>2]=15;g=g+1|0}while(g>>>0<(c[n>>2]|0)>>>0);g=1;i=r;return g|0}if(h>>>0>>0){Ub(f,1,14664,l)|0;e=0;i=r;return e|0}do if(!g)g=0;else{a=0;h=d+5|0;while(1){qb(h,o,1);h=h+1|0;g=c[o>>2]|0;if((a|0)!=0?g>>>0<16|(g&15|0)==0:0)break;c[m+(b*1080|0)+812+(a<<2)>>2]=g&15;c[m+(b*1080|0)+944+(a<<2)>>2]=(c[o>>2]|0)>>>4;a=a+1|0;g=c[n>>2]|0;if(a>>>0>=g>>>0){q=22;break}}if((q|0)==22){h=c[e>>2]|0;break}Ub(f,1,15002,p)|0;e=0;i=r;return e|0}while(0);c[e>>2]=h-g;e=1;i=r;return e|0}function Ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){pb(b,~~+g[a>>2]>>>0,2);d=d+1|0;if((d|0)==(c|0))break;else{b=b+2|0;a=a+4|0}}return}function He(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){pb(b,~~+g[a>>2]>>>0,4);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}return}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){tb(b,+g[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}return}function Je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){rb(b,+g[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{b=b+8|0;a=a+4|0}}return}function Ke(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;if(!d){d=0;i=j;return d|0}if(!(ld(c[a>>2]|0,b,d,e)|0)){Ub(e,1,16303,j)|0;d=0;i=j;return d|0}if(c[a+128>>2]|0){d=1;i=j;return d|0}h=a+108|0;if(!(bf(d,h,e)|0)){d=0;i=j;return d|0}b=c[a+48>>2]|0;a:do switch(b|0){case 16:{c[d+20>>2]=1;break}case 17:{c[d+20>>2]=2;break}case 18:{c[d+20>>2]=3;break}case 24:{c[d+20>>2]=4;break}default:{f=d+20|0;if((b|0)==12){c[f>>2]=5;break a}else{c[f>>2]=-1;break a}}}while(0);g=a+120|0;b=c[g>>2]|0;do if(b){if(c[b+12>>2]|0){cf(d,h);break}Uc(c[b+4>>2]|0);Uc(c[(c[g>>2]|0)+8>>2]|0);Uc(c[c[g>>2]>>2]|0);b=c[g>>2]|0;f=c[b+12>>2]|0;if(f){Uc(f);b=c[g>>2]|0}Uc(b);c[g>>2]=0}while(0);if(c[a+116>>2]|0)df(d,h,e);b=c[h>>2]|0;if(!b){d=1;i=j;return d|0}c[d+28>>2]=b;c[d+32>>2]=c[a+112>>2];c[h>>2]=0;d=1;i=j;return d|0}function Le(b,d){b=b|0;d=d|0;Wc(c[b>>2]|0,d);a[b+124>>0]=0;c[b+128>>2]=c[d+8248>>2]&1;return}function Me(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+80|0;v=w+64|0;s=w+56|0;o=w+48|0;r=w+40|0;q=w+32|0;p=w+24|0;if(!((a|0)!=0&(d|0)!=0&(e|0)!=0)){d=0;i=w;return d|0}t=e+16|0;if(((c[t>>2]|0)+-1|0)>>>0>16383){Ub(f,1,16352,w)|0;d=0;i=w;return d|0}if(!(Zc(c[a>>2]|0,d,e,f)|0)){d=0;i=w;return d|0}c[a+56>>2]=1785737760;c[a+60>>2]=0;c[a+64>>2]=1;g=Pc(4)|0;h=a+68|0;c[h>>2]=g;if(!g){c[h>>2]=0;Ub(f,1,16421,w+8|0)|0;d=0;i=w;return d|0}c[g>>2]=1785737760;l=c[t>>2]|0;c[a+20>>2]=l;l=Pc(l*12|0)|0;g=a+72|0;c[g>>2]=l;if(!l){c[g>>2]=0;Ub(f,1,16421,w+16|0)|0;d=0;i=w;return d|0}c[a+16>>2]=(c[e+12>>2]|0)-(c[e+4>>2]|0);c[a+12>>2]=(c[e+8>>2]|0)-(c[e>>2]|0);u=e+24|0;m=c[u>>2]|0;j=c[m+24>>2]|0;k=c[m+32>>2]|0;g=a+24|0;c[g>>2]=j+-1+(k<<7);n=c[t>>2]|0;if(n>>>0>1){h=1;do{if((j|0)!=(c[m+(h*52|0)+24>>2]|0))c[g>>2]=255;h=h+1|0}while(h>>>0>>0)}c[a+28>>2]=7;c[a+32>>2]=0;c[a+36>>2]=0;h=(n|0)==0;if(!h?(c[l+8>>2]=j+-1+(k<<7),n>>>0>1):0){g=1;do{c[l+(g*12|0)+8>>2]=(c[m+(g*52|0)+24>>2]|0)+-1+(c[m+(g*52|0)+32>>2]<<7);g=g+1|0}while(g>>>0>>0)}g=a+40|0;a:do if(!(c[e+32>>2]|0)){c[g>>2]=1;switch(c[e+20>>2]|0){case 1:{c[a+48>>2]=16;break a}case 2:{c[a+48>>2]=17;break a}case 3:{c[a+48>>2]=18;break a}default:break a}}else{c[g>>2]=2;c[a+48>>2]=0}while(0);b:do if(!h){h=0;g=0;j=0;do{e=(b[m+(j*52|0)+48>>1]|0)==0;g=(e&1^1)+g|0;h=e?h:j;j=j+1|0}while(j>>>0>>0);j=h;if((g|0)!=1){if(g>>>0<=1)break;Ub(f,2,16717,o)|0;break}switch(c[a+48>>2]|0){case 18:case 16:{h=3;break}case 17:{h=1;break}default:{Ub(f,2,16467,p)|0;break b}}if(n>>>0<(h+1|0)>>>0){Ub(f,2,16541,q)|0;break}if(j>>>0>>0){Ub(f,2,16634,r)|0;break}r=Pc(8)|0;g=a+116|0;c[g>>2]=r;if(!r){Ub(f,1,16782,s)|0;d=0;i=w;return d|0}s=Pc((c[t>>2]|0)*6|0)|0;e=c[g>>2]|0;c[e>>2]=s;if(!s){Ub(f,1,16782,v)|0;d=0;i=w;return d|0}l=c[t>>2]|0;b[e+4>>1]=l;k=c[e>>2]|0;g=0;do{b[k+(g*6|0)>>1]=g;b[k+(g*6|0)+2>>1]=0;v=g;g=g+1|0;b[k+(v*6|0)+4>>1]=g}while((g|0)!=(h|0));if(h>>>0>>0){j=c[u>>2]|0;do{v=(b[j+(h*52|0)+48>>1]|0)==0;b[k+(h*6|0)>>1]=h;g=k+(h*6|0)+2|0;if(v){b[g>>1]=-1;b[k+(h*6|0)+4>>1]=-1}else{b[g>>1]=1;b[(c[e>>2]|0)+(h*6|0)+4>>1]=0}h=h+1|0}while(h>>>0>>0)}}while(0);c[a+52>>2]=0;c[a+44>>2]=0;c[a+96>>2]=c[d+18692>>2];d=1;i=w;return d|0}function Ne(a,b,d){a=a|0;b=b|0;d=d|0;return od(c[a>>2]|0,b,d)|0}function Oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+8|0;if(!(sg(c[e>>2]|0,52,d)|0)){d=0;return d|0}g=c[e>>2]|0;h=tg(g)|0;e=ug(g)|0;if(h){i=0;f=1;while(1){if(!f)f=0;else f=(Ra[c[e>>2]&63](a,b,d)|0)!=0;i=i+1|0;if((i|0)==(h|0))break;else{e=e+4|0;f=f&1}}vg(g);if(!f){d=0;return d|0}}else vg(g);d=$c(c[a>>2]|0,b,d)|0;return d|0}function Pe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+8|0;if(!(sg(c[e>>2]|0,53,d)|0)){d=0;return d|0}if(!(pd(c[a>>2]|0,b,d)|0)){d=0;return d|0}i=c[e>>2]|0;g=tg(i)|0;e=ug(i)|0;if(!g)e=1;else{h=0;f=e;e=1;while(1){if(!e)e=0;else e=(Ra[c[f>>2]&63](a,b,d)|0)!=0;e=e&1;h=h+1|0;if((h|0)==(g|0))break;else f=f+4|0}}vg(i);d=e;return d|0}function Qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a+4|0;if(!(sg(c[f>>2]|0,54,e)|0)){b=0;return b|0}h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](a,b,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){b=0;return b|0}}else vg(h);f=a+8|0;if(!(sg(c[f>>2]|0,55,e)|0)){b=0;return b|0}if(!(sg(c[f>>2]|0,56,e)|0)){b=0;return b|0}if(!(sg(c[f>>2]|0,57,e)|0)){b=0;return b|0}if((c[a+96>>2]|0)!=0?(sg(c[f>>2]|0,58,e)|0)==0:0){b=0;return b|0}if(!(sg(c[f>>2]|0,59,e)|0)){b=0;return b|0}h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](a,b,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){b=0;return b|0}}else vg(h);b=qd(c[a>>2]|0,b,d,e)|0;return b|0}function Re(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+8|0;if(!(sg(c[k>>2]|0,52,e)|0)){a=0;return a|0}h=c[b+4>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){a=0;return a|0}}else vg(h);h=c[k>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){a=0;return a|0}}else vg(h);a=ad(a,c[b>>2]|0,d,e)|0;return a|0}function Se(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return cd(c[a>>2]|0,b,d,e,f,g,h,i,j,k,l)|0}function Te(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;return rd(c[a>>2]|0,b,d,e,f,g)|0}function Ue(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;return dd(c[a>>2]|0,b,d,e,f,g)|0}function Ve(a){a=a|0;var b=0,d=0,e=0;if(!a)return;Yc(c[a>>2]|0);c[a>>2]=0;b=a+72|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+68|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+108|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}e=a+116|0;b=c[e>>2]|0;if(b){d=c[b>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b>>2]=0}Uc(b);c[e>>2]=0}e=a+120|0;b=c[e>>2]|0;if(b){d=c[b+12>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b+12>>2]=0}d=c[b+4>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b+4>>2]=0}d=c[b+8>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b+8>>2]=0}d=c[b>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b>>2]=0}Uc(b);c[e>>2]=0}b=a+4|0;d=c[b>>2]|0;if(d){rg(d);c[b>>2]=0}b=a+8|0;d=c[b>>2]|0;if(d){rg(d);c[b>>2]=0}Uc(a);return}function We(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ed(c[a>>2]|0,b,d,e,f,g,h)|0}function Xe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;if(!d){a=0;i=j;return a|0}Ub(e,2,16826,j)|0;if(!(md(c[a>>2]|0,b,d,e,f)|0)){Ub(e,1,16303,j+8|0)|0;a=0;i=j;return a|0}h=a+108|0;if(!(bf(d,h,e)|0)){a=0;i=j;return a|0}f=c[a+48>>2]|0;a:do switch(f|0){case 16:{c[d+20>>2]=1;break}case 17:{c[d+20>>2]=2;break}case 18:{c[d+20>>2]=3;break}case 24:{c[d+20>>2]=4;break}default:{b=d+20|0;if((f|0)==12){c[b>>2]=5;break a}else{c[b>>2]=-1;break a}}}while(0);g=a+120|0;b=c[g>>2]|0;do if(b){if(c[b+12>>2]|0){cf(d,h);break}Uc(c[b+4>>2]|0);Uc(c[(c[g>>2]|0)+8>>2]|0);Uc(c[c[g>>2]>>2]|0);b=c[g>>2]|0;f=c[b+12>>2]|0;if(f){Uc(f);b=c[g>>2]|0}Uc(b);c[g>>2]=0}while(0);if(c[a+116>>2]|0)df(d,h,e);b=c[h>>2]|0;if(!b){a=1;i=j;return a|0}c[d+28>>2]=b;c[d+32>>2]=c[a+112>>2];c[h>>2]=0;a=1;i=j;return a|0}function Ye(b){b=b|0;var d=0;d=Qc(1,136)|0;if(!d)return d|0;if(!b){b=Xc()|0;c[d>>2]=b}else{b=fd()|0;c[d>>2]=b}if(!b){Ve(d);d=0;return d|0}b=d+108|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;a[b+16>>0]=0;b=qg()|0;c[d+4>>2]=b;if(!b){Ve(d);d=0;return d|0}b=qg()|0;c[d+8>>2]=b;if(b)return d|0;Ve(d);d=0;return d|0}function Ze(a,b,d){a=a|0;b=b|0;d=d|0;gd(c[a>>2]|0,b,d);return}function _e(a){a=a|0;return kd(c[a>>2]|0)|0}function $e(a){a=a|0;return jd(c[a>>2]|0)|0}function af(a,b,d){a=a|0;b=b|0;d=d|0;return nd(c[a>>2]|0,b,d)|0}function bf(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+80|0;A=B+72|0;z=B+64|0;y=B+56|0;x=B+48|0;w=B+40|0;v=B+32|0;u=B+24|0;s=B+16|0;o=B+8|0;n=B;j=c[g+8>>2]|0;a:do if(j){r=c[j>>2]|0;q=b[j+4>>1]|0;j=c[f+16>>2]|0;p=c[g+12>>2]|0;if((p|0)!=0?(c[p+12>>2]|0)!=0:0)g=d[p+18>>0]|0;else g=j;m=q<<16>>16==0;b:do if(!m){l=0;c:while(1){k=l&65535;j=e[r+(k*6|0)>>1]|0;if(j>>>0>=g>>>0){k=15;break}j=b[r+(k*6|0)+4>>1]|0;switch(j<<16>>16){case 0:case -1:break;default:{j=(j&65535)+-1|0;if(j>>>0>=g>>>0){k=18;break c}}}l=l+1<<16>>16;if((l&65535)>=(q&65535))break b}if((k|0)==15){c[n>>2]=j;c[n+4>>2]=g;Ub(h,1,19343,n)|0;h=0;i=B;return h|0}else if((k|0)==18){c[o>>2]=j;c[o+4>>2]=g;Ub(h,1,19343,o)|0;h=0;i=B;return h|0}}while(0);if(!g)j=p;else{d:do if(!m)while(1){g=g+-1|0;j=0;do{if((e[r+((j&65535)*6|0)>>1]|0)==(g|0))break;j=j+1<<16>>16}while((j&65535)<(q&65535));if(j<<16>>16==q<<16>>16)break d;if(!g){j=p;break a}}while(0);Ub(h,1,19380,s)|0;h=0;i=B;return h|0}}else j=c[g+12>>2]|0;while(0);if(!j){h=1;i=B;return h|0}t=c[j+12>>2]|0;if(!t){h=1;i=B;return h|0}p=a[j+18>>0]|0;s=p&255;r=p<<24>>24==0;if(r)j=1;else{l=f+16|0;g=0;m=0;j=1;do{g=e[t+(g<<2)>>1]|0;k=c[l>>2]|0;if(g>>>0>=k>>>0){c[u>>2]=g;c[u+4>>2]=k;Ub(h,1,19343,u)|0;j=0}m=m+1<<16>>16;g=m&65535}while(g>>>0>>0)}q=Qc(s,4)|0;if(!q){Ub(h,1,19413,v)|0;h=0;i=B;return h|0}if(!r){n=0;o=0;do{k=a[t+(n<<2)+3>>0]|0;l=k&255;do if((k&255)<(p&255)){m=q+(l<<2)|0;g=a[t+(n<<2)+2>>0]|0;if((c[m>>2]|0)!=0&g<<24>>24==1){c[x>>2]=l;Ub(h,1,19486,x)|0;j=0;break}if(g<<24>>24!=0|k<<24>>24==0){c[m>>2]=1;break}else{c[y>>2]=n;c[y+4>>2]=l;Ub(h,1,19517,y)|0;j=0;break}}else{c[w>>2]=l;Ub(h,1,19430,w)|0;j=0}while(0);o=o+1<<16>>16;n=o&65535}while(n>>>0>>0);if(!r){g=0;k=0;do{if((c[q+(g<<2)>>2]|0)==0?(a[t+(g<<2)+2>>0]|0)!=0:0){c[z>>2]=g;Ub(h,1,19553,z)|0;j=0}k=k+1<<16>>16;g=k&65535}while(g>>>0>>0)}}if(!j){Uc(q);h=0;i=B;return h|0}e:do if(!((c[f+16>>2]|0)!=1|r)){j=0;g=0;while(1){g=g+1<<16>>16;if(!(c[q+(j<<2)>>2]|0))break;j=g&65535;if(j>>>0>=s>>>0)break e}c[A>>2]=j;Ub(h,2,19591,A)|0;if(!r){j=0;g=0;do{a[t+(j<<2)+2>>0]=1;a[t+(j<<2)+3>>0]=g;g=g+1<<16>>16;j=g&65535}while(j>>>0>>0)}}while(0);Uc(q);h=1;i=B;return h|0}function cf(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=g+12|0;g=c[w>>2]|0;m=c[g+8>>2]|0;o=c[g+4>>2]|0;q=c[g>>2]|0;r=c[g+12>>2]|0;g=a[g+18>>0]|0;s=f+24|0;t=c[s>>2]|0;u=g&255;v=Pc(u*52|0)|0;if(!v)return;n=g<<24>>24==0;if(!n){k=0;l=0;do{g=b[r+(k<<2)>>1]|0;if(!(a[r+(k<<2)+2>>0]|0)){g=g&65535;h=v+(k*52|0)|0;i=t+(g*52|0)|0;j=h+52|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}else{g=g&65535;h=v+((d[r+(k<<2)+3>>0]|0)*52|0)|0;i=t+(g*52|0)|0;j=h+52|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}j=Pc(_(c[t+(g*52|0)+8>>2]<<2,c[t+(g*52|0)+12>>2]|0)|0)|0;c[v+(k*52|0)+44>>2]=j;if(!j){p=7;break}c[v+(k*52|0)+24>>2]=d[m+k>>0];c[v+(k*52|0)+32>>2]=d[o+k>>0];l=l+1<<16>>16;k=l&65535}while(k>>>0>>0);if((p|0)==7){Uc(v);return}m=(e[(c[w>>2]|0)+16>>1]|0)+-1|0;if(!n){g=0;l=0;do{j=c[t+((e[r+(g<<2)>>1]|0)*52|0)+44>>2]|0;i=d[r+(g<<2)+3>>0]|0;k=_(c[v+(i*52|0)+12>>2]|0,c[v+(i*52|0)+8>>2]|0)|0;if(!(a[r+(g<<2)+2>>0]|0)){g=c[v+(g*52|0)+44>>2]|0;if(k){h=0;do{c[g+(h<<2)>>2]=c[j+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0))}}else{g=c[v+(i*52|0)+44>>2]|0;if(k){h=0;do{p=c[j+(h<<2)>>2]|0;c[g+(h<<2)>>2]=c[q+((_((p|0)<0?0:(p|0)>(m|0)?m:p,u)|0)+i<<2)>>2];h=h+1|0}while((h|0)!=(k|0))}}l=l+1<<16>>16;g=l&65535}while(g>>>0>>0)}}h=f+16|0;i=c[h>>2]|0;if(i){g=0;j=0;do{g=c[t+(g*52|0)+44>>2]|0;if(g)Uc(g);j=j+1<<16>>16;g=j&65535}while(g>>>0>>0)}Uc(t);c[s>>2]=v;c[h>>2]=u;Uc(c[(c[w>>2]|0)+4>>2]|0);Uc(c[(c[w>>2]|0)+8>>2]|0);Uc(c[c[w>>2]>>2]|0);g=c[w>>2]|0;h=c[g+12>>2]|0;if(h){Uc(h);g=c[w>>2]|0}Uc(g);c[w>>2]=0;return}function df(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+80|0;w=y+8|0;v=y;u=y+16|0;x=d+8|0;f=c[x>>2]|0;d=c[f>>2]|0;t=b[f+4>>1]|0;if(t<<16>>16){s=a+16|0;o=a+24|0;q=1;r=0;while(1){p=b[d+(r*6|0)>>1]|0;n=p&65535;a=c[s>>2]|0;a:do if(n>>>0>>0){f=b[d+(r*6|0)+4>>1]|0;switch(f<<16>>16){case -1:case 0:{b[(c[o>>2]|0)+(n*52|0)+48>>1]=b[d+(r*6|0)+2>>1]|0;break a}default:{}}k=(f&65535)+65535|0;m=k&65535;k=k&65535;if(k>>>0>=a>>>0){c[w>>2]=k;c[w+4>>2]=a;Ub(e,2,19302,w)|0;break}l=d+(r*6|0)+2|0;if((n|0)!=(k|0)?(b[l>>1]|0)==0:0){f=c[o>>2]|0;a=f+(n*52|0)|0;g=u;h=a;j=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));g=a;h=f+(k*52|0)|0;j=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));g=(c[o>>2]|0)+(k*52|0)|0;h=u;j=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));if((r+1&65535)<(t&65535)){g=q;do{f=d+(g*6|0)|0;a=b[f>>1]|0;if(a<<16>>16!=p<<16>>16){if(a<<16>>16==m<<16>>16)b[f>>1]=p}else b[f>>1]=m;g=g+1|0}while((g&65535)<<16>>16!=t<<16>>16)}}b[(c[o>>2]|0)+(n*52|0)+48>>1]=b[l>>1]|0}else{c[v>>2]=n;c[v+4>>2]=a;Ub(e,2,19262,v)|0}while(0);r=r+1|0;if((r&65535)<<16>>16==t<<16>>16)break;else q=q+1|0}d=c[x>>2]|0;f=d;d=c[d>>2]|0}if(!d){w=f;Uc(w);c[x>>2]=0;i=y;return}else{Uc(d);w=c[x>>2]|0;Uc(w);c[x>>2]=0;i=y;return}}function ef(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+192|0;y=I+152|0;x=I+144|0;w=I+136|0;v=I+128|0;u=I+120|0;E=I+88|0;s=I+80|0;q=I+64|0;p=I+48|0;G=I+40|0;z=I+32|0;F=I+24|0;t=I+16|0;r=I+8|0;n=I+176|0;o=I+168|0;D=I+156|0;e=Qc(1,1024)|0;if(!e){Ub(d,1,17098,I)|0;H=0;i=I;return H|0}m=n+4|0;A=D+4|0;B=a+100|0;l=1024;a:while(1){if((Mb(b,n,8,d)|0)!=8)break;while(1){qb(n,D,4);qb(m,A,4);switch(c[D>>2]|0){case 0:{f=Qb(b)|0;k=C;if((k|0)>0|(k|0)==0&f>>>0>4294967287){H=6;break a}c[D>>2]=f+8;j=8;break}case 1:{if((Mb(b,n,8,d)|0)!=8)break a;qb(n,o,4);if(c[o>>2]|0){H=10;break a}qb(m,D,4);j=16;break}default:j=8}g=c[A>>2]|0;if((g|0)==1785737827){H=13;break a}f=c[D>>2]|0;if(!f){H=17;break a}if(f>>>0>>0){H=19;break a}if((g|0)==1783636e3){h=1084;g=j;H=22;break}if((g|0)==1718909296){h=1092;g=j;H=22;break}k=(g|0)==1785737832;b:do if((g|0)!=1768449138)if((g|0)!=1668246642)if((g|0)!=1651532643)if((g|0)!=1885564018)if((g|0)!=1668112752){h=(g|0)==1667523942?1148:0;f=f-j|0;if((g|0)<1785737832)switch(g|0){case 1667523942:{H=30;break b}default:{}}else switch(g|0){case 1785737832:{H=30;break b}default:{}}g=c[B>>2]|0;if(!(g&1)){H=45;break a}if(!(g&2)){H=47;break a}c[B>>2]=g|2147483647;k=Rb(b,f,0,d)|0;if(!((k|0)==(f|0)&(C|0)==0)){H=50;break a}}else{h=1140;H=28}else{h=1132;H=28}else{h=1124;H=28}else{h=1116;H=28}else{h=1108;H=28}while(0);if((H|0)==28){f=f-j|0;H=30}if((H|0)==30){H=0;if(k){h=1100;break}c[p>>2]=g>>>24;c[p+4>>2]=g>>>16&255;c[p+8>>2]=g>>>8&255;c[p+12>>2]=g&255;Ub(d,2,17282,p)|0;if(c[B>>2]&4)break;k=c[A>>2]|0;c[q>>2]=k>>>24;c[q+4>>2]=k>>>16&255;c[q+8>>2]=k>>>8&255;c[q+12>>2]=k&255;Ub(d,2,17333,q)|0;c[B>>2]=c[B>>2]|2147483647;k=Rb(b,f,0,d)|0;if(!((k|0)==(f|0)&(C|0)==0)){H=33;break a}}if((Mb(b,n,8,d)|0)!=8)break a}if((H|0)==22){H=0;f=f-g|0}k=Qb(b)|0;j=C;if(0>(j|0)|0==(j|0)&f>>>0>k>>>0){H=35;break}if(f>>>0>l>>>0){g=Tc(e,f)|0;if(!g){H=38;break}else{e=g;g=f}}else g=l;if((Mb(b,e,f,d)|0)!=(f|0)){H=40;break}if(!(Za[c[h+4>>2]&63](a,e,f,d)|0)){H=43;break}else l=g}switch(H|0){case 6:{Ub(d,1,17148,r)|0;break}case 10:{Ub(d,1,17148,t)|0;break}case 13:{f=c[B>>2]|0;if(!(f&4)){Ub(d,1,17190,F)|0;Uc(e);H=0;i=I;return H|0}else{c[B>>2]=f|8;Uc(e);H=1;i=I;return H|0}}case 17:{Ub(d,1,17218,z)|0;Uc(e);H=0;i=I;return H|0}case 19:{c[G>>2]=f;c[G+4>>2]=g;Ub(d,1,17256,G)|0;Uc(e);H=0;i=I;return H|0}case 33:{Ub(d,1,17399,s)|0;Uc(e);H=0;i=I;return H|0}case 35:{F=c[D>>2]|0;G=c[A>>2]|0;H=Qb(b)|0;c[E>>2]=F;c[E+4>>2]=G>>>24;c[E+8>>2]=G>>>16&255;c[E+12>>2]=G>>>8&255;c[E+16>>2]=G&255;c[E+20>>2]=f;c[E+24>>2]=H;Ub(d,1,17449,E)|0;Uc(e);H=0;i=I;return H|0}case 38:{Uc(e);Ub(d,1,17525,u)|0;H=0;i=I;return H|0}case 40:{Ub(d,1,17567,v)|0;Uc(e);H=0;i=I;return H|0}case 43:{Uc(e);H=0;i=I;return H|0}case 45:{Ub(d,1,17616,w)|0;Uc(e);H=0;i=I;return H|0}case 47:{Ub(d,1,17686,x)|0;Uc(e);H=0;i=I;return H|0}case 50:{Ub(d,1,17399,y)|0;Uc(e);H=0;i=I;return H|0}}Uc(e);H=1;i=I;return H|0}function ff(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;g=h+24|0;e=Pb(b)|0;f=C;a=a+80|0;j=a;j=Oi(e|0,f|0,c[j>>2]|0,c[j+4>>2]|0)|0;pb(g,j,4);pb(g+4|0,1785737827,4);if(!(Sb(b,c[a>>2]|0,c[a+4>>2]|0,d)|0)){Ub(d,1,17067,h)|0;j=0;i=h;return j|0}if((Nb(b,g,8,d)|0)!=8){Ub(d,1,17067,h+8|0)|0;j=0;i=h;return j|0}if(Sb(b,e,f,d)|0){j=1;i=h;return j|0}Ub(d,1,17067,h+16|0)|0;j=0;i=h;return j|0}function gf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;d=((c[a>>2]|0)!=0?(c[a+104>>2]|c[a+100>>2]|0)==0:0)&(c[a+8>>2]|0)!=0&(c[a+4>>2]|0)!=0&(c[a+64>>2]|0)!=0&(c[a+16>>2]|0)!=0&(c[a+12>>2]|0)!=0&1;e=c[a+20>>2]|0;if(!e){g=d;a=a+40|0;a=c[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Tb(b)|0;b=b&g;a=b&a;return a|0}f=c[a+72>>2]|0;g=0;do{d=(c[f+(g*12|0)+8>>2]&126)>>>0<38&d;g=g+1|0}while(g>>>0>>0);a=a+40|0;a=c[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Tb(b)|0;b=b&d;a=b&a;return a|0}function hf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=i;i=i+16|0;d=a;pb(d,12,4);pb(d+4|0,1783636e3,4);pb(d+8|0,218793738,4);c=(Nb(b,d,12,c)|0)==12&1;i=a;return c|0}function jf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l+8|0;f=a+64|0;h=(c[f>>2]<<2)+16|0;j=Qc(1,h)|0;if(!j){Ub(d,1,16987,l)|0;k=0;i=l;return k|0}pb(j,h,4);pb(j+4|0,1718909296,4);pb(j+8|0,c[a+56>>2]|0,4);pb(j+12|0,c[a+60>>2]|0,4);g=j+16|0;if(c[f>>2]|0){a=a+68|0;e=0;do{pb(g,c[(c[a>>2]|0)+(e<<2)>>2]|0,4);e=e+1|0}while(e>>>0<(c[f>>2]|0)>>>0)}a=(Nb(b,j,h,d)|0)==(h|0);if(!a)Ub(d,1,17026,k)|0;Uc(j);k=a&1;i=l;return k|0}function kf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+80|0;o=q+16|0;m=q+8|0;k=q;f=q+24|0;l=q+72|0;e=f;g=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(g|0));p=(c[a+24>>2]|0)==255;c[f>>2]=2;e=f+12|0;if(p){c[e>>2]=3;c[f+24>>2]=4;e=3}else{c[e>>2]=4;e=2}if(!(c[a+116>>2]|0))p=e;else{c[f+(e*12|0)>>2]=5;p=e+1|0}pb(l+4|0,1785737832,4);h=0;j=f;e=8;while(1){g=j+8|0;r=_a[c[j>>2]&7](a,g)|0;c[j+4>>2]=r;if(!r){n=8;break}e=(c[g>>2]|0)+e|0;h=h+1|0;if((h|0)>=(p|0))break;else j=j+12|0}if((n|0)==8){Ub(d,1,16901,k)|0;g=0;while(1){e=c[f+4>>2]|0;if(e)Uc(e);g=g+1|0;if((g|0)>=(p|0)){e=0;break}else f=f+12|0}i=q;return e|0}pb(l,e,4);a:do if((Nb(b,l,8,d)|0)==8){e=0;g=f;while(1){r=g+8|0;n=Nb(b,c[g+4>>2]|0,c[r>>2]|0,d)|0;if((n|0)!=(c[r>>2]|0))break;e=e+1|0;if((e|0)>=(p|0)){e=1;break a}else g=g+12|0}Ub(d,1,16944,o)|0;e=0}else{Ub(d,1,16944,m)|0;e=0}while(0);h=0;while(1){g=c[f+4>>2]|0;if(g)Uc(g);h=h+1|0;if((h|0)>=(p|0))break;else f=f+12|0}i=q;return e|0}function lf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Pb(b)|0;a=a+88|0;c[a>>2]=e;c[a+4>>2]=C;b=Rb(b,24,0,d)|0;return (b|0)==24&(C|0)==0&1|0}function mf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Pb(b)|0;a=a+80|0;c[a>>2]=e;c[a+4>>2]=C;b=Rb(b,8,0,d)|0;return (b|0)==8&(C|0)==0&1|0}function nf(a,b){a=a|0;b=b|0;var d=0;d=Qc(1,22)|0;if(!d){b=0;return b|0}pb(d,22,4);pb(d+4|0,1768449138,4);pb(d+8|0,c[a+16>>2]|0,4);pb(d+12|0,c[a+12>>2]|0,4);pb(d+16|0,c[a+20>>2]|0,2);pb(d+18|0,c[a+24>>2]|0,1);pb(d+19|0,c[a+28>>2]|0,1);pb(d+20|0,c[a+32>>2]|0,1);pb(d+21|0,c[a+36>>2]|0,1);c[b>>2]=22;b=d;return b|0}function of(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+20|0;g=(c[f>>2]|0)+8|0;h=Qc(1,g)|0;if(!h){b=0;return b|0}pb(h,g,4);pb(h+4|0,1651532643,4);if(c[f>>2]|0){a=a+72|0;d=0;e=h+8|0;while(1){pb(e,c[(c[a>>2]|0)+(d*12|0)+8>>2]|0,1);d=d+1|0;if(d>>>0>=(c[f>>2]|0)>>>0)break;else e=e+1|0}}c[b>>2]=g;b=h;return b|0}function pf(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=a+40|0;switch(c[e>>2]|0){case 1:{j=15;break}case 2:{j=(c[a+112>>2]|0)+11|0;break}default:{b=0;return b|0}}i=Qc(1,j)|0;if(!i){b=0;return b|0}pb(i,j,4);pb(i+4|0,1668246642,4);pb(i+8|0,c[e>>2]|0,1);pb(i+9|0,c[a+52>>2]|0,1);pb(i+10|0,c[a+44>>2]|0,1);g=i+11|0;switch(c[e>>2]|0){case 1:{pb(g,c[a+48>>2]|0,4);break}case 2:{h=a+112|0;if(c[h>>2]|0){a=a+108|0;f=0;e=g;while(1){pb(e,d[(c[a>>2]|0)+f>>0]|0,1);f=f+1|0;if(f>>>0>=(c[h>>2]|0)>>>0)break;else e=e+1|0}}break}default:{}}c[b>>2]=j;b=i;return b|0}function qf(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=a+116|0;j=((e[(c[i>>2]|0)+4>>1]|0)*6|0)+10|0;k=Pc(j)|0;if(!k){d=0;return d|0}pb(k,j,4);pb(k+4|0,1667523942,4);pb(k+8|0,e[(c[i>>2]|0)+4>>1]|0,2);a=c[i>>2]|0;if(b[a+4>>1]|0){g=0;f=0;h=k+10|0;while(1){pb(h,e[(c[a>>2]|0)+(g*6|0)>>1]|0,2);pb(h+2|0,e[(c[c[i>>2]>>2]|0)+(g*6|0)+2>>1]|0,2);pb(h+4|0,e[(c[c[i>>2]>>2]|0)+(g*6|0)+4>>1]|0,2);f=f+1<<16>>16;a=c[i>>2]|0;if((f&65535)>=(e[a+4>>1]|0))break;else{g=f&65535;h=h+6|0}}}c[d>>2]=j;d=k;return d|0}function rf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+32|0;f=g+16|0;if((d|0)!=14){Ub(e,1,18507,g)|0;f=0;i=g;return f|0}qb(b,a+16|0,4);qb(b+4|0,a+12|0,4);d=a+20|0;qb(b+8|0,d,2);d=Qc(c[d>>2]|0,12)|0;c[a+72>>2]=d;if(!d){Ub(e,1,18540,g+8|0)|0;f=0;i=g;return f|0}qb(b+10|0,a+24|0,1);d=a+28|0;qb(b+11|0,d,1);d=c[d>>2]|0;if((d|0)!=7){c[f>>2]=d;Ub(e,4,18589,f)|0}qb(b+12|0,a+32|0,1);qb(b+13|0,a+36|0,1);f=1;i=g;return f|0}function sf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;j=x+40|0;t=x+32|0;l=x+24|0;k=x+16|0;u=x+72|0;s=x+68|0;p=x+64|0;q=x+60|0;n=x+56|0;r=x+52|0;o=x+48|0;m=x+44|0;if(e>>>0<3){Ub(f,1,18180,x)|0;w=0;i=x;return w|0}v=b+108|0;w=b+124|0;if(a[w>>0]|0){Ub(f,4,18212,x+8|0)|0;w=1;i=x;return w|0}h=b+40|0;qb(d,h,1);qb(d+1|0,b+52|0,1);qb(d+2|0,b+44|0,1);g=d+3|0;h=c[h>>2]|0;switch(h|0){case 1:{if(e>>>0<7){c[k>>2]=e;Ub(f,1,18321,k)|0;w=0;i=x;return w|0}h=b+48|0;if(e>>>0>7?(c[h>>2]|0)!=14:0){c[l>>2]=e;Ub(f,2,18321,l)|0}qb(g,h,4);if((c[h>>2]|0)==14){g=Pc(36)|0;c[g>>2]=14;c[o>>2]=0;c[n>>2]=0;c[p>>2]=0;c[r>>2]=0;c[q>>2]=0;c[s>>2]=0;c[m>>2]=4470064;h=g+4|0;c[h>>2]=1145390592;switch(e|0){case 35:{qb(d+7|0,s,4);qb(d+11|0,p,4);qb(d+15|0,q,4);qb(d+19|0,n,4);qb(d+23|0,r,4);qb(d+27|0,o,4);qb(d+31|0,m,4);c[h>>2]=0;break}case 7:break;default:{c[t>>2]=e;Ub(f,2,18357,t)|0}}c[g+8>>2]=c[s>>2];c[g+16>>2]=c[q>>2];c[g+24>>2]=c[r>>2];c[g+12>>2]=c[p>>2];c[g+20>>2]=c[n>>2];c[g+28>>2]=c[o>>2];c[g+32>>2]=c[m>>2];c[v>>2]=g;c[b+112>>2]=0}a[w>>0]=1;w=1;i=x;return w|0}case 2:{j=e+-3|0;h=b+112|0;c[h>>2]=j;b=Qc(1,j)|0;c[v>>2]=b;if(!b){c[h>>2]=0;w=0;i=x;return w|0}if((e|0)>3){h=0;while(1){qb(g,u,1);a[(c[v>>2]|0)+h>>0]=c[u>>2];h=h+1|0;if((h|0)==(j|0))break;else g=g+1|0}}a[w>>0]=1;w=1;i=x;return w|0}default:{if(h>>>0<=2){w=1;i=x;return w|0}c[j>>2]=h;Ub(f,4,18401,j)|0;w=1;i=x;return w|0}}return 0}function tf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j;f=c[a+24>>2]|0;if((f|0)!=255){c[g>>2]=f;Ub(e,2,18034,g)|0}h=a+20|0;if((c[h>>2]|0)!=(d|0)){Ub(e,1,18148,j+8|0)|0;h=0;i=j;return h|0}if(!d){h=1;i=j;return h|0}g=a+72|0;f=0;while(1){qb(b,(c[g>>2]|0)+(f*12|0)+8|0,1);f=f+1|0;if(f>>>0>=(c[h>>2]|0)>>>0){b=1;break}else b=b+1|0}i=j;return b|0}function uf(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+16|0;j=r;q=r+12|0;k=e+120|0;if(g>>>0<3|(c[k>>2]|0)!=0){g=0;i=r;return g|0}qb(f,q,2);l=c[q>>2]|0;p=l&65535;if((p+-1|0)>>>0>1023){c[j>>2]=p;Ub(h,1,17951,j)|0;g=0;i=r;return g|0}qb(f+2|0,q,1);o=c[q>>2]&65535;if(!o){Ub(h,1,17989,r+8|0)|0;g=0;i=r;return g|0}if((o+3|0)>>>0>g>>>0){g=0;i=r;return g|0}j=Pc(_(p<<2,o)|0)|0;if(!j){g=0;i=r;return g|0}n=Pc(o)|0;if(!n){Uc(j);g=0;i=r;return g|0}m=Pc(o)|0;if(!m){Uc(j);Uc(n);g=0;i=r;return g|0}e=Pc(20)|0;if(!e){Uc(j);Uc(n);Uc(m);g=0;i=r;return g|0}c[e+4>>2]=m;c[e+8>>2]=n;c[e>>2]=j;b[e+16>>1]=l;a[e+18>>0]=c[q>>2];c[e+12>>2]=0;c[k>>2]=e;e=f+3|0;h=0;k=0;do{qb(e,q,1);e=e+1|0;a[n+h>>0]=(c[q>>2]&127)+1;a[m+h>>0]=(c[q>>2]|0)>>>7&1;k=k+1<<16>>16;h=k&65535}while(h>>>0>>0);if(!p){g=1;i=r;return g|0}h=0;a:while(1){l=0;k=j;m=0;while(1){j=((d[n+l>>0]|0)+7|0)>>>3;j=j>>>0>4?4:j;if((e-f+j|0)>(g|0)){e=0;j=22;break a}qb(e,q,j);e=e+j|0;c[k>>2]=c[q>>2];j=k+4|0;m=m+1<<16>>16;l=m&65535;if(l>>>0>=o>>>0)break;else k=j}h=h+1<<16>>16;if((h&65535)>>>0>=p>>>0){e=1;j=22;break}}if((j|0)==22){i=r;return e|0}return 0}function vf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+20|0;j=d+120|0;d=c[j>>2]|0;if(!d){Ub(g,1,17841,l)|0;k=0;i=l;return k|0}if(c[d+12>>2]|0){Ub(g,1,17887,l+8|0)|0;k=0;i=l;return k|0}h=a[d+18>>0]|0;d=(h&255)<<2;if(d>>>0>f>>>0){Ub(g,1,17918,l+16|0)|0;k=0;i=l;return k|0}g=Pc(d)|0;if(!g){k=0;i=l;return k|0}if(h<<24>>24){d=e;f=0;while(1){qb(d,k,2);b[g+(f<<2)>>1]=c[k>>2];qb(d+2|0,k,1);a[g+(f<<2)+2>>0]=c[k>>2];qb(d+3|0,k,1);a[g+(f<<2)+3>>0]=c[k>>2];f=f+1|0;if((f&255)<<24>>24==h<<24>>24)break;else d=d+4|0}}c[(c[j>>2]|0)+12>>2]=g;k=1;i=l;return k|0}function wf(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+20|0;j=a+116|0;if(c[j>>2]|0){k=0;i=l;return k|0}if(f>>>0<2){Ub(g,1,17747,l)|0;k=0;i=l;return k|0}qb(d,k,2);a=c[k>>2]|0;h=a&65535;if(!h){Ub(g,1,17780,l+8|0)|0;k=0;i=l;return k|0}if(((h*6|0)+2|0)>>>0>f>>>0){Ub(g,1,17747,l+16|0)|0;k=0;i=l;return k|0}f=Pc(a*6|0)|0;if(!f){k=0;i=l;return k|0}a=Pc(8)|0;c[j>>2]=a;if(!a){Uc(f);k=0;i=l;return k|0}c[a>>2]=f;g=c[k>>2]&65535;b[a+4>>1]=g;if(!(g<<16>>16)){k=1;i=l;return k|0}else{h=0;a=d}do{d=h&65535;qb(a+2|0,k,2);b[f+(d*6|0)>>1]=c[k>>2];qb(a+4|0,k,2);a=a+6|0;b[f+(d*6|0)+2>>1]=c[k>>2];qb(a,k,2);b[f+(d*6|0)+4>>1]=c[k>>2];h=h+1<<16>>16}while((h&65535)<(e[(c[j>>2]|0)+4>>1]|0));a=1;i=l;return a|0}function xf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+32|0;f=g+20|0;a=a+100|0;if(c[a>>2]|0){Ub(e,1,19130,g)|0;e=0;i=g;return e|0}if((d|0)!=4){Ub(e,1,19184,g+8|0)|0;e=0;i=g;return e|0}qb(b,f,4);if((c[f>>2]|0)==218793738){c[a>>2]=c[a>>2]|1;e=1;i=g;return e|0}else{Ub(e,1,19218,g+16|0)|0;e=0;i=g;return e|0}return 0}function yf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+32|0;g=j+24|0;h=a+100|0;if((c[h>>2]|0)!=1){Ub(e,1,19011,j)|0;h=0;i=j;return h|0}if(d>>>0<8){Ub(e,1,19061,j+8|0)|0;h=0;i=j;return h|0}qb(b,a+56|0,4);qb(b+4|0,a+60|0,4);b=b+8|0;d=d+-8|0;if(d&3){Ub(e,1,19061,j+16|0)|0;h=0;i=j;return h|0}d=d>>>2;f=a+64|0;c[f>>2]=d;if(d){d=Qc(d,4)|0;c[a+68>>2]=d;if(!d){Ub(e,1,19097,g)|0;h=0;i=j;return h|0}if(c[f>>2]|0){a=a+68|0;d=0;while(1){qb(b,(c[a>>2]|0)+(d<<2)|0,4);d=d+1|0;if(d>>>0>=(c[f>>2]|0)>>>0)break;else b=b+4|0}}}c[h>>2]=c[h>>2]|2;h=1;i=j;return h|0}function zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+96|0;y=A+72|0;s=A+64|0;r=A+56|0;q=A+48|0;w=A+40|0;v=A+32|0;u=A+24|0;t=A+16|0;p=A+8|0;n=A+80|0;o=A+76|0;x=a+100|0;if(!(c[x>>2]&2)){Ub(e,1,18679,A)|0;z=0;i=A;return z|0}m=a+104|0;c[m>>2]=0;do if(d){k=b;b=0;a:while(1){if(d>>>0<8){z=6;break}qb(k,n,4);f=c[n>>2]|0;qb(k+4|0,n,4);j=c[n>>2]|0;switch(f|0){case 0:{z=14;break a}case 1:{if(d>>>0<16){z=9;break a}qb(k+8|0,o,4);if(c[o>>2]|0){z=11;break a}qb(k+12|0,n,4);f=c[n>>2]|0;if(!f){z=13;break a}else g=16;break}default:g=8}if(f>>>0>>0){z=16;break}if(d>>>0>>0){z=19;break}h=(j|0)==1768449138;if(!h)if((j|0)!=1668246642)if((j|0)!=1651532643)if((j|0)!=1885564018)if((j|0)!=1668112752)if((j|0)==1667523942){l=1148;z=26}else c[m>>2]=c[m>>2]|2147483647;else{l=1140;z=26}else{l=1132;z=26}else{l=1124;z=26}else{l=1116;z=26}else{l=1108;z=26}if((z|0)==26?(z=0,(Za[c[l+4>>2]&63](a,k+g|0,f-g|0,e)|0)==0):0){b=0;z=32;break}b=h?1:b;if((d|0)==(f|0)){z=29;break}else{k=k+f|0;d=d-f|0}}if((z|0)==6)Ub(e,1,18724,p)|0;else if((z|0)==9)Ub(e,1,18764,t)|0;else if((z|0)==11)Ub(e,1,17148,u)|0;else if((z|0)==13)Ub(e,1,17218,v)|0;else if((z|0)==14)Ub(e,1,17218,w)|0;else if((z|0)==16)Ub(e,1,18808,q)|0;else if((z|0)==19){Ub(e,1,18880,s)|0;z=0;i=A;return z|0}else if((z|0)==29){if(!b)break;c[x>>2]=c[x>>2]|4;z=1;i=A;return z|0}else if((z|0)==32){i=A;return b|0}Ub(e,1,18837,r)|0;z=0;i=A;return z|0}while(0);Ub(e,1,18952,y)|0;z=0;i=A;return z|0}function Af(){return 8}function Bf(){return 32}function Cf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!e)return;else f=0;do{l=a+(f<<2)|0;i=c[l>>2]|0;j=b+(f<<2)|0;h=c[j>>2]|0;g=d+(f<<2)|0;k=c[g>>2]|0;c[l>>2]=(h<<1)+i+k>>2;c[j>>2]=k-h;c[g>>2]=i-h;f=f+1|0}while((f|0)!=(e|0));return}function Df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!e)return;else f=0;do{k=a+(f<<2)|0;j=b+(f<<2)|0;h=c[j>>2]|0;g=d+(f<<2)|0;l=c[g>>2]|0;i=(c[k>>2]|0)-(l+h>>2)|0;c[k>>2]=i+l;c[j>>2]=i;c[g>>2]=i+h;f=f+1|0}while((f|0)!=(e|0));return}function Ef(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!e)return;else f=0;do{o=a+(f<<2)|0;u=c[o>>2]|0;k=b+(f<<2)|0;t=c[k>>2]|0;g=d+(f<<2)|0;s=c[g>>2]|0;j=((u|0)<0)<<31>>31;q=Zi(u|0,j|0,2449,0)|0;q=Si(q|0,C|0,4096,0)|0;q=Ti(q|0,C|0,13)|0;i=((t|0)<0)<<31>>31;r=Zi(t|0,i|0,4809,0)|0;r=Si(r|0,C|0,4096,0)|0;r=Ti(r|0,C|0,13)|0;h=((s|0)<0)<<31>>31;p=Zi(s|0,h|0,934,0)|0;p=Si(p|0,C|0,4096,0)|0;p=Ti(p|0,C|0,13)|0;l=Zi(u|0,j|0,1382,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=Zi(t|0,i|0,2714,0)|0;m=Si(m|0,C|0,4096,0)|0;m=Ti(m|0,C|0,13)|0;n=Ri(s|0,h|0,12)|0;n=Si(n|0,C|0,4096,0)|0;n=Ti(n|0,C|0,13)|0;j=Ri(u|0,j|0,12)|0;j=Si(j|0,C|0,4096,0)|0;j=Ti(j|0,C|0,13)|0;i=Zi(t|0,i|0,3430,0)|0;i=Si(i|0,C|0,4096,0)|0;i=Ti(i|0,C|0,13)|0;h=Zi(s|0,h|0,666,0)|0;h=Si(h|0,C|0,4096,0)|0;h=Ti(h|0,C|0,13)|0;c[o>>2]=r+q+p;c[k>>2]=n-(m+l);c[g>>2]=j-i-h;f=f+1|0}while((f|0)!=(e|0));return}function Ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0.0,i=0.0,j=0,k=0.0,l=0;if(!d)return;else e=0;do{l=a+(e<<2)|0;i=+g[l>>2];j=b+(e<<2)|0;h=+g[j>>2];f=c+(e<<2)|0;k=+g[f>>2];g[l>>2]=i+k*1.4019999504089355;g[j>>2]=i-h*.3441300094127655-k*.714139997959137;g[f>>2]=i+h*1.7719999551773071;e=e+1|0}while((e|0)!=(d|0));return}function Gf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=_(e,e)|0;o=Pc(h+e<<2)|0;if(!o){e=0;return e|0}if(h){i=0;f=a;while(1){c[o+(i+e<<2)>>2]=~~(+g[f>>2]*8192.0);i=i+1|0;if((i|0)==(h|0))break;else f=f+4|0}}if(b){m=(e|0)==0;n=0;do{if(!m){f=0;do{c[o+(f<<2)>>2]=c[c[d+(f<<2)>>2]>>2];f=f+1|0}while((f|0)!=(e|0));if(!m){a=0;k=o;do{k=k+(e<<2)|0;h=d+(a<<2)|0;f=c[h>>2]|0;c[f>>2]=0;i=0;j=0;l=k;while(1){p=c[l>>2]|0;q=c[o+(j<<2)>>2]|0;p=Zi(q|0,((q|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;p=Si(p|0,C|0,4096,0)|0;p=Ti(p|0,C|0,13)|0;i=p+i|0;c[f>>2]=i;j=j+1|0;if((j|0)==(e|0))break;else l=l+4|0}c[h>>2]=f+4;a=a+1|0}while((a|0)!=(e|0))}}n=n+1|0}while((n|0)!=(b|0))}Uc(o);q=1;return q|0}function Hf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Pc(e<<3)|0;if(!m){e=0;return e|0}if(b){n=(e|0)==0;o=0;do{if(!n){f=0;do{c[m+(f<<2)>>2]=c[c[d+(f<<2)>>2]>>2];f=f+1|0}while((f|0)!=(e|0));if(!n){k=0;l=a;while(1){f=m+(k+e<<2)|0;g[f>>2]=0.0;h=0.0;i=0;j=l;while(1){h=h+ +g[j>>2]*+g[m+(i<<2)>>2];g[f>>2]=h;i=i+1|0;if((i|0)==(e|0))break;else j=j+4|0}i=d+(k<<2)|0;j=c[i>>2]|0;c[i>>2]=j+4;g[j>>2]=h;k=k+1|0;if((k|0)==(e|0))break;else l=l+(e<<2)|0}}}o=o+1|0}while((o|0)!=(b|0))}Uc(m);e=1;return e|0}function If(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0,i=0,j=0,k=0.0;if(!b)return;else j=0;do{i=a+(j<<3)|0;h[i>>3]=0.0;d=0.0;e=0;f=j;while(1){k=+g[c+(f<<2)>>2];d=d+k*k;e=e+1|0;if((e|0)==(b|0))break;else f=f+b|0}h[i>>3]=+O(+d);j=j+1|0}while((j|0)!=(b|0));return}function Jf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+32|0;B=F+28|0;w=F+24|0;x=F+20|0;y=F+16|0;z=F+12|0;A=F+8|0;k=F+4|0;l=F;f=d+76|0;D=c[f>>2]|0;C=D+(e*5640|0)+420|0;E=(c[C>>2]|0)+1|0;m=b+16|0;v=Pc((c[m>>2]|0)*528|0)|0;if(!v){E=0;i=F;return E|0}u=Pc(c[m>>2]<<2)|0;if(!u){Uc(v);E=0;i=F;return E|0}f=Pf(b,c[f>>2]|0,e)|0;if(!f){Uc(v);Uc(u);E=0;i=F;return E|0}g=c[m>>2]|0;if(g){h=0;j=v;while(1){c[u+(h<<2)>>2]=j;h=h+1|0;if(h>>>0>=g>>>0)break;else j=j+528|0}}Qf(b,d,e,x,y,z,A,k,l,w,B,u);s=c[w>>2]|0;q=_(c[m>>2]|0,s)|0;r=_(c[B>>2]|0,q)|0;t=D+(e*5640|0)+8|0;p=Qc(_((c[t>>2]|0)+1|0,r)|0,2)|0;h=f+4|0;c[h>>2]=p;if(!p){Uc(v);Uc(u);g=c[h>>2]|0;if(g){Uc(g);c[h>>2]=0}if(E){b=f;n=0;while(1){m=b+196|0;g=c[m>>2]|0;if(g){d=b+192|0;h=c[d>>2]|0;if(h){l=0;while(1){j=g+12|0;k=c[j>>2]|0;if(k){Uc(k);c[j>>2]=0;h=c[d>>2]|0}l=l+1|0;if(l>>>0>=h>>>0)break;else g=g+16|0}g=c[m>>2]|0}Uc(g);c[m>>2]=0}n=n+1|0;if((n|0)==(E|0))break;else b=b+232|0}}Uc(f);E=0;i=F;return E|0}g=c[f+196>>2]|0;p=c[b+24>>2]|0;c[f+200>>2]=c[x>>2];c[f+204>>2]=c[z>>2];c[f+208>>2]=c[y>>2];c[f+212>>2]=c[A>>2];c[f+20>>2]=1;c[f+16>>2]=s;c[f+12>>2]=q;c[f+8>>2]=r;m=c[f+192>>2]|0;if(m){b=0;d=p;while(1){j=c[g+12>>2]|0;h=c[u+(b<<2)>>2]|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];l=c[g+8>>2]|0;if(l){k=0;while(1){c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];k=k+1|0;if(k>>>0>=l>>>0)break;else{h=h+16|0;j=j+16|0}}}b=b+1|0;if(b>>>0>=m>>>0)break;else{g=g+16|0;d=d+52|0}}}if(E>>>0>1){m=f;o=1;do{g=c[m+428>>2]|0;c[m+432>>2]=c[x>>2];c[m+436>>2]=c[z>>2];c[m+440>>2]=c[y>>2];c[m+444>>2]=c[A>>2];c[m+252>>2]=1;c[m+248>>2]=s;c[m+244>>2]=q;c[m+240>>2]=r;b=c[m+424>>2]|0;if(b){n=0;d=p;while(1){j=c[g+12>>2]|0;h=c[u+(n<<2)>>2]|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];l=c[g+8>>2]|0;if(l){k=0;while(1){c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];k=k+1|0;if(k>>>0>=l>>>0)break;else{h=h+16|0;j=j+16|0}}}n=n+1|0;if(n>>>0>=b>>>0)break;else{g=g+16|0;d=d+52|0}}}c[m+236>>2]=c[m+4>>2];m=m+232|0;o=o+1|0}while((o|0)!=(E|0))}Uc(v);Uc(u);m=c[w>>2]|0;if(!(a[D+(e*5640|0)+5636>>0]&4)){d=c[B>>2]|0;l=(c[C>>2]|0)+1|0;if(!l){E=f;i=F;return E|0}k=c[D+(e*5640|0)+4>>2]|0;g=c[t>>2]|0;h=f;j=0;while(1){c[h+80>>2]=k;c[h+40>>2]=1;c[h+44>>2]=0;c[h+48>>2]=0;c[h+64>>2]=0;c[h+68>>2]=0;c[h+56>>2]=d;c[h+60>>2]=c[h+192>>2];c[h+52>>2]=g;c[h+72>>2]=m;j=j+1|0;if((j|0)==(l|0))break;else h=h+232|0}i=F;return f|0}else{j=(c[C>>2]|0)+1|0;if(!j){E=f;i=F;return E|0}k=f;g=D+(e*5640|0)+424|0;h=0;while(1){c[k+80>>2]=c[g+36>>2];c[k+40>>2]=1;c[k+44>>2]=c[g>>2];c[k+48>>2]=c[g+4>>2];c[k+64>>2]=0;c[k+68>>2]=0;c[k+56>>2]=c[g+12>>2];c[k+60>>2]=c[g+16>>2];c[k+52>>2]=c[g+8>>2];c[k+72>>2]=m;h=h+1|0;if((h|0)==(j|0))break;else{k=k+232|0;g=g+148|0}}i=F;return f|0}return 0}function Kf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!a)return;d=a+4|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0}if(b){k=a;l=0;while(1){j=k+196|0;d=c[j>>2]|0;if(d){i=k+192|0;e=c[i>>2]|0;if(e){h=0;while(1){f=d+12|0;g=c[f>>2]|0;if(g){Uc(g);c[f>>2]=0;e=c[i>>2]|0}h=h+1|0;if(h>>>0>=e>>>0)break;else d=d+16|0}d=c[j>>2]|0}Uc(d);c[j>>2]=0}l=l+1|0;if((l|0)==(b|0))break;else k=k+232|0}}Uc(a);return}function Lf(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=i;i=i+32|0;G=L+28|0;F=L+24|0;B=L+20|0;C=L+16|0;D=L+12|0;E=L+8|0;H=L+4|0;I=L;J=f+76|0;x=c[J>>2]|0;K=(c[x+(g*5640|0)+420>>2]|0)+1|0;A=e+16|0;z=Pc((c[A>>2]|0)*528|0)|0;if(!z){g=0;i=L;return g|0}y=Pc(c[A>>2]<<2)|0;if(!y){Uc(z);g=0;i=L;return g|0}j=Pf(e,c[J>>2]|0,g)|0;if(!j){Uc(z);Uc(y);g=0;i=L;return g|0}k=c[A>>2]|0;if(k){l=0;m=z;while(1){c[y+(l<<2)>>2]=m;l=l+1|0;if(l>>>0>=k>>>0)break;else m=m+528|0}}Qf(e,f,g,B,C,D,E,H,I,F,G,y);u=c[F>>2]|0;v=_(c[A>>2]|0,u)|0;w=_(c[G>>2]|0,v)|0;a[j>>0]=(d[f+93>>0]|0)>>>3&1;t=Qc(_(c[x+(g*5640|0)+8>>2]|0,w)|0,2)|0;l=j+4|0;c[l>>2]=t;if(!t){Uc(z);Uc(y);k=c[l>>2]|0;if(k){Uc(k);c[l>>2]=0}if(K){q=j;r=0;while(1){p=q+196|0;k=c[p>>2]|0;if(k){o=q+192|0;l=c[o>>2]|0;if(l){n=0;while(1){m=k+12|0;e=c[m>>2]|0;if(e){Uc(e);c[m>>2]=0;l=c[o>>2]|0}n=n+1|0;if(n>>>0>=l>>>0)break;else k=k+16|0}k=c[p>>2]|0}Uc(k);c[p>>2]=0}r=r+1|0;if((r|0)==(K|0))break;else q=q+232|0}}Uc(j);g=0;i=L;return g|0}k=c[j+196>>2]|0;t=c[e+24>>2]|0;c[j+200>>2]=c[B>>2];c[j+204>>2]=c[D>>2];c[j+208>>2]=c[C>>2];c[j+212>>2]=c[E>>2];c[j+224>>2]=c[H>>2];c[j+228>>2]=c[I>>2];c[j+20>>2]=1;c[j+16>>2]=u;c[j+12>>2]=v;c[j+8>>2]=w;p=c[j+192>>2]|0;if(p){q=0;o=t;while(1){m=c[k+12>>2]|0;l=c[y+(q<<2)>>2]|0;c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];n=c[k+8>>2]|0;if(n){e=0;while(1){c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];e=e+1|0;if(e>>>0>=n>>>0)break;else{l=l+16|0;m=m+16|0}}}q=q+1|0;if(q>>>0>=p>>>0)break;else{k=k+16|0;o=o+52|0}}}if(K>>>0>1){p=j;s=1;do{k=c[p+428>>2]|0;c[p+432>>2]=c[B>>2];c[p+436>>2]=c[D>>2];c[p+440>>2]=c[C>>2];c[p+444>>2]=c[E>>2];c[p+456>>2]=c[H>>2];c[p+460>>2]=c[I>>2];c[p+252>>2]=1;c[p+248>>2]=u;c[p+244>>2]=v;c[p+240>>2]=w;q=c[p+424>>2]|0;if(q){r=0;o=t;while(1){m=c[k+12>>2]|0;l=c[y+(r<<2)>>2]|0;c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];n=c[k+8>>2]|0;if(n){e=0;while(1){c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];e=e+1|0;if(e>>>0>=n>>>0)break;else{l=l+16|0;m=m+16|0}}}r=r+1|0;if(r>>>0>=q>>>0)break;else{k=k+16|0;o=o+52|0}}}c[p+236>>2]=c[p+4>>2];p=p+232|0;s=s+1|0}while((s|0)!=(K|0))}Uc(z);Uc(y);do if(a[x+(g*5640|0)+5636>>0]&4){k=b[f>>1]|0;if((k&65535)>2){if(!((h|0)==1|(k&65535)<7))break}else if((h|0)!=1)break;Rf(c[J>>2]|0,g,c[B>>2]|0,c[C>>2]|0,c[D>>2]|0,c[E>>2]|0,c[F>>2]|0,c[H>>2]|0,c[I>>2]|0);g=j;i=L;return g|0}while(0);w=c[A>>2]|0;v=c[B>>2]|0;u=c[C>>2]|0;t=c[D>>2]|0;s=c[E>>2]|0;r=c[F>>2]|0;q=c[G>>2]|0;p=c[H>>2]|0;o=c[I>>2]|0;k=c[J>>2]|0;m=(c[k+(g*5640|0)+420>>2]|0)+1|0;if(!m){g=j;i=L;return g|0}e=c[k+(g*5640|0)+8>>2]|0;n=c[k+(g*5640|0)+4>>2]|0;k=k+(g*5640|0)+424|0;l=0;while(1){c[k+76>>2]=0;c[k+92>>2]=w;c[k+72>>2]=0;c[k+88>>2]=q;c[k+68>>2]=0;c[k+84>>2]=e;c[k+36>>2]=n;c[k+80>>2]=0;c[k+96>>2]=r;c[k+100>>2]=v;c[k+104>>2]=u;c[k+108>>2]=t;c[k+112>>2]=s;c[k+116>>2]=p;c[k+120>>2]=o;l=l+1|0;if((l|0)==(m|0))break;else k=k+148|0}i=L;return j|0}function Mf(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;Q=c[e+76>>2]|0;R=Q+(f*5640|0)+424+(g*148|0)+36|0;S=Vc(c[R>>2]|0)|0;c[d+(g*232|0)+40>>2]=1;T=d+(g*232|0)+44|0;c[d+(g*232|0)+80>>2]=c[R>>2];do if(a[e+93>>0]&8){k=b[e>>1]|0;if((k&65535)>2){if(!((j|0)==1&(k&65535)>6|(k+-3&65535)<4))break}else if(!((j|0)==1|(k+-3&65535)<4))break;k=i+1|0;a:do if((k|0)<4){j=Q+(f*5640|0)+424+(g*148|0)+72|0;l=Q+(f*5640|0)+424+(g*148|0)+88|0;m=d+(g*232|0)+56|0;n=Q+(f*5640|0)+424+(g*148|0)+76|0;o=d+(g*232|0)+48|0;p=Q+(f*5640|0)+424+(g*148|0)+92|0;q=d+(g*232|0)+60|0;r=Q+(f*5640|0)+424+(g*148|0)+68|0;s=d+(g*232|0)+64|0;t=Q+(f*5640|0)+424+(g*148|0)+84|0;u=d+(g*232|0)+52|0;v=Q+(f*5640|0)+424+(g*148|0)+80|0;w=d+(g*232|0)+68|0;x=Q+(f*5640|0)+424+(g*148|0)+96|0;y=d+(g*232|0)+72|0;z=Q+(f*5640|0)+424+(g*148|0)+100|0;A=d+(g*232|0)+96|0;B=Q+(f*5640|0)+424+(g*148|0)+108|0;C=d+(g*232|0)+104|0;D=Q+(f*5640|0)+424+(g*148|0)+104|0;E=d+(g*232|0)+100|0;F=Q+(f*5640|0)+424+(g*148|0)+112|0;G=d+(g*232|0)+108|0;while(1){b:do switch(a[S+k>>0]|0){case 82:{c[T>>2]=c[j>>2];c[m>>2]=c[l>>2];break}case 67:{c[o>>2]=c[n>>2];c[q>>2]=c[p>>2];break}case 76:{c[s>>2]=c[r>>2];c[u>>2]=c[t>>2];break}case 80:if((c[R>>2]|0)>>>0<2){c[w>>2]=c[v>>2];c[y>>2]=c[x>>2];break b}else{c[A>>2]=c[z>>2];c[C>>2]=c[B>>2];c[E>>2]=c[D>>2];c[G>>2]=c[F>>2];break b}default:{}}while(0);k=k+1|0;if((k|0)==4)break a}}while(0);k=(i|0)>-1;if(!h){if(!k)return;m=Q+(f*5640|0)+424+(g*148|0)+76|0;n=Q+(f*5640|0)+424+(g*148|0)+132|0;o=d+(g*232|0)+48|0;p=d+(g*232|0)+60|0;q=Q+(f*5640|0)+424+(g*148|0)+72|0;r=Q+(f*5640|0)+424+(g*148|0)+128|0;s=d+(g*232|0)+56|0;t=Q+(f*5640|0)+424+(g*148|0)+68|0;u=Q+(f*5640|0)+424+(g*148|0)+124|0;v=d+(g*232|0)+64|0;w=d+(g*232|0)+52|0;x=Q+(f*5640|0)+424+(g*148|0)+80|0;y=Q+(f*5640|0)+424+(g*148|0)+136|0;z=d+(g*232|0)+68|0;A=d+(g*232|0)+72|0;B=Q+(f*5640|0)+424+(g*148|0)+100|0;C=Q+(f*5640|0)+424+(g*148|0)+140|0;D=Q+(f*5640|0)+424+(g*148|0)+108|0;E=Q+(f*5640|0)+424+(g*148|0)+144|0;F=d+(g*232|0)+96|0;G=Q+(f*5640|0)+424+(g*148|0)+116|0;h=d+(g*232|0)+100|0;H=d+(g*232|0)+104|0;l=Q+(f*5640|0)+424+(g*148|0)+120|0;j=d+(g*232|0)+108|0;k=i;while(1){c:do switch(a[S+k>>0]|0){case 67:{g=c[m>>2]|0;c[o>>2]=g;g=g+1|0;c[p>>2]=g;c[n>>2]=g;break}case 82:{g=c[q>>2]|0;c[T>>2]=g;g=g+1|0;c[s>>2]=g;c[r>>2]=g;break}case 76:{g=c[t>>2]|0;c[v>>2]=g;g=g+1|0;c[w>>2]=g;c[u>>2]=g;break}case 80:if((c[R>>2]|0)>>>0<2){g=c[x>>2]|0;c[z>>2]=g;g=g+1|0;c[A>>2]=g;c[y>>2]=g;break c}else{g=c[B>>2]|0;i=c[D>>2]|0;c[F>>2]=g;f=c[G>>2]|0;f=f+g-((g>>>0)%(f>>>0)|0)|0;c[h>>2]=f;c[H>>2]=i;g=c[l>>2]|0;g=g+i-((i>>>0)%(g>>>0)|0)|0;c[j>>2]=g;c[C>>2]=f;c[E>>2]=g;break c}default:{}}while(0);if((k|0)>0)k=k+-1|0;else break}return}if(!k)return;L=Q+(f*5640|0)+424+(g*148|0)+128|0;M=Q+(f*5640|0)+424+(g*148|0)+88|0;N=Q+(f*5640|0)+424+(g*148|0)+72|0;O=d+(g*232|0)+56|0;P=Q+(f*5640|0)+424+(g*148|0)+132|0;p=Q+(f*5640|0)+424+(g*148|0)+92|0;q=Q+(f*5640|0)+424+(g*148|0)+76|0;r=d+(g*232|0)+48|0;s=d+(g*232|0)+60|0;t=Q+(f*5640|0)+424+(g*148|0)+124|0;u=Q+(f*5640|0)+424+(g*148|0)+84|0;v=Q+(f*5640|0)+424+(g*148|0)+68|0;w=d+(g*232|0)+64|0;x=d+(g*232|0)+52|0;y=Q+(f*5640|0)+424+(g*148|0)+136|0;z=Q+(f*5640|0)+424+(g*148|0)+96|0;A=Q+(f*5640|0)+424+(g*148|0)+80|0;B=d+(g*232|0)+68|0;C=d+(g*232|0)+72|0;D=Q+(f*5640|0)+424+(g*148|0)+140|0;E=Q+(f*5640|0)+424+(g*148|0)+104|0;F=d+(g*232|0)+96|0;G=Q+(f*5640|0)+424+(g*148|0)+116|0;h=d+(g*232|0)+100|0;H=Q+(f*5640|0)+424+(g*148|0)+144|0;I=Q+(f*5640|0)+424+(g*148|0)+112|0;J=d+(g*232|0)+104|0;K=Q+(f*5640|0)+424+(g*148|0)+120|0;n=d+(g*232|0)+108|0;o=Q+(f*5640|0)+424+(g*148|0)+100|0;m=Q+(f*5640|0)+424+(g*148|0)+108|0;l=i;k=1;while(1){j=S+l|0;d:do switch(a[j>>0]|0){case 67:{i=c[P>>2]|0;c[r>>2]=i+-1;c[s>>2]=i;break}case 82:{i=c[L>>2]|0;c[T>>2]=i+-1;c[O>>2]=i;break}case 76:{i=c[t>>2]|0;c[w>>2]=i+-1;c[x>>2]=i;break}case 80:if((c[R>>2]|0)>>>0<2){i=c[y>>2]|0;c[B>>2]=i+-1;c[C>>2]=i;break d}else{i=c[D>>2]|0;Q=c[G>>2]|0;c[F>>2]=i-Q-((i>>>0)%(Q>>>0)|0);c[h>>2]=i;i=c[H>>2]|0;Q=c[K>>2]|0;c[J>>2]=i-Q-((i>>>0)%(Q>>>0)|0);c[n>>2]=i;break d}default:{}}while(0);e:do if((k|0)==1)switch(a[j>>0]|0){case 82:{k=c[L>>2]|0;if((k|0)!=(c[M>>2]|0)){c[T>>2]=k;k=k+1|0;c[O>>2]=k;c[L>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[N>>2]|0;c[T>>2]=k;k=k+1|0;c[O>>2]=k;c[L>>2]=k;k=1;break e}case 67:{k=c[P>>2]|0;if((k|0)!=(c[p>>2]|0)){c[r>>2]=k;k=k+1|0;c[s>>2]=k;c[P>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[q>>2]|0;c[r>>2]=k;k=k+1|0;c[s>>2]=k;c[P>>2]=k;k=1;break e}case 76:{k=c[t>>2]|0;if((k|0)!=(c[u>>2]|0)){c[w>>2]=k;k=k+1|0;c[x>>2]=k;c[t>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[v>>2]|0;c[w>>2]=k;k=k+1|0;c[x>>2]=k;c[t>>2]=k;k=1;break e}case 80:{if((c[R>>2]|0)>>>0<2){k=c[y>>2]|0;if((k|0)!=(c[z>>2]|0)){c[B>>2]=k;k=k+1|0;c[C>>2]=k;c[y>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[A>>2]|0;c[B>>2]=k;k=k+1|0;c[C>>2]=k;c[y>>2]=k;k=1;break e}k=c[D>>2]|0;if(k>>>0<(c[E>>2]|0)>>>0){c[F>>2]=k;i=c[G>>2]|0;k=i+k-((k>>>0)%(i>>>0)|0)|0;c[h>>2]=k;c[D>>2]=k;k=0;break e}j=c[H>>2]|0;if(j>>>0<(c[I>>2]|0)>>>0){c[J>>2]=j;i=c[K>>2]|0;k=0;j=i+j-((j>>>0)%(i>>>0)|0)|0}else{if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}i=c[m>>2]|0;c[H>>2]=i;c[J>>2]=i;j=c[K>>2]|0;k=1;j=j+i-((i>>>0)%(j>>>0)|0)|0}c[n>>2]=j;c[H>>2]=j;Q=c[o>>2]|0;c[F>>2]=Q;i=c[G>>2]|0;i=i+Q-((Q>>>0)%(i>>>0)|0)|0;c[h>>2]=i;c[D>>2]=i;break e}default:{k=1;break e}}while(0);if((l|0)>0)l=l+-1|0;else break}return}while(0);c[T>>2]=c[Q+(f*5640|0)+424+(g*148|0)+72>>2];c[d+(g*232|0)+56>>2]=c[Q+(f*5640|0)+424+(g*148|0)+88>>2];c[d+(g*232|0)+48>>2]=c[Q+(f*5640|0)+424+(g*148|0)+76>>2];c[d+(g*232|0)+60>>2]=c[Q+(f*5640|0)+424+(g*148|0)+92>>2];c[d+(g*232|0)+64>>2]=c[Q+(f*5640|0)+424+(g*148|0)+68>>2];c[d+(g*232|0)+52>>2]=c[Q+(f*5640|0)+424+(g*148|0)+84>>2];c[d+(g*232|0)+68>>2]=c[Q+(f*5640|0)+424+(g*148|0)+80>>2];c[d+(g*232|0)+72>>2]=c[Q+(f*5640|0)+424+(g*148|0)+96>>2];c[d+(g*232|0)+96>>2]=c[Q+(f*5640|0)+424+(g*148|0)+100>>2];c[d+(g*232|0)+104>>2]=c[Q+(f*5640|0)+424+(g*148|0)+108>>2];c[d+(g*232|0)+100>>2]=c[Q+(f*5640|0)+424+(g*148|0)+104>>2];c[d+(g*232|0)+108>>2]=c[Q+(f*5640|0)+424+(g*148|0)+112>>2];return}function Nf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;I=c[d+76>>2]|0;K=c[d+24>>2]|0;N=(e>>>0)%(K>>>0)|0;K=(e>>>0)/(K>>>0)|0;L=c[d+4>>2]|0;H=c[d+12>>2]|0;G=(_(H,N)|0)+L|0;M=c[b>>2]|0;M=(G|0)>(M|0)?G:M;L=(_(H,N+1|0)|0)+L|0;N=c[b+8>>2]|0;N=(L|0)<(N|0)?L:N;L=c[d+8>>2]|0;H=c[d+16>>2]|0;G=(_(H,K)|0)+L|0;J=c[b+4>>2]|0;J=(G|0)>(J|0)?G:J;L=(_(H,K+1|0)|0)+L|0;K=c[b+12>>2]|0;K=(L|0)<(K|0)?L:K;L=c[b+16>>2]|0;if(!L){l=0;k=2147483647;j=2147483647;i=0}else{D=K+-1|0;E=N+-1|0;F=J+-1|0;G=M+-1|0;l=0;k=2147483647;j=2147483647;i=0;H=0;A=c[b+24>>2]|0;B=c[I+(e*5640|0)+5584>>2]|0;while(1){x=c[A>>2]|0;y=c[A+4>>2]|0;z=c[B+4>>2]|0;i=z>>>0>i>>>0?z:i;if(z){v=(D+y|0)/(y|0)|0;t=(E+x|0)/(x|0)|0;r=(F+y|0)/(y|0)|0;p=(G+x|0)/(x|0)|0;p=Si(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;q=C;r=Si(r|0,((r|0)<0)<<31>>31|0,-1,-1)|0;s=C;t=Si(t|0,((t|0)<0)<<31>>31|0,-1,-1)|0;u=C;v=Si(v|0,((v|0)<0)<<31>>31|0,-1,-1)|0;w=C;d=0;o=0;while(1){m=c[B+812+(o<<2)>>2]|0;n=c[B+944+(o<<2)>>2]|0;g=d+-1+z|0;h=x<>>0>>0?k:h;j=j>>>0>>0?j:O;O=Ri(1,0,g|0)|0;h=C;d=Si(p|0,q|0,O|0,h|0)|0;d=Pi(d|0,C|0,g|0)|0;f=Si(r|0,s|0,O|0,h|0)|0;f=Pi(f|0,C|0,g|0)|0;b=Si(t|0,u|0,O|0,h|0)|0;b=Pi(b|0,C|0,g|0)|0;h=Si(v|0,w|0,O|0,h|0)|0;g=Pi(h|0,C|0,g|0)|0;h=Ri(1,0,n|0)|0;h=Si(h|0,C|0,-1,-1)|0;h=Si(h|0,C|0,g|0,((g|0)<0)<<31>>31|0)|0;h=Pi(h|0,C|0,n|0)|0;if((d|0)==(b|0))d=0;else{O=Ri(1,0,m|0)|0;O=Si(O|0,C|0,-1,-1)|0;O=Si(O|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0;O=Pi(O|0,C|0,m|0)|0;d=(O<>m<>m}b=_(d,(f|0)==(g|0)?0:(h<>n<>n)|0;l=b>>>0>l>>>0?b:l;b=o+1|0;if(b>>>0>>0){d=~o;o=b}else break}}H=H+1|0;if(H>>>0>=L>>>0)break;else{A=A+52|0;B=B+1080|0}}}if(a[I+(e*5640|0)+5636>>0]&4){Rf(I,e,M,N,J,K,l,k,j);return}f=(c[I+(e*5640|0)+420>>2]|0)+1|0;if(!f)return;g=c[I+(e*5640|0)+8>>2]|0;h=c[I+(e*5640|0)+4>>2]|0;d=I+(e*5640|0)+424|0;b=0;while(1){c[d+76>>2]=0;c[d+92>>2]=L;c[d+72>>2]=0;c[d+88>>2]=i;c[d+68>>2]=0;c[d+84>>2]=g;c[d+36>>2]=h;c[d+80>>2]=0;c[d+96>>2]=l;c[d+100>>2]=M;c[d+104>>2]=N;c[d+108>>2]=J;c[d+112>>2]=K;c[d+116>>2]=k;c[d+120>>2]=j;b=b+1|0;if((b|0)==(f|0))break;else d=d+148|0}return}function Of(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;switch(c[d+80>>2]|0){case 0:{e=d+40|0;if(!(c[e>>2]|0)){E=d+32|0;l=E;E=c[E>>2]|0;f=18}else{c[e>>2]=0;t=c[d+64>>2]|0;c[d+36>>2]=t;f=5}while(1){if((f|0)==5){if(t>>>0>=(c[d+52>>2]|0)>>>0){nb=0;f=153;break}z=c[d+44>>2]|0;c[d+28>>2]=z;f=7}else if((f|0)==18){j=E+1|0;c[l>>2]=j;h=l;f=14}while(1){if((f|0)==7){f=0;if(z>>>0>=(c[d+56>>2]|0)>>>0){f=21;break}A=c[d+48>>2]|0;p=d+24|0;c[p>>2]=A}else if((f|0)==14){if(j>>>0<(c[d+72>>2]|0)>>>0){f=16;break}F=d+24|0;n=F;F=c[F>>2]|0;f=19}while(1){if((f|0)==19){f=0;A=F+1|0;c[n>>2]=A;p=n}if(A>>>0>=(c[d+60>>2]|0)>>>0){f=20;break}B=c[d+196>>2]|0;C=c[d+28>>2]|0;if(C>>>0<(c[B+(A<<4)+8>>2]|0)>>>0)break;else{n=p;F=A;f=19}}if((f|0)==20){f=d+28|0;z=(c[f>>2]|0)+1|0;c[f>>2]=z;f=7;continue}e=c[B+(A<<4)+12>>2]|0;if(!(a[d>>0]|0))c[d+72>>2]=_(c[e+(C<<4)+12>>2]|0,c[e+(C<<4)+8>>2]|0)|0;j=c[d+68>>2]|0;h=d+32|0;c[h>>2]=j;f=14}if((f|0)==16){f=0;D=_(c[d+8>>2]|0,c[d+36>>2]|0)|0;D=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+D|0;D=D+(_(c[d+16>>2]|0,c[d+24>>2]|0)|0)|0;D=D+(_(c[d+20>>2]|0,j)|0)|0;D=(c[d+4>>2]|0)+(D<<1)|0;if(!(b[D>>1]|0))break;else{l=h;E=j;f=18;continue}}else if((f|0)==21){f=d+36|0;t=(c[f>>2]|0)+1|0;c[f>>2]=t;f=5;continue}}if((f|0)==153)return nb|0;b[D>>1]=1;d=1;return d|0}case 1:{e=d+40|0;if(!(c[e>>2]|0)){x=d+32|0;k=x;x=c[x>>2]|0;f=38}else{c[e>>2]=0;G=c[d+44>>2]|0;c[d+28>>2]=G;f=25}while(1){if((f|0)==25){if(G>>>0>=(c[d+56>>2]|0)>>>0){nb=0;f=153;break}r=c[d+64>>2]|0;c[d+36>>2]=r;f=27}else if((f|0)==38){i=x+1|0;c[k>>2]=i;g=k;f=34}while(1){if((f|0)==27){f=0;if(r>>>0>=(c[d+52>>2]|0)>>>0){f=41;break}s=c[d+48>>2]|0;o=d+24|0;c[o>>2]=s}else if((f|0)==34){if(i>>>0<(c[d+72>>2]|0)>>>0){f=36;break}y=d+24|0;m=y;y=c[y>>2]|0;f=39}while(1){if((f|0)==39){f=0;s=y+1|0;c[m>>2]=s;o=m}if(s>>>0>=(c[d+60>>2]|0)>>>0){f=40;break}u=c[d+196>>2]|0;v=c[d+28>>2]|0;if(v>>>0<(c[u+(s<<4)+8>>2]|0)>>>0)break;else{m=o;y=s;f=39}}if((f|0)==40){f=d+36|0;r=(c[f>>2]|0)+1|0;c[f>>2]=r;f=27;continue}e=c[u+(s<<4)+12>>2]|0;if(!(a[d>>0]|0))c[d+72>>2]=_(c[e+(v<<4)+12>>2]|0,c[e+(v<<4)+8>>2]|0)|0;i=c[d+68>>2]|0;g=d+32|0;c[g>>2]=i;f=34}if((f|0)==36){f=0;w=_(c[d+8>>2]|0,c[d+36>>2]|0)|0;w=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+w|0;w=w+(_(c[d+16>>2]|0,c[d+24>>2]|0)|0)|0;w=w+(_(c[d+20>>2]|0,i)|0)|0;w=(c[d+4>>2]|0)+(w<<1)|0;if(!(b[w>>1]|0))break;else{k=g;x=i;f=38;continue}}else if((f|0)==41){f=d+28|0;G=(c[f>>2]|0)+1|0;c[f>>2]=G;f=25;continue}}if((f|0)==153)return nb|0;b[w>>1]=1;d=1;return d|0}case 2:{e=d+40|0;if(!(c[e>>2]|0)){lb=d+36|0;Ta=lb;lb=c[lb>>2]|0;f=75}else{c[e>>2]=0;o=d+224|0;c[o>>2]=0;p=d+228|0;c[p>>2]=0;q=c[d+192>>2]|0;if(q){r=c[d+196>>2]|0;e=0;f=0;s=0;do{j=c[r+(s<<4)+8>>2]|0;if(j){k=c[r+(s<<4)+12>>2]|0;l=c[r+(s<<4)>>2]|0;m=c[r+(s<<4)+4>>2]|0;n=j+-1|0;g=0;i=0;while(1){h=n+g|0;Sa=l<>2]|0);h=m<<(c[k+(i<<4)+4>>2]|0)+h;e=(e|0)==0?Sa:e>>>0>>0?e:Sa;f=(f|0)==0?h:f>>>0>>0?f:h;h=i+1|0;if((h|0)==(j|0))break;else{g=~i;i=h}}c[o>>2]=e;c[p>>2]=f}s=s+1|0}while((s|0)!=(q|0))}if(!(a[d>>0]|0)){c[d+104>>2]=c[d+204>>2];c[d+96>>2]=c[d+200>>2];c[d+108>>2]=c[d+212>>2];c[d+100>>2]=c[d+208>>2]}J=c[d+44>>2]|0;c[d+28>>2]=J;f=54}while(1){if((f|0)==54){if(J>>>0>=(c[d+56>>2]|0)>>>0){nb=0;f=153;break}Xa=c[d+104>>2]|0;c[d+220>>2]=Xa;f=56}else if((f|0)==75){jb=lb+1|0;c[Ta>>2]=jb;Ua=Ta;f=71}while(1){if((f|0)==56){if((Xa|0)>=(c[d+108>>2]|0)){f=79;break}Ya=c[d+96>>2]|0;c[d+216>>2]=Ya;f=58}else if((f|0)==71){if(jb>>>0<(c[d+52>>2]|0)>>>0){f=73;break}mb=d+24|0;Va=mb;mb=c[mb>>2]|0;f=76}while(1){if((f|0)==58){if((Ya|0)>=(c[d+100>>2]|0)){f=78;break}Za=c[d+48>>2]|0;Wa=d+24|0;c[Wa>>2]=Za}else if((f|0)==76){Za=mb+1|0;c[Va>>2]=Za;Wa=Va}if(Za>>>0>=(c[d+60>>2]|0)>>>0){Ya=c[d+224>>2]|0;f=d+216|0;Sa=c[f>>2]|0;Ya=Sa+Ya-((Sa|0)%(Ya|0)|0)|0;c[f>>2]=Ya;f=58;continue}f=c[d+196>>2]|0;m=c[d+28>>2]|0;e=c[f+(Za<<4)+8>>2]|0;if(m>>>0>=e>>>0){Va=Wa;mb=Za;f=76;continue}n=c[f+(Za<<4)+12>>2]|0;i=e+~m|0;j=c[d+200>>2]|0;k=c[f+(Za<<4)>>2]|0;_a=k<>2]|0;Sa=c[f+(Za<<4)+4>>2]|0;ab=Sa<>2]|0)|0)/(_a|0)|0;db=ab+-1|0;f=(db+(c[d+212>>2]|0)|0)/(ab|0)|0;eb=c[n+(m<<4)>>2]|0;g=eb+i|0;fb=c[n+(m<<4)+4>>2]|0;h=fb+i|0;gb=c[d+220>>2]|0;if((gb|0)%(Sa<>2]|0;if((hb|0)%(k<>2]|0;if(!ib){Va=Wa;mb=Za;f=76;continue}if((bb|0)==(f|0)|(($a|0)==(e|0)?1:(c[n+(m<<4)+12>>2]|0)==0)){Va=Wa;mb=Za;f=76}else{f=70;break}}if((f|0)==70){c[d+32>>2]=(((cb+hb|0)/(_a|0)|0)>>eb)-($a>>eb)+(_((((db+gb|0)/(ab|0)|0)>>fb)-(bb>>fb)|0,ib)|0);jb=c[d+64>>2]|0;Ua=d+36|0;c[Ua>>2]=jb;f=71;continue}else if((f|0)==78){Xa=c[d+228>>2]|0;f=d+220|0;Sa=c[f>>2]|0;Xa=Sa+Xa-((Sa|0)%(Xa|0)|0)|0;c[f>>2]=Xa;f=56;continue}}if((f|0)==73){f=0;kb=_(c[d+8>>2]|0,jb)|0;kb=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+kb|0;kb=kb+(_(c[d+16>>2]|0,c[d+24>>2]|0)|0)|0;kb=kb+(_(c[d+20>>2]|0,c[d+32>>2]|0)|0)|0;kb=(c[d+4>>2]|0)+(kb<<1)|0;if(!(b[kb>>1]|0))break;else{Ta=Ua;lb=jb;f=75;continue}}else if((f|0)==79){f=d+28|0;J=(c[f>>2]|0)+1|0;c[f>>2]=J;f=54;continue}}if((f|0)==153)return nb|0;b[kb>>1]=1;d=1;return d|0}case 3:{f=d+40|0;if(!(c[f>>2]|0)){Ra=c[d+24>>2]|0;Ka=d+36|0;pa=Ka;Ka=c[Ka>>2]|0;Na=Ra;Ra=(c[d+196>>2]|0)+(Ra<<4)|0;f=113}else{c[f>>2]=0;o=d+224|0;c[o>>2]=0;p=d+228|0;c[p>>2]=0;q=c[d+192>>2]|0;if(q){r=c[d+196>>2]|0;e=0;f=0;s=0;do{j=c[r+(s<<4)+8>>2]|0;if(j){k=c[r+(s<<4)+12>>2]|0;l=c[r+(s<<4)>>2]|0;m=c[r+(s<<4)+4>>2]|0;n=j+-1|0;g=0;i=0;while(1){h=n+g|0;mb=l<>2]|0);h=m<<(c[k+(i<<4)+4>>2]|0)+h;e=(e|0)==0?mb:e>>>0>>0?e:mb;f=(f|0)==0?h:f>>>0>>0?f:h;h=i+1|0;if((h|0)==(j|0))break;else{g=~i;i=h}}c[o>>2]=e;c[p>>2]=f}s=s+1|0}while((s|0)!=(q|0))}if(!(a[d>>0]|0)){e=c[d+204>>2]|0;c[d+104>>2]=e;c[d+96>>2]=c[d+200>>2];c[d+108>>2]=c[d+212>>2];c[d+100>>2]=c[d+208>>2]}else e=c[d+104>>2]|0;c[d+220>>2]=e;f=93}while(1){if((f|0)==93){if((e|0)>=(c[d+108>>2]|0)){nb=0;f=153;break}ta=c[d+96>>2]|0;c[d+216>>2]=ta;f=95}else if((f|0)==113){Ha=Ka+1|0;c[pa>>2]=Ha;qa=pa;Ia=Na;Qa=Ra;f=109}while(1){if((f|0)==95){if((ta|0)>=(c[d+100>>2]|0)){f=117;break}ua=c[d+48>>2]|0;c[d+24>>2]=ua;f=97}else if((f|0)==109){if(Ha>>>0<(c[d+52>>2]|0)>>>0){f=111;break}La=d+28|0;ra=La;La=c[La>>2]|0;Oa=Ia;Sa=Qa;f=114}while(1){if((f|0)==97){if(ua>>>0>=(c[d+60>>2]|0)>>>0){f=116;break}Pa=(c[d+196>>2]|0)+(ua<<4)|0;va=c[d+44>>2]|0;sa=d+28|0;c[sa>>2]=va;Ma=ua}else if((f|0)==114){va=La+1|0;c[ra>>2]=va;sa=ra;Ma=Oa;Pa=Sa}mb=c[d+56>>2]|0;f=c[Pa+8>>2]|0;if(va>>>0>=(mb>>>0>>0?mb:f)>>>0){ua=Ma+1|0;c[d+24>>2]=ua;f=97;continue}n=c[Pa+12>>2]|0;f=f+~va|0;g=c[d+200>>2]|0;h=c[Pa>>2]|0;wa=h<>2]|0;mb=c[Pa+4>>2]|0;ya=mb<>2]|0)|0)/(wa|0)|0;Ba=ya+-1|0;k=(Ba+(c[d+212>>2]|0)|0)/(ya|0)|0;Ca=c[n+(va<<4)>>2]|0;l=Ca+f|0;Da=c[n+(va<<4)+4>>2]|0;m=Da+f|0;Ea=c[d+220>>2]|0;if((Ea|0)%(mb<>2]|0;if((Fa|0)%(h<>2]|0;if(!Ga){ra=sa;La=va;Oa=Ma;Sa=Pa;f=114;continue}if((za|0)==(k|0)|((xa|0)==(j|0)?1:(c[n+(va<<4)+12>>2]|0)==0)){ra=sa;La=va;Oa=Ma;Sa=Pa;f=114}else{f=108;break}}if((f|0)==108){c[d+32>>2]=(((Aa+Fa|0)/(wa|0)|0)>>Ca)-(xa>>Ca)+(_((((Ba+Ea|0)/(ya|0)|0)>>Da)-(za>>Da)|0,Ga)|0);Ha=c[d+64>>2]|0;qa=d+36|0;c[qa>>2]=Ha;Ia=Ma;Qa=Pa;f=109;continue}else if((f|0)==116){ta=c[d+224>>2]|0;f=d+216|0;mb=c[f>>2]|0;ta=mb+ta-((mb|0)%(ta|0)|0)|0;c[f>>2]=ta;f=95;continue}}if((f|0)==111){f=0;Ja=_(c[d+8>>2]|0,Ha)|0;Ja=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+Ja|0;Ja=Ja+(_(c[d+16>>2]|0,Ia)|0)|0;Ja=Ja+(_(c[d+20>>2]|0,c[d+32>>2]|0)|0)|0;Ja=(c[d+4>>2]|0)+(Ja<<1)|0;if(!(b[Ja>>1]|0))break;else{pa=qa;Ka=Ha;Na=Ia;Ra=Qa;f=113;continue}}else if((f|0)==117){e=c[d+228>>2]|0;f=d+220|0;mb=c[f>>2]|0;e=mb+e-((mb|0)%(e|0)|0)|0;c[f>>2]=e;f=93;continue}}if((f|0)==153)return nb|0;b[Ja>>1]=1;d=1;return d|0}case 4:{e=d+40|0;if(!(c[e>>2]|0)){na=c[d+24>>2]|0;ea=d+36|0;K=ea;ea=c[ea>>2]|0;ga=na;na=(c[d+196>>2]|0)+(na<<4)|0;f=148}else{c[e>>2]=0;O=c[d+48>>2]|0;c[d+24>>2]=O;f=121}while(1){if((f|0)==121){if(O>>>0>=(c[d+60>>2]|0)>>>0){nb=0;f=153;break}e=c[d+196>>2]|0;q=e+(O<<4)|0;o=d+224|0;c[o>>2]=0;p=d+228|0;c[p>>2]=0;l=c[e+(O<<4)+8>>2]|0;if(l){m=c[e+(O<<4)+12>>2]|0;n=c[q>>2]|0;h=c[e+(O<<4)+4>>2]|0;i=l+-1|0;f=0;e=0;g=0;k=0;while(1){j=i+g|0;mb=n<>2]|0);j=h<<(c[m+(k<<4)+4>>2]|0)+j;f=(f|0)==0?mb:f>>>0>>0?f:mb;e=(e|0)==0?j:e>>>0>>0?e:j;j=k+1|0;if((j|0)==(l|0))break;else{g=~k;k=j}}c[o>>2]=f;c[p>>2]=e}if(!(a[d>>0]|0)){e=c[d+204>>2]|0;c[d+104>>2]=e;c[d+96>>2]=c[d+200>>2];c[d+108>>2]=c[d+212>>2];c[d+100>>2]=c[d+208>>2]}else e=c[d+104>>2]|0;c[d+220>>2]=e;H=e;I=O;f=130}else if((f|0)==148){ba=ea+1|0;c[K>>2]=ba;L=K;ca=ga;ma=na;f=144}while(1){if((f|0)==130){if((H|0)>=(c[d+108>>2]|0)){f=152;break}P=c[d+96>>2]|0;c[d+216>>2]=P;ha=I;ka=q;f=132}else if((f|0)==144){if(ba>>>0<(c[d+52>>2]|0)>>>0){f=146;break}fa=d+28|0;M=fa;fa=c[fa>>2]|0;ja=ca;oa=ma;f=149}while(1){if((f|0)==132){if((P|0)>=(c[d+100>>2]|0)){f=151;break}Q=c[d+44>>2]|0;N=d+28|0;c[N>>2]=Q;ia=ha;la=ka}else if((f|0)==149){Q=fa+1|0;c[M>>2]=Q;N=M;ia=ja;la=oa}mb=c[d+56>>2]|0;e=c[la+8>>2]|0;if(Q>>>0>=(mb>>>0>>0?mb:e)>>>0){P=c[d+224>>2]|0;ha=d+216|0;ka=c[ha>>2]|0;P=ka+P-((ka|0)%(P|0)|0)|0;c[ha>>2]=P;ha=ia;ka=la;f=132;continue}m=c[la+12>>2]|0;e=e+~Q|0;f=c[d+200>>2]|0;g=c[la>>2]|0;R=g<>2]|0;mb=c[la+4>>2]|0;T=mb<>2]|0)|0)/(R|0)|0;W=T+-1|0;j=(W+(c[d+212>>2]|0)|0)/(T|0)|0;X=c[m+(Q<<4)>>2]|0;k=X+e|0;Y=c[m+(Q<<4)+4>>2]|0;l=Y+e|0;Z=c[d+220>>2]|0;if((Z|0)%(mb<>2]|0;if(($|0)%(g<>2]|0;if(!aa){M=N;fa=Q;ja=ia;oa=la;f=149;continue}if((U|0)==(j|0)|((S|0)==(i|0)?1:(c[m+(Q<<4)+12>>2]|0)==0)){M=N;fa=Q;ja=ia;oa=la;f=149}else{f=143;break}}if((f|0)==143){c[d+32>>2]=(((V+$|0)/(R|0)|0)>>X)-(S>>X)+(_((((W+Z|0)/(T|0)|0)>>Y)-(U>>Y)|0,aa)|0);ba=c[d+64>>2]|0;L=d+36|0;c[L>>2]=ba;ca=ia;ma=la;f=144;continue}else if((f|0)==151){H=c[d+228>>2]|0;I=d+220|0;q=c[I>>2]|0;H=q+H-((q|0)%(H|0)|0)|0;c[I>>2]=H;I=ha;q=ka;f=130;continue}}if((f|0)==146){f=0;da=_(c[d+8>>2]|0,ba)|0;da=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+da|0;da=da+(_(c[d+16>>2]|0,ca)|0)|0;da=da+(_(c[d+20>>2]|0,c[d+32>>2]|0)|0)|0;da=(c[d+4>>2]|0)+(da<<1)|0;if(!(b[da>>1]|0))break;else{K=L;ea=ba;ga=ca;na=ma;f=148;continue}}else if((f|0)==152){O=I+1|0;c[d+24>>2]=O;f=121;continue}}if((f|0)==153)return nb|0;b[da>>1]=1;d=1;return d|0}default:{d=0;return d|0}}return 0}function Pf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=(c[b+(d*5640|0)+420>>2]|0)+1|0;e=Qc(l,232)|0;if(!e){l=0;return l|0}if(!l){l=e;return l|0}j=a+16|0;g=b+(d*5640|0)+5584|0;a=c[j>>2]|0;h=e;i=0;a:while(1){b=Qc(a,16)|0;f=h+196|0;c[f>>2]=b;if(!b){a=5;break}k=c[j>>2]|0;c[h+192>>2]=k;b:do if(!k)a=0;else{a=(c[g>>2]|0)+4|0;k=Qc(c[a>>2]|0,16)|0;c[b+12>>2]=k;if(!k){a=18;break a}else d=0;while(1){c[b+(d<<4)+8>>2]=c[a>>2];d=d+1|0;a=c[j>>2]|0;if(d>>>0>=a>>>0)break b;b=c[f>>2]|0;a=(c[g>>2]|0)+(d*1080|0)+4|0;k=Qc(c[a>>2]|0,16)|0;c[b+(d<<4)+12>>2]=k;if(!k){a=18;break a}}}while(0);i=i+1|0;if(i>>>0>=l>>>0){a=32;break}else h=h+232|0}if((a|0)==5){a=e+4|0;b=c[a>>2]|0;if(!b){j=e;k=0}else{Uc(b);c[a>>2]=0;j=e;k=0}while(1){i=j+196|0;a=c[i>>2]|0;if(a){h=j+192|0;b=c[h>>2]|0;if(b){g=0;while(1){d=a+12|0;f=c[d>>2]|0;if(f){Uc(f);c[d>>2]=0;b=c[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=c[i>>2]|0}Uc(a);c[i>>2]=0}k=k+1|0;if((k|0)==(l|0))break;else j=j+232|0}Uc(e);l=0;return l|0}else if((a|0)==18){a=e+4|0;b=c[a>>2]|0;if(!b){j=e;k=0}else{Uc(b);c[a>>2]=0;j=e;k=0}while(1){i=j+196|0;a=c[i>>2]|0;if(a){h=j+192|0;b=c[h>>2]|0;if(b){g=0;while(1){d=a+12|0;f=c[d>>2]|0;if(f){Uc(f);c[d>>2]=0;b=c[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=c[i>>2]|0}Uc(a);c[i>>2]=0}k=k+1|0;if((k|0)==(l|0))break;else j=j+232|0}Uc(e);l=0;return l|0}else if((a|0)==32)return e|0;return 0}function Qf(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;o=c[(c[b+76>>2]|0)+(d*5640|0)+5584>>2]|0;n=c[a+24>>2]|0;I=c[b+24>>2]|0;H=b+12|0;G=(_(c[H>>2]|0,(d>>>0)%(I>>>0)|0)|0)+(c[b+4>>2]|0)|0;F=c[a>>2]|0;c[e>>2]=G>>>0>F>>>0?G:F;G=Si(c[H>>2]|0,0,G|0,0)|0;G=G|0-C;H=c[a+8>>2]|0;c[f>>2]=G>>>0>>0?G:H;H=b+16|0;I=(_(c[H>>2]|0,(d>>>0)/(I>>>0)|0)|0)+(c[b+8>>2]|0)|0;G=c[a+4>>2]|0;c[g>>2]=I>>>0>G>>>0?I:G;I=Si(c[H>>2]|0,0,I|0,0)|0;I=I|0-C;H=c[a+12>>2]|0;c[h>>2]=I>>>0>>0?I:H;c[k>>2]=0;c[l>>2]=0;c[i>>2]=2147483647;c[j>>2]=2147483647;H=a+16|0;if(!(c[H>>2]|0))return;else I=0;while(1){r=c[m+(I<<2)>>2]|0;p=c[n>>2]|0;a=((c[e>>2]|0)+-1+p|0)/(p|0)|0;F=n+4|0;q=c[F>>2]|0;d=((c[g>>2]|0)+-1+q|0)/(q|0)|0;p=(p+-1+(c[f>>2]|0)|0)/(p|0)|0;q=(q+-1+(c[h>>2]|0)|0)/(q|0)|0;G=o+4|0;b=c[G>>2]|0;if(b>>>0>(c[l>>2]|0)>>>0){c[l>>2]=b;b=c[G>>2]|0}if(b){D=Si(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;E=C;A=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;B=C;y=Si(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;z=C;w=Si(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;x=C;v=0;while(1){b=b+-1|0;p=c[o+812+(v<<2)>>2]|0;u=c[o+944+(v<<2)>>2]|0;c[r>>2]=p;c[r+4>>2]=u;s=c[n>>2]<>2]<>2]|0;c[i>>2]=(a|0)<(s|0)?a:s;s=c[j>>2]|0;c[j>>2]=(s|0)<(J|0)?s:J;J=Ri(1,0,b|0)|0;s=C;a=Si(D|0,E|0,J|0,s|0)|0;a=Pi(a|0,C|0,b|0)|0;q=Si(A|0,B|0,J|0,s|0)|0;q=Pi(q|0,C|0,b|0)|0;d=Si(y|0,z|0,J|0,s|0)|0;d=Pi(d|0,C|0,b|0)|0;s=Si(w|0,x|0,J|0,s|0)|0;s=Pi(s|0,C|0,b|0)|0;J=Ri(1,0,u|0)|0;t=C;K=Si(s|0,((s|0)<0)<<31>>31|0,-1,-1)|0;t=Si(K|0,C|0,J|0,t|0)|0;t=Pi(t|0,C|0,u|0)|0;if((a|0)==(d|0))a=0;else{d=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;J=C;K=Ri(1,0,p|0)|0;K=Si(d|0,J|0,K|0,C|0)|0;K=Pi(K|0,C|0,p|0)|0;a=(K<>p<>p}K=(q|0)==(s|0)?0:(t<>u<>u;c[r+8>>2]=a;c[r+12>>2]=K;a=_(a,K)|0;if(a>>>0>(c[k>>2]|0)>>>0)c[k>>2]=a;v=v+1|0;if(v>>>0>=(c[G>>2]|0)>>>0)break;else r=r+16|0}}I=I+1|0;if(I>>>0>=(c[H>>2]|0)>>>0)break;else{n=n+52|0;o=o+1080|0}}return}function Rf(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;k=(c[a+(b*5640|0)+420>>2]|0)+1|0;c[a+(b*5640|0)+500>>2]=c[a+(b*5640|0)+428>>2];c[a+(b*5640|0)+516>>2]=c[a+(b*5640|0)+440>>2];c[a+(b*5640|0)+496>>2]=c[a+(b*5640|0)+424>>2];c[a+(b*5640|0)+512>>2]=c[a+(b*5640|0)+436>>2];c[a+(b*5640|0)+508>>2]=c[a+(b*5640|0)+432>>2];c[a+(b*5640|0)+492>>2]=0;c[a+(b*5640|0)+460>>2]=c[a+(b*5640|0)+456>>2];c[a+(b*5640|0)+504>>2]=0;c[a+(b*5640|0)+520>>2]=h;c[a+(b*5640|0)+524>>2]=d;c[a+(b*5640|0)+528>>2]=e;c[a+(b*5640|0)+532>>2]=f;c[a+(b*5640|0)+536>>2]=g;c[a+(b*5640|0)+540>>2]=i;c[a+(b*5640|0)+544>>2]=j;if(k>>>0<=1)return;a=a+(b*5640|0)+572|0;b=1;while(1){c[a+76>>2]=c[a+4>>2];c[a+92>>2]=c[a+16>>2];c[a+72>>2]=c[a>>2];c[a+88>>2]=c[a+12>>2];l=c[a+8>>2]|0;c[a+84>>2]=l;c[a+36>>2]=c[a+32>>2];c[a+80>>2]=0;c[a+68>>2]=l>>>0>(c[a+-64>>2]|0)>>>0?l:0;c[a+96>>2]=h;c[a+100>>2]=d;c[a+104>>2]=e;c[a+108>>2]=f;c[a+112>>2]=g;c[a+116>>2]=i;c[a+120>>2]=j;b=b+1|0;if((b|0)==(k|0))break;else a=a+148|0}return}function Sf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=c[d+76>>2]|0;if((b|0)>-1)h=b;else{e=0;return e|0}a:while(1){switch(a[g+h>>0]|0){case 82:{i=3;break a}case 67:{i=5;break a}case 76:{i=7;break a}case 80:{i=9;break a}default:{}}h=h+-1|0}if((i|0)==3)if((c[j+(e*5640|0)+424+(f*148|0)+128>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+88>>2]|0))return (Sf(b+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}else if((i|0)==5)if((c[j+(e*5640|0)+424+(f*148|0)+132>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+92>>2]|0))return (Sf(b+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}else if((i|0)==7)if((c[j+(e*5640|0)+424+(f*148|0)+124>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+84>>2]|0))return (Sf(b+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}else if((i|0)==9){if((c[j+(e*5640|0)+424+(f*148|0)+36>>2]|0)>>>0<2)if((c[j+(e*5640|0)+424+(f*148|0)+136>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+96>>2]|0))return (Sf(h+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}if((c[j+(e*5640|0)+424+(f*148|0)+140>>2]|0)!=(c[j+(e*5640|0)+424+(f*148|0)+104>>2]|0)){e=1;return e|0}if((c[j+(e*5640|0)+424+(f*148|0)+144>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+112>>2]|0))return (Sf(h+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}}return 0}function Tf(b){b=b|0;var d=0,e=0;d=Qc(1,44)|0;if(!d){b=0;return b|0}e=d+40|0;a[e>>0]=a[e>>0]&-2|(b|0)!=0;b=Qc(1,4)|0;c[d+20>>2]=b;if(b){e=d;return e|0}Uc(d);e=0;return e|0}function Uf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=i;i=i+1200|0;N=O;e=c[c[a+20>>2]>>2]|0;M=e+16|0;f=c[M>>2]|0;if(!f){i=O;return}J=e+20|0;K=(c[a+32>>2]|0)+8|0;L=(c[a+28>>2]|0)+88|0;H=a+24|0;I=(b|0)==0;F=(d|0)==0;G=b+-1|0;e=f;E=0;do{j=c[J>>2]|0;k=c[K>>2]|0;C=c[j+(E*52|0)+16>>2]|0;if(k){if(C){a=c[L>>2]|0;g=+((c[(c[(c[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)>>>0)*.0625;f=0;do{d=_(C,f)|0;h=0;do{D=(d+h|0)*3|0;c[N+(f*120|0)+(h*12|0)>>2]=~~(+(c[a+(D<<2)>>2]|0)*g);c[N+(f*120|0)+(h*12|0)+4>>2]=~~(+(c[a+(D+1<<2)>>2]|0)*g);c[N+(f*120|0)+(h*12|0)+8>>2]=~~(+(c[a+(D+2<<2)>>2]|0)*g);h=h+1|0}while(h>>>0>>0);f=f+1|0}while(f>>>0>>0);D=9}}else D=9;if((D|0)==9){D=0;if(C){w=j+(E*52|0)+24|0;B=0;do{x=c[w>>2]|0;y=x+(B*136|0)+24|0;e=c[y>>2]|0;if(e){z=x+(B*136|0)+16|0;A=x+(B*136|0)+20|0;a=c[A>>2]|0;d=c[z>>2]|0;v=0;do{if(_(a,d)|0){s=x+(B*136|0)+28+(v*36|0)+20|0;t=N+(b*120|0)+(B*12|0)+(v<<2)|0;u=N+(G*120|0)+(B*12|0)+(v<<2)|0;r=0;do{e=c[s>>2]|0;q=_(c[e+(r*40|0)+20>>2]|0,c[e+(r*40|0)+16>>2]|0)|0;if(q){m=e+(r*40|0)+24|0;n=c[t>>2]|0;p=0;do{k=c[m>>2]|0;l=k+(p*52|0)|0;o=c[k+(p*52|0)+4>>2]|0;e=(c[(c[(c[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(c[k+(p*52|0)+28>>2]|0)|0;if(!I){a=c[u>>2]|0;d=n-a|0;if((a|0)<=(e|0)){d=d+(a-e)|0;d=(d|0)<0?0:d}}else{c[k+(p*52|0)+44>>2]=0;d=(n|0)>(e|0)?n-e|0:0}j=k+(p*52|0)+44|0;f=c[j>>2]|0;h=(f|0)==0;if(h)if(!d)d=0;else d=(d*3|0)+-2|0;else d=(d*3|0)+f|0;c[o+(b*24|0)>>2]=d-f;do if((d|0)!=(f|0)){a=c[k+(p*52|0)+8>>2]|0;e=c[a+((d+-1|0)*24|0)>>2]|0;if(h)c[o+(b*24|0)+16>>2]=c[l>>2];else{k=c[a+((f+-1|0)*24|0)>>2]|0;c[o+(b*24|0)+16>>2]=(c[l>>2]|0)+k;e=e-k|0}c[o+(b*24|0)+4>>2]=e;if(F)break;c[j>>2]=d}while(0);p=p+1|0}while(p>>>0>>0);a=c[A>>2]|0;d=c[z>>2]|0}r=r+1|0}while(r>>>0<(_(a,d)|0)>>>0);e=c[y>>2]|0}v=v+1|0}while(v>>>0>>0)}B=B+1|0}while(B>>>0>>0);e=c[M>>2]|0}}E=E+1|0}while(E>>>0>>0);i=O;return}function Vf(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=c[c[a+20>>2]>>2]|0;G=a+40+(b<<3)|0;h[G>>3]=0.0;H=a+16|0;f=c[H>>2]|0;if(!f)return;E=a+20|0;F=(b|0)==0;D=(e|0)==0;a=f;C=0;do{f=c[E>>2]|0;B=c[f+(C*52|0)+16>>2]|0;if(B){v=f+(C*52|0)+24|0;A=0;do{w=c[v>>2]|0;x=w+(A*136|0)+24|0;a=c[x>>2]|0;if(a){y=w+(A*136|0)+16|0;z=w+(A*136|0)+20|0;f=c[z>>2]|0;e=c[y>>2]|0;u=0;do{if(_(f,e)|0){t=w+(A*136|0)+28+(u*36|0)+20|0;s=0;do{a=c[t>>2]|0;r=_(c[a+(s*40|0)+20>>2]|0,c[a+(s*40|0)+16>>2]|0)|0;if(r){n=a+(s*40|0)+24|0;q=0;do{k=c[n>>2]|0;l=k+(q*52|0)|0;o=c[k+(q*52|0)+4>>2]|0;p=k+(q*52|0)+44|0;if(F){c[p>>2]=0;m=0}else m=c[p>>2]|0;e=c[k+(q*52|0)+48>>2]|0;if(m>>>0>>0){i=c[k+(q*52|0)+8>>2]|0;a=m;j=m;do{f=c[i+(j*24|0)>>2]|0;g=+h[i+(j*24|0)+8>>3];if(a){J=a+-1|0;g=g-+h[i+(J*24|0)+8>>3];f=f-(c[i+(J*24|0)>>2]|0)|0}do if(!f){if(!(g!=0.0))break;a=j+1|0}else{if(!(d-g/+(f>>>0)<2.220446049250313e-16))break;a=j+1|0}while(0);j=j+1|0}while(j>>>0>>0);i=a;c[o+(b*24|0)>>2]=i-m;if((i|0)!=(m|0)){e=i+-1|0;f=c[k+(q*52|0)+8>>2]|0;a=c[f+(e*24|0)>>2]|0;if(!m){c[o+(b*24|0)+16>>2]=c[l>>2];g=+h[f+(e*24|0)+8>>3]}else{m=m+-1|0;J=c[f+(m*24|0)>>2]|0;c[o+(b*24|0)+16>>2]=(c[l>>2]|0)+J;g=+h[f+(e*24|0)+8>>3]-+h[f+(m*24|0)+8>>3];a=a-J|0}c[o+(b*24|0)+4>>2]=a;h[o+(b*24|0)+8>>3]=g;h[G>>3]=g+ +h[G>>3];if(!D)c[p>>2]=i}else I=26}else{c[o+(b*24|0)>>2]=0;I=26}if((I|0)==26){I=0;h[o+(b*24|0)+8>>3]=0.0}q=q+1|0}while(q>>>0>>0);f=c[z>>2]|0;e=c[y>>2]|0}s=s+1|0}while(s>>>0<(_(f,e)|0)>>>0);a=c[x>>2]|0}u=u+1|0}while(u>>>0>>0)}A=A+1|0}while(A>>>0>>0);a=c[H>>2]|0}C=C+1|0}while(C>>>0>>0);return}function Wf(d,e,f,j,k){d=d|0;e=e|0;f=f|0;j=j|0;k=k|0;var l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=i;i=i+800|0;V=W;S=c[d+28>>2]|0;T=c[c[d+20>>2]>>2]|0;U=c[d+32>>2]|0;O=T+24|0;c[O>>2]=0;Q=c[T+16>>2]|0;if(!Q){l=0;J=0.0;n=0.0;p=1797693134862315708145274.0e284}else{M=c[T+20>>2]|0;N=c[(c[d+24>>2]|0)+24>>2]|0;l=0;R=0;o=0.0;n=0.0;p=1797693134862315708145274.0e284;do{I=M+(R*52|0)+48|0;c[I>>2]=0;K=c[M+(R*52|0)+16>>2]|0;if(!K)m=0;else{L=c[M+(R*52|0)+24>>2]|0;m=0;H=0;do{E=c[L+(H*136|0)+24>>2]|0;if(E){F=_(c[L+(H*136|0)+20>>2]|0,c[L+(H*136|0)+16>>2]|0)|0;G=(F|0)==0;D=0;do{if(!G){C=c[L+(H*136|0)+28+(D*36|0)+20>>2]|0;B=0;do{z=_(c[C+(B*40|0)+20>>2]|0,c[C+(B*40|0)+16>>2]|0)|0;if(z){A=c[C+(B*40|0)+24>>2]|0;y=0;do{v=c[A+(y*52|0)+48>>2]|0;if(v){w=c[A+(y*52|0)+8>>2]|0;u=0;do{t=c[w+(u*24|0)>>2]|0;q=+h[w+(u*24|0)+8>>3];if(u){X=u+-1|0;q=q-+h[w+(X*24|0)+8>>3];t=t-(c[w+(X*24|0)>>2]|0)|0}do if(t){q=q/+(t|0);p=qo))break;o=q}while(0);u=u+1|0}while(u>>>0>>0)}X=_((c[A+(y*52|0)+24>>2]|0)-(c[A+(y*52|0)+16>>2]|0)|0,(c[A+(y*52|0)+20>>2]|0)-(c[A+(y*52|0)+12>>2]|0)|0)|0;l=X+l|0;m=X+m|0;y=y+1|0}while(y>>>0>>0);c[O>>2]=l;c[I>>2]=m}B=B+1|0}while(B>>>0>>0)}D=D+1|0}while(D>>>0>>0)}H=H+1|0}while(H>>>0>>0)}J=+(1<>2]|0)+-1.0;n=n+ +(m|0)*(J*J);R=R+1|0}while(R>>>0>>0);J=o}I=(k|0)!=0;if(I){R=c[d+36>>2]|0;Q=c[k+88>>2]|0;c[Q+(R*592|0)+552>>2]=l;h[Q+(R*592|0)+560>>3]=+h[T+32>>3];l=U+8|0;X=Pc(c[l>>2]<<3)|0;c[Q+(R*592|0)>>2]=X;if(!X){X=0;i=W;return X|0}}else l=U+8|0;if(!(c[l>>2]|0)){X=1;i=W;return X|0}z=T+32|0;A=S+93|0;B=d+36|0;C=k+88|0;D=T+40|0;E=d+24|0;F=d+8|0;G=d+16|0;H=0;while(1){o=+g[U+20+(H<<2)>>2];if(o!=0.0){w=~~+Z(+o)>>>0;w=w>>>0>>0?w:j}else w=j;s=+g[U+5184+(H<<2)>>2];x=+h[z>>3]-n/+P(10.0,+(s/10.0));X=a[A>>0]|0;if(!((X&1)!=0&o>0.0)?!((X&4)!=0&s>0.0):0)o=p;else{y=dh(c[E>>2]|0,S)|0;if(!y){l=0;m=57;break}v=H+1|0;m=V+(H+-1<<3)|0;t=T+40+(H<<3)|0;if(!H){r=J;m=0;s=p;q=0.0;do{o=(s+r)*.5;Vf(d,0,o,0);do if(a[A>>0]&4){if(((b[S>>1]|0)+-3&65535)>=4){X=+h[D>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0))s=o;else{X=+h[D>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0)==0;r=X?r:o;s=X?o:s;q=X?q:o}while(0);m=m+1|0}while((m|0)!=128)}else{r=J;u=0;s=p;q=0.0;do{o=(s+r)*.5;Vf(d,H,o,0);do if(a[A>>0]&4){if(((b[S>>1]|0)+-3&65535)>=4){X=+h[m>>3]+ +h[t>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0))s=o;else{X=+h[m>>3]+ +h[t>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0)==0;r=X?r:o;s=X?o:s;q=X?q:o}while(0);u=u+1|0}while((u|0)!=128)}eh(y);o=q==0.0?o:q}if(I)h[(c[(c[C>>2]|0)+((c[B>>2]|0)*592|0)>>2]|0)+(H<<3)>>3]=o;Vf(d,H,o,1);if(!H)o=+h[D>>3];else o=+h[V+(H+-1<<3)>>3]+ +h[T+40+(H<<3)>>3];h[V+(H<<3)>>3]=o;H=H+1|0;if(H>>>0>=(c[l>>2]|0)>>>0){l=1;m=57;break}}if((m|0)==57){i=W;return l|0}return 0}function Xf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;c[a+24>>2]=b;c[a+28>>2]=d;f=Qc(1,848)|0;e=a+20|0;c[c[e>>2]>>2]=f;if(!f){a=0;return a|0}f=b+16|0;g=Qc(c[f>>2]|0,52)|0;b=c[c[e>>2]>>2]|0;c[b+20>>2]=g;if(!g){g=0;return g|0}c[b+16>>2]=c[f>>2];c[a>>2]=c[d+84>>2];g=1;return g|0}function Yf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if(!b)return;s=b+20|0;d=c[s>>2]|0;do if(d){r=(a[b+40>>0]&1)==0?3:4;e=c[d>>2]|0;if(e){o=e+20|0;k=e+16|0;if(c[k>>2]|0){m=0;n=c[o>>2]|0;while(1){l=n+24|0;d=c[l>>2]|0;if(d){i=c[n+28>>2]|0;j=(i>>>0)/136|0;if(i>>>0>135){i=0;while(1){h=d+48|0;e=c[h>>2]|0;if(e){f=c[d+52>>2]|0;g=(f>>>0)/40|0;if(f>>>0>39){f=0;while(1){t=e+32|0;mg(c[t>>2]|0);c[t>>2]=0;t=e+36|0;mg(c[t>>2]|0);c[t>>2]=0;Ta[r&7](e);f=f+1|0;if(f>>>0>=g>>>0)break;else e=e+40|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}h=d+84|0;e=c[h>>2]|0;if(e){t=c[d+88>>2]|0;g=(t>>>0)/40|0;if(t>>>0>39){f=0;while(1){t=e+32|0;mg(c[t>>2]|0);c[t>>2]=0;t=e+36|0;mg(c[t>>2]|0);c[t>>2]=0;Ta[r&7](e);f=f+1|0;if(f>>>0>=g>>>0)break;else e=e+40|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}h=d+120|0;e=c[h>>2]|0;if(e){t=c[d+124>>2]|0;g=(t>>>0)/40|0;if(t>>>0>39){f=0;while(1){t=e+32|0;mg(c[t>>2]|0);c[t>>2]=0;t=e+36|0;mg(c[t>>2]|0);c[t>>2]=0;Ta[r&7](e);f=f+1|0;if(f>>>0>=g>>>0)break;else e=e+40|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}i=i+1|0;if(i>>>0>=j>>>0)break;else d=d+136|0}d=c[l>>2]|0}Uc(d);c[l>>2]=0}if((c[n+36>>2]|0)!=0?(p=n+32|0,q=c[p>>2]|0,(q|0)!=0):0){Sc(q);c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0}m=m+1|0;if(m>>>0>=(c[k>>2]|0)>>>0)break;else n=n+52|0}}Uc(c[o>>2]|0);c[o>>2]=0;Uc(c[c[s>>2]>>2]|0);d=c[s>>2]|0;c[d>>2]=0;if(!d)break}Uc(d);c[s>>2]=0}while(0);Uc(b);return}function Zf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+32|0;f=c[e>>2]|0;b=a+40|0;d=c[b>>2]|0;if(f){g=a+44|0;if(d>>>0<=(c[g>>2]|0)>>>0){a=1;return a|0}if(c[a+36>>2]|0){Sc(f);f=Rc(c[b>>2]|0)|0;c[e>>2]=f;if(!f){c[g>>2]=0;c[b>>2]=0;c[a+36>>2]=0;a=0;return a|0}else{c[g>>2]=c[b>>2];c[a+36>>2]=1;a=1;return a|0}}}g=Rc(d)|0;c[e>>2]=g;if(!g){a=0;return a|0}c[a+44>>2]=c[b>>2];c[a+36>>2]=1;a=1;return a|0}function _f(a,b,c){a=a|0;b=b|0;c=c|0;return ig(a,b,1,1.0,52,c)|0}function $f(a,b,c){a=a|0;b=b|0;c=c|0;return ig(a,b,0,.5,56,c)|0}function ag(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;d=c[a+24>>2]|0;f=c[d+16>>2]|0;if(!f){g=0;return g|0}g=0;b=0;e=c[d+24>>2]|0;d=c[(c[c[a+20>>2]>>2]|0)+20>>2]|0;while(1){i=c[e+24>>2]|0;i=((i&7|0)!=0&1)+(i>>>3)|0;h=c[d+24>>2]|0;a=(c[d+20>>2]|0)+-1|0;b=(_(_((i|0)==3?4:i,(c[h+(a*136|0)+8>>2]|0)-(c[h+(a*136|0)>>2]|0)|0)|0,(c[h+(a*136|0)+12>>2]|0)-(c[h+(a*136|0)+4>>2]|0)|0)|0)+b|0;g=g+1|0;if(g>>>0>=f>>>0)break;else{e=e+52|0;d=d+52|0}}return b|0}function bg(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+16|0;w=y;if(!(c[b+8>>2]|0)){c[b+36>>2]=d;u=b+28|0;j=c[(c[u>>2]|0)+76>>2]|0;x=b+32|0;c[x>>2]=j+(d*5640|0);v=(h|0)==0;t=b+20|0;if(!v){k=c[(c[c[t>>2]>>2]|0)+20>>2]|0;o=c[j+(d*5640|0)+5584>>2]|0;p=k+16|0;if(!(c[p>>2]|0)){k=h+88|0;j=0}else{l=c[k+24>>2]|0;k=h+88|0;m=c[k>>2]|0;n=0;j=0;do{s=l+(n*136|0)+16|0;c[m+(d*592|0)+20+(n<<2)>>2]=c[s>>2];r=l+(n*136|0)+20|0;c[m+(d*592|0)+152+(n<<2)>>2]=c[r>>2];j=(_(c[r>>2]|0,c[s>>2]|0)|0)+j|0;c[m+(d*592|0)+284+(n<<2)>>2]=c[o+812+(n<<2)>>2];c[m+(d*592|0)+416+(n<<2)>>2]=c[o+944+(n<<2)>>2];n=n+1|0}while(n>>>0<(c[p>>2]|0)>>>0)}s=Qc(_(_(c[h+52>>2]|0,j)|0,c[h+56>>2]|0)|0,32)|0;c[(c[k>>2]|0)+(d*592|0)+548>>2]=s;if(!s){b=0;i=y;return b|0}}j=c[c[t>>2]>>2]|0;s=j+16|0;if(!(c[s>>2]|0)){n=c[x>>2]|0;l=0;k=c[j+20>>2]|0}else{n=c[x>>2]|0;k=c[j+20>>2]|0;d=0;q=c[n+5584>>2]|0;r=k;while(1){o=c[r+32>>2]|0;p=_((c[r+12>>2]|0)-(c[r+4>>2]|0)|0,(c[r+8>>2]|0)-(c[r>>2]|0)|0)|0;j=(p|0)==0;if((c[q+20>>2]|0)==1){if(!j){l=q+1076|0;m=0;j=o;while(1){c[j>>2]=(c[j>>2]|0)-(c[l>>2]|0);m=m+1|0;if((m|0)==(p|0))break;else j=j+4|0}}}else if(!j){l=q+1076|0;m=0;j=o;while(1){c[j>>2]=(c[j>>2]|0)-(c[l>>2]|0)<<11;m=m+1|0;if((m|0)==(p|0))break;else j=j+4|0}}d=d+1|0;l=c[s>>2]|0;if(d>>>0>=l>>>0)break;else{q=q+1080|0;r=r+52|0}}}o=_((c[k+12>>2]|0)-(c[k+4>>2]|0)|0,(c[k+8>>2]|0)-(c[k>>2]|0)|0)|0;a:do switch(c[n+16>>2]|0){case 0:break;case 2:{if(c[n+5608>>2]|0){m=Pc(l<<2)|0;if(!m){b=0;i=y;return b|0}j=c[s>>2]|0;if(!j)j=0;else{l=0;while(1){c[m+(l<<2)>>2]=c[k+32>>2];l=l+1|0;if((l|0)==(j|0))break;else k=k+52|0}}s=(Gf(c[(c[x>>2]|0)+5608>>2]|0,o,m,j,c[(c[(c[b+24>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Uc(m);if(s){b=0;i=y;return b|0}}break}default:{l=c[k+32>>2]|0;m=c[k+84>>2]|0;j=c[k+136>>2]|0;if(!(c[(c[n+5584>>2]|0)+20>>2]|0)){Ef(l,m,j,o);break a}else{Cf(l,m,j,o);break a}}}while(0);j=c[c[t>>2]>>2]|0;k=j+16|0;b:do if(c[k>>2]|0){l=0;m=c[(c[x>>2]|0)+5584>>2]|0;j=c[j+20>>2]|0;c:while(1){switch(c[m+20>>2]|0){case 1:{if(!(Fg(j)|0)){j=0;k=54;break c}break}case 0:{if(!(Jg(j)|0)){j=0;k=54;break c}break}default:{}}l=l+1|0;if(l>>>0>=(c[k>>2]|0)>>>0)break b;else{m=m+1080|0;j=j+52|0}}if((k|0)==54){i=y;return j|0}}while(0);j=c[x>>2]|0;k=Wg(1)|0;if(!k){b=0;i=y;return b|0}do if((c[j+16>>2]|0)==1)if(!(c[(c[j+5584>>2]|0)+20>>2]|0)){l=Bf()|0;m=3;break}else{l=Af()|0;m=3;break}else{l=c[j+5600>>2]|0;m=c[(c[b+24>>2]|0)+16>>2]|0}while(0);t=Zg(k,c[c[t>>2]>>2]|0,j,l,m)|0;Xg(k);if(!t){b=0;i=y;return b|0}j=c[u>>2]|0;c[w>>2]=0;if(!v)c[h+12>>2]=0;if(!(a[j+93>>0]&5)){if(c[(c[x>>2]|0)+8>>2]|0){j=0;do{Uf(b,j,1);j=j+1|0}while(j>>>0<(c[(c[x>>2]|0)+8>>2]|0)>>>0)}}else if(!(Wf(b,e,w,g,h)|0)){b=0;i=y;return b|0}}if(h)c[h+12>>2]=1;j=dh(c[b+24>>2]|0,c[b+28>>2]|0)|0;if(!j)j=1;else{b=bh(j,c[b+36>>2]|0,c[c[b+20>>2]>>2]|0,c[(c[b+32>>2]|0)+8>>2]|0,e,f,g,h,c[b+4>>2]|0,c[b>>2]|0,c[b+16>>2]|0,1)|0;eh(j);j=(b|0)==0}b=j&1^1;i=y;return b|0}function cg(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+16|0;m=u+8|0;l=u;k=u+12|0;j=a+36|0;c[j>>2]=e;t=c[a+28>>2]|0;p=a+32|0;c[p>>2]=(c[t+76>>2]|0)+(e*5640|0);c[k>>2]=0;o=a+24|0;e=dh(c[o>>2]|0,t)|0;if(!e){t=0;i=u;return t|0}n=a+20|0;t=ch(e,c[j>>2]|0,c[c[n>>2]>>2]|0,b,k,d,f,h)|0;eh(e);if(!t){t=0;i=u;return t|0}e=c[c[n>>2]>>2]|0;a=c[(c[p>>2]|0)+5584>>2]|0;j=c[e+20>>2]|0;d=Wg(0)|0;if(!d){t=0;i=u;return t|0}k=e+16|0;a:do if(c[k>>2]|0){f=0;e=j;while(1){if(!(Yg(d,e,a)|0))break;f=f+1|0;if(f>>>0>=(c[k>>2]|0)>>>0)break a;else{a=a+1080|0;e=e+52|0}}Xg(d);t=0;i=u;return t|0}while(0);Xg(d);e=c[c[n>>2]>>2]|0;j=e+16|0;do if(c[j>>2]|0){k=0;f=c[(c[o>>2]|0)+24>>2]|0;d=c[(c[p>>2]|0)+5584>>2]|0;a=c[e+20>>2]|0;while(1){e=(c[f+36>>2]|0)+1|0;if((c[d+20>>2]|0)==1){if(!(Gg(a,e)|0)){e=0;a=49;break}}else if(!(Ng(a,e)|0)){e=0;a=49;break}k=k+1|0;if(k>>>0>=(c[j>>2]|0)>>>0){a=14;break}else{f=f+52|0;d=d+1080|0;a=a+52|0}}if((a|0)==14){e=c[c[n>>2]>>2]|0;break}else if((a|0)==49){i=u;return e|0}}while(0);k=c[p>>2]|0;a=c[e+20>>2]|0;j=c[k+16>>2]|0;do if(j){b=_((c[a+12>>2]|0)-(c[a+4>>2]|0)|0,(c[a+8>>2]|0)-(c[a>>2]|0)|0)|0;d=e+16|0;e=c[d>>2]|0;if(e>>>0<=2){c[m>>2]=e;Ub(h,1,19703,m)|0;break}if((_((c[a+64>>2]|0)-(c[a+56>>2]|0)|0,(c[a+60>>2]|0)-(c[a+52>>2]|0)|0)|0)>=(b|0)?(_((c[a+116>>2]|0)-(c[a+108>>2]|0)|0,(c[a+112>>2]|0)-(c[a+104>>2]|0)|0)|0)>=(b|0):0){if((j|0)!=2){e=c[a+32>>2]|0;if((c[(c[k+5584>>2]|0)+20>>2]|0)==1){Df(e,c[a+84>>2]|0,c[a+136>>2]|0,b);break}else{Ff(e,c[a+84>>2]|0,c[a+136>>2]|0,b);break}}f=k+5604|0;if(!(c[f>>2]|0))break;k=Pc(e<<2)|0;if(!k){t=0;i=u;return t|0}e=c[d>>2]|0;if(!e)e=0;else{j=0;while(1){c[k+(j<<2)>>2]=c[a+32>>2];j=j+1|0;if((j|0)==(e|0))break;else a=a+52|0}}t=(Hf(c[f>>2]|0,b,k,e,c[(c[(c[o>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Uc(k);if(t)e=0;else break;i=u;return e|0}Ub(h,1,19642,l)|0;t=0;i=u;return t|0}while(0);e=c[c[n>>2]>>2]|0;s=e+16|0;if(!(c[s>>2]|0)){t=1;i=u;return t|0}t=0;r=c[(c[o>>2]|0)+24>>2]|0;q=c[(c[p>>2]|0)+5584>>2]|0;p=c[e+20>>2]|0;while(1){o=c[p+24>>2]|0;h=c[r+36>>2]|0;j=c[o+(h*136|0)+8>>2]|0;k=c[o+(h*136|0)>>2]|0;n=j-k|0;f=c[o+(h*136|0)+12>>2]|0;h=c[o+(h*136|0)+4>>2]|0;o=(c[p+8>>2]|0)-(c[p>>2]|0)-n|0;e=c[r+24>>2]|0;if(!(c[r+32>>2]|0)){e=1<>2]|0;a=(f|0)==(h|0);if((c[q+20>>2]|0)==1){if(!a){d=(j|0)==(k|0);b=q+1076|0;k=f-h|0;f=0;while(1){if(!d){a=0;j=e;while(1){h=(c[b>>2]|0)+(c[j>>2]|0)|0;c[j>>2]=(h|0)<(m|0)?m:(h|0)>(l|0)?l:h;a=a+1|0;if((a|0)==(n|0))break;else j=j+4|0}e=e+(n<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else e=e+(o<<2)|0}}}else if(!a){d=(j|0)==(k|0);b=q+1076|0;k=f-h|0;f=0;while(1){if(!d){a=0;j=e;while(1){h=Hh(+g[j>>2])|0;h=(c[b>>2]|0)+h|0;c[j>>2]=(h|0)<(m|0)?m:(h|0)>(l|0)?l:h;a=a+1|0;if((a|0)==(n|0))break;else j=j+4|0}e=e+(n<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else e=e+(o<<2)|0}}t=t+1|0;if(t>>>0>=(c[s>>2]|0)>>>0){e=1;break}else{r=r+52|0;q=q+1080|0;p=p+52|0}}i=u;return e|0}function dg(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d+24|0;m=c[q>>2]|0;h=c[m+16>>2]|0;l=(h|0)==0;if(l){q=1;return q|0}i=0;g=0;j=c[m+24>>2]|0;k=c[(c[c[d+20>>2]>>2]|0)+20>>2]|0;while(1){n=c[j+24>>2]|0;n=((n&7|0)!=0&1)+(n>>>3)|0;o=c[k+24>>2]|0;p=(c[k+20>>2]|0)+-1|0;g=(_(_((n|0)==3?4:n,(c[o+(p*136|0)+8>>2]|0)-(c[o+(p*136|0)>>2]|0)|0)|0,(c[o+(p*136|0)+12>>2]|0)-(c[o+(p*136|0)+4>>2]|0)|0)|0)+g|0;i=i+1|0;if((i|0)==(h|0))break;else{j=j+52|0;k=k+52|0}}g=g>>>0>f>>>0;if(g|l){q=g&1^1;return q|0}p=0;o=c[m+24>>2]|0;n=c[(c[c[d+20>>2]>>2]|0)+20>>2]|0;while(1){l=c[o+24>>2]|0;d=c[n+24>>2]|0;f=c[o+36>>2]|0;i=c[d+(f*136|0)+8>>2]|0;j=c[d+(f*136|0)>>2]|0;m=i-j|0;k=c[d+(f*136|0)+12>>2]|0;f=c[d+(f*136|0)+4>>2]|0;d=(c[n+8>>2]|0)-(c[n>>2]|0)-m|0;l=((l&7|0)!=0&1)+(l>>>3)|0;a:do switch(((l|0)==3?4:l)|0){case 1:{g=c[n+32>>2]|0;h=(k|0)==(f|0);if(!(c[o+32>>2]|0)){if(h)break a;l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+m|0;i=0;h=g;while(1){a[e>>0]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+1|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}else{if(h)break a;l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+m|0;i=0;h=g;while(1){a[e>>0]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+1|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}break}case 2:{g=c[n+32>>2]|0;h=(k|0)==(f|0);if(!(c[o+32>>2]|0)){if(!h){l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+(m<<1)|0;i=0;h=g;while(1){b[e>>1]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+2|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}}else if(!h){l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+(m<<1)|0;i=0;h=g;while(1){b[e>>1]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+2|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}break}case 4:{if((k|0)!=(f|0)){l=(i|0)==(j|0);k=k-f|0;f=0;g=c[n+32>>2]|0;while(1){if(!l){j=e+(m<<2)|0;i=0;h=g;while(1){c[e>>2]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+4|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}break}default:{}}while(0);p=p+1|0;if(p>>>0>=(c[(c[q>>2]|0)+16>>2]|0)>>>0){e=1;break}else{o=o+52|0;n=n+52|0}}return e|0}function eg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=c[a+24>>2]|0;f=c[d+16>>2]|0;if(!f){g=0;return g|0}g=0;b=0;e=c[d+24>>2]|0;d=c[(c[c[a+20>>2]>>2]|0)+20>>2]|0;while(1){a=c[e+24>>2]|0;a=((a&7|0)!=0&1)+(a>>>3)|0;b=(_(_((c[d+12>>2]|0)-(c[d+4>>2]|0)|0,(c[d+8>>2]|0)-(c[d>>2]|0)|0)|0,(a|0)==3?4:a)|0)+b|0;g=g+1|0;if(g>>>0>=f>>>0)break;else{e=e+52|0;d=d+52|0}}return b|0}function fg(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=c[f+24>>2]|0;q=o+16|0;j=c[q>>2]|0;n=(j|0)==0;if(n)i=0;else{k=0;i=0;l=c[o+24>>2]|0;m=c[(c[c[f+20>>2]>>2]|0)+20>>2]|0;while(1){p=c[l+24>>2]|0;p=((p&7|0)!=0&1)+(p>>>3)|0;i=(_(_((c[m+12>>2]|0)-(c[m+4>>2]|0)|0,(c[m+8>>2]|0)-(c[m>>2]|0)|0)|0,(p|0)==3?4:p)|0)+i|0;k=k+1|0;if((k|0)==(j|0))break;else{l=l+52|0;m=m+52|0}}}i=(i|0)!=(h|0);if(i|n){q=i&1^1;return q|0}p=0;n=c[o+24>>2]|0;h=c[(c[c[f+20>>2]>>2]|0)+20>>2]|0;while(1){f=c[n+24>>2]|0;i=(c[h+8>>2]|0)-(c[h>>2]|0)|0;j=(c[h+12>>2]|0)-(c[h+4>>2]|0)|0;m=_(j,i)|0;f=((f&7|0)!=0&1)+(f>>>3)|0;a:do switch(((f|0)==3?4:f)|0){case 1:{j=c[h+32>>2]|0;i=(m|0)==0;if(!(c[n+32>>2]|0)){if(i)break a;else{k=0;i=j;j=g}while(1){c[i>>2]=d[j>>0];k=k+1|0;if((k|0)==(m|0))break;else{i=i+4|0;j=j+1|0}}g=g+m|0;break a}else{if(i)break a;else{k=0;i=j;j=g}while(1){c[i>>2]=a[j>>0];k=k+1|0;if((k|0)==(m|0))break;else{i=i+4|0;j=j+1|0}}g=g+m|0;break a}}case 2:{l=c[h+32>>2]|0;k=(m|0)==0;if(!(c[n+32>>2]|0)){if(!k){k=g+(_(j<<1,i)|0)|0;j=0;i=l;while(1){c[i>>2]=e[g>>1];j=j+1|0;if((j|0)==(m|0))break;else{i=i+4|0;g=g+2|0}}g=k}}else if(!k){k=g+(_(j<<1,i)|0)|0;j=0;i=l;while(1){c[i>>2]=b[g>>1];j=j+1|0;if((j|0)==(m|0))break;else{i=i+4|0;g=g+2|0}}g=k}break}case 4:{if(m){k=g+(_(j<<2,i)|0)|0;i=0;j=c[h+32>>2]|0;while(1){c[j>>2]=c[g>>2];i=i+1|0;if((i|0)==(m|0))break;else{j=j+4|0;g=g+4|0}}g=k}break}default:{}}while(0);p=p+1|0;if(p>>>0>=(c[q>>2]|0)>>>0){g=1;break}else{n=n+52|0;h=h+52|0}}return g|0}function gg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+24|0;b=c[g>>2]|0;if(!b)return;f=c[a+28>>2]|0;e=(f>>>0)/52|0;if(f>>>0>51){f=0;while(1){a=c[b>>2]|0;if(a){Uc(a+-1|0);c[b>>2]=0}a=b+4|0;d=c[a>>2]|0;if(d){Uc(d);c[a>>2]=0}a=b+8|0;d=c[a>>2]|0;if(d){Uc(d);c[a>>2]=0}f=f+1|0;if(f>>>0>=e>>>0)break;else b=b+52|0}b=c[g>>2]|0}Uc(b);c[g>>2]=0;return}function hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+24|0;b=c[g>>2]|0;if(!b)return;f=c[a+28>>2]|0;e=(f>>>0)/56|0;if(f>>>0>55){f=0;while(1){a=c[b>>2]|0;if(a){Uc(a);c[b>>2]=0}d=b+4|0;a=c[d>>2]|0;if(a){Uc(a);c[d>>2]=0}f=f+1|0;if(f>>>0>=e>>>0)break;else b=b+56|0}b=c[g>>2]|0}Uc(b);c[g>>2]=0;return}function ig(b,d,e,f,h,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0.0;Sa=i;i=i+80|0;La=Sa+64|0;Ka=Sa+56|0;Na=Sa+48|0;Pa=Sa+40|0;Oa=Sa+32|0;Qa=Sa+24|0;Ma=Sa+16|0;Ja=Sa+8|0;k=c[b+28>>2]|0;Ia=c[c[b+20>>2]>>2]|0;p=c[(c[k+76>>2]|0)+(d*5640|0)+5584>>2]|0;q=c[Ia+20>>2]|0;n=c[b+24>>2]|0;o=c[n+24>>2]|0;Fa=c[k+24>>2]|0;m=c[k+12>>2]|0;Ha=(_(m,(d>>>0)%(Fa>>>0)|0)|0)+(c[k+4>>2]|0)|0;l=c[n>>2]|0;l=Ha>>>0>l>>>0?Ha:l;c[Ia>>2]=l;Ha=Si(m|0,0,Ha|0,0)|0;Ha=Ha|0-C;m=c[n+8>>2]|0;m=Ha>>>0>>0?Ha:m;Ha=Ia+8|0;c[Ha>>2]=m;Ga=c[k+16>>2]|0;Fa=(_(Ga,(d>>>0)/(Fa>>>0)|0)|0)+(c[k+8>>2]|0)|0;d=c[n+4>>2]|0;d=Fa>>>0>d>>>0?Fa:d;Ea=Ia+4|0;c[Ea>>2]=d;Fa=Si(Ga|0,0,Fa|0,0)|0;Fa=Fa|0-C;n=c[n+12>>2]|0;n=Fa>>>0>>0?Fa:n;Fa=Ia+12|0;c[Fa>>2]=n;if(!(c[p+4>>2]|0)){Ub(j,1,19777,Sa)|0;Ra=0;i=Sa;return Ra|0}Ga=Ia+16|0;if(!(c[Ga>>2]|0)){Ra=1;i=Sa;return Ra|0}Da=k+80|0;Ca=b+40|0;Ba=(e|0)==0;k=d;Aa=0;a:while(1){c[o+36>>2]=0;va=c[o>>2]|0;d=(l+-1+va|0)/(va|0)|0;c[q>>2]=d;wa=c[o+4>>2]|0;k=(k+-1+wa|0)/(wa|0)|0;za=q+4|0;c[za>>2]=k;va=(m+-1+va|0)/(va|0)|0;ya=q+8|0;c[ya>>2]=va;wa=(n+-1+wa|0)/(wa|0)|0;xa=q+12|0;c[xa>>2]=wa;d=va-d|0;k=wa-k|0;if((4294967295/(d>>>0)|0)>>>0>>0){Ra=6;break}d=_(k,d)|0;if(d>>>0>1073741823){Ra=8;break}m=d<<2;va=c[p+4>>2]|0;wa=q+16|0;c[wa>>2]=va;b=c[Da>>2]|0;c[q+20>>2]=va>>>0>>0?1:va-b|0;b=q+40|0;c[b>>2]=m;do if(a[Ca>>0]&1){e=q+32|0;l=c[e>>2]|0;if(l){k=q+44|0;if(m>>>0<=(c[k>>2]|0)>>>0)break;d=q+36|0;if(c[d>>2]|0){Sc(l);va=Rc(c[b>>2]|0)|0;c[e>>2]=va;if(!va){Ra=16;break a}c[k>>2]=c[b>>2];c[d>>2]=1;break}}va=Rc(m)|0;c[e>>2]=va;if(!va)break a;c[q+44>>2]=c[b>>2];c[q+36>>2]=1}while(0);e=(c[wa>>2]|0)*136|0;k=q+24|0;b=c[k>>2]|0;if(b){d=q+28|0;if(e>>>0>(c[d>>2]|0)>>>0){b=Tc(b,e)|0;if(!b){Ra=24;break}c[k>>2]=b;va=c[d>>2]|0;Qi(b+va|0,0,e-va|0)|0;c[d>>2]=e}}else{d=Pc(e)|0;c[k>>2]=d;if(!d){d=0;Ra=87;break}c[q+28>>2]=e;Qi(d|0,0,e|0)|0}d=c[wa>>2]|0;va=(c[p+20>>2]|0)==0?7:8;if(d){ra=p+8|0;sa=p+12|0;ta=o+24|0;ua=p+804|0;qa=c[k>>2]|0;k=p+28|0;b=0;while(1){oa=d;pa=d+-1|0;la=c[q>>2]|0;ma=Ri(1,0,pa|0)|0;ma=Si(ma|0,C|0,-1,-1)|0;na=C;la=Si(ma|0,na|0,la|0,((la|0)<0)<<31>>31|0)|0;la=Pi(la|0,C|0,pa|0)|0;c[qa>>2]=la;e=c[za>>2]|0;e=Si(ma|0,na|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Pi(e|0,C|0,pa|0)|0;c[qa+4>>2]=e;d=c[ya>>2]|0;d=Si(ma|0,na|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,pa|0)|0;c[qa+8>>2]=d;l=c[xa>>2]|0;l=Si(ma|0,na|0,l|0,((l|0)<0)<<31>>31|0)|0;l=Pi(l|0,C|0,pa|0)|0;c[qa+12>>2]=l;r=c[p+812+(b<<2)>>2]|0;n=c[p+944+(b<<2)>>2]|0;s=la>>r<>n<>31|0)|0;m=Pi(m|0,C|0,n|0)|0;if((la|0)==(d|0))d=0;else{la=Ri(1,0,r|0)|0;la=Si(la|0,C|0,-1,-1)|0;d=Si(la|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,r|0)|0;d=(d<>r}la=qa+16|0;c[la>>2]=d;ia=(e|0)==(l|0)?0:(m<>n;c[qa+20>>2]=ia;ia=_(ia,d)|0;ja=ia*40|0;ka=(b|0)==0;if(ka)d=1;else{s=Si(s|0,((s|0)<0)<<31>>31|0,1,0)|0;s=Ti(s|0,C|0,1)|0;t=Si(t|0,((t|0)<0)<<31>>31|0,1,0)|0;t=Ti(t|0,C|0,1)|0;d=3;n=n+-1|0;r=r+-1|0}ha=qa+24|0;c[ha>>2]=d;S=c[ra>>2]|0;S=S>>>0>>0?S:r;T=c[sa>>2]|0;T=T>>>0>>0?T:n;U=(ia|0)!=0;V=(ia|0)==0;W=1<>2]|0;d=Si(ma|0,na|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,pa|0)|0;k=c[za>>2]|0;k=Si(ma|0,na|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Pi(k|0,C|0,pa|0)|0;e=c[ya>>2]|0;e=Si(ma|0,na|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Pi(e|0,C|0,pa|0)|0;m=c[xa>>2]|0;m=Si(ma|0,na|0,m|0,((m|0)<0)<<31>>31|0)|0;m=Pi(m|0,C|0,pa|0)|0;l=0}else{l=fa+1|0;d=c[q>>2]|0;O=Ri(l&1|0,0,pa|0)|0;O=Oi(da|0,ea|0,O|0,C|0)|0;m=C;d=Si(O|0,m|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,oa|0)|0;k=c[za>>2]|0;P=Ri(l>>>1|0,0,pa|0)|0;P=Oi(da|0,ea|0,P|0,C|0)|0;Q=C;k=Si(P|0,Q|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Pi(k|0,C|0,oa|0)|0;e=c[ya>>2]|0;e=Si(O|0,m|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Pi(e|0,C|0,oa|0)|0;m=c[xa>>2]|0;m=Si(P|0,Q|0,m|0,((m|0)<0)<<31>>31|0)|0;m=Pi(m|0,C|0,oa|0)|0}c[ga+16>>2]=l;c[ga>>2]=d;Q=ga+4|0;c[Q>>2]=k;P=ga+8|0;c[P>>2]=e;O=ga+12|0;c[O>>2]=m;k=Wa[va&15](l)|0;Ta=+(c[R+4>>2]|0)*.00048828125+1.0;g[ga+32>>2]=+Gh(1.0,(c[ta>>2]|0)+k-(c[R>>2]|0)|0)*Ta*f;c[ga+28>>2]=(c[R>>2]|0)+-1+(c[ua>>2]|0);k=ga+20|0;e=c[k>>2]|0;if(!(U&(e|0)==0)){d=ga+24|0;if((c[d>>2]|0)>>>0>>0){e=Tc(e,ja)|0;if(!e){Ra=41;break a}c[k>>2]=e;N=c[d>>2]|0;Qi(e+N|0,0,ja-N|0)|0;c[d>>2]=ja}}else{d=Pc(ja)|0;c[k>>2]=d;if(!d){d=0;Ra=87;break a}Qi(d|0,0,ja|0)|0;c[ga+24>>2]=ja}if(!V){M=c[k>>2]|0;N=0;while(1){F=c[la>>2]|0;J=(((N>>>0)%(F>>>0)|0)<>>0)/(F>>>0)|0)<>2]|0;I=(J|0)>(I|0)?J:I;c[M>>2]=I;J=c[Q>>2]|0;J=(F|0)>(J|0)?F:J;F=M+4|0;c[F>>2]=J;L=c[P>>2]|0;L=(G|0)<(L|0)?G:L;G=M+8|0;c[G>>2]=L;l=c[O>>2]|0;l=(H|0)<(l|0)?H:l;H=M+12|0;c[H>>2]=l;I=I>>S<>T<>31|0)|0;L=Pi(L|0,C|0,S|0)|0;l=Si($|0,aa|0,l|0,((l|0)<0)<<31>>31|0)|0;l=Pi(l|0,C|0,T|0)|0;L=(L<>S;K=M+16|0;c[K>>2]=L;l=(l<>T;u=M+20|0;c[u>>2]=l;L=_(l,L)|0;l=_(L,h)|0;k=M+24|0;e=c[k>>2]|0;do if((e|0)==0&(L|0)!=0){d=Pc(l)|0;c[k>>2]=d;if(!d){d=0;Ra=87;break a}Qi(d|0,0,l|0)|0;c[M+28>>2]=l}else{d=M+28|0;if(l>>>0<=(c[d>>2]|0)>>>0)break;e=Tc(e,l)|0;if(!e){Ra=50;break a}c[k>>2]=e;E=c[d>>2]|0;Qi(e+E|0,0,l-E|0)|0;c[d>>2]=l}while(0);m=M+32|0;d=c[m>>2]|0;e=c[K>>2]|0;l=c[u>>2]|0;if(!d)d=jg(e,l,j)|0;else d=lg(d,e,l,j)|0;c[m>>2]=d;if(!d)Ub(j,2,19990,Ka)|0;m=M+36|0;e=c[m>>2]|0;l=c[K>>2]|0;d=c[u>>2]|0;if(!e)d=jg(l,d,j)|0;else d=lg(e,l,d,j)|0;c[m>>2]=d;if(!d)Ub(j,2,20012,La)|0;if(L){E=0;do{A=c[K>>2]|0;z=(((E>>>0)%(A>>>0)|0)<>>0)/(A>>>0)|0)<>2]|0;e=d+(E*56|0)|0;l=c[e>>2]|0;if(!l){y=Pc(8192)|0;c[e>>2]=y;if(!y){d=0;Ra=87;break a}c[d+(E*56|0)+32>>2]=8192;y=Qc(10,32)|0;c[d+(E*56|0)+4>>2]=y;if(!y){d=0;Ra=87;break a}c[d+(E*56|0)+52>>2]=10}else{m=d+(E*56|0)+32|0;u=c[m>>2]|0;v=d+(E*56|0)+4|0;w=c[v>>2]|0;x=e;y=x+52|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));c[e>>2]=l;c[m>>2]=u;c[v>>2]=w}y=c[M>>2]|0;c[d+(E*56|0)+8>>2]=(z|0)>(y|0)?z:y;z=c[F>>2]|0;c[d+(E*56|0)+12>>2]=(A|0)>(z|0)?A:z;A=c[G>>2]|0;c[d+(E*56|0)+16>>2]=(B|0)<(A|0)?B:A;B=c[H>>2]|0;c[d+(E*56|0)+20>>2]=(D|0)<(B|0)?D:B}else{e=c[k>>2]|0;d=e+(E*52|0)+4|0;if((c[d>>2]|0)==0?(y=Qc(100,24)|0,c[d>>2]=y,(y|0)==0):0){d=0;Ra=87;break a}d=e+(E*52|0)+8|0;if((c[d>>2]|0)==0?(y=Qc(100,24)|0,c[d>>2]=y,(y|0)==0):0){d=0;Ra=87;break a}m=c[M>>2]|0;m=(z|0)>(m|0)?z:m;c[e+(E*52|0)+12>>2]=m;d=c[F>>2]|0;A=(A|0)>(d|0)?A:d;c[e+(E*52|0)+16>>2]=A;d=c[G>>2]|0;d=(B|0)<(d|0)?B:d;c[e+(E*52|0)+20>>2]=d;B=c[H>>2]|0;D=(D|0)<(B|0)?D:B;c[e+(E*52|0)+24>>2]=D;m=_(D-A|0,d-m<<2)|0;d=e+(E*52|0)+36|0;if(m>>>0<=(c[d>>2]|0)>>>0)break;l=e+(E*52|0)|0;e=c[l>>2]|0;if(e)Uc(e+-1|0);e=Pc(m|1)|0;c[l>>2]=e;if(!e){Ra=74;break a}c[d>>2]=m;a[e>>0]=0;c[l>>2]=(c[l>>2]|0)+1}while(0);E=E+1|0}while(E>>>0>>0)}N=N+1|0;if(N>>>0>=ia>>>0)break;else M=M+40|0}}k=R+8|0;fa=fa+1|0;if(fa>>>0>=(c[ha>>2]|0)>>>0)break;else{ga=ga+36|0;R=k}}b=b+1|0;if(b>>>0<(c[wa>>2]|0)>>>0){d=pa;qa=qa+136|0}else break}}d=Aa+1|0;if(d>>>0>=(c[Ga>>2]|0)>>>0){d=1;Ra=87;break}l=c[Ia>>2]|0;k=c[Ea>>2]|0;m=c[Ha>>2]|0;n=c[Fa>>2]|0;Aa=d;o=o+52|0;p=p+1080|0;q=q+52|0}if((Ra|0)==6){Ub(j,1,19816,Ja)|0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==8){Ub(j,1,19816,Ma)|0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==16){c[k>>2]=0;c[b>>2]=0;c[d>>2]=0}else if((Ra|0)==24){Ub(j,1,19849,Oa)|0;Uc(c[k>>2]|0);c[k>>2]=0;c[d>>2]=0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==41){Ub(j,1,19889,Pa)|0;Uc(c[k>>2]|0);c[k>>2]=0;c[d>>2]=0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==50){Uc(c[k>>2]|0);c[k>>2]=0;c[d>>2]=0;Ub(j,1,19932,Na)|0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==74){c[d>>2]=0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==87){i=Sa;return d|0}Ub(j,1,19816,Qa)|0;Ra=0;i=Sa;return Ra|0}function jg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+288|0;l=v+16|0;j=v+8|0;t=v+152|0;u=v+24|0;e=Qc(1,20)|0;if(!e){Ub(d,1,20034,v)|0;u=0;i=v;return u|0}c[e>>2]=a;m=e+4|0;c[m>>2]=b;c[t>>2]=a;c[u>>2]=b;k=e+8|0;c[k>>2]=0;f=0;h=0;while(1){s=_(b,a)|0;a=(a+1|0)/2|0;g=h+1|0;c[t+(g<<2)>>2]=a;b=(b+1|0)/2|0;c[u+(g<<2)>>2]=b;f=f+s|0;if(s>>>0<=1)break;else h=g}c[k>>2]=f;if(!f){Uc(e);Ub(d,2,20072,j)|0;u=0;i=v;return u|0}f=Qc(f,16)|0;c[e+12>>2]=f;if(!f){Ub(d,1,20122,l)|0;Uc(e);u=0;i=v;return u|0}s=c[k>>2]|0;c[e+16>>2]=s<<4;b=f+((_(c[m>>2]|0,c[e>>2]|0)|0)<<4)|0;if(!h)b=f;else{r=0;g=b;a=b;b=f;do{p=c[u+(r<<2)>>2]|0;a:do if((p|0)>0){q=c[t+(r<<2)>>2]|0;if((q|0)<=0){k=p+-1|0;d=0;while(1){o=(d&1|0)!=0|(d|0)==(k|0);j=o?g:a;a=o?g:a+(q<<4)|0;d=d+1|0;if((d|0)>=(p|0)){g=j;break a}else g=j}}o=((q+2+((q|0)<2?~q:-3)|0)>>>1)+1|0;m=p+-1|0;n=0;do{d=q;l=g;while(1){c[b>>2]=l;j=b+16|0;k=d;d=d+-2|0;if((d|0)>-1){c[j>>2]=l;b=b+32|0}else b=j;if((k|0)<=2)break;else l=l+16|0}l=g+(o<<4)|0;d=(n&1|0)!=0|(n|0)==(m|0);g=d?l:a;a=d?l:a+(q<<4)|0;n=n+1|0}while((n|0)<(p|0))}while(0);r=r+1|0}while((r|0)!=(h|0))}c[b>>2]=0;if(!s){u=e;i=v;return u|0}else b=0;while(1){c[f+4>>2]=999;c[f+8>>2]=0;c[f+12>>2]=0;b=b+1|0;if((b|0)==(s|0))break;else f=f+16|0}i=v;return e|0}function kg(a){a=a|0;var b=0,d=0;if(!a)return;b=c[a+8>>2]|0;if(!b)return;d=0;a=c[a+12>>2]|0;while(1){c[a+4>>2]=999;c[a+8>>2]=0;c[a+12>>2]=0;d=d+1|0;if(d>>>0>=b>>>0)break;else a=a+16|0}return} +function bb(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function cb(){return i|0}function db(a){a=a|0;i=a}function eb(a,b){a=a|0;b=b|0;i=a;j=b}function fb(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function gb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function hb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function ib(a){a=a|0;C=a}function jb(){return C|0}function kb(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+8272|0;k=o+16|0;m=o+12|0;j=o;c[m>>2]=0;if((c[a>>2]|0)==1375686655)n=gc(0)|0;else n=gc(2)|0;bc(n,1,0)|0;cc(n,2,0)|0;dc(n,3,0)|0;hc(k);c[j>>2]=a;c[j+4>>2]=a;c[j+8>>2]=b;l=ec(j,1)|0;if(!(ic(n,k)|0)){mi(4476)|0;Fb(l);zc(n);g=1;i=o;return g|0}if(!(jc(l,n,m)|0)){mi(4528)|0;Fb(l);zc(n);Zb(c[m>>2]|0);g=1;i=o;return g|0}if(!(oc(n,l,c[m>>2]|0,c[k+8228>>2]|0)|0)){mi(4578)|0;zc(n);Fb(l);Zb(c[m>>2]|0);g=1;i=o;return g|0}j=c[m>>2]|0;c[f>>2]=c[j+8>>2];c[g>>2]=c[j+12>>2];a=c[j+16>>2]|0;c[h>>2]=a;a=_(_(a<<2,c[f>>2]|0)|0,c[g>>2]|0)|0;c[e>>2]=a;e=Fi(a)|0;c[d>>2]=e;switch(c[h>>2]|0){case 1:{Ui(e|0,c[(c[j+24>>2]|0)+44>>2]|0,a|0)|0;break}case 3:{if((_(c[g>>2]|0,c[f>>2]|0)|0)>0){b=c[j+24>>2]|0;j=c[b+44>>2]|0;a=c[b+96>>2]|0;b=c[b+148>>2]|0;k=0;do{h=k*3|0;c[e+(h<<2)>>2]=c[j+(k<<2)>>2];c[e+(h+1<<2)>>2]=c[a+(k<<2)>>2];c[e+(h+2<<2)>>2]=c[b+(k<<2)>>2];k=k+1|0}while((k|0)<(_(c[g>>2]|0,c[f>>2]|0)|0))}break}default:{}}Fb(l);zc(n);Zb(c[m>>2]|0);g=0;i=o;return g|0}function lb(){return fc()|0}function mb(a,b){a=a|0;b=b|0;return}function nb(a,b){a=a|0;b=b|0;return}function ob(a,b){a=a|0;b=b|0;var d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;li(4625,d)|0;i=b;return}function pb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;g=h;c[g>>2]=d;if(!e){i=h;return}d=b;f=0;b=g+(e+-1)|0;while(1){a[d>>0]=a[b>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else{d=d+1|0;b=b+-1|0}}i=h;return}function qb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;c[d>>2]=0;if(!e)return;f=0;d=d+(e+-1)|0;while(1){a[d>>0]=a[b>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else{b=b+1|0;d=d+-1|0}}return}function rb(b,d){b=b|0;d=+d;var e=0,f=0,g=0,j=0,l=0;e=i;i=i+16|0;j=e;h[j>>3]=d;j=j+8|0;h[k>>3]=d;f=c[k>>2]|0;g=c[k+4>>2]|0;l=Ti(f|0,g|0,56)|0;a[b>>0]=l;l=Ti(f|0,g|0,48)|0;a[b+1>>0]=l;l=Ti(f|0,g|0,40)|0;a[b+2>>0]=l;a[b+3>>0]=g;a[b+4>>0]=a[j+-5>>0]|0;a[b+5>>0]=a[j+-6>>0]|0;g=Ti(f|0,g|0,8)|0;a[b+6>>0]=g;a[b+7>>0]=f;i=e;return}function sb(b,c){b=b|0;c=c|0;var d=0;d=c+8|0;a[d+-1>>0]=a[b>>0]|0;a[d+-2>>0]=a[b+1>>0]|0;a[d+-3>>0]=a[b+2>>0]|0;a[d+-4>>0]=a[b+3>>0]|0;a[d+-5>>0]=a[b+4>>0]|0;a[d+-6>>0]=a[b+5>>0]|0;a[d+-7>>0]=a[b+6>>0]|0;a[c>>0]=a[b+7>>0]|0;return}function tb(b,d){b=b|0;d=+d;var e=0;e=(g[k>>2]=d,c[k>>2]|0);a[b>>0]=e>>>24;a[b+1>>0]=e>>>16;a[b+2>>0]=e>>>8;a[b+3>>0]=e;return}function ub(b,c){b=b|0;c=c|0;var d=0;d=c+4|0;a[d+-1>>0]=a[b>>0]|0;a[d+-2>>0]=a[b+1>>0]|0;a[d+-3>>0]=a[b+2>>0]|0;a[c>>0]=a[b+3>>0]|0;return}function vb(a,b){a=a|0;b=b|0;var d=0,e=0;e=Qc(1,72)|0;if(!e){b=0;return b|0}c[e+64>>2]=a;a=Pc(a)|0;c[e+32>>2]=a;if(!a){Uc(e);b=0;return b|0}c[e+36>>2]=a;a=e+68|0;d=c[a>>2]|0;if(!b){c[a>>2]=d|1;c[e+40>>2]=31;c[e+44>>2]=32}else{c[a>>2]=d|2;c[e+40>>2]=29;c[e+44>>2]=30}c[e+16>>2]=4;c[e+20>>2]=5;c[e+24>>2]=6;c[e+28>>2]=7;b=e;return b|0}function wb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;m=n;f=a+48|0;g=c[f>>2]|0;if(g>>>0>=b>>>0){m=a+36|0;c[m>>2]=(c[m>>2]|0)+b;c[f>>2]=g-b;m=a+56|0;a=m;a=Si(c[a>>2]|0,c[a+4>>2]|0,b|0,d|0)|0;c[m>>2]=a;c[m+4>>2]=C;m=d;a=b;C=m;i=n;return a|0}l=a+68|0;if(c[l>>2]&4){m=a+36|0;c[m>>2]=(c[m>>2]|0)+g;c[f>>2]=0;a=a+56|0;m=a;m=Si(c[m>>2]|0,c[m+4>>2]|0,g|0,0)|0;c[a>>2]=m;c[a+4>>2]=C;a=(g|0)!=0;m=a?0:-1;a=a?g:-1;C=m;i=n;return a|0}if(!g){g=0;f=0}else{c[a+36>>2]=c[a+32>>2];b=Oi(b|0,d|0,g|0,0)|0;c[f>>2]=0;f=0;d=C}a:do if((d|0)>0|(d|0)==0&b>>>0>0){k=a+24|0;while(1){h=Ra[c[k>>2]&63](b,d,c[a>>2]|0)|0;j=C;if((h|0)==-1&(j|0)==-1)break;b=Oi(b|0,d|0,h|0,j|0)|0;d=C;g=Si(h|0,j|0,g|0,f|0)|0;f=C;if(!((d|0)>0|(d|0)==0&b>>>0>0))break a}Ub(e,4,4636,m)|0;c[l>>2]=c[l>>2]|4;a=a+56|0;m=a;m=Si(c[m>>2]|0,c[m+4>>2]|0,g|0,f|0)|0;c[a>>2]=m;c[a+4>>2]=C;a=(g|0)!=0|(f|0)!=0;m=a?f:-1;a=a?g:-1;C=m;i=n;return a|0}while(0);m=a+56|0;a=m;a=Si(c[a>>2]|0,c[a+4>>2]|0,g|0,f|0)|0;c[m>>2]=a;c[m+4>>2]=C;m=f;a=g;C=m;i=n;return a|0}function xb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;c[a+36>>2]=c[a+32>>2];c[a+48>>2]=0;g=(Ra[c[a+28>>2]&63](b,d,c[a>>2]|0)|0)==0;e=a+68|0;f=c[e>>2]|0;if(g){c[e>>2]=f|4;g=0;return g|0}else{c[e>>2]=f&-5;g=a+56|0;c[g>>2]=b;c[g+4>>2]=d;g=1;return g|0}return 0}function yb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+16|0;q=r+8|0;m=r;p=a+68|0;if(c[p>>2]&8){q=-1;a=-1;C=q;i=r;return a|0}k=a+32|0;f=c[k>>2]|0;o=a+36|0;c[o>>2]=f;l=a+48|0;g=c[l>>2]|0;do if(g){j=a+20|0;while(1){h=Ra[c[j>>2]&63](f,g,c[a>>2]|0)|0;if((h|0)==-1)break;f=(c[o>>2]|0)+h|0;c[o>>2]=f;s=c[l>>2]|0;g=s-h|0;c[l>>2]=g;if((s|0)==(h|0)){n=6;break}}if((n|0)==6){f=c[k>>2]|0;break}c[p>>2]=c[p>>2]|8;Ub(e,4,4662,m)|0;c[p>>2]=c[p>>2]|8;c[l>>2]=0;a=-1;s=-1;C=a;i=r;return s|0}while(0);c[o>>2]=f;a:do if((d|0)>0|(d|0)==0&b>>>0>0){k=a+24|0;g=0;f=0;while(1){h=Ra[c[k>>2]&63](b,d,c[a>>2]|0)|0;j=C;if((h|0)==-1&(j|0)==-1)break;b=Oi(b|0,d|0,h|0,j|0)|0;d=C;g=Si(h|0,j|0,g|0,f|0)|0;f=C;if(!((d|0)>0|(d|0)==0&b>>>0>0))break a}Ub(e,4,4688,q)|0;c[p>>2]=c[p>>2]|8;s=a+56|0;a=s;a=Si(c[a>>2]|0,c[a+4>>2]|0,g|0,f|0)|0;c[s>>2]=a;c[s+4>>2]=C;s=(g|0)!=0|(f|0)!=0;a=s?f:-1;s=s?g:-1;C=a;i=r;return s|0}else{g=0;f=0}while(0);a=a+56|0;s=a;s=Si(c[s>>2]|0,c[s+4>>2]|0,g|0,f|0)|0;c[a>>2]=s;c[a+4>>2]=C;a=f;s=g;C=a;i=r;return s|0}function zb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+16|0;k=p;m=a+32|0;f=c[m>>2]|0;n=a+36|0;c[n>>2]=f;o=a+48|0;g=c[o>>2]|0;do if(!g)g=a;else{j=a+20|0;while(1){h=Ra[c[j>>2]&63](f,g,c[a>>2]|0)|0;if((h|0)==-1)break;f=(c[n>>2]|0)+h|0;c[n>>2]=f;q=c[o>>2]|0;g=q-h|0;c[o>>2]=g;if((q|0)==(h|0)){l=6;break}}if((l|0)==6){g=a;f=c[m>>2]|0;break}q=a+68|0;c[q>>2]=c[q>>2]|8;Ub(e,4,4662,k)|0;c[q>>2]=c[q>>2]|8;q=0;i=p;return q|0}while(0);c[n>>2]=f;c[o>>2]=0;if(!(Ra[c[a+28>>2]&63](b,d,c[g>>2]|0)|0)){q=a+68|0;c[q>>2]=c[q>>2]|8;q=0;i=p;return q|0}else{q=a+56|0;c[q>>2]=b;c[q+4>>2]=d;q=1;i=p;return q|0}return 0}function Ab(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function Bb(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function Cb(a,b,c){a=a|0;b=b|0;c=c|0;C=-1;return -1}function Db(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Eb(a){a=a|0;var b=0,d=0,e=0;e=Qc(1,72)|0;if(!e){a=0;return a|0}c[e+64>>2]=1048576;b=Pc(1048576)|0;c[e+32>>2]=b;if(!b){Uc(e);a=0;return a|0}c[e+36>>2]=b;b=e+68|0;d=c[b>>2]|0;if(!a){c[b>>2]=d|1;c[e+40>>2]=31;c[e+44>>2]=32}else{c[b>>2]=d|2;c[e+40>>2]=29;c[e+44>>2]=30}c[e+16>>2]=4;c[e+20>>2]=5;c[e+24>>2]=6;c[e+28>>2]=7;a=e;return a|0}function Fb(a){a=a|0;var b=0;if(!a)return;b=c[a+4>>2]|0;if(b)Ta[b&7](c[a>>2]|0);b=a+32|0;Uc(c[b>>2]|0);c[b>>2]=0;Uc(a);return}function Gb(a,b){a=a|0;b=b|0;if(!a)return;if(!(c[a+68>>2]&2))return;c[a+16>>2]=b;return}function Hb(a,b){a=a|0;b=b|0;if(!a)return;c[a+28>>2]=b;return}function Ib(a,b){a=a|0;b=b|0;if(!a)return;if(!(c[a+68>>2]&1))return;c[a+20>>2]=b;return}function Jb(a,b){a=a|0;b=b|0;if(!a)return;c[a+24>>2]=b;return}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;if(!a)return;c[a>>2]=b;c[a+4>>2]=d;return}function Lb(a,b,d){a=a|0;b=b|0;d=d|0;if(!a)return;a=a+8|0;c[a>>2]=b;c[a+4>>2]=d;return}function Mb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;s=w+8|0;r=w;v=a+48|0;f=c[v>>2]|0;if(f>>>0>=d>>>0){u=a+36|0;Ui(b|0,c[u>>2]|0,d|0)|0;c[u>>2]=(c[u>>2]|0)+d;c[v>>2]=(c[v>>2]|0)-d;v=a+56|0;u=v;u=Si(c[u>>2]|0,c[u+4>>2]|0,d|0,0)|0;c[v>>2]=u;c[v+4>>2]=C;v=d;i=w;return v|0}t=a+68|0;if(c[t>>2]&4){u=a+36|0;Ui(b|0,c[u>>2]|0,f|0)|0;e=c[v>>2]|0;c[u>>2]=(c[u>>2]|0)+e;u=a+56|0;t=u;e=Si(c[t>>2]|0,c[t+4>>2]|0,e|0,0)|0;c[u>>2]=e;c[u+4>>2]=C;c[v>>2]=0;v=(f|0)!=0?f:-1;i=w;return v|0}if(!f){o=a+32|0;g=c[o>>2]|0;p=a+36|0;c[p>>2]=g;q=p;u=a+56|0;f=0}else{p=a+36|0;Ui(b|0,c[p>>2]|0,f|0)|0;o=a+32|0;g=c[o>>2]|0;c[p>>2]=g;q=c[v>>2]|0;u=a+56|0;m=u;m=Si(c[m>>2]|0,c[m+4>>2]|0,q|0,0)|0;n=u;c[n>>2]=m;c[n+4>>2]=C;c[v>>2]=0;d=d-q|0;b=b+q|0;q=p}m=a+64|0;n=a+16|0;l=b;h=g;while(1){b=c[m>>2]|0;g=c[n>>2]|0;if(d>>>0>>0){g=Ra[g&63](h,b,c[a>>2]|0)|0;c[v>>2]=g;if((g|0)==-1){g=11;break}if(g>>>0>=d>>>0){b=l;g=14;break}Ui(l|0,c[q>>2]|0,g|0)|0;h=c[o>>2]|0;c[p>>2]=h;b=c[v>>2]|0;j=u;j=Si(c[j>>2]|0,c[j+4>>2]|0,b|0,0)|0;k=C;f=g+f|0}else{b=Ra[g&63](l,d,c[a>>2]|0)|0;c[v>>2]=b;if((b|0)==-1){g=16;break}f=b+f|0;if(b>>>0>=d>>>0){g=20;break}h=c[o>>2]|0;c[p>>2]=h;j=u;j=Si(c[j>>2]|0,c[j+4>>2]|0,b|0,0)|0;k=C}g=u;c[g>>2]=j;c[g+4>>2]=k;c[v>>2]=0;d=d-b|0;l=l+b|0}if((g|0)==11){Ub(e,4,4636,r)|0;c[v>>2]=0;c[t>>2]=c[t>>2]|4;v=(f|0)!=0?f:-1;i=w;return v|0}else if((g|0)==14){Ui(b|0,c[q>>2]|0,d|0)|0;c[q>>2]=(c[q>>2]|0)+d;c[v>>2]=(c[v>>2]|0)-d;e=u;e=Si(c[e>>2]|0,c[e+4>>2]|0,d|0,0)|0;v=u;c[v>>2]=e;c[v+4>>2]=C;v=f+d|0;i=w;return v|0}else if((g|0)==16){Ub(e,4,4636,s)|0;c[v>>2]=0;c[t>>2]=c[t>>2]|4;v=(f|0)!=0?f:-1;i=w;return v|0}else if((g|0)==20){e=u;e=Si(c[e>>2]|0,c[e+4>>2]|0,b|0,0)|0;c[u>>2]=e;c[u+4>>2]=C;c[p>>2]=c[o>>2];c[v>>2]=0;v=f;i=w;return v|0}return 0}function Nb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+16|0;r=u;n=a+68|0;if(c[n>>2]&8){t=-1;i=u;return t|0}q=a+64|0;f=c[q>>2]|0;t=a+48|0;k=c[t>>2]|0;g=f-k|0;do if(g>>>0>>0){o=a+32|0;h=a+36|0;p=a+20|0;j=a+56|0;l=f;m=g;f=0;a:while(1){if((l|0)==(k|0))g=c[o>>2]|0;else{Ui(c[h>>2]|0,b|0,m|0)|0;g=c[o>>2]|0;c[h>>2]=g;k=(c[t>>2]|0)+m|0;c[t>>2]=k;v=j;v=Si(c[v>>2]|0,c[v+4>>2]|0,m|0,0)|0;l=j;c[l>>2]=v;c[l+4>>2]=C;d=d-m|0;b=b+m|0;f=m+f|0}c[h>>2]=g;if(!k)k=0;else{do{l=Ra[c[p>>2]&63](g,k,c[a>>2]|0)|0;if((l|0)==-1)break a;g=(c[h>>2]|0)+l|0;c[h>>2]=g;v=c[t>>2]|0;k=v-l|0;c[t>>2]=k}while((v|0)!=(l|0));g=c[o>>2]|0}c[h>>2]=g;l=c[q>>2]|0;m=l-k|0;if(d>>>0<=m>>>0){s=5;break}}if((s|0)==5)break;c[n>>2]=c[n>>2]|8;Ub(e,4,4662,r)|0;v=-1;i=u;return v|0}else{g=a+36|0;j=a+56|0;h=g;g=c[g>>2]|0;f=0}while(0);Ui(g|0,b|0,d|0)|0;c[h>>2]=(c[h>>2]|0)+d;c[t>>2]=(c[t>>2]|0)+d;t=j;t=Si(c[t>>2]|0,c[t+4>>2]|0,d|0,0)|0;v=j;c[v>>2]=t;c[v+4>>2]=C;v=f+d|0;i=u;return v|0}function Ob(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+16|0;k=n;g=a+32|0;d=c[g>>2]|0;m=a+36|0;c[m>>2]=d;h=a+48|0;e=c[h>>2]|0;do if(e){j=a+20|0;while(1){f=Ra[c[j>>2]&63](d,e,c[a>>2]|0)|0;if((f|0)==-1)break;d=(c[m>>2]|0)+f|0;c[m>>2]=d;o=c[h>>2]|0;e=o-f|0;c[h>>2]=e;if((o|0)==(f|0)){l=6;break}}if((l|0)==6){d=c[g>>2]|0;break}o=a+68|0;c[o>>2]=c[o>>2]|8;Ub(b,4,4662,k)|0;o=0;i=n;return o|0}while(0);c[m>>2]=d;o=1;i=n;return o|0}function Pb(a){a=a|0;a=a+56|0;C=c[a+4>>2]|0;return c[a>>2]|0}function Qb(a){a=a|0;var b=0,d=0;d=a+8|0;b=c[d>>2]|0;d=c[d+4>>2]|0;if((b|0)==0&(d|0)==0){d=0;a=0;C=d;return a|0}a=a+56|0;a=Oi(b|0,d|0,c[a>>2]|0,c[a+4>>2]|0)|0;d=C;C=d;return a|0}function Rb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=Za[c[a+40>>2]&63](a,b,d,e)|0;return a|0}function Sb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return Za[c[a+44>>2]&63](a,b,d,e)|0}function Tb(a){a=a|0;return (c[a+28>>2]|0)!=7|0}function Ub(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+528|0;g=j;h=j+16|0;a:do if(a){switch(b|0){case 1:{b=a;f=a+12|0;break}case 2:{b=a+4|0;f=a+16|0;break}case 4:{b=a+8|0;f=a+20|0;break}default:{b=0;break a}}a=c[b>>2]|0;b=c[f>>2]|0;if(b)if(!d)b=1;else{Qi(h|0,0,512)|0;c[g>>2]=e;pi(h,512,d,g)|0;Ua[b&7](h,a);b=1}else b=0}else b=0;while(0);i=j;return b|0}function Vb(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=4;c[a+20>>2]=4;c[a+16>>2]=4;return}function Wb(a,b){a=a|0;b=b|0;return}function Xb(){return Qc(1,36)|0}function Yb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=Qc(1,36)|0;if(!e){i=e;return i|0}c[e+20>>2]=d;h=e+16|0;c[h>>2]=a;d=Qc(1,a*52|0)|0;i=e+24|0;c[i>>2]=d;if(!d){d=c[e+28>>2]|0;if(d)Uc(d);Uc(e);i=0;return i|0}if(!a){i=e;return i|0}f=0;while(1){c[d+(f*52|0)>>2]=c[b+(f*36|0)>>2];c[d+(f*52|0)+4>>2]=c[b+(f*36|0)+4>>2];j=c[b+(f*36|0)+8>>2]|0;c[d+(f*52|0)+8>>2]=j;k=c[b+(f*36|0)+12>>2]|0;c[d+(f*52|0)+12>>2]=k;c[d+(f*52|0)+16>>2]=c[b+(f*36|0)+16>>2];c[d+(f*52|0)+20>>2]=c[b+(f*36|0)+20>>2];c[d+(f*52|0)+24>>2]=c[b+(f*36|0)+24>>2];c[d+(f*52|0)+28>>2]=c[b+(f*36|0)+28>>2];c[d+(f*52|0)+32>>2]=c[b+(f*36|0)+32>>2];j=Qc(_(k,j)|0,4)|0;c[d+(f*52|0)+44>>2]=j;f=f+1|0;if(!j)break;if(f>>>0>=a>>>0){g=22;break}d=c[i>>2]|0}if((g|0)==22)return e|0;d=c[i>>2]|0;if(d){f=c[h>>2]|0;if(f){b=0;while(1){d=c[d+(b*52|0)+44>>2]|0;if(d){Uc(d);f=c[h>>2]|0}b=b+1|0;if(b>>>0>=f>>>0)break;d=c[i>>2]|0}d=c[i>>2]|0}Uc(d)}d=c[e+28>>2]|0;if(d)Uc(d);Uc(e);k=0;return k|0}function Zb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)return;f=a+24|0;b=c[f>>2]|0;if(b){g=a+16|0;d=c[g>>2]|0;if(d){e=0;while(1){b=c[b+(e*52|0)+44>>2]|0;if(b){Uc(b);d=c[g>>2]|0}e=e+1|0;if(e>>>0>=d>>>0)break;b=c[f>>2]|0}b=c[f>>2]|0}Uc(b)}b=c[a+28>>2]|0;if(b)Uc(b);Uc(a);return}function _b(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=c[b+4>>2]|0;e=c[a>>2]|0;g=c[b+8>>2]|0;h=c[a+4>>2]|0;f=c[b+12>>2]|0;l=(_((c[b+24>>2]|0)+-1|0,f)|0)+d|0;i=c[b+16>>2]|0;j=(_((c[b+28>>2]|0)+-1|0,i)|0)+g|0;b=Si(l|0,0,f|0,0)|0;b=b|0-C;f=c[a+8>>2]|0;i=Si(j|0,0,i|0,0)|0;i=i|0-C;j=c[a+12>>2]|0;l=c[a+16>>2]|0;if(!l)return;k=(d>>>0>e>>>0?d:e)+-1|0;g=(g>>>0>h>>>0?g:h)+-1|0;f=(b>>>0>>0?b:f)+-1|0;d=(i>>>0>>0?i:j)+-1|0;e=0;b=c[a+24>>2]|0;while(1){h=c[b>>2]|0;j=((k+h|0)>>>0)/(h>>>0)|0;o=c[b+4>>2]|0;a=((g+o|0)>>>0)/(o>>>0)|0;i=c[b+40>>2]|0;n=Ri(1,0,i|0)|0;m=C;h=Si((((f+h|0)>>>0)/(h>>>0)|0)-j|0,0,-1,-1)|0;h=Si(h|0,C|0,n|0,m|0)|0;h=Ti(h|0,C|0,i|0)|0;o=Si((((d+o|0)>>>0)/(o>>>0)|0)-a|0,0,-1,-1)|0;m=Si(o|0,C|0,n|0,m|0)|0;i=Ti(m|0,C|0,i|0)|0;c[b+8>>2]=h;c[b+12>>2]=i;c[b+16>>2]=j;c[b+20>>2]=a;e=e+1|0;if(e>>>0>=l>>>0)break;else b=b+52|0}return}function $b(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];j=b+24|0;e=c[j>>2]|0;i=b+16|0;if(!e)d=j;else{d=c[i>>2]|0;if(!d)d=j;else{f=0;while(1){e=c[e+(f*52|0)+44>>2]|0;if(e){Uc(e);d=c[i>>2]|0}f=f+1|0;if(f>>>0>=d>>>0)break;e=c[j>>2]|0}d=j;e=c[j>>2]|0}Uc(e);c[j>>2]=0}e=c[a+16>>2]|0;c[i>>2]=e;e=Pc(e*52|0)|0;c[d>>2]=e;if(!e){c[j>>2]=0;c[i>>2]=0;return}if(c[i>>2]|0){h=a+24|0;g=0;do{d=e+(g*52|0)|0;e=(c[h>>2]|0)+(g*52|0)|0;f=d+52|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));e=c[j>>2]|0;c[e+(g*52|0)+44>>2]=0;g=g+1|0}while(g>>>0<(c[i>>2]|0)>>>0)}c[b+20>>2]=c[a+20>>2];f=a+32|0;d=c[f>>2]|0;g=b+32|0;c[g>>2]=d;if(!d){c[b+28>>2]=0;return}e=Pc(d)|0;d=b+28|0;c[d>>2]=e;if(!e){c[d>>2]=0;c[g>>2]=0;return}else{Ui(e|0,c[a+28>>2]|0,c[f>>2]|0)|0;return}}function ac(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Qc(1,36)|0;if(!e){a=e;return a|0}c[e+20>>2]=d;c[e+16>>2]=a;d=Qc(a,52)|0;c[e+24>>2]=d;if(!d){d=c[e+28>>2]|0;if(d)Uc(d);Uc(e);a=0;return a|0}else{if(!a){a=e;return a|0}else f=0;do{c[d+(f*52|0)>>2]=c[b+(f*36|0)>>2];c[d+(f*52|0)+4>>2]=c[b+(f*36|0)+4>>2];c[d+(f*52|0)+8>>2]=c[b+(f*36|0)+8>>2];c[d+(f*52|0)+12>>2]=c[b+(f*36|0)+12>>2];c[d+(f*52|0)+16>>2]=c[b+(f*36|0)+16>>2];c[d+(f*52|0)+20>>2]=c[b+(f*36|0)+20>>2];c[d+(f*52|0)+24>>2]=c[b+(f*36|0)+24>>2];c[d+(f*52|0)+32>>2]=c[b+(f*36|0)+32>>2];c[d+(f*52|0)+44>>2]=0;f=f+1|0}while((f|0)!=(a|0));return e|0}return 0}function bc(a,b,d){a=a|0;b=b|0;d=d|0;if(!a){d=0;return d|0}c[a+64>>2]=b;c[a+52>>2]=d;d=1;return d|0}function cc(a,b,d){a=a|0;b=b|0;d=d|0;if(!a){d=0;return d|0}c[a+60>>2]=b;c[a+48>>2]=d;d=1;return d|0}function dc(a,b,d){a=a|0;b=b|0;d=d|0;if(!a){d=0;return d|0}c[a+56>>2]=b;c[a+44>>2]=d;d=1;return d|0}function ec(a,b){a=a|0;b=b|0;var d=0;if(!a){a=0;return a|0}d=Eb(b)|0;if(!d){a=0;return a|0}Kb(d,a,0);Lb(d,c[a+8>>2]|0,0);if(!b)Ib(d,9);else Gb(d,8);Jb(d,1);Hb(d,10);a=d;return a|0}function fc(){return 4703}function gc(a){a=a|0;var b=0;b=Qc(1,84)|0;if(!b){a=0;return a|0}c[b+68>>2]=1;switch(a|0){case 0:{c[b+72>>2]=13;c[b+76>>2]=2;c[b+80>>2]=3;c[b+4>>2]=33;c[b+16>>2]=11;c[b>>2]=34;c[b+20>>2]=1;c[b+24>>2]=5;c[b+8>>2]=1;c[b+12>>2]=1;c[b+28>>2]=1;c[b+32>>2]=1;c[b+36>>2]=12;a=fd()|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}case 2:{c[b+72>>2]=14;c[b+76>>2]=4;c[b+80>>2]=5;c[b+4>>2]=35;c[b+16>>2]=13;c[b>>2]=36;c[b+8>>2]=2;c[b+12>>2]=2;c[b+20>>2]=2;c[b+24>>2]=6;c[b+28>>2]=2;c[b+32>>2]=2;c[b+36>>2]=14;a=Ye(1)|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}default:{Uc(b);a=0;return a|0}}Vb(b+44|0);a=b;return a|0}function hc(a){a=a|0;if(!a)return;Qi(a|0,0,8248)|0;c[a+8200>>2]=-1;c[a+8204>>2]=-1;c[a+8248>>2]=0;return}function ic(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;if(!((a|0)!=0&(b|0)!=0)){b=0;i=d;return b|0}if(!(c[a+68>>2]|0)){Ub(a+44|0,1,4709,d)|0;b=0;i=d;return b|0}else{Ua[c[a+24>>2]&7](c[a+40>>2]|0,b);b=1;i=d;return b|0}return 0}function jc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=i;i=i+16|0;if(!((a|0)!=0&(b|0)!=0)){a=0;i=e;return a|0}if(!(c[b+68>>2]|0)){Ub(b+44|0,1,4790,e)|0;a=0;i=e;return a|0}else{a=Za[c[b>>2]&63](a,c[b+40>>2]|0,d,b+44|0)|0;i=e;return a|0}return 0}function kc(a,b,d){a=a|0;b=b|0;d=d|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(!(c[a+68>>2]|0)){b=0;return b|0}b=Za[c[a+4>>2]&63](c[a+40>>2]|0,b,d,a+44|0)|0;return b|0}function lc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!a){e=0;return e|0}if(!(c[a+68>>2]|0)){e=0;return e|0}e=Qa[c[a+28>>2]&3](c[a+40>>2]|0,b,d,e,f,g,a+44|0)|0;return e|0}function mc(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;if(!((d|0)!=0&((a|0)!=0&(b|0)!=0&(e|0)!=0))){i=0;return i|0}if(!(c[a+68>>2]|0)){i=0;return i|0}i=Ya[c[a+8>>2]&3](c[a+40>>2]|0,d,e,f,g,h,i,j,k,b,a+44|0)|0;return i|0}function nc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!((a|0)!=0&(d|0)!=0&(f|0)!=0)){b=0;return b|0}if(!(c[a+68>>2]|0)){b=0;return b|0}b=Va[c[a+12>>2]&7](c[a+40>>2]|0,b,d,e,f,a+44|0)|0;return b|0}function oc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(!((a|0)!=0&(b|0)!=0)){e=0;return e|0}if(!(c[a+68>>2]|0)){e=0;return e|0}e=$a[c[a+32>>2]&3](c[a+40>>2]|0,b,d,a+44|0,e)|0;return e|0}function pc(a,b){a=a|0;b=b|0;if(!a){b=0;return b|0}b=Ra[c[a+36>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function qc(a){a=a|0;var b=0;b=Qc(1,84)|0;if(!b){a=0;return a|0}c[b+68>>2]=0;switch(a|0){case 0:{c[b+4>>2]=15;c[b+12>>2]=16;c[b>>2]=37;c[b+8>>2]=3;c[b+16>>2]=1;c[b+20>>2]=38;a=Xc()|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}case 2:{c[b+4>>2]=17;c[b+12>>2]=18;c[b>>2]=39;c[b+8>>2]=4;c[b+16>>2]=2;c[b+20>>2]=40;a=Ye(0)|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}default:{Uc(b);a=0;return a|0}}Vb(b+44|0);a=b;return a|0}function rc(b){b=b|0;if(!b)return;Qi(b|0,0,18708)|0;c[b+5592>>2]=6;c[b+18684>>2]=0;c[b+5596>>2]=64;c[b+5600>>2]=64;c[b+44>>2]=0;c[b+5612>>2]=-1;c[b+18188>>2]=1;c[b+18192>>2]=1;a[b+18688>>0]=0;c[b+18196>>2]=-1;c[b+18200>>2]=-1;g[b+4792>>2]=0.0;c[b+4788>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;c[b+18692>>2]=0;return}function sc(a,b,d){a=a|0;b=b|0;d=d|0;if(!((a|0)!=0&(b|0)!=0&(d|0)!=0)){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Za[c[a+20>>2]&63](c[a+40>>2]|0,b,d,a+44|0)|0;return b|0}function tc(a,b,d){a=a|0;b=b|0;d=d|0;if(!((a|0)!=0&(d|0)!=0)){d=0;return d|0}if(c[a+68>>2]|0){d=0;return d|0}d=Za[c[a>>2]&63](c[a+40>>2]|0,d,b,a+44|0)|0;return d|0}function uc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Ra[c[a+4>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function vc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Ra[c[a+12>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function wc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(!(c[a+68>>2]|0)){b=0;return b|0}b=Ra[c[a+16>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function xc(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;k=h<<2;i=_(k,h)|0;j=d+18704|0;h=e[j>>1]|0;b[j>>1]=(h&32768|0)==0?-32512:(h|256)&65535;c[d+5608>>2]=1;a[d+18690>>0]=2;j=Pc(i+k|0)|0;h=d+18696|0;c[h>>2]=j;if(!j){g=0;return g|0}Ui(j|0,f|0,i|0)|0;Ui((c[h>>2]|0)+i|0,g|0,k|0)|0;g=1;return g|0}function yc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!((d|0)!=0&((a|0)!=0&(f|0)!=0))){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Va[c[a+8>>2]&7](c[a+40>>2]|0,b,d,e,f,a+44|0)|0;return b|0}function zc(a){a=a|0;var b=0,d=0;if(!a)return;b=a+40|0;d=c[b>>2]|0;if(!(c[a+68>>2]|0))Ta[c[a+16>>2]&7](d);else Ta[c[a+20>>2]&7](d);c[b>>2]=0;Uc(a);return}function Ac(a,b,d){a=a|0;b=b|0;d=d|0;if(!a)return;Xa[c[a+72>>2]&15](c[a+40>>2]|0,b,d);return}function Bc(a){a=a|0;if(!a){a=0;return a|0}a=Wa[c[a+76>>2]&15](c[a+40>>2]|0)|0;return a|0}function Cc(a){a=a|0;var b=0,d=0;if(!a)return;b=c[a>>2]|0;d=c[b+48>>2]|0;if(d){Uc(d);b=c[a>>2]|0}Uc(b);c[a>>2]=0;return}function Dc(a){a=a|0;if(!a){a=0;return a|0}a=Wa[c[a+80>>2]&15](c[a+40>>2]|0)|0;return a|0}function Ec(a){a=a|0;var b=0;b=c[a>>2]|0;if(!b)return;bd(b);c[a>>2]=0;return}function Fc(a,b){a=a|0;b=b|0;return Gc(a,1048576,b)|0}function Gc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!a){b=0;return b|0}d=_h(a,(c|0)==0?4869:4872)|0;if(!d){b=0;return b|0}a=vb(b,c)|0;if(!a){Yh(d)|0;b=0;return b|0}else{Kb(a,d,6);fi(d,0,2)|0;b=ii(d)|0;fi(d,0,0)|0;Lb(a,b,((b|0)<0)<<31>>31);Gb(a,19);Ib(a,20);Jb(a,21);Hb(a,22);b=a;return b|0}return 0}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[d>>2]|0)+(c[d+8>>2]|0)|0;d=d+4|0;e=c[d>>2]|0;f=g-e|0;if((g|0)==(e|0)){g=-1;return g|0}g=f>>>0>b>>>0?b:f;Ui(a|0,e|0,g|0)|0;c[d>>2]=(c[d>>2]|0)+g;return g|0}function Ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+4|0;e=c[k>>2]|0;i=d+8|0;g=c[i>>2]|0;j=e-(c[d>>2]|0)|0;f=(g|0)==0?1:g;while(1)if((f-j|0)>>>0>>0)f=f<<1;else{h=f;break}if((h|0)!=(g|0)){e=Pc(h)|0;if(!e){b=-1;return b|0}f=c[d>>2]|0;if(f){Ui(e|0,f|0,j|0)|0;Uc(c[d>>2]|0)}c[d>>2]=e;e=e+j|0;c[k>>2]=e;c[i>>2]=h}Ui(e|0,a|0,b|0)|0;c[k>>2]=(c[k>>2]|0)+b;return b|0}function Jc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=(c[b>>2]|0)+(c[b+8>>2]|0)|0;b=b+4|0;d=c[b>>2]|0;e=f-d|0;if((f|0)==(d|0)){f=-1;return f|0}c[b>>2]=d+a;f=e>>>0>a>>>0?a:e;return f|0}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[d+8>>2]|0;c[d+4>>2]=(c[d>>2]|0)+(0>(b|0)|0==(b|0)&e>>>0>a>>>0?a:e);return 1}function Lc(a,b,c){a=a|0;b=b|0;c=c|0;b=ci(a,1,b,c)|0;return ((b|0)!=0?b:-1)|0}function Mc(a,b,c){a=a|0;b=b|0;c=c|0;return ki(a,1,b,c)|0}function Nc(a,b,c){a=a|0;b=b|0;c=c|0;c=(fi(c,a,1)|0)==0;C=c?b:-1;return (c?a:-1)|0}function Oc(a,b,c){a=a|0;b=b|0;c=c|0;return (fi(c,a,0)|0)==0|0}function Pc(a){a=a|0;if(!a)a=0;else a=Fi(a)|0;return a|0}function Qc(a,b){a=a|0;b=b|0;if(!b)a=0;else a=Hi(a,b)|0;return a|0}function Rc(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;do if(a)if(!(Ji(b,16,a)|0)){b=c[b>>2]|0;break}else{c[b>>2]=0;b=0;break}else b=0;while(0);i=d;return b|0}function Sc(a){a=a|0;Gi(a);return}function Tc(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Ii(a,b)|0;return b|0}function Uc(a){a=a|0;Gi(a);return}function Vc(a){a=a|0;var b=0,d=0;b=696;while(1){d=c[b>>2]|0;if((d|0)==-1|(d|0)==(a|0))break;else b=b+12|0}return b+4|0}function Wc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0))return;c[a+172>>2]=c[b+4>>2];c[a+168>>2]=c[b>>2];return}function Xc(){var b=0,d=0;b=Qc(1,208)|0;if(!b){b=0;return b|0}c[b>>2]=0;d=b+184|0;a[d>>0]=a[d>>0]&-3;d=Pc(1e3)|0;c[b+44>>2]=d;if(!d){Yc(b);d=0;return d|0}c[b+48>>2]=1e3;d=qg()|0;c[b+192>>2]=d;if(!d){Yc(b);d=0;return d|0}d=qg()|0;c[b+188>>2]=d;if(d){d=b;return d|0}Yc(b);d=0;return d|0}function Yc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;if(!(c[b>>2]|0)){d=b+36|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0}d=b+24|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0;c[b+28>>2]=0}d=b+44|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0;c[b+48>>2]=0}}else{d=b+12|0;e=c[d>>2]|0;if(e){sd(e);Uc(c[d>>2]|0);c[d>>2]=0}d=b+16|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0;c[b+20>>2]=0}}Yf(c[b+204>>2]|0);d=b+88|0;h=b+164|0;e=c[h>>2]|0;if(e){f=_(c[b+112>>2]|0,c[b+116>>2]|0)|0;if(f){g=0;while(1){sd(e);g=g+1|0;if((g|0)==(f|0))break;else e=e+5640|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}h=b+124|0;e=c[h>>2]|0;if(e){i=b+120|0;f=c[i>>2]|0;if(f){g=0;while(1){e=c[e+(g<<3)>>2]|0;if(e){Uc(e);f=c[i>>2]|0}g=g+1|0;if(g>>>0>=f>>>0)break;e=c[h>>2]|0}e=c[h>>2]|0}c[i>>2]=0;Uc(e);c[h>>2]=0}i=b+144|0;Uc(c[i>>2]|0);c[i>>2]=0;c[b+128>>2]=0;i=b+108|0;Uc(c[i>>2]|0);c[i>>2]=0;if(!(a[b+184>>0]&2)){i=b+176|0;Uc(c[i>>2]|0);c[i>>2]=0}e=d+100|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));i=b+188|0;rg(c[i>>2]|0);c[i>>2]=0;rg(c[b+192>>2]|0);c[i>>2]=0;i=b+196|0;bd(c[i>>2]|0);c[i>>2]=0;i=b+80|0;Zb(c[i>>2]|0);c[i>>2]=0;i=b+84|0;Zb(c[i>>2]|0);c[i>>2]=0;Uc(b);return}function Zc(d,e,f,j){d=d|0;e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0;ka=i;i=i+320|0;fa=ka+296|0;ea=ka+288|0;ja=ka+280|0;ia=ka+272|0;ha=ka+264|0;ga=ka+256|0;da=ka+248|0;ca=ka+240|0;W=ka+232|0;U=ka+224|0;T=ka+216|0;S=ka+208|0;R=ka+200|0;Q=ka+192|0;P=ka+184|0;v=ka+176|0;u=ka+168|0;t=ka+160|0;s=ka+152|0;q=ka+144|0;I=ka+136|0;H=ka+128|0;N=ka+112|0;G=ka+104|0;F=ka+96|0;E=ka+88|0;C=ka+80|0;B=ka+72|0;A=ka+64|0;z=ka+56|0;y=ka+48|0;x=ka+32|0;w=ka+24|0;p=ka+16|0;m=ka+8|0;l=ka;K=ka+309|0;L=ka+300|0;if(!((d|0)!=0&(e|0)!=0&(f|0)!=0)){j=0;i=ka;return j|0}ba=e+5592|0;k=c[ba>>2]|0;if((k+-1|0)>>>0>32){c[l>>2]=k;c[l+4>>2]=33;Ub(j,1,4875,l)|0;j=0;i=ka;return j|0}$=d+112|0;c[$>>2]=1;aa=d+116|0;c[aa>>2]=1;J=e+18704|0;do if(!(b[J>>1]|0)){switch(c[e+18676>>2]|0){case 1:{b[J>>1]=3;c[e+18700>>2]=1302083;c[e+18680>>2]=1041666;l=1;break}case 2:{b[J>>1]=3;c[e+18700>>2]=651041;c[e+18680>>2]=520833;l=1;break}case 3:{b[J>>1]=4;c[e+18700>>2]=1302083;c[e+18680>>2]=1041666;l=1;break}default:l=0}k=c[e+18684>>2]|0;a:do if((k|0)>=4)if((k|0)<33024){switch(k|0){case 4:break;default:{Z=13;break a}}b[J>>1]=4;break}else{switch(k|0){case 33024:break;default:{Z=13;break a}}b[J>>1]=-32512;break}else{switch(k|0){case 3:break;default:{Z=13;break a}}b[J>>1]=3}while(0);if((Z|0)==13?(l|0)==0:0)break;Ub(j,2,4931,m)|0}while(0);D=e+18700|0;k=c[D>>2]|0;do if((k|0)<1){r=+g[e+4792+((c[e+4788>>2]|0)+-1<<2)>>2];if(r>0.0){X=c[f+24>>2]|0;p=_(c[X+8>>2]|0,c[f+16>>2]|0)|0;p=_(p,c[X+12>>2]|0)|0;la=+((_(p,c[X+24>>2]|0)|0)>>>0);c[D>>2]=~~+M(+(la/(r*8.0*+((c[X>>2]|0)>>>0)*+((c[X+4>>2]|0)>>>0))));break}else{c[D>>2]=0;break}}else{o=c[f+24>>2]|0;X=_(c[o+8>>2]|0,c[f+16>>2]|0)|0;X=_(X,c[o+12>>2]|0)|0;r=+((_(X,c[o+24>>2]|0)|0)>>>0);k=_(k<<3,c[o>>2]|0)|0;r=r/+((_(k,c[o+4>>2]|0)|0)>>>0);o=e+4788|0;k=c[o>>2]|0;if(k){m=k;k=0;n=0;while(1){l=e+4792+(n<<2)|0;if(+g[l>>2]>2]=r;l=c[o>>2]|0;k=1}else l=m;n=n+1|0;if(n>>>0>=l>>>0)break;else m=l}if(k)Ub(j,2,5068,p)|0}}while(0);k=b[J>>1]|0;b:do if((k+-3&65535)>=4){if(k<<16>>16==7){Ub(j,2,7228,q)|0;b[J>>1]=0;k=0;break}if((k+-256&65535)<524){Ub(j,2,7283,s)|0;b[J>>1]=0;k=0;break}if((k+-1024&65535)<1180){Ub(j,2,7331,t)|0;b[J>>1]=0;k=0;break}if(k<<16>>16<=-1)switch(k<<16>>16){case -32512:{k=-32512;break b}case -32768:{Ub(j,2,7373,u)|0;b[J>>1]=0;k=0;break b}default:{Ub(j,2,7461,v)|0;b[J>>1]=0;k=0;break b}}}else{if((k+-5&65535)<2){Ub(j,2,5160,w)|0;b[J>>1]=0;k=0;break}c[e>>2]=0;c[e+12>>2]=1;c[e+16>>2]=1;a[e+18689>>0]=67;a[e+18688>>0]=1;c[e+4>>2]=0;c[e+8>>2]=0;c[e+18180>>2]=0;c[e+18184>>2]=0;c[e+5596>>2]=32;c[e+5600>>2]=32;c[e+5604>>2]=0;c[e+5612>>2]=-1;c[e+18188>>2]=1;c[e+18192>>2]=1;c[e+5608>>2]=1;l=e+4788|0;m=c[l>>2]|0;if((m|0)>1){la=+g[e+4792+(m+-1<<2)>>2];c[x>>2]=m;h[x+8>>3]=la;Ub(j,2,5222,x)|0;c[e+4792>>2]=c[e+4792+((c[l>>2]|0)+-1<<2)>>2];c[l>>2]=1;k=b[J>>1]|0}c:do switch(k&65535|0){case 3:{k=c[ba>>2]|0;if((k|0)>6){c[y>>2]=k+1;Ub(j,2,5395,y)|0;c[ba>>2]=6;k=6}break}case 4:{k=c[ba>>2]|0;if((k|0)<2){c[z>>2]=k+1;Ub(j,2,5541,z)|0;c[ba>>2]=1;k=1;break c}if((k|0)>7){c[A>>2]=k+1;Ub(j,2,5695,A)|0;c[ba>>2]=7;k=7}break}default:k=c[ba>>2]|0}while(0);l=e+40|0;c[l>>2]=c[l>>2]|1;l=e+5620|0;c[l>>2]=k+-1;if((k|0)>1){k=0;do{c[e+5624+(k<<2)>>2]=256;c[e+5756+(k<<2)>>2]=256;k=k+1|0}while((k|0)<(c[l>>2]|0))}c[e+44>>2]=4;if((b[J>>1]|0)==4){k=c[ba>>2]|0;c[e+96>>2]=1;c[e+48>>2]=0;c[e+52>>2]=0;c[e+56>>2]=1;X=k+-1|0;c[e+60>>2]=X;c[e+64>>2]=3;c[e+80>>2]=4;c[e+244>>2]=1;c[e+196>>2]=X;c[e+200>>2]=0;c[e+204>>2]=1;c[e+208>>2]=k;c[e+212>>2]=3;c[e+228>>2]=4;k=2}else k=0;c[e+4784>>2]=k;c[e+20>>2]=1;k=c[D>>2]|0;if((k|0)>=1){if((k|0)>1302083){Ub(j,2,5998,C)|0;c[D>>2]=1302083}}else{c[D>>2]=1302083;Ub(j,2,5849,B)|0}k=e+18680|0;l=c[k>>2]|0;if((l|0)>=1){if((l|0)>1041666){Ub(j,2,6320,F)|0;c[k>>2]=1041666}}else{c[k>>2]=1041666;Ub(j,2,6171,E)|0}l=c[f+16>>2]|0;n=c[f+24>>2]|0;o=c[n+8>>2]|0;k=_(o,l)|0;p=c[n+12>>2]|0;k=_(k,p)|0;la=+((_(k,c[n+24>>2]|0)|0)>>>0);k=_(c[D>>2]<<3,c[n>>2]|0)|0;g[e+4792>>2]=la/+((_(k,c[n+4>>2]|0)|0)>>>0);k=b[J>>1]|0;d:do if((l|0)==3){l=n+28|0;m=n+32|0;if(!((c[l>>2]|0)!=12|c[m>>2])){l=n+80|0;m=n+84|0;if(!((c[l>>2]|0)!=12|c[m>>2])){l=n+132|0;m=n+136|0;if(!((c[l>>2]|0)!=12|c[m>>2])){switch(k&65535|0){case 3:{if(p>>>0>1080|o>>>0>2048){c[H>>2]=o;c[H+4>>2]=p;Ub(j,2,6892,H)|0;break d}break}case 4:{if(p>>>0>2160|o>>>0>4096){c[I>>2]=o;c[I+4>>2]=p;Ub(j,2,7063,I)|0;break d}break}default:{}}break b}else{p=l;k=m;l=2}}else{p=l;k=m;l=1}}else{p=l;k=m;l=0};a[K>>0]=a[6659]|0;a[K+1>>0]=a[6660]|0;a[K+2>>0]=a[6661]|0;a[K+3>>0]=a[6662]|0;a[K+4>>0]=a[6663]|0;a[K+5>>0]=a[6664]|0;a[K+6>>0]=a[6665]|0;m=L;n=6666;o=m+9|0;do{a[m>>0]=a[n>>0]|0;m=m+1|0;n=n+1|0}while((m|0)<(o|0));X=(c[k>>2]|0)!=0?K:L;L=c[p>>2]|0;c[N>>2]=l;c[N+4>>2]=L;c[N+8>>2]=X;Ub(j,2,6675,N)|0}else{c[G>>2]=l;Ub(j,2,6493,G)|0}while(0);b[J>>1]=0;k=0}while(0);c[d+168>>2]=c[e+18680>>2];X=d+88|0;b[X>>1]=k;N=d+181|0;K=a[N>>0]&-2|c[e+20>>2]&1;a[N>>0]=K;L=e+24|0;K=(c[L>>2]&255)<<1&2|K&-3;a[N>>0]=K;a[N>>0]=K&-5|(c[e+28>>2]&255)<<2&4;do if((c[L>>2]|0)!=0?(O=e+32|0,(c[O>>2]|0)!=0):0){k=_((c[e+4788>>2]|0)*12|0,c[ba>>2]|0)|0;l=Pc(k)|0;c[d+176>>2]=l;if(l){Ui(l|0,c[O>>2]|0,k|0)|0;break}Ub(j,1,7520,P)|0;j=0;i=ka;return j|0}while(0);n=d+100|0;c[n>>2]=c[e+12>>2];o=d+104|0;c[o>>2]=c[e+16>>2];m=d+92|0;c[m>>2]=c[e+4>>2];p=d+96|0;c[p>>2]=c[e+8>>2];l=e+36|0;k=c[l>>2]|0;do if(!k){k=fc()|0;l=Pc((wi(k)|0)+29|0)|0;c[d+108>>2]=l;if(l){c[S>>2]=7697;c[S+4>>2]=k;ni(l,7692,S)|0;break}Ub(j,1,7646,R)|0;j=0;i=ka;return j|0}else{k=Pc((wi(k)|0)+1|0)|0;c[d+108>>2]=k;if(k){vi(k,c[l>>2]|0)|0;break}Ub(j,1,7592,Q)|0;j=0;i=ka;return j|0}while(0);k=(c[f+8>>2]|0)-(c[m>>2]|0)|0;l=c[f+12>>2]|0;if(!(c[e>>2]|0)){c[n>>2]=k;c[o>>2]=l-(c[p>>2]|0)}else{S=c[n>>2]|0;c[$>>2]=(k+-1+S|0)/(S|0)|0;S=c[o>>2]|0;c[aa>>2]=(l+-1-(c[p>>2]|0)+S|0)/(S|0)|0}if(a[e+18688>>0]|0){a[d+180>>0]=a[e+18689>>0]|0;a[N>>0]=a[N>>0]|8}S=Qc(_(c[aa>>2]|0,c[$>>2]|0)|0,5640)|0;L=d+164|0;c[L>>2]=S;if(!S){Ub(j,1,7726,T)|0;j=0;i=ka;return j|0}K=e+4784|0;A=c[K>>2]|0;do if(A){w=e+48|0;B=c[ba>>2]|0;C=c[f+16>>2]|0;D=c[e+4788>>2]|0;E=_(C,B)|0;F=Qc(_(E,D)|0,4)|0;if(!F){Ub(j,1,7780,U)|0;break}m=c[w>>2]|0;s=e+60|0;k=c[s>>2]|0;if(m>>>0>>0){q=_(m,C)|0;t=e+52|0;u=e+64|0;v=e+56|0;l=c[u>>2]|0;while(1){n=c[t>>2]|0;if(n>>>0>>0){k=c[v>>2]|0;p=n;o=n+q|0;while(1){if(!k)k=0;else{l=o;n=0;while(1){c[F+(l<<2)>>2]=1;n=n+1|0;k=c[v>>2]|0;if(n>>>0>=k>>>0)break;else l=l+E|0}l=c[u>>2]|0}p=p+1|0;if(p>>>0>=l>>>0)break;else o=o+1|0}k=c[s>>2]|0}m=m+1|0;if(m>>>0>=k>>>0)break;else q=q+C|0}}if(A>>>0>1){z=1;do{k=w;w=w+148|0;v=c[k+8>>2]|0;u=k+156|0;n=c[u>>2]|0;v=n>>>0>v>>>0?v:0;o=c[w>>2]|0;x=k+160|0;l=c[x>>2]|0;if(o>>>0>>0){q=_(o,C)|0;y=k+152|0;s=k+164|0;t=_(v,E)|0;m=c[s>>2]|0;k=n;while(1){n=c[y>>2]|0;if(n>>>0>>0){p=n;n=n+q|0;while(1){if(v>>>0>>0){l=n+t|0;m=v;while(1){c[F+(l<<2)>>2]=1;m=m+1|0;k=c[u>>2]|0;if(m>>>0>=k>>>0)break;else l=l+E|0}m=c[s>>2]|0}p=p+1|0;if(p>>>0>=m>>>0)break;else n=n+1|0}l=c[x>>2]|0}o=o+1|0;if(o>>>0>=l>>>0)break;else q=q+C|0}}z=z+1|0}while((z|0)!=(A|0))}if((D|0)!=0?(V=(C|0)==0,(B|0)!=0):0){l=0;q=0;k=0;do{if(!V){p=l;o=0;while(1){m=0;n=p;while(1){k=(c[F+(n<<2)>>2]|0)!=1|k;m=m+1|0;if((m|0)==(C|0))break;else n=n+1|0}o=o+1|0;if((o|0)==(B|0))break;else p=p+C|0}l=E+l|0}q=q+1|0}while((q|0)!=(D|0));if(k)Ub(j,1,7828,W)|0}Uc(F)}while(0);e:do if(_(c[aa>>2]|0,c[$>>2]|0)|0){w=e+4788|0;x=e+40|0;y=e+44|0;z=e+18690|0;A=f+16|0;l=e+18696|0;B=f+24|0;C=e+5596|0;D=e+5600|0;E=e+5604|0;F=e+5608|0;G=e+5612|0;H=e+5616|0;I=e+5620|0;J=0;f:while(1){q=c[L>>2]|0;s=q+(J*5640|0)|0;W=c[w>>2]|0;k=q+(J*5640|0)+8|0;c[k>>2]=W;if(W){m=((b[X>>1]|0)+-3&65535)<4;o=0;do{n=(a[N>>0]&4)==0;do if(!m)if(n){c[q+(J*5640|0)+20+(o<<2)>>2]=c[e+4792+(o<<2)>>2];break}else{c[q+(J*5640|0)+5184+(o<<2)>>2]=c[e+5192+(o<<2)>>2];break}else{if(!n)c[q+(J*5640|0)+5184+(o<<2)>>2]=c[e+5192+(o<<2)>>2];c[q+(J*5640|0)+20+(o<<2)>>2]=c[e+4792+(o<<2)>>2]}while(0);o=o+1|0}while(o>>>0<(c[k>>2]|0)>>>0)}c[s>>2]=c[x>>2];c[q+(J*5640|0)+4>>2]=c[y>>2];p=q+(J*5640|0)+16|0;c[p>>2]=a[z>>0];k=q+(J*5640|0)+5636|0;m=a[k>>0]|0;a[k>>0]=m&-5;if(!(c[K>>2]|0))c[q+(J*5640|0)+420>>2]=0;else{a[k>>0]=m|4;m=c[K>>2]|0;if(!m)k=0;else{n=J+1|0;o=0;k=0;do{if((n|0)==(c[e+48+(o*148|0)+48>>2]|0)){c[q+(J*5640|0)+424+(k*148|0)>>2]=c[e+48+(k*148|0)>>2];c[q+(J*5640|0)+424+(k*148|0)+4>>2]=c[e+48+(k*148|0)+4>>2];c[q+(J*5640|0)+424+(k*148|0)+8>>2]=c[e+48+(k*148|0)+8>>2];c[q+(J*5640|0)+424+(k*148|0)+12>>2]=c[e+48+(k*148|0)+12>>2];c[q+(J*5640|0)+424+(k*148|0)+16>>2]=c[e+48+(k*148|0)+16>>2];c[q+(J*5640|0)+424+(k*148|0)+32>>2]=c[e+48+(k*148|0)+32>>2];c[q+(J*5640|0)+424+(k*148|0)+48>>2]=c[e+48+(k*148|0)+48>>2];k=k+1|0}o=o+1|0}while(o>>>0>>0)}c[q+(J*5640|0)+420>>2]=k+-1}W=Qc(c[A>>2]|0,1080)|0;v=q+(J*5640|0)+5584|0;c[v>>2]=W;if(!W){Z=149;break}do if(!(c[l>>2]|0)){g:do if((c[p>>2]|0)==1){k=c[A>>2]|0;if(k>>>0<=2){n=k;break}m=c[B>>2]|0;k=c[m>>2]|0;do if((k|0)==(c[m+52>>2]|0)){if((k|0)!=(c[m+104>>2]|0))break;k=c[m+4>>2]|0;if((k|0)!=(c[m+56>>2]|0))break;if((k|0)==(c[m+108>>2]|0)){Z=175;break g}}while(0);Ub(j,2,8224,fa)|0;c[p>>2]=0;Z=175}else Z=175;while(0);if((Z|0)==175){Z=0;n=c[A>>2]|0}if(!n)break;k=c[B>>2]|0;m=0;do{if(!(c[k+(m*52|0)+32>>2]|0))c[(c[v>>2]|0)+(m*1080|0)+1076>>2]=1<<(c[k+(m*52|0)+24>>2]|0)+-1;m=m+1|0}while(m>>>0>>0);Y=n;Z=166}else{n=c[A>>2]|0;n=_(n<<2,n)|0;k=Pc(n)|0;o=(c[l>>2]|0)+n|0;if(!k){Z=152;break f}c[p>>2]=2;m=Pc(n)|0;c[q+(J*5640|0)+5608>>2]=m;if(!m){Z=154;break f}Ui(m|0,c[l>>2]|0,n|0)|0;Ui(k|0,c[l>>2]|0,n|0)|0;m=Pc(n)|0;n=q+(J*5640|0)+5604|0;c[n>>2]=m;if(!m){Z=156;break f}if(!(Vg(k,m,c[A>>2]|0)|0)){Z=158;break f}m=Pc(c[A>>2]<<3)|0;c[q+(J*5640|0)+5600>>2]=m;if(!m){Z=160;break f}If(m,c[A>>2]|0,c[n>>2]|0);Uc(k);k=c[A>>2]|0;if(k){m=c[v>>2]|0;n=0;do{c[m+(n*1080|0)+1076>>2]=c[o+(n<<2)>>2];n=n+1|0}while(n>>>0>>0)}if(!(_c(s,f)|0)){Z=167;break f}Y=c[A>>2]|0;Z=166}while(0);if((Z|0)==166?(Z=0,(Y|0)!=0):0){u=0;do{s=c[v>>2]|0;t=s+(u*1080|0)|0;c[t>>2]=c[x>>2]&1;n=c[ba>>2]|0;o=s+(u*1080|0)+4|0;c[o>>2]=n;k=c[C>>2]|0;if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+8>>2]=k;k=c[D>>2]|0;if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+12>>2]=k;c[s+(u*1080|0)+16>>2]=c[E>>2];W=c[F>>2]|0;c[s+(u*1080|0)+20>>2]=(W|0)==0&1;c[s+(u*1080|0)+24>>2]=(W|0)!=0?2:0;c[s+(u*1080|0)+804>>2]=2;if((u|0)==(c[G>>2]|0))k=c[H>>2]|0;else k=0;c[s+(u*1080|0)+808>>2]=k;do if(!(c[x>>2]&1)){if(!n)break;else k=0;do{c[s+(u*1080|0)+812+(k<<2)>>2]=15;c[s+(u*1080|0)+944+(k<<2)>>2]=15;k=k+1|0}while(k>>>0<(c[o>>2]|0)>>>0)}else{if((n|0)>0){o=n;q=0}else break;while(1){p=o;o=o+-1|0;k=c[I>>2]|0;do if((q|0)<(k|0)){k=c[e+5624+(q<<2)>>2]|0;if((k|0)<1)c[s+(u*1080|0)+812+(o<<2)>>2]=1;else{if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+812+(o<<2)>>2]=k}k=c[e+5756+(q<<2)>>2]|0;if((k|0)<1){c[s+(u*1080|0)+944+(o<<2)>>2]=1;break}if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+944+(o<<2)>>2]=k}else{W=k+-1|0;m=q-W|0;k=c[e+5624+(W<<2)>>2]>>m;m=c[e+5756+(W<<2)>>2]>>m;if((k|0)<1)c[s+(u*1080|0)+812+(o<<2)>>2]=1;else{if((k|0)>1){n=0;do{k=k>>1;n=n+1|0}while((k|0)>1);k=n}else k=0;c[s+(u*1080|0)+812+(o<<2)>>2]=k}if((m|0)<1){c[s+(u*1080|0)+944+(o<<2)>>2]=1;break}if((m|0)>1){k=0;do{m=m>>1;k=k+1|0}while((m|0)>1)}else k=0;c[s+(u*1080|0)+944+(o<<2)>>2]=k}while(0);if((p|0)<=1)break;else q=q+1|0}}while(0);Mg(t,c[(c[B>>2]|0)+(u*52|0)+24>>2]|0);u=u+1|0}while(u>>>0<(c[A>>2]|0)>>>0)}J=J+1|0;if(J>>>0>=(_(c[aa>>2]|0,c[$>>2]|0)|0)>>>0)break e}if((Z|0)==149){Ub(j,1,7867,ca)|0;j=0;i=ka;return j|0}else if((Z|0)==152){Ub(j,1,7931,da)|0;j=0;i=ka;return j|0}else if((Z|0)==154){Uc(k);Ub(j,1,7974,ga)|0;j=0;i=ka;return j|0}else if((Z|0)==156){Uc(k);Ub(j,1,8032,ha)|0;j=0;i=ka;return j|0}else if((Z|0)==158){Uc(k);Ub(j,1,8092,ia)|0;j=0;i=ka;return j|0}else if((Z|0)==160){Uc(k);Ub(j,1,8140,ja)|0;j=0;i=ka;return j|0}else if((Z|0)==167){Ub(j,1,8190,ea)|0;j=0;i=ka;return j|0}}else l=e+18696|0;while(0);k=c[l>>2]|0;if(!k){j=1;i=ka;return j|0}Uc(k);c[l>>2]=0;j=1;i=ka;return j|0}function _c(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((c[b+16>>2]|0)!=2){b=1;return b|0}m=b+5604|0;r=b+5616|0;e=c[r>>2]|0;n=b+5620|0;do if(c[m>>2]|0){do if((e|0)==(c[n>>2]|0)){e=e+10|0;c[n>>2]=e;f=b+5612|0;e=Tc(c[f>>2]|0,e*20|0)|0;if(e){c[f>>2]=e;q=c[r>>2]|0;Qi(e+(q*20|0)|0,0,((c[n>>2]|0)-q|0)*20|0)|0;e=c[r>>2]|0;break}Uc(c[f>>2]|0);c[f>>2]=0;c[n>>2]=0;c[r>>2]=0;b=0;return b|0}else f=b+5612|0;while(0);k=c[f>>2]|0;i=k+(e*20|0)|0;l=k+(e*20|0)+12|0;f=c[l>>2]|0;if(f){Uc(f);c[l>>2]=0}c[k+(e*20|0)+8>>2]=1;c[k+(e*20|0)+4>>2]=1;c[i>>2]=2;f=c[d+16>>2]|0;f=_(f,f)|0;h=f<<2;j=Pc(h)|0;c[l>>2]=j;if(!j){b=0;return b|0}else{Xa[c[768+(c[i>>2]<<2)>>2]&15](c[m>>2]|0,j,f);c[k+(e*20|0)+16>>2]=h;e=(c[r>>2]|0)+1|0;c[r>>2]=e;j=2;break}}else{j=1;i=0}while(0);do if((e|0)==(c[n>>2]|0)){f=e+10|0;c[n>>2]=f;e=b+5612|0;f=Tc(c[e>>2]|0,f*20|0)|0;if(!f){Uc(c[e>>2]|0);c[e>>2]=0;c[n>>2]=0;c[r>>2]=0;b=0;return b|0}else{c[e>>2]=f;h=c[r>>2]|0;Qi(f+(h*20|0)|0,0,((c[n>>2]|0)-h|0)*20|0)|0;if(!i){i=0;break}i=f+((h+-1|0)*20|0)|0;break}}else e=b+5612|0;while(0);m=c[e>>2]|0;n=c[r>>2]|0;q=m+(n*20|0)|0;o=m+(n*20|0)+12|0;e=c[o>>2]|0;if(e){Uc(e);c[o>>2]=0}p=j+1|0;c[m+(n*20|0)+8>>2]=j;c[m+(n*20|0)+4>>2]=2;c[q>>2]=2;d=d+16|0;e=c[d>>2]|0;f=e<<2;l=Pc(f)|0;c[o>>2]=l;if(!l){b=0;return b|0}h=Pc(f)|0;if(!h){Uc(c[o>>2]|0);c[o>>2]=0;b=0;return b|0}if(e){j=0;k=h;l=c[b+5584>>2]|0;while(1){g[k>>2]=+(c[l+1076>>2]|0);j=j+1|0;if((j|0)==(e|0))break;else{k=k+4|0;l=l+1080|0}}}Xa[c[768+(c[q>>2]<<2)>>2]&15](h,c[o>>2]|0,e);Uc(h);c[m+(n*20|0)+16>>2]=f;c[r>>2]=(c[r>>2]|0)+1;j=b+5628|0;e=c[j>>2]|0;h=b+5632|0;do if((e|0)==(c[h>>2]|0)){e=e+10|0;c[h>>2]=e;f=b+5624|0;e=Tc(c[f>>2]|0,e*20|0)|0;if(e){c[f>>2]=e;b=c[j>>2]|0;Qi(e+(b*20|0)|0,0,((c[h>>2]|0)-b|0)*20|0)|0;e=c[j>>2]|0;break}Uc(c[f>>2]|0);c[f>>2]=0;c[h>>2]=0;c[j>>2]=0;b=0;return b|0}else f=b+5624|0;while(0);b=c[f>>2]|0;c[b+(e*20|0)+8>>2]=i;r=b+(e*20|0)+16|0;a[r>>0]=a[r>>0]|1;c[b+(e*20|0)+4>>2]=c[d>>2];c[b+(e*20|0)>>2]=p;c[b+(e*20|0)+12>>2]=q;c[j>>2]=(c[j>>2]|0)+1;b=1;return b|0}function $c(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ad(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=Xb()|0;k=b+80|0;c[k>>2]=j;if(!j){k=0;return k|0}f=b+192|0;if((sg(c[f>>2]|0,23,e)|0)!=0?(sg(c[f>>2]|0,24,e)|0)!=0:0){h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}}else vg(h);f=b+188|0;if((sg(c[f>>2]|0,25,e)|0)!=0?(sg(c[f>>2]|0,26,e)|0)!=0:0){h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}}else vg(h);f=Xb()|0;c[d>>2]=f;if(!f){k=0;return k|0}$b(c[k>>2]|0,f);f=_(c[b+116>>2]|0,c[b+112>>2]|0)|0;i=b+196|0;c[(c[i>>2]|0)+36>>2]=f;f=Qc(f,40)|0;g=c[i>>2]|0;c[g+40>>2]=f;if(!f){k=0;return k|0}if(!(c[g+36>>2]|0)){k=1;return k|0}h=0;while(1){c[f+(h*40|0)+28>>2]=100;c[f+(h*40|0)+20>>2]=0;k=Qc(100,24)|0;g=c[i>>2]|0;f=c[g+40>>2]|0;c[f+(h*40|0)+24>>2]=k;h=h+1|0;if(!k){f=0;g=30;break}if(h>>>0>=(c[g+36>>2]|0)>>>0){f=1;g=30;break}}if((g|0)==30)return f|0}Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}function bd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if(!a)return;b=a+28|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}h=a+40|0;b=c[h>>2]|0;if(b){g=a+36|0;if(c[g>>2]|0){d=b;f=0;do{e=c[d+(f*40|0)+36>>2]|0;if(e){Uc(e);b=c[h>>2]|0;c[b+(f*40|0)+36>>2]=0;d=b}e=c[d+(f*40|0)+16>>2]|0;if(e){Uc(e);b=c[h>>2]|0;c[b+(f*40|0)+16>>2]=0;d=b}e=c[d+(f*40|0)+24>>2]|0;if(e){Uc(e);d=c[h>>2]|0;c[d+(f*40|0)+24>>2]=0;b=d}f=f+1|0}while(f>>>0<(c[g>>2]|0)>>>0)}Uc(b);c[h>>2]=0}Uc(a);return}function cd(d,e,f,g,h,j,k,l,m,n,o){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;Da=i;i=i+256|0;Ca=Da+200|0;Ba=Da+192|0;za=Da+184|0;ya=Da+176|0;pa=Da+168|0;oa=Da+160|0;na=Da+152|0;ma=Da+144|0;la=Da+136|0;ka=Da+128|0;ia=Da+120|0;ha=Da+112|0;wa=Da+104|0;ua=Da+96|0;ga=Da+88|0;fa=Da+80|0;ea=Da+72|0;va=Da+64|0;da=Da+56|0;ca=Da+48|0;sa=Da+40|0;ra=Da+32|0;qa=Da+24|0;ja=Da+16|0;ba=Da+8|0;aa=Da;V=Da+240|0;T=Da+236|0;X=Da+232|0;Z=Da+228|0;$=Da+224|0;U=Da+220|0;Y=Da+216|0;S=Da+212|0;W=Da+208|0;c[S>>2]=65424;Aa=d+8|0;a:do switch(c[Aa>>2]|0){case 256:{c[S>>2]=65497;p=d+76|0;xa=117;break}case 8:{ta=d+76|0;if(!(a[ta>>0]&1)){O=d+200|0;P=d+164|0;Q=d+72|0;R=d+24|0;B=d+196|0;D=d+112|0;E=d+116|0;G=V+2|0;H=V+6|0;I=V+7|0;J=d+16|0;K=d+20|0;L=d+64|0;p=65424;b:while(1){c:do if((p|0)!=65427){while(1){A=Qb(n)|0;if((A|0)==0&(C|0)==0){xa=7;break}if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=9;break b}qb(c[J>>2]|0,W,2);if((c[W>>2]|0)>>>0<2){xa=11;break b}if((c[S>>2]|0)==32896?(A=Qb(n)|0,(A|0)==0&(C|0)==0):0){xa=14;break}s=c[Aa>>2]|0;p=c[W>>2]|0;if(s&16)c[R>>2]=-2-p+(c[R>>2]|0);q=p+-2|0;c[W>>2]=q;p=c[S>>2]|0;r=784;while(1){A=c[r>>2]|0;if((A|0)==0|(A|0)==(p|0)){y=r;break}else r=r+12|0}if(!(c[r+4>>2]&s)){xa=20;break b}if(q>>>0>(c[K>>2]|0)>>>0){A=Qb(n)|0;z=C;if(0>(z|0)|0==(z|0)&q>>>0>A>>>0){xa=24;break b}p=Tc(c[J>>2]|0,c[W>>2]|0)|0;if(!p){xa=26;break b}c[J>>2]=p;q=c[W>>2]|0;c[K>>2]=q}else p=c[J>>2]|0;q=Mb(n,p,q,o)|0;if((q|0)!=(c[W>>2]|0)){xa=29;break b}p=c[r+8>>2]|0;if(!p){xa=31;break b}if(!(Za[p&63](d,c[J>>2]|0,q,o)|0)){xa=33;break b}r=c[O>>2]|0;q=c[B>>2]|0;v=c[y>>2]|0;w=Pb(n)|0;x=c[W>>2]|0;w=w-x+-4|0;x=x+4|0;q=q+40|0;u=c[q>>2]|0;p=c[u+(r*40|0)+20>>2]|0;s=u+(r*40|0)+28|0;t=c[s>>2]|0;if((p+1|0)>>>0>t>>>0){t=~~(+(t>>>0)+100.0)>>>0;c[s>>2]=t;s=Tc(c[u+(r*40|0)+24>>2]|0,t*24|0)|0;t=c[q>>2]|0;p=t+(r*40|0)+24|0;if(!s){xa=41;break b}c[p>>2]=s;q=t;p=c[t+(r*40|0)+20>>2]|0}else{q=u;s=c[u+(r*40|0)+24>>2]|0}b[s+(p*24|0)>>1]=v;A=s+(p*24|0)+8|0;c[A>>2]=w;c[A+4>>2]=((w|0)<0)<<31>>31;c[s+(p*24|0)+16>>2]=x;c[q+(r*40|0)+20>>2]=p+1;if((v|0)==65424?(F=c[q+(r*40|0)+16>>2]|0,(F|0)!=0):0){A=F+((c[q+(r*40|0)+12>>2]|0)*24|0)|0;c[A>>2]=w;c[A+4>>2]=0}do if((c[y>>2]|0)==65424){p=Pb(n)|0;p=-4-(c[W>>2]|0)+p|0;A=L;z=c[A+4>>2]|0;if(!(0>(z|0)|(0==(z|0)?p>>>0>(c[A>>2]|0)>>>0:0)))break;A=L;c[A>>2]=p;c[A+4>>2]=0}while(0);if(a[ta>>0]&4){xa=46;break}if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=50;break b}qb(c[J>>2]|0,S,2);if((c[S>>2]|0)==65427)break c}if((xa|0)==7){xa=0;c[Aa>>2]=64;break}else if((xa|0)==14){xa=0;c[Aa>>2]=64;break}else if((xa|0)==46){xa=0;A=Rb(n,c[R>>2]|0,0,o)|0;if(!((C|0)==0?(A|0)==(c[R>>2]|0):0)){xa=47;break b}c[S>>2]=65427;break}}while(0);A=Qb(n)|0;if((A|0)==0&(C|0)==0?(c[Aa>>2]|0)==64:0){xa=115;break}p=a[ta>>0]|0;if(!(p&4)){q=c[O>>2]|0;r=c[P>>2]|0;if(!(c[Q>>2]|0)){p=c[R>>2]|0;if(p>>>0>1){s=p+-2|0;c[R>>2]=s}else s=p}else{s=Qb(n)|0;s=Si(s|0,C|0,-2,0)|0;c[R>>2]=s}p=r+(q*5640|0)+5592|0;A=r+(q*5640|0)+5596|0;do if(!s)z=1;else{z=Qb(n)|0;y=C;if(0>(y|0)|0==(y|0)&s>>>0>z>>>0)Ub(o,2,8573,ga)|0;q=c[p>>2]|0;if(!q){z=Pc(c[R>>2]|0)|0;c[p>>2]=z;if(!z)break b;else{z=0;break}}q=Tc(q,(c[R>>2]|0)+(c[A>>2]|0)|0)|0;if(!q){xa=65;break b}c[p>>2]=q;z=0}while(0);q=c[B>>2]|0;if(q){w=Pb(n)|0;s=C;y=Si(w|0,s|0,-2,-1)|0;r=c[O>>2]|0;q=q+40|0;u=c[q>>2]|0;v=c[u+(r*40|0)+12>>2]|0;t=c[u+(r*40|0)+16>>2]|0;x=t+(v*24|0)+8|0;c[x>>2]=y;c[x+4>>2]=C;x=c[R>>2]|0;s=Si(x|0,0,w|0,s|0)|0;v=t+(v*24|0)+16|0;c[v>>2]=s;c[v+4>>2]=C;x=x+2|0;v=c[u+(r*40|0)+20>>2]|0;s=u+(r*40|0)+28|0;t=c[s>>2]|0;if((v+1|0)>>>0>t>>>0){t=~~(+(t>>>0)+100.0)>>>0;c[s>>2]=t;s=Tc(c[u+(r*40|0)+24>>2]|0,t*24|0)|0;t=c[q>>2]|0;u=t+(r*40|0)+24|0;if(!s){p=u;xa=74;break}c[u>>2]=s;w=t;q=c[t+(r*40|0)+20>>2]|0}else{w=u;s=c[u+(r*40|0)+24>>2]|0;q=v}b[s+(q*24|0)>>1]=-109;v=Pi(0,y|0,32)|0;y=s+(q*24|0)+8|0;c[y>>2]=v;c[y+4>>2]=C;c[s+(q*24|0)+16>>2]=x;c[w+(r*40|0)+20>>2]=q+1}if(!z)p=Mb(n,(c[p>>2]|0)+(c[A>>2]|0)|0,c[R>>2]|0,o)|0;else p=0;c[Aa>>2]=(p|0)==(c[R>>2]|0)?8:64;c[A>>2]=(c[A>>2]|0)+p;p=a[ta>>0]|0;if((p&9)==1){a[ta>>0]=p|8;q=c[O>>2]|0;do if((Tb(n)|0)!=0?(M=Pb(n)|0,N=C,!((M|0)==-1&(N|0)==-1)):0){while(1){if((Mb(n,V,2,o)|0)!=2){xa=81;break}qb(V,T,2);if((c[T>>2]|0)!=65424){xa=83;break}if((Mb(n,V,2,o)|0)!=2){xa=85;break}qb(V,X,2);if((c[X>>2]|0)!=10){xa=87;break}c[X>>2]=8;p=Mb(n,V,8,o)|0;if((p|0)!=(c[X>>2]|0)){xa=89;break}if((p|0)!=8){xa=91;break}qb(V,Z,2);qb(G,$,4);qb(H,U,1);qb(I,Y,1);if((c[Z>>2]|0)==(q|0)){xa=97;break}p=c[$>>2]|0;if(p>>>0<14){xa=94;break}xa=p+-12|0;c[$>>2]=xa;xa=Rb(n,xa,0,o)|0;if(!((C|0)==0?(xa|0)==(c[$>>2]|0):0)){xa=96;break}}if((xa|0)==81){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==83){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==85){xa=0;Ub(o,1,8295,ha)|0;p=0;q=0;break}else if((xa|0)==87){xa=0;Ub(o,1,8313,ia)|0;p=0;q=0;break}else if((xa|0)==89){xa=0;Ub(o,1,8295,ka)|0;p=0;q=0;break}else if((xa|0)==91){xa=0;Ub(o,1,8662,la)|0;p=0;q=0;break}else if((xa|0)==94){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==96){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==97){xa=0;q=(c[U>>2]|0)==(c[Y>>2]|0)&1;p=(Sb(n,M,N,o)|0)!=0&1;break}}else{p=1;q=0}while(0);if(!p){xa=99;break}if(q){p=_(c[E>>2]|0,c[D>>2]|0)|0;a[ta>>0]=a[ta>>0]&-18|16;if(p){q=c[P>>2]|0;t=0;do{r=q+(t*5640|0)+5588|0;s=c[r>>2]|0;if(s)c[r>>2]=s+1;t=t+1|0}while((t|0)!=(p|0))}Ub(o,2,8734,na)|0}}if(!(a[ta>>0]&1)){if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=109;break}qb(c[J>>2]|0,S,2)}}else{a[ta>>0]=p&-6;c[Aa>>2]=8;if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=113;break}qb(c[J>>2]|0,S,2)}p=c[S>>2]|0;if(!((p|0)!=65497&(a[ta>>0]&1)==0)){xa=116;break}}switch(xa|0){case 9:{Ub(o,1,8295,aa)|0;o=0;i=Da;return o|0}case 11:{Ub(o,1,8313,ba)|0;o=0;i=Da;return o|0}case 20:{Ub(o,1,8339,ja)|0;o=0;i=Da;return o|0}case 24:{Ub(o,1,8382,qa)|0;o=0;i=Da;return o|0}case 26:{Uc(c[J>>2]|0);c[J>>2]=0;c[K>>2]=0;Ub(o,1,8427,ra)|0;o=0;i=Da;return o|0}case 29:{Ub(o,1,8295,sa)|0;o=0;i=Da;return o|0}case 31:{Ub(o,1,8461,ca)|0;o=0;i=Da;return o|0}case 33:{c[da>>2]=c[S>>2];Ub(o,1,8490,da)|0;o=0;i=Da;return o|0}case 41:{Uc(c[p>>2]|0);Ca=c[q>>2]|0;c[Ca+(r*40|0)+24>>2]=0;c[Ca+(r*40|0)+28>>2]=0;c[Ca+(r*40|0)+20>>2]=0;Ub(o,1,8537,va)|0;o=0;i=Da;return o|0}case 47:{Ub(o,1,8295,ea)|0;o=0;i=Da;return o|0}case 50:{Ub(o,1,8295,fa)|0;o=0;i=Da;return o|0}case 65:{Uc(c[p>>2]|0);c[p>>2]=0;break}case 74:{Uc(c[p>>2]|0);Ca=c[q>>2]|0;c[Ca+(r*40|0)+24>>2]=0;c[Ca+(r*40|0)+28>>2]=0;c[Ca+(r*40|0)+20>>2]=0;Ub(o,1,8537,wa)|0;o=0;i=Da;return o|0}case 99:{Ub(o,1,8688,ma)|0;o=0;i=Da;return o|0}case 109:{Ub(o,1,8295,oa)|0;o=0;i=Da;return o|0}case 113:{Ub(o,1,8295,pa)|0;o=0;i=Da;return o|0}case 115:{p=c[S>>2]|0;xa=116;break}}if((xa|0)==116)if((p|0)==65497){p=ta;xa=117;break a}else{p=ta;break a}Ub(o,1,8628,ua)|0;o=0;i=Da;return o|0}else p=ta;break}default:{o=0;i=Da;return o|0}}while(0);if((xa|0)==117)if((c[Aa>>2]|0)!=256){c[d+200>>2]=0;c[Aa>>2]=256}if(!(a[p>>0]&1)){s=_(c[d+112>>2]|0,c[d+116>>2]|0)|0;t=d+200|0;q=c[t>>2]|0;d:do if(q>>>0>>0){p=q;r=(c[d+164>>2]|0)+(q*5640|0)|0;while(1){if(c[r+5592>>2]|0){q=p;break d}q=p+1|0;c[t>>2]=q;if(q>>>0>>0){p=q;r=r+5640|0}else break}}while(0);if((q|0)==(s|0)){c[m>>2]=0;o=1;i=Da;return o|0}}else{q=d+200|0;t=q;q=c[q>>2]|0}A=c[d+164>>2]|0;if(a[A+(q*5640|0)+5636>>0]&2){B=A+(q*5640|0)+5160|0;r=c[B>>2]|0;if(!r)p=0;else{s=c[A+(q*5640|0)+5164>>2]|0;u=0;p=0;do{p=(c[s+(u<<3)+4>>2]|0)+p|0;u=u+1|0}while((u|0)!=(r|0))}xa=Pc(p)|0;z=A+(q*5640|0)+5172|0;c[z>>2]=xa;if(!xa){Ub(o,1,8775,ya)|0;Ub(o,1,8813,za)|0;o=0;i=Da;return o|0}y=A+(q*5640|0)+5180|0;c[y>>2]=p;r=c[B>>2]|0;x=A+(q*5640|0)+5164|0;if(!r)p=c[x>>2]|0;else{p=c[x>>2]|0;v=p;w=0;u=0;while(1){s=c[v+(w<<3)>>2]|0;if(!s)s=v;else{Ui((c[z>>2]|0)+u|0,s|0,c[v+(w<<3)+4>>2]|0)|0;s=c[x>>2]|0;u=(c[s+(w<<3)+4>>2]|0)+u|0;Uc(c[s+(w<<3)>>2]|0);s=c[x>>2]|0;c[s+(w<<3)>>2]=0;c[s+(w<<3)+4>>2]=0;r=c[B>>2]|0;p=s}w=w+1|0;if(w>>>0>=r>>>0)break;else v=s}}c[B>>2]=0;Uc(p);c[x>>2]=0;c[A+(q*5640|0)+5168>>2]=c[z>>2];c[A+(q*5640|0)+5176>>2]=c[y>>2];q=c[t>>2]|0}p=d+204|0;if(!($f(c[p>>2]|0,q,o)|0)){Ub(o,1,8839,Ba)|0;o=0;i=Da;return o|0}else{Ba=_(c[d+112>>2]|0,c[d+116>>2]|0)|0;c[Ca>>2]=(c[t>>2]|0)+1;c[Ca+4>>2]=Ba;Ub(o,4,8873,Ca)|0;c[e>>2]=c[t>>2];c[m>>2]=1;c[f>>2]=ag(c[p>>2]|0)|0;o=c[c[(c[p>>2]|0)+20>>2]>>2]|0;c[g>>2]=c[o>>2];c[h>>2]=c[o+4>>2];c[j>>2]=c[o+8>>2];c[k>>2]=c[o+12>>2];c[l>>2]=c[o+16>>2];c[Aa>>2]=c[Aa>>2]|128;o=1;i=Da;return o|0}return 0}function dd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;r=t+28|0;s=t+32|0;o=b+8|0;if(!(c[o>>2]&128)){g=0;i=t;return g|0}q=b+200|0;if((c[q>>2]|0)!=(d|0)){g=0;i=t;return g|0}j=c[b+164>>2]|0;n=j+(d*5640|0)|0;p=j+(d*5640|0)+5592|0;k=c[p>>2]|0;if(!k){sd(n);g=0;i=t;return g|0}l=b+204|0;m=j+(d*5640|0)+5596|0;if(!(cg(c[l>>2]|0,k,c[m>>2]|0,d,c[b+196>>2]|0,h)|0)){sd(n);c[o>>2]=c[o>>2]|32768;Ub(h,1,8912,t)|0;g=0;i=t;return g|0}if(!(dg(c[l>>2]|0,e,f)|0)){g=0;i=t;return g|0}j=c[p>>2]|0;if(j){Uc(j);c[p>>2]=0;c[m>>2]=0}p=b+76|0;a[p>>0]=a[p>>0]&-2;c[o>>2]=c[o>>2]&-129;p=Qb(g)|0;b=c[o>>2]|0;if((b|0)==256|(p|0)==0&(C|0)==0&(b|0)==64){g=1;i=t;return g|0}if((Mb(g,s,2,h)|0)!=2){Ub(h,2,8931,t+8|0)|0;g=1;i=t;return g|0}qb(s,r,2);switch(c[r>>2]|0){case 65497:{c[q>>2]=0;c[o>>2]=256;g=1;i=t;return g|0}case 65424:{g=1;i=t;return g|0}default:if((Qb(g)|0)==0&(C|0)==0){c[o>>2]=64;Ub(h,2,8975,t+16|0)|0;g=1;i=t;return g|0}else{Ub(h,1,9005,t+24|0)|0;g=0;i=t;return g|0}}return 0}function ed(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;y=z+96|0;x=z+88|0;w=z+80|0;v=z+72|0;u=z+64|0;s=z+56|0;r=z+48|0;o=z+40|0;n=z+32|0;m=z+24|0;l=z+16|0;p=c[b+80>>2]|0;if((c[b+8>>2]|0)!=8){Ub(j,1,9037,z)|0;j=0;i=z;return j|0}if(!(f|e|g|h)){Ub(j,4,9116,z+8|0)|0;c[b+28>>2]=0;c[b+32>>2]=0;c[b+36>>2]=c[b+112>>2];c[b+40>>2]=c[b+116>>2];j=1;i=z;return j|0}t=p+8|0;k=c[t>>2]|0;if(k>>>0>>0){c[l>>2]=e;c[l+4>>2]=k;Ub(j,1,9185,l)|0;j=0;i=z;return j|0}k=c[p>>2]|0;if(k>>>0>e>>>0){c[m>>2]=e;c[m+4>>2]=k;Ub(j,2,9272,m)|0;k=0;e=c[p>>2]|0}else k=((e-(c[b+92>>2]|0)|0)>>>0)/((c[b+100>>2]|0)>>>0)|0;c[b+28>>2]=k;c[d>>2]=e;q=p+12|0;e=c[q>>2]|0;if(e>>>0>>0){c[n>>2]=f;c[n+4>>2]=e;Ub(j,1,9360,n)|0;j=0;i=z;return j|0}l=p+4|0;e=c[l>>2]|0;if(e>>>0>f>>>0){c[o>>2]=f;c[o+4>>2]=e;Ub(j,2,9445,o)|0;e=0;f=c[l>>2]|0}else e=((f-(c[b+96>>2]|0)|0)>>>0)/((c[b+104>>2]|0)>>>0)|0;c[b+32>>2]=e;m=d+4|0;c[m>>2]=f;e=c[p>>2]|0;if(e>>>0>g>>>0){c[r>>2]=g;c[r+4>>2]=e;Ub(j,1,9531,r)|0;j=0;i=z;return j|0}e=c[t>>2]|0;if(e>>>0>>0){c[s>>2]=g;c[s+4>>2]=e;Ub(j,2,9620,s)|0;e=c[b+112>>2]|0;g=c[t>>2]|0}else{e=c[b+100>>2]|0;e=(g+-1-(c[b+92>>2]|0)+e|0)/(e|0)|0}c[b+36>>2]=e;k=d+8|0;c[k>>2]=g;g=c[l>>2]|0;if(g>>>0>h>>>0){c[u>>2]=h;c[u+4>>2]=g;Ub(j,1,9708,u)|0;j=0;i=z;return j|0}g=c[q>>2]|0;if(g>>>0>>0){c[v>>2]=h;c[v+4>>2]=g;Ub(j,2,9798,v)|0;e=c[q>>2]|0;g=c[b+116>>2]|0}else{g=c[b+104>>2]|0;e=h;g=(h+-1-(c[b+96>>2]|0)+g|0)/(g|0)|0}c[b+40>>2]=g;h=d+12|0;c[h>>2]=e;v=b+76|0;a[v>>0]=a[v>>0]|2;v=c[d+16>>2]|0;b=c[d>>2]|0;a:do if(v){f=c[m>>2]|0;t=f+-1|0;u=c[k>>2]|0;q=u+-1|0;r=b+-1|0;g=0;p=c[d+24>>2]|0;while(1){d=c[p>>2]|0;e=(r+d|0)/(d|0)|0;c[p+16>>2]=e;o=c[p+4>>2]|0;k=(t+o|0)/(o|0)|0;c[p+20>>2]=k;d=(q+d|0)/(d|0)|0;l=c[p+40>>2]|0;m=Ri(1,0,l|0)|0;n=C;d=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;d=Si(d|0,C|0,m|0,n|0)|0;d=Pi(d|0,C|0,l|0)|0;e=Si(e|0,((e|0)<0)<<31>>31|0,-1,-1)|0;e=Si(e|0,C|0,m|0,n|0)|0;e=Pi(e|0,C|0,l|0)|0;e=d-e|0;if((e|0)<0){k=29;break}s=c[h>>2]|0;d=(o+-1+s|0)/(o|0)|0;c[p+8>>2]=e;d=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;d=Si(d|0,C|0,m|0,n|0)|0;d=Pi(d|0,C|0,l|0)|0;e=Si(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;e=Si(e|0,C|0,m|0,n|0)|0;e=Pi(e|0,C|0,l|0)|0;e=d-e|0;if((e|0)<0){k=31;break}c[p+12>>2]=e;g=g+1|0;if(g>>>0>=v>>>0){e=u;g=s;break a}else p=p+52|0}if((k|0)==29){c[w>>2]=g;c[w+4>>2]=e;Ub(j,1,9887,w)|0;j=0;i=z;return j|0}else if((k|0)==31){c[x>>2]=g;c[x+4>>2]=e;Ub(j,1,9956,x)|0;j=0;i=z;return j|0}}else{f=c[m>>2]|0;e=c[k>>2]|0;g=c[h>>2]|0}while(0);c[y>>2]=b;c[y+4>>2]=f;c[y+8>>2]=e;c[y+12>>2]=g;Ub(j,4,10025,y)|0;j=1;i=z;return j|0}function fd(){var b=0,d=0,e=0;b=Qc(1,208)|0;if(!b){d=0;return d|0}c[b>>2]=1;d=b+184|0;a[d>>0]=a[d>>0]|2;d=Qc(1,5640)|0;c[b+12>>2]=d;if(!d){Yc(b);d=0;return d|0}d=Qc(1,1e3)|0;c[b+16>>2]=d;if(!d){Yc(b);d=0;return d|0}c[b+20>>2]=1e3;c[b+60>>2]=-1;d=b+64|0;c[d>>2]=0;c[d+4>>2]=0;d=Qc(1,48)|0;do if(d){c[d+32>>2]=100;c[d+24>>2]=0;e=Qc(100,24)|0;c[d+28>>2]=e;if(!e){Uc(d);break}c[d+40>>2]=0;c[b+196>>2]=d;e=qg()|0;c[b+192>>2]=e;if(!e){Yc(b);e=0;return e|0}e=qg()|0;c[b+188>>2]=e;if(e){e=b;return e|0}Yc(b);e=0;return e|0}while(0);c[b+196>>2]=0;Yc(b);e=0;return e|0}function gd(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+128|0;s=t+104|0;r=t+72|0;q=t+64|0;n=t+40|0;l=t+24|0;j=t+16|0;h=t+8|0;g=t;if(b&384){ki(10063,11,1,d)|0;i=t;return}if((b&1|0)!=0?(f=c[a+80>>2]|0,(f|0)!=0):0)hd(f,0,d);if(b&2){ki(10075,36,1,d)|0;f=c[a+96>>2]|0;c[g>>2]=c[a+92>>2];c[g+4>>2]=f;$h(d,10112,g)|0;g=c[a+104>>2]|0;c[h>>2]=c[a+100>>2];c[h+4>>2]=g;$h(d,10130,h)|0;h=c[a+116>>2]|0;c[j>>2]=c[a+112>>2];c[j+4>>2]=h;$h(d,10148,j)|0;xd(c[a+12>>2]|0,c[(c[a+80>>2]|0)+16>>2]|0,d);ki(10164,2,1,d)|0}if((b&8|0)!=0?(k=_(c[a+112>>2]|0,c[a+116>>2]|0)|0,(k|0)!=0):0){f=a+80|0;g=0;h=c[a+164>>2]|0;while(1){xd(h,c[(c[f>>2]|0)+16>>2]|0,d);g=g+1|0;if((g|0)==(k|0))break;else h=h+5640|0}}if(!(b&16)){i=t;return}j=c[a+196>>2]|0;ki(10167,37,1,d)|0;k=j;b=c[k+4>>2]|0;f=j+8|0;a=c[f>>2]|0;f=c[f+4>>2]|0;h=l;c[h>>2]=c[k>>2];c[h+4>>2]=b;h=l+8|0;c[h>>2]=a;c[h+4>>2]=f;$h(d,10205,l)|0;ki(10272,17,1,d)|0;h=j+28|0;f=c[h>>2]|0;a:do if((f|0)!=0?(m=j+24|0,(c[m>>2]|0)!=0):0){g=0;while(1){b=f+(g*24|0)+8|0;k=c[b>>2]|0;b=c[b+4>>2]|0;l=c[f+(g*24|0)+16>>2]|0;c[n>>2]=e[f+(g*24|0)>>1];a=n+8|0;c[a>>2]=k;c[a+4>>2]=b;c[n+16>>2]=l;$h(d,10290,n)|0;g=g+1|0;if(g>>>0>=(c[m>>2]|0)>>>0)break a;f=c[h>>2]|0}}while(0);ki(10321,4,1,d)|0;b=j+40|0;h=c[b>>2]|0;if((h|0)!=0?(p=j+36|0,o=c[p>>2]|0,(o|0)!=0):0){g=0;f=0;do{f=(c[h+(g*40|0)+4>>2]|0)+f|0;g=g+1|0}while((g|0)!=(o|0));if(f){ki(10326,16,1,d)|0;if(c[p>>2]|0){f=c[b>>2]|0;k=0;do{j=c[f+(k*40|0)+4>>2]|0;c[q>>2]=k;c[q+4>>2]=j;$h(d,10343,q)|0;f=c[b>>2]|0;g=c[f+(k*40|0)+16>>2]|0;b:do if(!((j|0)==0|(g|0)==0)){f=0;while(1){a=g+(f*24|0)|0;u=c[a>>2]|0;a=c[a+4>>2]|0;m=g+(f*24|0)+8|0;l=c[m>>2]|0;m=c[m+4>>2]|0;o=g+(f*24|0)+16|0;n=c[o>>2]|0;o=c[o+4>>2]|0;c[r>>2]=f;h=r+8|0;c[h>>2]=u;c[h+4>>2]=a;h=r+16|0;c[h>>2]=l;c[h+4>>2]=m;h=r+24|0;c[h>>2]=n;c[h+4>>2]=o;$h(d,10379,r)|0;h=f+1|0;f=c[b>>2]|0;if((h|0)==(j|0))break b;g=c[f+(k*40|0)+16>>2]|0;f=h}}while(0);g=c[f+(k*40|0)+24>>2]|0;c:do if((g|0)!=0?(c[f+(k*40|0)+20>>2]|0)!=0:0){f=0;while(1){o=g+(f*24|0)+8|0;n=c[o>>2]|0;o=c[o+4>>2]|0;h=c[g+(f*24|0)+16>>2]|0;c[s>>2]=e[g+(f*24|0)>>1];u=s+8|0;c[u>>2]=n;c[u+4>>2]=o;c[s+16>>2]=h;$h(d,10290,s)|0;h=f+1|0;f=c[b>>2]|0;if(h>>>0>=(c[f+(k*40|0)+20>>2]|0)>>>0)break c;g=c[f+(k*40|0)+24>>2]|0;f=h}}while(0);k=k+1|0}while(k>>>0<(c[p>>2]|0)>>>0)}ki(10321,4,1,d)|0}}ki(10164,2,1,d)|0;i=t;return}function hd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+64|0;m=n+48|0;l=n+40|0;j=n+32|0;h=n+16|0;g=n;k=n+52|0;if(!d){ki(10482,13,1,e)|0;a[k+1>>0]=0;f=9}else{ki(10445,36,1,c[676]|0)|0;f=0}a[k>>0]=f;o=c[b>>2]|0;f=c[b+4>>2]|0;c[g>>2]=k;c[g+4>>2]=o;c[g+8>>2]=f;$h(e,10496,g)|0;g=c[b+8>>2]|0;f=c[b+12>>2]|0;c[h>>2]=k;c[h+4>>2]=g;c[h+8>>2]=f;$h(e,10513,h)|0;h=b+16|0;f=c[h>>2]|0;c[j>>2]=k;c[j+4>>2]=f;$h(e,10530,j)|0;f=b+24|0;if(!(c[f>>2]|0)){ki(10164,2,1,e)|0;i=n;return}if(!(c[h>>2]|0)){ki(10164,2,1,e)|0;i=n;return}else g=0;do{c[l>>2]=k;c[l+4>>2]=g;$h(e,10546,l)|0;id((c[f>>2]|0)+(g*52|0)|0,d,e);c[m>>2]=k;$h(e,10566,m)|0;g=g+1|0}while(g>>>0<(c[h>>2]|0)>>>0);ki(10164,2,1,e)|0;i=n;return}function id(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+48|0;k=l+24|0;j=l+16|0;h=l;g=l+32|0;f=(d|0)!=0;if(f){ki(10571,41,1,c[676]|0)|0;d=0}else{a[g+1>>0]=9;a[g+2>>0]=0;d=9}a[g>>0]=d;m=c[b>>2]|0;d=c[b+4>>2]|0;c[h>>2]=g;c[h+4>>2]=m;c[h+8>>2]=d;$h(e,10613,h)|0;h=c[b+24>>2]|0;c[j>>2]=g;c[j+4>>2]=h;$h(e,10630,j)|0;j=c[b+32>>2]|0;c[k>>2]=g;c[k+4>>2]=j;$h(e,10642,k)|0;if(!f){i=l;return}ki(10164,2,1,e)|0;i=l;return}function jd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;e=m;b=a+80|0;k=c[(c[b>>2]|0)+16>>2]|0;d=Qc(1,56)|0;c[e>>2]=d;if(!d){l=0;i=m;return l|0}c[d+24>>2]=c[(c[b>>2]|0)+16>>2];c[d>>2]=c[a+92>>2];c[d+4>>2]=c[a+96>>2];c[d+8>>2]=c[a+100>>2];c[d+12>>2]=c[a+104>>2];c[d+16>>2]=c[a+112>>2];c[d+20>>2]=c[a+116>>2];c[d+52>>2]=0;d=c[a+12>>2]|0;b=c[e>>2]|0;c[b+32>>2]=c[d>>2];c[b+36>>2]=c[d+4>>2];c[b+40>>2]=c[d+8>>2];c[b+44>>2]=c[d+16>>2];c[b+48>>2]=Qc(c[b+24>>2]|0,1080)|0;b=c[e>>2]|0;j=b+48|0;a=c[j>>2]|0;if(!a){Cc(e);l=0;i=m;return l|0}if(!k){l=b;i=m;return l|0}h=d+5584|0;d=0;while(1){g=c[h>>2]|0;c[a+(d*1080|0)+4>>2]=c[g+(d*1080|0)>>2];e=g+(d*1080|0)+4|0;f=c[e>>2]|0;c[a+(d*1080|0)+8>>2]=f;c[a+(d*1080|0)+12>>2]=c[g+(d*1080|0)+8>>2];c[a+(d*1080|0)+16>>2]=c[g+(d*1080|0)+12>>2];c[a+(d*1080|0)+20>>2]=c[g+(d*1080|0)+16>>2];c[a+(d*1080|0)+24>>2]=c[g+(d*1080|0)+20>>2];if(f>>>0<33){Ui(a+(d*1080|0)+948|0,g+(d*1080|0)+944|0,f|0)|0;Ui(a+(d*1080|0)+816|0,g+(d*1080|0)+812|0,c[e>>2]|0)|0}f=c[g+(d*1080|0)+24>>2]|0;c[a+(d*1080|0)+28>>2]=f;c[a+(d*1080|0)+808>>2]=c[g+(d*1080|0)+804>>2];if((f|0)!=1){f=(c[e>>2]|0)*3|0;e=f+-2|0;if((e|0)<97&(f|0)>2)l=10}else{e=1;l=10}if((l|0)==10){l=0;f=0;do{c[a+(d*1080|0)+32+(f<<2)>>2]=c[g+(d*1080|0)+28+(f<<3)+4>>2];c[a+(d*1080|0)+420+(f<<2)>>2]=c[g+(d*1080|0)+28+(f<<3)>>2];f=f+1|0}while((f|0)!=(e|0))}c[a+(d*1080|0)+812>>2]=c[g+(d*1080|0)+808>>2];d=d+1|0;if((d|0)==(k|0))break;a=c[j>>2]|0}i=m;return b|0}function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=Qc(1,48)|0;if(!b){k=0;return k|0}h=a+196|0;d=c[h>>2]|0;i=d;k=c[i+4>>2]|0;a=b;c[a>>2]=c[i>>2];c[a+4>>2]=k;a=d+8|0;k=c[a+4>>2]|0;i=b+8|0;c[i>>2]=c[a>>2];c[i+4>>2]=k;i=d+16|0;k=c[i+4>>2]|0;a=b+16|0;c[a>>2]=c[i>>2];c[a+4>>2]=k;d=c[d+24>>2]|0;a=b+24|0;c[a>>2]=d;d=Pc(d*24|0)|0;k=b+28|0;c[k>>2]=d;if(!d){Uc(b);k=0;return k|0}e=c[(c[h>>2]|0)+28>>2]|0;if(!e){Uc(d);c[k>>2]=0}else Ui(d|0,e|0,(c[a>>2]|0)*24|0)|0;a=c[(c[h>>2]|0)+36>>2]|0;g=b+36|0;c[g>>2]=a;a=Qc(a,40)|0;i=b+40|0;c[i>>2]=a;if(!a){Uc(c[k>>2]|0);Uc(b);k=0;return k|0}d=c[(c[h>>2]|0)+40>>2]|0;if(!d){Uc(a);c[i>>2]=0;k=b;return k|0}if(!(c[g>>2]|0)){k=b;return k|0}d=c[d+20>>2]|0;c[a+20>>2]=d;d=Pc(d*24|0)|0;a=c[i>>2]|0;c[a+24>>2]=d;a:do if(!d)d=0;else{f=d;d=0;while(1){e=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+24>>2]|0;if(!e){Uc(f);a=c[i>>2]|0;c[a+(d*40|0)+24>>2]=0}else{Ui(f|0,e|0,(c[a+(d*40|0)+20>>2]|0)*24|0)|0;a=c[i>>2]|0}e=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+4>>2]|0;c[a+(d*40|0)+4>>2]=e;e=Pc(e*24|0)|0;a=c[i>>2]|0;c[a+(d*40|0)+16>>2]=e;if(!e)break;f=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+16>>2]|0;if(!f){Uc(e);a=c[i>>2]|0;c[a+(d*40|0)+16>>2]=0}else{Ui(e|0,f|0,(c[a+(d*40|0)+4>>2]|0)*24|0)|0;a=c[i>>2]|0}c[a+(d*40|0)+32>>2]=0;c[a+(d*40|0)+36>>2]=0;d=d+1|0;if(d>>>0>=(c[g>>2]|0)>>>0){j=32;break}f=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+20>>2]|0;c[a+(d*40|0)+20>>2]=f;f=Pc(f*24|0)|0;a=c[i>>2]|0;c[a+(d*40|0)+24>>2]=f;if(!f)break a}if((j|0)==32)return b|0;if(d){Uc(c[a+24>>2]|0);Uc(c[(c[i>>2]|0)+16>>2]|0);if((d|0)!=1){a=1;do{Uc(c[(c[i>>2]|0)+(a*40|0)+24>>2]|0);Uc(c[(c[i>>2]|0)+(a*40|0)+16>>2]|0);a=a+1|0}while((a|0)!=(d|0))}a=c[i>>2]|0}Uc(a);Uc(c[k>>2]|0);Uc(b);k=0;return k|0}while(0);if(d){Uc(c[a+24>>2]|0);if((d|0)!=1){a=1;do{Uc(c[(c[i>>2]|0)+(a*40|0)+24>>2]|0);a=a+1|0}while((a|0)!=(d|0))}a=c[i>>2]|0}Uc(a);Uc(c[k>>2]|0);Uc(b);k=0;return k|0}function ld(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d){d=0;return d|0}f=Xb()|0;k=a+84|0;c[k>>2]=f;if(!f){d=0;return d|0}$b(d,f);h=a+188|0;sg(c[h>>2]|0,27,e)|0;h=c[h>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](a,b,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){d=a+80|0;Zb(c[d>>2]|0);c[d>>2]=0;d=0;return d|0}}else vg(h);i=c[d+16>>2]|0;if(!i){d=1;return d|0}h=c[(c[k>>2]|0)+24>>2]|0;f=c[d+24>>2]|0;g=0;do{c[f+(g*52|0)+36>>2]=c[h+(g*52|0)+36>>2];d=h+(g*52|0)+44|0;c[f+(g*52|0)+44>>2]=c[d>>2];c[d>>2]=0;g=g+1|0}while(g>>>0>>0);f=1;return f|0}function md(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;t=i;i=i+16|0;j=t+8|0;if(!d){Ub(e,1,10654,t)|0;s=0;i=t;return s|0}g=c[a+112>>2]|0;h=_(c[a+116>>2]|0,g)|0;if(h>>>0<=f>>>0){c[j>>2]=f;c[j+4>>2]=h+-1;Ub(e,1,10692,j)|0;s=0;i=t;return s|0}s=(f>>>0)%(g>>>0)|0;r=(f>>>0)/(g>>>0)|0;j=c[a+100>>2]|0;h=_(j,s)|0;k=c[a+92>>2]|0;h=h+k|0;c[d>>2]=h;q=a+80|0;g=c[q>>2]|0;l=c[g>>2]|0;h=h>>>0>>0?l:h;c[d>>2]=h;k=(_(j,s+1|0)|0)+k|0;s=d+8|0;c[s>>2]=k;j=c[g+8>>2]|0;k=k>>>0>j>>>0?j:k;c[s>>2]=k;s=c[a+104>>2]|0;j=_(s,r)|0;l=c[a+96>>2]|0;j=j+l|0;p=d+4|0;c[p>>2]=j;o=c[g+4>>2]|0;j=j>>>0>>0?o:j;c[p>>2]=j;l=(_(s,r+1|0)|0)+l|0;r=d+12|0;c[r>>2]=l;s=c[g+12>>2]|0;l=l>>>0>s>>>0?s:l;c[r>>2]=l;r=d+24|0;s=d+16|0;p=c[s>>2]|0;if(p){o=c[g+24>>2]|0;n=h+-1|0;m=j+-1|0;k=k+-1|0;g=l+-1|0;h=0;j=c[r>>2]|0;while(1){l=c[o+(h*52|0)+40>>2]|0;c[j+40>>2]=l;z=c[j>>2]|0;y=(n+z|0)/(z|0)|0;c[j+16>>2]=y;u=c[j+4>>2]|0;x=(m+u|0)/(u|0)|0;c[j+20>>2]=x;z=(k+z|0)/(z|0)|0;u=(g+u|0)/(u|0)|0;w=Ri(1,0,l|0)|0;v=C;z=Si(z|0,((z|0)<0)<<31>>31|0,-1,-1)|0;z=Si(z|0,C|0,w|0,v|0)|0;z=Pi(z|0,C|0,l|0)|0;y=Si(y|0,((y|0)<0)<<31>>31|0,-1,-1)|0;y=Si(y|0,C|0,w|0,v|0)|0;y=Pi(y|0,C|0,l|0)|0;c[j+8>>2]=z-y;u=Si(u|0,((u|0)<0)<<31>>31|0,-1,-1)|0;u=Si(u|0,C|0,w|0,v|0)|0;u=Pi(u|0,C|0,l|0)|0;x=Si(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;v=Si(x|0,C|0,w|0,v|0)|0;l=Pi(v|0,C|0,l|0)|0;c[j+12>>2]=u-l;h=h+1|0;if(h>>>0>=p>>>0)break;else j=j+52|0}}m=a+84|0;g=c[m>>2]|0;if(g)Zb(g);g=Xb()|0;c[m>>2]=g;if(!g){z=0;i=t;return z|0}$b(d,g);c[a+60>>2]=f;j=a+188|0;sg(c[j>>2]|0,28,e)|0;j=c[j>>2]|0;k=tg(j)|0;g=ug(j)|0;if(k){l=0;h=1;while(1){if(!h)h=0;else h=(Ra[c[g>>2]&63](a,b,e)|0)!=0;l=l+1|0;if((l|0)==(k|0))break;else{g=g+4|0;h=h&1}}vg(j);if(!h){Zb(c[q>>2]|0);c[q>>2]=0;z=0;i=t;return z|0}}else vg(j);g=c[s>>2]|0;if(!g){z=1;i=t;return z|0}k=c[(c[m>>2]|0)+24>>2]|0;j=c[r>>2]|0;l=0;while(1){c[j+(l*52|0)+36>>2]=c[k+(l*52|0)+36>>2];h=c[j+(l*52|0)+44>>2]|0;if(!h)h=k;else{Uc(h);h=c[(c[m>>2]|0)+24>>2]|0;j=c[r>>2]|0;g=c[s>>2]|0}z=h+(l*52|0)+44|0;c[j+(l*52|0)+44>>2]=c[z>>2];c[z>>2]=0;l=l+1|0;if(l>>>0>=g>>>0){g=1;break}else k=h}i=t;return g|0}function nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;c[a+168>>2]=b;e=c[a+80>>2]|0;a:do if((((e|0)!=0?(h=c[e+24>>2]|0,(h|0)!=0):0)?(f=c[a+12>>2]|0,(f|0)!=0):0)?(g=c[f+5584>>2]|0,(g|0)!=0):0){e=c[e+16>>2]|0;if(!e)e=1;else{f=0;while(1){if((c[g+(f*1080|0)+4>>2]|0)>>>0<=b>>>0)break;c[h+(f*52|0)+40>>2]=b;f=f+1|0;if(f>>>0>=e>>>0){e=1;break a}}Ub(d,1,10753,j)|0;e=0}}else e=0;while(0);i=k;return e|0}function od(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;Q=i;i=i+48|0;O=Q+32|0;N=Q+24|0;M=Q+16|0;K=Q+8|0;L=Q;A=d+204|0;g=c[A>>2]|0;F=d+116|0;G=d+112|0;H=_(c[G>>2]|0,c[F>>2]|0)|0;I=(H|0)==1;if(!H){P=1;i=Q;return P|0}J=d+200|0;B=d+12|0;C=d+164|0;D=d+8|0;E=g+20|0;y=g+24|0;z=0;g=0;l=0;a:while(1){if((c[J>>2]|0)!=(z|0)){P=5;break}w=z;z=z+1|0;x=_(c[F>>2]|0,c[G>>2]|0)|0;c[K>>2]=z;c[K+4>>2]=x;Ub(f,4,10866,K)|0;c[B>>2]=0;x=c[A>>2]|0;c[x+12>>2]=c[(c[C>>2]|0)+(w*5640|0)+5588>>2];c[D>>2]=0;if(!(_f(x,c[J>>2]|0,f)|0))break;h=c[A>>2]|0;if(c[(c[h+24>>2]|0)+16>>2]|0){k=0;do{j=c[(c[c[E>>2]>>2]|0)+20>>2]|0;if(I){c[j+(k*52|0)+32>>2]=c[(c[(c[y>>2]|0)+24>>2]|0)+(k*52|0)+44>>2];c[j+(k*52|0)+36>>2]=0}else{if(!(Zf(j+(k*52|0)|0)|0)){P=14;break a}h=c[A>>2]|0}k=k+1|0}while(k>>>0<(c[(c[h+24>>2]|0)+16>>2]|0)>>>0)}x=eg(h)|0;if(!I){if(x>>>0>l>>>0){h=Tc(g,x)|0;if(!h){P=20;break}else{g=h;h=x}}else h=l;j=c[A>>2]|0;w=j+24|0;k=c[w>>2]|0;if(c[k+16>>2]|0){v=j+20|0;j=g;u=0;do{r=c[(c[c[v>>2]>>2]|0)+20>>2]|0;m=c[k+24>>2]|0;q=c[m+(u*52|0)+24>>2]|0;q=((q&7|0)!=0&1)+(q>>>3)|0;n=c[r+(u*52|0)+8>>2]|0;o=c[r+(u*52|0)>>2]|0;t=n-o|0;p=c[r+(u*52|0)+12>>2]|0;r=c[r+(u*52|0)+4>>2]|0;T=c[k>>2]|0;S=c[m+(u*52|0)>>2]|0;l=c[m+(u*52|0)+4>>2]|0;R=(S+~T+(c[k+8>>2]|0)|0)/(S|0)|0;s=R-t|0;k=o-((T+-1+S|0)/(S|0)|0)+(_(R,r-(((c[k+4>>2]|0)+-1+l|0)/(l|0)|0)|0)|0)|0;k=(c[m+(u*52|0)+44>>2]|0)+(k<<2)|0;b:do switch(((q|0)==3?4:q)|0){case 1:{l=(p|0)==(r|0);if(!(c[m+(u*52|0)+32>>2]|0)){if(l)break b;q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){a[m>>0]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+1|0;n=n+4|0}}j=j+t|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}else{if(l)break b;q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){a[m>>0]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+1|0;n=n+4|0}}j=j+t|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}break}case 2:{l=(p|0)==(r|0);if(!(c[m+(u*52|0)+32>>2]|0)){if(!l){q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){b[m>>1]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+2|0;n=n+4|0}}j=j+(t<<1)|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}}else if(!l){q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){b[m>>1]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+2|0;n=n+4|0}}j=j+(t<<1)|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}break}case 4:{if((p|0)!=(r|0)){q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){c[m>>2]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+4|0;n=n+4|0}}j=j+(t<<2)|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}break}default:{}}while(0);u=u+1|0;k=c[w>>2]|0}while(u>>>0<(c[k+16>>2]|0)>>>0);j=c[A>>2]|0}if(!(fg(j,g,x)|0)){P=63;break}}else h=l;if(!(Ad(d,e,f)|0)){P=65;break}if(z>>>0>=H>>>0){P=67;break}else l=h}if((P|0)==5)Ub(f,1,10829,L)|0;else if((P|0)==14){Ub(f,1,10887,M)|0;if(!g){T=0;i=Q;return T|0}Uc(g);T=0;i=Q;return T|0}else if((P|0)==20){if(g)Uc(g);Ub(f,1,10925,N)|0;T=0;i=Q;return T|0}else if((P|0)==63){Ub(f,1,10964,O)|0;Uc(g);T=0;i=Q;return T|0}else if((P|0)==65){if(!g){T=0;i=Q;return T|0}Uc(g);T=0;i=Q;return T|0}else if((P|0)==67){if(!g){T=1;i=Q;return T|0}Uc(g);T=1;i=Q;return T|0}if(!g){T=0;i=Q;return T|0}Uc(g);T=0;i=Q;return T|0}function pd(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a+188|0;if(!(sg(c[f>>2]|0,29,e)|0)){d=0;return d|0}if(((b[a+88>>1]|0)+-3&65535)<4?(sg(c[f>>2]|0,30,e)|0)==0:0){d=0;return d|0}if(!(sg(c[f>>2]|0,31,e)|0)){d=0;return d|0}if(!(sg(c[f>>2]|0,32,e)|0)){d=0;return d|0}if(!(sg(c[f>>2]|0,33,e)|0)){d=0;return d|0}j=c[f>>2]|0;h=tg(j)|0;f=ug(j)|0;if(!h)f=1;else{i=0;g=f;f=1;while(1){if(!f)f=0;else f=(Ra[c[g>>2]&63](a,d,e)|0)!=0;f=f&1;i=i+1|0;if((i|0)==(h|0))break;else g=g+4|0}}vg(j);d=f;return d|0}function qd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;g=Xb()|0;k=a+80|0;c[k>>2]=g;if(!g){Ub(f,1,11011,m)|0;d=0;i=m;return d|0}$b(e,g);j=c[e+24>>2]|0;if((j|0)!=0?(l=c[e+16>>2]|0,(l|0)!=0):0){h=0;do{e=j+(h*52|0)+44|0;g=c[e>>2]|0;if(g){c[(c[(c[k>>2]|0)+24>>2]|0)+(h*52|0)+44>>2]=g;c[e>>2]=0}h=h+1|0}while(h>>>0>>0)}g=a+192|0;if(!(sg(c[g>>2]|0,34,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,35,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,36,f)|0)){d=0;i=m;return d|0}h=c[g>>2]|0;j=tg(h)|0;g=ug(h)|0;if(j){k=0;e=1;while(1){if(!e)e=0;else e=(Ra[c[g>>2]&63](a,d,f)|0)!=0;k=k+1|0;if((k|0)==(j|0))break;else{g=g+4|0;e=e&1}}vg(h);if(!e){d=0;i=m;return d|0}}else vg(h);g=a+188|0;if(!(sg(c[g>>2]|0,37,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,38,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,39,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,40,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,41,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,42,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,43,f)|0)){d=0;i=m;return d|0}e=a+88|0;if(((b[e>>1]|0)+-3&65535)<4){if(!(sg(c[g>>2]|0,44,f)|0)){d=0;i=m;return d|0}if((b[e>>1]|0)==4?(sg(c[g>>2]|0,45,f)|0)==0:0){d=0;i=m;return d|0}}if(!(sg(c[g>>2]|0,46,f)|0)){d=0;i=m;return d|0}if((c[a+108>>2]|0)!=0?(sg(c[g>>2]|0,47,f)|0)==0:0){d=0;i=m;return d|0}if((b[e>>1]&256)!=0?(sg(c[g>>2]|0,48,f)|0)==0:0){d=0;i=m;return d|0}if((c[a+196>>2]|0)!=0?(sg(c[g>>2]|0,49,f)|0)==0:0){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,50,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,51,f)|0)){d=0;i=m;return d|0}k=c[g>>2]|0;h=tg(k)|0;g=ug(k)|0;if(!h)g=1;else{j=0;e=g;g=1;while(1){if(!g)g=0;else g=(Ra[c[e>>2]&63](a,d,f)|0)!=0;g=g&1;j=j+1|0;if((j|0)==(h|0))break;else e=e+4|0}}vg(k);d=g;i=m;return d|0}function rd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;o=q+40|0;p=q+32|0;n=q+24|0;l=q+16|0;j=q+8|0;h=q;k=a+200|0;if((c[k>>2]|0)==(b|0)){m=_(c[a+116>>2]|0,c[a+112>>2]|0)|0;c[j>>2]=b+1;c[j+4>>2]=m;Ub(g,4,10866,j)|0;c[a+12>>2]=0;m=a+204|0;j=c[m>>2]|0;c[j+12>>2]=c[(c[a+164>>2]|0)+(b*5640|0)+5588>>2];c[a+8>>2]=0;if(_f(j,c[k>>2]|0,g)|0){h=c[m>>2]|0;a:do if(c[(c[h+24>>2]|0)+16>>2]|0){j=0;while(1){if(!(Zf((c[(c[c[h+20>>2]>>2]|0)+20>>2]|0)+(j*52|0)|0)|0))break;j=j+1|0;h=c[m>>2]|0;if(j>>>0>=(c[(c[h+24>>2]|0)+16>>2]|0)>>>0)break a}Ub(g,1,10887,n)|0;p=0;i=q;return p|0}while(0);if(!(fg(h,d,e)|0)){Ub(g,1,10964,p)|0;p=0;i=q;return p|0}if(Ad(a,f,g)|0){p=1;i=q;return p|0}c[o>>2]=b;Ub(g,1,11101,o)|0;p=0;i=q;return p|0}}else Ub(g,1,10829,h)|0;c[l>>2]=b;Ub(g,1,11044,l)|0;p=0;i=q;return p|0}function sd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a)return;f=a+5164|0;b=c[f>>2]|0;if(b){g=a+5160|0;d=c[g>>2]|0;if(d){e=0;while(1){b=c[b+(e<<3)>>2]|0;if(b){Uc(b);d=c[g>>2]|0}e=e+1|0;if(e>>>0>=d>>>0)break;b=c[f>>2]|0}b=c[f>>2]|0}c[g>>2]=0;Uc(b);c[f>>2]=0}b=a+5172|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5584|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5608|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5604|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5624|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0;c[a+5632>>2]=0;c[a+5628>>2]=0}i=a+5612|0;b=c[i>>2]|0;if(b){h=a+5616|0;d=c[h>>2]|0;if(d){g=0;while(1){e=b+12|0;f=c[e>>2]|0;if(f){Uc(f);c[e>>2]=0;d=c[h>>2]|0}g=g+1|0;if(g>>>0>=d>>>0)break;else b=b+20|0}b=c[i>>2]|0}Uc(b);c[i>>2]=0}b=a+5600|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5592|0;d=c[b>>2]|0;if(!d)return;Uc(d);c[b>>2]=0;c[a+5596>>2]=0;return}function td(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ud(a,b,d){a=a|0;b=b|0;d=d|0;return (c[a+8>>2]|0)==0&(c[a+188>>2]|0)!=0&(c[a+192>>2]|0)!=0&1|0}function vd(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=i;i=i+224|0;X=Y+200|0;U=Y+192|0;T=Y+184|0;Q=Y+176|0;P=Y+168|0;O=Y+160|0;M=Y+152|0;L=Y+144|0;K=Y+136|0;E=Y+128|0;J=Y+120|0;D=Y+112|0;B=Y+104|0;A=Y+96|0;z=Y+88|0;y=Y+80|0;I=Y+72|0;H=Y+64|0;x=Y+56|0;w=Y+48|0;v=Y+40|0;F=Y+32|0;p=Y+24|0;m=Y+16|0;l=Y+8|0;N=Y;S=Y+216|0;g=Y+204|0;G=Y+212|0;u=Y+208|0;W=d+8|0;c[W>>2]=1;a:do if((Mb(e,S,2,f)|0)==2?(qb(S,g,2),(c[g>>2]|0)==65359):0){c[W>>2]=2;o=Pb(e)|0;o=Si(o|0,C|0,-2,-1)|0;n=C;V=d+196|0;h=c[V>>2]|0;c[h>>2]=o;c[h+4>>2]=n;h=N;c[h>>2]=o;c[h+4>>2]=n;Ub(f,4,15766,N)|0;h=c[V>>2]|0;n=c[h>>2]|0;o=h+24|0;g=c[o>>2]|0;k=h+32|0;j=c[k>>2]|0;do if((g+1|0)>>>0>j>>>0){t=~~(+(j>>>0)+100.0)>>>0;c[k>>2]=t;g=h+28|0;h=Tc(c[g>>2]|0,t*24|0)|0;if(!h){Uc(c[g>>2]|0);c[g>>2]=0;c[k>>2]=0;c[o>>2]=0;Ub(f,1,15803,l)|0;break a}else{c[g>>2]=h;g=c[o>>2]|0;break}}else h=c[h+28>>2]|0;while(0);b[h+(g*24|0)>>1]=-177;s=Pi(0,n|0,32)|0;t=h+(g*24|0)+8|0;c[t>>2]=s;c[t+4>>2]=C;c[h+(g*24|0)+16>>2]=2;c[o>>2]=g+1;t=d+16|0;if((Mb(e,c[t>>2]|0,2,f)|0)!=2){Ub(f,1,8295,p)|0;f=0;i=Y;return f|0}qb(c[t>>2]|0,G,2);g=c[G>>2]|0;if((g|0)!=65424){s=d+20|0;q=0;j=0;r=0;b:while(1){if(g>>>0<65280){R=14;break}else l=784;while(1){h=c[l>>2]|0;k=(h|0)==0;if(k|(h|0)==(g|0))break;else l=l+12|0}if(k){Ub(f,2,15914,v)|0;m=2;c:while(1){do{if((Mb(e,c[t>>2]|0,2,f)|0)!=2){R=20;break b}qb(c[t>>2]|0,N,2);g=c[N>>2]|0}while(g>>>0<65280);l=784;while(1){h=c[l>>2]|0;if((h|0)==0|(h|0)==(g|0)){k=l;g=l;break}else l=l+12|0}if(!(c[g+4>>2]&c[W>>2])){R=25;break b}if((h|0)>=65424){R=100;break}switch(h|0){case 0:break;default:{p=k;o=m;break c}}m=m+2|0}if((R|0)==100){R=0;switch(h|0){case 65424:{h=q;g=r;R=27;break b}default:{p=k;o=m}}}l=c[V>>2]|0;n=Pb(e)|0;n=n-o|0;k=l+24|0;g=c[k>>2]|0;h=l+32|0;m=c[h>>2]|0;if((g+1|0)>>>0>m>>>0){g=~~(+(m>>>0)+100.0)>>>0;c[h>>2]=g;l=l+28|0;g=Tc(c[l>>2]|0,g*24|0)|0;if(!g){j=l;g=l;R=32;break}c[l>>2]=g;h=g;g=c[k>>2]|0}else h=c[l+28>>2]|0;b[h+(g*24|0)>>1]=0;m=h+(g*24|0)+8|0;c[m>>2]=n;c[m+4>>2]=((n|0)<0)<<31>>31;c[h+(g*24|0)+16>>2]=o;c[k>>2]=g+1;g=c[p>>2]|0;c[G>>2]=g;if((g|0)==65424){h=q;g=r;break}else k=784;while(1){h=c[k>>2]|0;if((h|0)==0|(h|0)==(g|0))break;else k=k+12|0}}else k=l;r=(h|0)==65361?1:r;q=(h|0)==65362?1:q;j=(h|0)==65372?1:j;if(!(c[k+4>>2]&c[W>>2])){R=38;break}if((Mb(e,c[t>>2]|0,2,f)|0)!=2){R=40;break}qb(c[t>>2]|0,u,2);h=(c[u>>2]|0)+-2|0;c[u>>2]=h;g=c[t>>2]|0;if(h>>>0>(c[s>>2]|0)>>>0){g=Tc(g,h)|0;if(!g){R=43;break}c[t>>2]=g;h=c[u>>2]|0;c[s>>2]=h}g=Mb(e,g,h,f)|0;if((g|0)!=(c[u>>2]|0)){R=46;break}if(!(Za[c[k+8>>2]&63](d,c[t>>2]|0,g,f)|0)){R=48;break}m=c[V>>2]|0;n=c[k>>2]|0;o=Pb(e)|0;p=c[u>>2]|0;o=-4-p+o|0;p=p+4|0;k=m+24|0;g=c[k>>2]|0;h=m+32|0;l=c[h>>2]|0;if((g+1|0)>>>0>l>>>0){g=~~(+(l>>>0)+100.0)>>>0;c[h>>2]=g;l=m+28|0;g=Tc(c[l>>2]|0,g*24|0)|0;if(!g){j=l;g=l;R=53;break}c[l>>2]=g;h=g;g=c[k>>2]|0}else h=c[m+28>>2]|0;b[h+(g*24|0)>>1]=n;n=h+(g*24|0)+8|0;c[n>>2]=o;c[n+4>>2]=((o|0)<0)<<31>>31;c[h+(g*24|0)+16>>2]=p;c[k>>2]=g+1;if((Mb(e,c[t>>2]|0,2,f)|0)!=2){R=55;break}qb(c[t>>2]|0,G,2);g=c[G>>2]|0;if((g|0)==65424){h=q;g=r;break}}switch(R|0){case 14:{c[F>>2]=g;Ub(f,1,15863,F)|0;f=0;i=Y;return f|0}case 20:{Ub(f,1,8295,w)|0;R=34;break}case 25:{Ub(f,1,8339,x)|0;R=34;break}case 27:{c[G>>2]=65424;break}case 32:{Uc(c[g>>2]|0);c[j>>2]=0;c[h>>2]=0;c[k>>2]=0;Ub(f,1,15803,H)|0;R=34;break}case 38:{Ub(f,1,8339,y)|0;f=0;i=Y;return f|0}case 40:{Ub(f,1,8295,z)|0;f=0;i=Y;return f|0}case 43:{Uc(c[t>>2]|0);c[t>>2]=0;c[s>>2]=0;Ub(f,1,8427,A)|0;f=0;i=Y;return f|0}case 46:{Ub(f,1,8295,B)|0;f=0;i=Y;return f|0}case 48:{Ub(f,1,15985,D)|0;f=0;i=Y;return f|0}case 53:{Uc(c[g>>2]|0);c[j>>2]=0;c[h>>2]=0;c[k>>2]=0;Ub(f,1,15803,J)|0;f=0;i=Y;return f|0}case 55:{Ub(f,1,8295,E)|0;f=0;i=Y;return f|0}}if((R|0)==34){Ub(f,1,15930,I)|0;f=0;i=Y;return f|0}if(g){if(!h){Ub(f,1,16090,L)|0;f=0;i=Y;return f|0}if(!j){Ub(f,1,16136,M)|0;f=0;i=Y;return f|0}d:do if(a[d+184>>0]&1){s=d+120|0;do if(c[s>>2]|0){n=d+124|0;o=0;g=0;h=0;e:do{j=c[n>>2]|0;k=c[j+(o<<3)>>2]|0;f:do if(k){l=c[j+(o<<3)+4>>2]|0;j=g>>>0>>0;m=j?0:g-l|0;if((l|0)==(g|0)|j^1)g=m;else{k=j?k+g|0:k;g=l-g|0;while(1){if(g>>>0<4){R=70;break e}qb(k,N,4);j=g+-4|0;g=c[N>>2]|0;h=g+h|0;if(j>>>0>>0)break;if((j|0)==(g|0)){g=m;break f}else{k=k+(g+4)|0;g=j-g|0}}g=g-j|0}}while(0);o=o+1|0}while(o>>>0<(c[s>>2]|0)>>>0);if((R|0)==70){Ub(f,1,16182,O)|0;break}if(!g)R=77;else Ub(f,1,16213,P)|0}else{h=0;R=77}while(0);g:do if((R|0)==77){j=Pc(h)|0;p=d+144|0;c[p>>2]=j;if(!j){Ub(f,1,13302,Q)|0;break}q=d+132|0;c[q>>2]=h;k=c[s>>2]|0;r=d+124|0;do if(k){g=c[r>>2]|0;j=g;o=0;n=0;h=0;h:while(1){l=c[j+(o<<3)>>2]|0;if(!l)l=n;else{j=c[j+(o<<3)+4>>2]|0;g=(c[p>>2]|0)+h|0;i:do if(n>>>0>>0){Ui(g|0,l|0,n|0)|0;h=h+n|0;if((j|0)==(n|0)){l=0;break}m=l+n|0;g=j-n|0;while(1){if(g>>>0<4){R=88;break h}qb(m,S,4);l=m+4|0;k=g+-4|0;j=c[S>>2]|0;g=(c[p>>2]|0)+h|0;if(k>>>0>>0){j=l;break}Ui(g|0,l|0,j|0)|0;g=c[S>>2]|0;h=g+h|0;if((k|0)==(g|0)){l=0;break i}else{m=m+(g+4)|0;g=k-g|0}}Ui(g|0,j|0,k|0)|0;l=(c[S>>2]|0)-k|0;h=k+h|0}else{Ui(g|0,l|0,j|0)|0;l=n-j|0;h=j+h|0}while(0);Uc(c[(c[r>>2]|0)+(o<<3)>>2]|0);j=c[r>>2]|0;c[j+(o<<3)>>2]=0;c[j+(o<<3)+4>>2]=0;k=c[s>>2]|0;g=j}o=o+1|0;if(o>>>0>=k>>>0){R=94;break}else n=l}if((R|0)==88){Ub(f,1,16182,T)|0;break g}else if((R|0)==94){j=c[p>>2]|0;h=c[q>>2]|0;break}}else g=c[r>>2]|0;while(0);c[d+128>>2]=j;c[d+152>>2]=h;c[s>>2]=0;Uc(g);c[r>>2]=0;break d}while(0);Ub(f,1,16236,U)|0;f=0;i=Y;return f|0}while(0);Ub(f,4,16262,X)|0;X=Pb(e)|0;f=(c[V>>2]|0)+8|0;c[f>>2]=X+-2;c[f+4>>2]=0;c[W>>2]=8;f=1;i=Y;return f|0}}Ub(f,1,16044,K)|0;f=0;i=Y;return f|0}while(0);Ub(f,1,15839,m)|0;f=0;i=Y;return f|0}function wd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+16|0;F=G;D=c[b+80>>2]|0;E=b+88|0;A=_(c[b+112>>2]|0,c[b+116>>2]|0)|0;q=c[D+16>>2]|0;o=q*1080|0;p=c[b+12>>2]|0;q=_(q<<2,q)|0;a:do if(A){r=p+5604|0;s=p+5620|0;t=p+5612|0;u=p+5616|0;v=p+5632|0;w=p+5624|0;x=p+5584|0;B=0;C=c[b+164>>2]|0;b:while(1){k=C+5584|0;y=c[k>>2]|0;Ui(C|0,p|0,5640)|0;d=C+5636|0;a[d>>0]=a[d>>0]&-4;c[C+5168>>2]=0;d=C+5604|0;c[d>>2]=0;l=C+5620|0;c[l>>2]=0;z=C+5612|0;c[z>>2]=0;m=C+5632|0;c[m>>2]=0;n=C+5624|0;c[n>>2]=0;c[k>>2]=y;if(c[r>>2]|0){f=Pc(q)|0;c[d>>2]=f;if(!f){d=0;f=25;break}Ui(f|0,c[r>>2]|0,q|0)|0}d=(c[s>>2]|0)*20|0;f=Pc(d)|0;c[z>>2]=f;if(!f){d=0;f=25;break}Ui(f|0,c[t>>2]|0,d|0)|0;d=c[u>>2]|0;if(d){h=0;j=c[z>>2]|0;k=c[t>>2]|0;while(1){g=k+12|0;if(c[g>>2]|0){d=k+16|0;f=Pc(c[d>>2]|0)|0;c[j+12>>2]=f;if(!f){d=0;f=25;break b}Ui(f|0,c[g>>2]|0,c[d>>2]|0)|0;d=c[u>>2]|0}c[l>>2]=(c[l>>2]|0)+1;h=h+1|0;if(h>>>0>=d>>>0)break;else{j=j+20|0;k=k+20|0}}}d=(c[v>>2]|0)*20|0;f=Pc(d)|0;c[n>>2]=f;if(!f){d=0;f=25;break}Ui(f|0,c[w>>2]|0,d|0)|0;c[m>>2]=c[v>>2];h=c[v>>2]|0;if(h){j=0;f=c[n>>2]|0;g=c[w>>2]|0;while(1){d=c[g+8>>2]|0;if(d)c[f+8>>2]=(c[z>>2]|0)+(((d-(c[t>>2]|0)|0)/20|0)*20|0);d=c[g+12>>2]|0;if(d)c[f+12>>2]=(c[z>>2]|0)+(((d-(c[t>>2]|0)|0)/20|0)*20|0);j=j+1|0;if(j>>>0>=h>>>0)break;else{f=f+20|0;g=g+20|0}}}Ui(y|0,c[x>>2]|0,o|0)|0;B=B+1|0;if(B>>>0>=A>>>0)break a;else C=C+5640|0}if((f|0)==25){i=G;return d|0}}while(0);f=Tf(1)|0;d=b+204|0;c[d>>2]=f;if(!f){e=0;i=G;return e|0}if(Xf(f,D,E)|0){e=1;i=G;return e|0}Yf(c[d>>2]|0);c[d>>2]=0;Ub(e,1,8839,F)|0;e=0;i=G;return e|0}function xd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=i;i=i+128|0;u=w+120|0;t=w+112|0;s=w+104|0;r=w+96|0;q=w+88|0;p=w+80|0;o=w+72|0;n=w+64|0;m=w+56|0;l=w+48|0;k=w+40|0;j=w+32|0;h=w+24|0;g=w+16|0;f=w+8|0;e=w;if(!a){i=w;return}ki(12191,17,1,d)|0;c[e>>2]=c[a>>2];$h(d,12209,e)|0;c[f>>2]=c[a+4>>2];$h(d,12222,f)|0;c[g>>2]=c[a+8>>2];$h(d,12234,g)|0;c[h>>2]=c[a+16>>2];$h(d,12251,h)|0;if((b|0)>0){g=a+5584|0;h=0;do{f=c[g>>2]|0;c[j>>2]=h;$h(d,12262,j)|0;c[k>>2]=c[f+(h*1080|0)>>2];$h(d,12276,k)|0;a=f+(h*1080|0)+4|0;c[l>>2]=c[a>>2];$h(d,12290,l)|0;c[m>>2]=c[f+(h*1080|0)+8>>2];$h(d,12313,m)|0;c[n>>2]=c[f+(h*1080|0)+12>>2];$h(d,12329,n)|0;c[o>>2]=c[f+(h*1080|0)+16>>2];$h(d,12345,o)|0;c[p>>2]=c[f+(h*1080|0)+20>>2];$h(d,12362,p)|0;ki(12377,23,1,d)|0;if(c[a>>2]|0){e=0;do{x=c[f+(h*1080|0)+944+(e<<2)>>2]|0;c[q>>2]=c[f+(h*1080|0)+812+(e<<2)>>2];c[q+4>>2]=x;$h(d,12401,q)|0;e=e+1|0}while(e>>>0<(c[a>>2]|0)>>>0)}ai(10,d)|0;x=f+(h*1080|0)+24|0;c[r>>2]=c[x>>2];$h(d,12410,r)|0;c[s>>2]=c[f+(h*1080|0)+804>>2];$h(d,12425,s)|0;ki(12442,20,1,d)|0;if((c[x>>2]|0)!=1){a=(c[a>>2]|0)*3|0;if((a|0)>2){a=a+-2|0;v=8}}else{a=1;v=8}if((v|0)==8){v=0;e=0;do{x=c[f+(h*1080|0)+28+(e<<3)>>2]|0;c[t>>2]=c[f+(h*1080|0)+28+(e<<3)+4>>2];c[t+4>>2]=x;$h(d,12401,t)|0;e=e+1|0}while((e|0)!=(a|0))}ai(10,d)|0;c[u>>2]=c[f+(h*1080|0)+808>>2];$h(d,12463,u)|0;ki(12480,5,1,d)|0;h=h+1|0}while((h|0)!=(b|0))}ki(10321,4,1,d)|0;i=w;return}function yd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+80|0;u=B+32|0;v=B+24|0;y=B+16|0;x=B+8|0;o=B+64|0;w=B+60|0;n=B+56|0;q=B+52|0;s=B+48|0;r=B+44|0;t=B+40|0;p=B+36|0;c[o>>2]=1;e=Pc(1e3)|0;if(!e){Ub(d,1,12127,B)|0;d=0;i=B;return d|0}z=a+116|0;A=a+112|0;k=a+204|0;l=a+84|0;m=a+8|0;f=1e3;j=0;while(1){if(!(cd(a,w,n,q,s,r,t,p,o,b,d)|0)){g=5;break}if(!(c[o>>2]|0)){g=17;break}h=c[n>>2]|0;if(h>>>0>f>>>0){f=Tc(e,h)|0;if(!f){g=9;break}else{e=f;g=h}}else g=f;f=c[w>>2]|0;if(!(dd(a,f,e,h,b,d)|0)){g=11;break}f=f+1|0;h=_(c[A>>2]|0,c[z>>2]|0)|0;c[v>>2]=f;c[v+4>>2]=h;Ub(d,4,11986,v)|0;h=c[k>>2]|0;if(!(ce(c[(c[c[h+20>>2]>>2]|0)+20>>2]|0,c[h+24>>2]|0,e,c[(c[l>>2]|0)+24>>2]|0)|0)){g=13;break}c[u>>2]=f;Ub(d,4,12016,u)|0;h=Qb(b)|0;if((h|0)==0&(C|0)==0?(c[m>>2]|0)==64:0){g=17;break}j=j+1|0;if((j|0)==(_(c[A>>2]|0,c[z>>2]|0)|0)){g=17;break}else f=g}if((g|0)==5){Uc(e);d=0;i=B;return d|0}else if((g|0)==9){Uc(e);A=_(c[A>>2]|0,c[z>>2]|0)|0;c[x>>2]=(c[w>>2]|0)+1;c[x+4>>2]=A;Ub(d,1,11946,x)|0;d=0;i=B;return d|0}else if((g|0)==11){Uc(e);A=_(c[A>>2]|0,c[z>>2]|0)|0;c[y>>2]=f+1;c[y+4>>2]=A;Ub(d,1,12162,y)|0;d=0;i=B;return d|0}else if((g|0)==13){Uc(e);d=0;i=B;return d|0}else if((g|0)==17){Uc(e);d=1;i=B;return d|0}return 0}function zd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0;G=i;i=i+96|0;y=G+56|0;D=G+48|0;x=G+40|0;z=G+32|0;E=G+24|0;k=G+16|0;j=G+8|0;r=G+92|0;B=G+88|0;q=G+84|0;t=G+80|0;v=G+76|0;u=G+72|0;w=G+68|0;s=G+64|0;c[r>>2]=1;e=Pc(1e3)|0;if(!e){Ub(d,1,11880,G)|0;F=0;i=G;return F|0}A=a+196|0;g=c[A>>2]|0;f=c[g+40>>2]|0;a:do if(!f){f=_(c[a+116>>2]|0,c[a+112>>2]|0)|0;c[g+36>>2]=f;f=Qc(f,40)|0;g=c[A>>2]|0;c[g+40>>2]=f;b:do if(f){if(c[g+36>>2]|0){h=0;do{c[f+(h*40|0)+28>>2]=100;c[f+(h*40|0)+20>>2]=0;p=Qc(100,24)|0;g=c[A>>2]|0;f=c[g+40>>2]|0;c[f+(h*40|0)+24>>2]=p;h=h+1|0;if(!p)break b}while(h>>>0<(c[g+36>>2]|0)>>>0)}g=c[a+60>>2]|0;if(!f)break a;else{F=12;break a}}while(0);Uc(e);F=0;i=G;return F|0}else{g=c[a+60>>2]|0;F=12}while(0);if((F|0)==12)if(c[f+16>>2]|0){if(!(c[f+(g*40|0)+4>>2]|0)){p=a+64|0;p=Si(c[p>>2]|0,c[p+4>>2]|0,2,0)|0;if(!(xb(b,p,C,d)|0)){Ub(d,1,11918,j)|0;Uc(e);F=0;i=G;return F|0}}else{p=c[f+(g*40|0)+16>>2]|0;p=Si(c[p>>2]|0,c[p+4>>2]|0,2,0)|0;if(!(xb(b,p,C,d)|0)){Ub(d,1,11918,k)|0;Uc(e);F=0;i=G;return F|0}}f=a+8|0;if((c[f>>2]|0)==256)c[f>>2]=8}c:do if(cd(a,B,q,t,v,u,w,s,r,b,d)|0){o=a+116|0;p=a+112|0;l=a+204|0;m=a+84|0;n=g+1|0;f=1e3;while(1){if(!(c[r>>2]|0))break;k=c[q>>2]|0;if(k>>>0>f>>>0){f=Tc(e,k)|0;if(!f){F=26;break}else{e=f;j=k}}else j=f;h=c[B>>2]|0;if(!(dd(a,h,e,k,b,d)|0)){F=28;break}f=h+1|0;k=_(c[p>>2]|0,c[o>>2]|0)|0;c[z>>2]=f;c[z+4>>2]=k;Ub(d,4,11986,z)|0;k=c[l>>2]|0;if(!(ce(c[(c[c[k+20>>2]>>2]|0)+20>>2]|0,c[k+24>>2]|0,e,c[(c[m>>2]|0)+24>>2]|0)|0)){F=30;break}c[x>>2]=f;Ub(d,4,12016,x)|0;if((h|0)==(g|0)){F=32;break}c[y>>2]=f;c[y+4>>2]=n;Ub(d,2,12060,y)|0;if(!(cd(a,B,q,t,v,u,w,s,r,b,d)|0))break c;else f=j}if((F|0)==26){Uc(e);F=_(c[p>>2]|0,c[o>>2]|0)|0;c[E>>2]=(c[B>>2]|0)+1;c[E+4>>2]=F;Ub(d,1,11946,E)|0;F=0;i=G;return F|0}else if((F|0)==28){Uc(e);F=0;i=G;return F|0}else if((F|0)==30){Uc(e);F=0;i=G;return F|0}else if((F|0)==32){F=(c[A>>2]|0)+8|0;F=Si(c[F>>2]|0,c[F+4>>2]|0,2,0)|0;if(!(xb(b,F,C,d)|0)){Ub(d,1,11918,D)|0;Uc(e);F=0;i=G;return F|0}}Uc(e);F=1;i=G;return F|0}while(0);Uc(e);F=0;i=G;return F|0}function Ad(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;H=i;i=i+32|0;D=H+16|0;t=H+8|0;l=H;C=H+20|0;E=c[a+40>>2]|0;G=a+36|0;n=c[G>>2]|0;o=a+204|0;k=c[o>>2]|0;c[k+16>>2]=0;B=a+8|0;c[B>>2]=0;c[C>>2]=0;pb(n,65424,2);pb(n+2|0,10,2);F=a+200|0;pb(n+4|0,c[F>>2]|0,2);z=a+12|0;pb(n+10|0,c[z>>2]|0,1);A=a+164|0;pb(n+11|0,c[(c[A>>2]|0)+((c[F>>2]|0)*5640|0)+5588>>2]|0,1);c[C>>2]=12;h=n+12|0;f=E+-12|0;m=a+88|0;if(((b[m>>1]|0)+-3&65535)>=4?(g=c[F>>2]|0,j=c[A>>2]|0,(c[j+(g*5640|0)+420>>2]|0)!=0):0){c[C>>2]=0;_d(c[(c[a+80>>2]|0)+16>>2]|0,j,g,h,C);y=c[C>>2]|0;g=y+12|0;h=n+g|0;f=f-y|0}else g=12;c[C>>2]=0;pb(h,65427,2);c[k+4>>2]=c[B>>2];y=c[z>>2]|0;c[k+8>>2]=y;if(!y)c[(c[c[k+20>>2]>>2]|0)+840>>2]=0;c[C>>2]=0;if(!(bg(k,c[F>>2]|0,h+2|0,C,f+-4|0,0)|0)){Ub(e,1,11860,l)|0;d=0;i=H;return d|0}f=(c[C>>2]|0)+2|0;c[C>>2]=f;f=f+g|0;pb(n+6|0,f,4);if(((b[m>>1]|0)+-3&65535)<4){y=a+28|0;pb(c[y>>2]|0,c[F>>2]|0,1);x=(c[y>>2]|0)+1|0;c[y>>2]=x;pb(x,f,4);c[y>>2]=(c[y>>2]|0)+4}g=n+f|0;y=E-f|0;v=c[o>>2]|0;w=a+88|0;r=c[A>>2]|0;s=c[F>>2]|0;m=be(w,0,s)|0;x=a+8|0;c[z>>2]=(c[z>>2]|0)+1;a:do if(m>>>0>1){n=v+4|0;o=v+8|0;p=v+20|0;q=a+28|0;j=g;g=y;f=0;l=1;while(1){c[x>>2]=l;c[C>>2]=0;pb(j,65424,2);pb(j+2|0,10,2);pb(j+4|0,c[F>>2]|0,2);pb(j+10|0,c[z>>2]|0,1);pb(j+11|0,c[(c[A>>2]|0)+((c[F>>2]|0)*5640|0)+5588>>2]|0,1);c[C>>2]=0;pb(j+12|0,65427,2);c[n>>2]=c[B>>2];k=c[z>>2]|0;c[o>>2]=k;if(!k)c[(c[c[p>>2]>>2]|0)+840>>2]=0;c[C>>2]=0;if(!(bg(v,c[F>>2]|0,j+14|0,C,g+-16|0,0)|0))break;I=c[C>>2]|0;J=I+2|0;c[C>>2]=J;k=I+14|0;h=j+k|0;f=f+12+J|0;g=g+-12+(-2-I)|0;pb(j+6|0,k,4);if(((b[w>>1]|0)+-3&65535)<4){pb(c[q>>2]|0,c[F>>2]|0,1);J=(c[q>>2]|0)+1|0;c[q>>2]=J;pb(J,k,4);c[q>>2]=(c[q>>2]|0)+4}c[z>>2]=(c[z>>2]|0)+1;l=l+1|0;if(l>>>0>=m>>>0){u=12;break a}else j=h}Ub(e,1,11860,t)|0}else{h=g;g=y;f=0;u=12}while(0);b:do if((u|0)==12){p=r+(s*5640|0)+420|0;c:do if(c[p>>2]|0){q=v+16|0;r=v+4|0;s=v+8|0;t=v+20|0;o=a+28|0;n=1;d:while(1){c[q>>2]=n;m=be(w,n,c[F>>2]|0)|0;if(m){l=0;while(1){c[x>>2]=l;c[C>>2]=0;pb(h,65424,2);pb(h+2|0,10,2);pb(h+4|0,c[F>>2]|0,2);pb(h+10|0,c[z>>2]|0,1);pb(h+11|0,c[(c[A>>2]|0)+((c[F>>2]|0)*5640|0)+5588>>2]|0,1);c[C>>2]=0;pb(h+12|0,65427,2);c[r>>2]=c[B>>2];J=c[z>>2]|0;c[s>>2]=J;if(!J)c[(c[c[t>>2]>>2]|0)+840>>2]=0;c[C>>2]=0;if(!(bg(v,c[F>>2]|0,h+14|0,C,g+-16|0,0)|0))break d;J=c[C>>2]|0;j=J+2|0;c[C>>2]=j;f=f+12+j|0;j=J+14|0;k=h+j|0;g=g+-12+(-2-J)|0;pb(h+6|0,j,4);if(((b[w>>1]|0)+-3&65535)<4){pb(c[o>>2]|0,c[F>>2]|0,1);J=(c[o>>2]|0)+1|0;c[o>>2]=J;pb(J,j,4);c[o>>2]=(c[o>>2]|0)+4}c[z>>2]=(c[z>>2]|0)+1;l=l+1|0;if(l>>>0>=m>>>0){h=k;break}else h=k}}n=n+1|0;if(n>>>0>(c[p>>2]|0)>>>0)break c}Ub(e,1,11860,D)|0;break b}while(0);J=f-y+E|0;if((Nb(d,c[G>>2]|0,J,e)|0)!=(J|0)){J=0;i=H;return J|0}c[F>>2]=(c[F>>2]|0)+1;J=1;i=H;return J|0}while(0);J=0;i=H;return J|0}function Bd(a,b,d){a=a|0;b=b|0;d=d|0;a=a+44|0;pb(c[a>>2]|0,65497,2);if((Nb(b,c[a>>2]|0,2,d)|0)!=2){b=0;return b|0}b=(Ob(b,d)|0)!=0&1;return b|0}function Cd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=(c[a+32>>2]|0)*5|0;i=a+16|0;i=Si(c[i>>2]|0,c[i+4>>2]|0,6,0)|0;h=C;e=Pb(b)|0;f=C;if(!(Sb(b,i,h,d)|0)){i=0;return i|0}if((Nb(b,c[a+24>>2]|0,g,d)|0)!=(g|0)){i=0;return i|0}i=(Sb(b,e,f,d)|0)!=0&1;return i|0}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+196>>2]|0;if(!a)return 1;b=Pb(b)|0;d=a;d=Oi(b|0,C|0,c[d>>2]|0,c[d+4>>2]|0)|0;b=a+16|0;c[b>>2]=d;c[b+4>>2]=C;return 1}function Ed(a,b,d){a=a|0;b=b|0;d=d|0;d=a+204|0;Yf(c[d>>2]|0);c[d>>2]=0;d=a+24|0;b=c[d>>2]|0;if(b){Uc(b);c[d>>2]=0;c[a+28>>2]=0}d=a+36|0;b=c[d>>2]|0;if(!b){a=a+40|0;c[a>>2]=0;return 1}Uc(b);c[d>>2]=0;a=a+40|0;c[a>>2]=0;return 1}function Fd(a,b,d){a=a|0;b=b|0;d=d|0;d=a+44|0;b=c[d>>2]|0;if(b){Uc(b);c[d>>2]=0}c[a+48>>2]=0;return 1}function Gd(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function Hd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+32|0;e=(c[a+8>>2]|0)==0&(c[a+188>>2]|0)!=0&(c[a+192>>2]|0)!=0&1;b=(c[(c[(c[a+164>>2]|0)+5584>>2]|0)+4>>2]|0)+-1|0;if(b>>>0>31){Ub(d,1,11790,f)|0;d=0;i=f;return d|0}b=1<>2]|0)>>>0>>0){Ub(d,1,11790,f+8|0)|0;d=0;i=f;return d|0}if((c[a+104>>2]|0)>>>0>=b>>>0){d=e;i=f;return d|0}Ub(d,1,11790,f+16|0)|0;d=0;i=f;return d|0}function Id(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((b[a+88>>1]&-32256)<<16>>16!=-32256){j=1;return j|0}i=_(c[a+112>>2]|0,c[a+116>>2]|0)|0;if(!i){j=1;return j|0}h=a+80|0;j=0;e=1;g=c[a+164>>2]|0;while(1){if((c[g+16>>2]|0)==2){e=(c[g+5608>>2]|0)!=0&e;a=c[(c[h>>2]|0)+16>>2]|0;if(a){f=0;d=c[g+5584>>2]|0;while(1){e=(c[d+20>>2]&1^1)&e;f=f+1|0;if(f>>>0>=a>>>0)break;else d=d+1080|0}}}j=j+1|0;if((j|0)==(i|0))break;else g=g+5640|0}return e|0}function Jd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+88|0;h=a+32|0;i=c[a+80>>2]|0;j=_(c[a+116>>2]|0,c[a+112>>2]|0)|0;c[h>>2]=0;if(!j)return 1;e=c[a+164>>2]|0;f=0;while(1){Nf(i,g,f);b=e+420|0;d=0;a=0;do{k=be(g,a,f)|0;c[h>>2]=(c[h>>2]|0)+k;d=k+d|0;a=a+1|0}while(a>>>0<=(c[b>>2]|0)>>>0);c[e+5588>>2]=d;f=f+1|0;if((f|0)==(j|0))break;else e=e+5640|0}return 1}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+44>>2]|0;pb(a,65359,2);return (Nb(b,a,2,d)|0)==2|0}function Ld(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;j=p;k=c[a+80>>2]|0;n=k+16|0;l=(c[n>>2]|0)*3|0;o=l+40|0;f=c[k+24>>2]|0;h=a+48|0;m=a+44|0;g=c[m>>2]|0;do if(o>>>0>(c[h>>2]|0)>>>0){g=Tc(g,o)|0;if(g){c[m>>2]=g;c[h>>2]=o;break}Uc(c[m>>2]|0);c[m>>2]=0;c[h>>2]=0;Ub(d,1,11752,j)|0;b=0;i=p;return b|0}while(0);pb(g,65361,2);pb(g+2|0,l+38|0,2);pb(g+4|0,e[a+88>>1]|0,2);pb(g+6|0,c[k+8>>2]|0,4);pb(g+10|0,c[k+12>>2]|0,4);pb(g+14|0,c[k>>2]|0,4);pb(g+18|0,c[k+4>>2]|0,4);pb(g+22|0,c[a+100>>2]|0,4);pb(g+26|0,c[a+104>>2]|0,4);pb(g+30|0,c[a+92>>2]|0,4);pb(g+34|0,c[a+96>>2]|0,4);pb(g+38|0,c[n>>2]|0,2);if(c[n>>2]|0){h=0;g=g+40|0;while(1){pb(g,(c[f+24>>2]|0)+-1+(c[f+32>>2]<<7)|0,1);pb(g+1|0,c[f>>2]|0,1);pb(g+2|0,c[f+4>>2]|0,1);h=h+1|0;if(h>>>0>=(c[n>>2]|0)>>>0)break;else{g=g+3|0;f=f+52|0}}}b=(Nb(b,c[m>>2]|0,o,d)|0)==(o|0)&1;i=p;return b|0}function Md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;q=r+16|0;p=r+8|0;j=r;o=r+20|0;k=a+200|0;l=c[k>>2]|0;m=a+164|0;n=c[m>>2]|0;e=c[n+(l*5640|0)+5584>>2]|0;if(!(c[e>>2]&1))g=5;else g=(c[e+4>>2]|0)+5|0;h=g+9|0;c[o>>2]=h;f=a+48|0;a=a+44|0;e=c[a>>2]|0;do if(h>>>0>(c[f>>2]|0)>>>0){e=Tc(e,h)|0;if(e){c[a>>2]=e;c[f>>2]=h;break}Uc(c[a>>2]|0);c[a>>2]=0;c[f>>2]=0;Ub(d,1,11687,j)|0;q=0;i=r;return q|0}while(0);pb(e,65362,2);pb(e+2|0,g+7|0,2);pb(e+4|0,c[n+(l*5640|0)>>2]|0,1);pb(e+5|0,c[n+(l*5640|0)+4>>2]|0,1);pb(e+6|0,c[n+(l*5640|0)+8>>2]|0,2);pb(e+8|0,c[n+(l*5640|0)+16>>2]|0,1);c[o>>2]=g;if(!(ae(c[m>>2]|0,c[k>>2]|0,e+9|0,o,d)|0)){Ub(d,1,11726,p)|0;q=0;i=r;return q|0}if(!(c[o>>2]|0)){q=(Nb(b,c[a>>2]|0,h,d)|0)==(h|0)&1;i=r;return q|0}else{Ub(d,1,11726,q)|0;q=0;i=r;return q|0}return 0}function Nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;o=p+16|0;n=p+8|0;j=p;l=p+20|0;k=a+200|0;m=a+164|0;e=c[(c[m>>2]|0)+((c[k>>2]|0)*5640|0)+5584>>2]|0;f=c[e+24>>2]|0;if((f|0)==1)e=1;else e=((c[e+4>>2]|0)*3|0)+-2|0;g=(f|0)==0?e+1|0:e<<1|1;h=g+4|0;c[l>>2]=h;f=a+48|0;a=a+44|0;e=c[a>>2]|0;do if(h>>>0>(c[f>>2]|0)>>>0){e=Tc(e,h)|0;if(e){c[a>>2]=e;c[f>>2]=h;break}Uc(c[a>>2]|0);c[a>>2]=0;c[f>>2]=0;Ub(d,1,11622,j)|0;o=0;i=p;return o|0}while(0);pb(e,65372,2);pb(e+2|0,g+2|0,2);c[l>>2]=g;if(!($d(c[m>>2]|0,c[k>>2]|0,0,e+4|0,l,d)|0)){Ub(d,1,11661,n)|0;o=0;i=p;return o|0}if(!(c[l>>2]|0)){o=(Nb(b,c[a>>2]|0,h,d)|0)==(h|0)&1;i=p;return o|0}else{Ub(d,1,11661,o)|0;o=0;i=p;return o|0}return 0}function Od(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;u=w;r=w+4|0;o=a+80|0;e=c[(c[o>>2]|0)+16>>2]|0;if(e>>>0<=1){v=1;i=w;return v|0}s=a+164|0;t=a+200|0;q=a+48|0;n=a+44|0;m=1;while(1){h=c[s>>2]|0;k=c[t>>2]|0;g=c[h+(k*5640|0)+5584>>2]|0;j=c[g+(m*1080|0)>>2]|0;a:do if((((((c[g>>2]|0)==(j|0)?(p=c[g+4>>2]|0,(p|0)==(c[g+(m*1080|0)+4>>2]|0)):0)?(c[g+8>>2]|0)==(c[g+(m*1080|0)+8>>2]|0):0)?(c[g+12>>2]|0)==(c[g+(m*1080|0)+12>>2]|0):0)?(c[g+16>>2]|0)==(c[g+(m*1080|0)+16>>2]|0):0)?(c[g+20>>2]|0)==(c[g+(m*1080|0)+20>>2]|0):0){if(p){a=0;do{if((c[g+812+(a<<2)>>2]|0)!=(c[g+(m*1080|0)+812+(a<<2)>>2]|0)){v=13;break a}if((c[g+944+(a<<2)>>2]|0)!=(c[g+(m*1080|0)+944+(a<<2)>>2]|0)){v=13;break a}a=a+1|0}while(a>>>0

>>0)}}else v=13;while(0);if((v|0)==13){v=0;if(!(j&1))a=5;else a=(c[g+(m*1080|0)+4>>2]|0)+5|0;l=a+(e>>>0<257?6:7)|0;f=c[n>>2]|0;if(l>>>0>(c[q>>2]|0)>>>0){a=Tc(f,l)|0;if(!a){v=17;break}c[n>>2]=a;c[q>>2]=l;k=c[t>>2]|0;h=c[s>>2]|0;g=c[h+(k*5640|0)+5584>>2]|0;e=c[(c[o>>2]|0)+16>>2]|0;j=c[g+(m*1080|0)>>2]|0;f=a}e=e>>>0<257?1:2;if(!(j&1))a=5;else a=(c[g+(m*1080|0)+4>>2]|0)+5|0;pb(f,65363,2);pb(f+2|0,e+3+a|0,2);pb(f+4|0,m,e);j=e|4;pb(f+j|0,c[(c[h+(k*5640|0)+5584>>2]|0)+(m*1080|0)>>2]|0,1);c[r>>2]=a;ae(c[s>>2]|0,c[t>>2]|0,f+(j+1)|0,r,d)|0;if((Nb(b,c[n>>2]|0,l,d)|0)!=(l|0)){a=0;v=24;break}e=c[(c[o>>2]|0)+16>>2]|0}m=m+1|0;if(m>>>0>=e>>>0){a=1;v=24;break}}if((v|0)==17){Uc(c[n>>2]|0);c[n>>2]=0;c[q>>2]=0;Ub(d,1,11548,u)|0;v=0;i=w;return v|0}else if((v|0)==24){i=w;return a|0}return 0}function Pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;r=t;o=t+4|0;m=a+80|0;e=c[(c[m>>2]|0)+16>>2]|0;if(e>>>0<=1){s=1;i=t;return s|0}p=a+164|0;q=a+200|0;n=a+48|0;l=a+44|0;k=1;while(1){j=c[(c[p>>2]|0)+((c[q>>2]|0)*5640|0)+5584>>2]|0;g=c[j+24>>2]|0;h=c[j+(k*1080|0)+24>>2]|0;a:do if((g|0)==(h|0)?(c[j+804>>2]|0)==(c[j+(k*1080|0)+804>>2]|0):0){if((g|0)!=1){f=(c[j+4>>2]|0)*3|0;a=f+-2|0;if((f|0)!=((c[j+(k*1080|0)+4>>2]|0)*3|0)){s=14;break}if(!a)break}else a=1;f=0;do{if((c[j+28+(f<<3)>>2]|0)!=(c[j+(k*1080|0)+28+(f<<3)>>2]|0)){s=14;break a}f=f+1|0}while(f>>>0>>0);if(g){f=0;do{if((c[j+28+(f<<3)+4>>2]|0)!=(c[j+(k*1080|0)+28+(f<<3)+4>>2]|0)){s=14;break a}f=f+1|0}while(f>>>0>>0)}}else s=14;while(0);if((s|0)==14){s=0;if((h|0)==1)a=1;else a=((c[j+(k*1080|0)+4>>2]|0)*3|0)+-2|0;g=((h|0)==0?a+1|0:a<<1|1)+5+(e>>>0>256&1)|0;a=c[l>>2]|0;if(g>>>0>(c[n>>2]|0)>>>0){a=Tc(a,g)|0;if(!a){s=18;break}c[l>>2]=a;c[n>>2]=g;e=c[(c[p>>2]|0)+((c[q>>2]|0)*5640|0)+5584>>2]|0;f=c[e+(k*1080|0)+24>>2]|0}else{f=h;e=j}if((f|0)==1)e=1;else e=((c[e+(k*1080|0)+4>>2]|0)*3|0)+-2|0;f=(f|0)==0?e+1|0:e<<1|1;c[o>>2]=f+6;pb(a,65373,2);e=a+2|0;if((c[(c[m>>2]|0)+16>>2]|0)>>>0<257){pb(e,f+3|0,2);pb(a+4|0,k,1);a=a+5|0}else{pb(e,f+4|0,2);pb(a+4|0,k,2);a=a+6|0}c[o>>2]=f;$d(c[p>>2]|0,c[q>>2]|0,k,a,o,d)|0;if((Nb(b,c[l>>2]|0,g,d)|0)!=(g|0)){a=0;s=28;break}e=c[(c[m>>2]|0)+16>>2]|0}k=k+1|0;if(k>>>0>=e>>>0){a=1;s=28;break}}if((s|0)==18){Uc(c[l>>2]|0);c[l>>2]=0;c[n>>2]=0;Ub(d,1,11476,r)|0;s=0;i=t;return s|0}else if((s|0)==28){i=t;return a|0}return 0}function Qd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l;h=(c[a+32>>2]|0)*5|0;j=h+6|0;f=a+48|0;k=a+44|0;e=c[k>>2]|0;do if(j>>>0>(c[f>>2]|0)>>>0){e=Tc(e,j)|0;if(e){c[k>>2]=e;c[f>>2]=j;break}Uc(c[k>>2]|0);c[k>>2]=0;c[f>>2]=0;Ub(d,1,11437,g)|0;b=0;i=l;return b|0}while(0);g=Pb(b)|0;a=a+16|0;c[a>>2]=g;c[a+4>>2]=C;pb(e,65365,2);pb(e+2|0,h+4|0,2);pb(e+4|0,0,1);pb(e+5|0,80,1);b=(Nb(b,c[k>>2]|0,j,d)|0)==(j|0)&1;i=l;return b|0}function Rd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;j=q;p=q+4|0;c[p>>2]=0;m=a+200|0;e=c[m>>2]|0;l=a+164|0;f=c[l>>2]|0;k=a+80|0;h=c[(c[k>>2]|0)+16>>2]|0;o=(_(h>>>0<257?7:9,(c[f+(e*5640|0)+420>>2]|0)+1|0)|0)+4|0;g=a+48|0;n=a+44|0;a=c[n>>2]|0;do if(o>>>0>(c[g>>2]|0)>>>0){e=Tc(a,o)|0;if(e){c[n>>2]=e;c[g>>2]=o;g=e;a=c[(c[k>>2]|0)+16>>2]|0;f=c[l>>2]|0;e=c[m>>2]|0;break}Uc(c[n>>2]|0);c[n>>2]=0;c[g>>2]=0;Ub(d,1,11398,j)|0;b=0;i=q;return b|0}else{g=a;a=h}while(0);_d(a,f,e,g,p);b=(Nb(b,c[n>>2]|0,o,d)|0)==(o|0)&1;i=q;return b|0}function Sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+164|0;j=a+80|0;f=c[j>>2]|0;e=c[f+16>>2]|0;if(!e){b=1;return b|0}h=a+44|0;a=0;g=c[(c[i>>2]|0)+5584>>2]|0;while(1){if(c[g+808>>2]|0){k=c[(c[i>>2]|0)+5584>>2]|0;m=e>>>0<257?1:2;f=m+6|0;l=c[h>>2]|0;pb(l,65374,2);e=m|4;pb(l+2|0,e,2);pb(l+4|0,a,m);pb(l+e|0,0,1);pb(l+(e+1)|0,c[k+(a*1080|0)+808>>2]|0,1);if((Nb(b,c[h>>2]|0,f,d)|0)!=(f|0)){a=0;e=7;break}f=c[j>>2]|0}a=a+1|0;e=c[f+16>>2]|0;if(a>>>0>=e>>>0){a=1;e=7;break}else g=g+1080|0}if((e|0)==7)return a|0;return 0}function Td(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l;h=c[a+108>>2]|0;j=wi(h)|0;k=j+6|0;e=a+48|0;f=a+44|0;a=c[f>>2]|0;do if(k>>>0>(c[e>>2]|0)>>>0){a=Tc(a,k)|0;if(a){c[f>>2]=a;c[e>>2]=k;break}Uc(c[f>>2]|0);c[f>>2]=0;c[e>>2]=0;Ub(d,1,11355,g)|0;b=0;i=l;return b|0}while(0);pb(a,65380,2);pb(a+2|0,j+4|0,2);pb(a+4|0,1,2);Ui(a+6|0,h|0,j|0)|0;b=(Nb(b,c[f>>2]|0,k,d)|0)==(k|0)&1;i=l;return b|0}function Ud(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+32|0;w=A+24|0;t=A+16|0;o=A+8|0;g=A;j=c[b+80>>2]|0;k=j+16|0;h=c[k>>2]|0;l=h+6|0;v=b+48|0;z=b+44|0;f=c[z>>2]|0;do if(l>>>0>(c[v>>2]|0)>>>0){f=Tc(f,l)|0;if(f){c[z>>2]=f;c[v>>2]=l;break}Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11199,g)|0;d=0;i=A;return d|0}while(0);pb(f,65400,2);pb(f+2|0,h+4|0,2);pb(f+4|0,c[k>>2]|0,2);if(c[k>>2]|0){h=0;g=c[j+24>>2]|0;f=f+6|0;while(1){pb(f,(c[g+24>>2]|0)+-1|c[g+32>>2]<<7,1);h=h+1|0;if(h>>>0>=(c[k>>2]|0)>>>0)break;else{g=g+52|0;f=f+1|0}}}if((Nb(d,c[z>>2]|0,l,e)|0)!=(l|0)){d=0;i=A;return d|0}q=b+200|0;n=c[q>>2]|0;r=b+164|0;m=c[r>>2]|0;g=m+(n*5640|0)+5616|0;a:do if(c[g>>2]|0){l=0;b=c[m+(n*5640|0)+5612>>2]|0;while(1){h=b+16|0;j=c[h>>2]|0;k=j+10|0;f=c[z>>2]|0;if(k>>>0>(c[v>>2]|0)>>>0){f=Tc(f,k)|0;if(!f)break;c[z>>2]=f;c[v>>2]=k}pb(f,65396,2);pb(f+2|0,j+8|0,2);pb(f+4|0,0,2);pb(f+6|0,c[b+4>>2]<<8|c[b+8>>2]&255|c[b>>2]<<10,2);pb(f+8|0,0,2);Ui(f+10|0,c[b+12>>2]|0,c[h>>2]|0)|0;if((Nb(d,c[z>>2]|0,k,e)|0)!=(k|0)){s=0;x=42;break}l=l+1|0;if(l>>>0>=(c[g>>2]|0)>>>0)break a;else b=b+20|0}if((x|0)==42){i=A;return s|0}Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11238,o)|0;d=0;i=A;return d|0}while(0);o=m+(n*5640|0)+5628|0;b:do if(c[o>>2]|0){p=0;m=c[m+(n*5640|0)+5624>>2]|0;while(1){l=m+4|0;g=c[l>>2]|0;j=g>>>0>255;k=j?2:1;j=j?32768:0;g=_(k,g<<1)|0;b=g+19|0;f=c[z>>2]|0;if(b>>>0>(c[v>>2]|0)>>>0){f=Tc(f,b)|0;if(!f)break;c[z>>2]=f;c[v>>2]=b}pb(f,65397,2);pb(f+2|0,g+17|0,2);pb(f+4|0,0,2);pb(f+6|0,c[m>>2]|0,1);pb(f+7|0,0,2);pb(f+9|0,1,2);pb(f+11|0,1,1);pb(f+12|0,c[l>>2]|j,2);f=f+14|0;if(!(c[l>>2]|0))g=0;else{h=0;do{pb(f,h,k);f=f+k|0;h=h+1|0;g=c[l>>2]|0}while(h>>>0>>0)}pb(f,g|j,2);f=f+2|0;if(!(c[l>>2]|0))h=f;else{g=0;do{pb(f,g,k);f=f+k|0;g=g+1|0}while(g>>>0<(c[l>>2]|0)>>>0);h=f}f=((a[m+16>>0]^1)&255)<<16&65536;g=c[m+8>>2]|0;if(g)f=c[g+8>>2]|f;g=c[m+12>>2]|0;if(g)f=c[g+8>>2]<<8|f;pb(h,f,3);if((Nb(d,c[z>>2]|0,b,e)|0)!=(b|0)){s=0;x=42;break}p=p+1|0;if(p>>>0>=(c[o>>2]|0)>>>0)break b;else m=m+20|0}if((x|0)==42){i=A;return s|0}Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11277,t)|0;d=0;i=A;return d|0}while(0);k=c[q>>2]|0;j=c[r>>2]|0;l=j+(k*5640|0)+5628|0;g=c[l>>2]|0;b=g+5|0;f=c[z>>2]|0;do if(b>>>0>(c[v>>2]|0)>>>0){f=Tc(f,b)|0;if(!f){Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11316,w)|0;u=1;break}else{c[z>>2]=f;c[v>>2]=b;y=f;x=37;break}}else{y=f;x=37}while(0);if((x|0)==37){pb(y,65399,2);pb(y+2|0,g+3|0,2);pb(y+4|0,c[l>>2]|0,1);if(c[l>>2]|0){h=0;g=y+5|0;f=c[j+(k*5640|0)+5624>>2]|0;while(1){pb(g,c[f>>2]|0,1);h=h+1|0;if(h>>>0>=(c[l>>2]|0)>>>0)break;else{g=g+1|0;f=f+20|0}}}u=(Nb(d,c[z>>2]|0,b,e)|0)!=(b|0)}d=u&1^1;i=A;return d|0}function Vd(a,b,d){a=a|0;b=b|0;d=d|0;d=Pb(b)|0;b=(c[a+196>>2]|0)+8|0;c[b>>2]=d;c[b+4>>2]=C;return 1}function Wd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;b=Tf(0)|0;e=a+204|0;c[e>>2]=b;if(!b){Ub(d,1,11159,f)|0;d=0;i=f;return d|0}if(Xf(b,c[a+80>>2]|0,a+88|0)|0){d=1;i=f;return d|0}Yf(c[e>>2]|0);c[e>>2]=0;d=0;i=f;return d|0}function Xd(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;O=d+80|0;E=c[O>>2]|0;P=d+164|0;i=c[P>>2]|0;N=E+24|0;F=c[N>>2]|0;f=c[F>>2]|0;h=c[F+4>>2]|0;M=E+16|0;F=_(c[F+24>>2]|0,c[M>>2]|0)|0;D=Pb(e)|0;q=d+116|0;l=c[q>>2]|0;r=d+112|0;e=c[r>>2]|0;G=(+(D>>>0)+4294967296.0*+(C|0))/+((_(e,l)|0)>>>0);D=(a[d+181>>0]&8)==0?1:2;if(l){s=d+92|0;u=d+100|0;v=d+96|0;y=d+104|0;z=E+4|0;A=E+8|0;B=E+12|0;x=+((_(f<<3,h)|0)>>>0);m=e;f=e;p=0;e=i;do{o=p;p=p+1|0;if(!f)f=0;else{m=0;do{w=+Sa[D&3](e);l=c[e+8>>2]|0;w=w/+(l>>>0);Q=c[s>>2]|0;i=c[u>>2]|0;k=(_(i,m)|0)+Q|0;f=c[E>>2]|0;f=(k|0)>(f|0)?k:f;k=c[v>>2]|0;j=c[y>>2]|0;R=(_(j,o)|0)+k|0;h=c[z>>2]|0;h=(R|0)>(h|0)?R:h;m=m+1|0;Q=(_(i,m)|0)+Q|0;i=c[A>>2]|0;i=(Q|0)<(i|0)?Q:i;k=(_(j,p)|0)+k|0;j=c[B>>2]|0;j=(k|0)<(j|0)?k:j;k=e+20|0;n=+g[k>>2];if(n!=0.0)g[k>>2]=+((_(_(i-f|0,F)|0,j-h|0)|0)>>>0)/(x*n)-w;if(l>>>0>1){n=+((_(_(i-f|0,F)|0,j-h|0)|0)>>>0);f=1;h=e+24|0;while(1){t=+g[h>>2];if(t!=0.0)g[h>>2]=n/(x*t)-w;f=f+1|0;if(f>>>0>=l>>>0)break;else h=h+4|0}}e=e+5640|0;f=c[r>>2]|0}while(m>>>0>>0);l=c[q>>2]|0;m=f}}while(p>>>0>>0);if(!l)l=0;else{s=(m|0)==0;t=G+2.0;v=m>>>0>1?m:1;u=0;f=c[P>>2]|0;do{if(!s){p=f+16|0;q=0;r=f;while(1){e=r+20|0;n=+g[e>>2];if(n!=0.0?(x=n-G,g[e>>2]=x,x<30.0):0)g[e>>2]=30.0;j=r+24|0;e=c[r+8>>2]|0;o=e+-1|0;n=+g[j>>2];h=n!=0.0;if(o>>>0>1){k=p+(e<<2)|0;i=1;e=j;do{if(h?(x=n-G,g[e>>2]=x,I=+g[e+-4>>2],x>2]=I+20.0;e=e+4|0;i=i+1|0;n=+g[e>>2];h=n!=0.0}while((i|0)!=(o|0));if(h){H=n;K=k;L=29}}else if(h){H=n;K=j;L=29}if((L|0)==29?(L=0,x=H-t,g[K>>2]=x,J=+g[K+-4>>2],x>2]=J+20.0;q=q+1|0;if(q>>>0>=m>>>0)break;else{p=p+5640|0;r=r+5640|0}}f=f+(v*5640|0)|0}u=u+1|0}while(u>>>0>>0)}}else{m=e;l=0}h=c[M>>2]|0;if(!h)u=0;else{i=(c[d+100>>2]|0)+-1|0;j=(c[d+104>>2]|0)+-1|0;k=0;e=c[N>>2]|0;f=0;while(1){R=c[e>>2]|0;Q=c[e+4>>2]|0;R=_(((j+Q|0)>>>0)/(Q>>>0)|0,((i+R|0)>>>0)/(R>>>0)|0)|0;f=(_(R,c[e+24>>2]|0)|0)+f|0;k=k+1|0;if(k>>>0>=h>>>0)break;else e=e+52|0}u=~~(+(f>>>0)*.1625)>>>0}o=c[(c[O>>2]|0)+16>>2]|0;q=o+-1|0;s=_(l,m)|0;p=(s|0)==0;if(p)i=0;else{e=0;f=0;h=c[P>>2]|0;while(1){R=c[h+5588>>2]|0;f=f>>>0>R>>>0?f:R;e=e+1|0;if((e|0)==(s|0))break;else h=h+5640|0}i=f*12|0}r=d+88|0;if(((b[r>>1]|0)+-3&65535)>=4){if(p){e=0;f=0}else{m=(o|0)==0;k=0;f=0;do{if(!m){h=c[(c[P>>2]|0)+(k*5640|0)+5584>>2]|0;j=0;do{if(!(c[h+(j*1080|0)>>2]&1))e=5;else e=(c[h+(j*1080|0)+4>>2]|0)+5|0;f=f>>>0>e>>>0?f:e;j=j+1|0}while((j|0)!=(o|0))}k=k+1|0}while((k|0)!=(s|0));l=0;e=0;do{if(!m){j=c[(c[P>>2]|0)+(l*5640|0)+5584>>2]|0;k=0;do{if(!(c[j+(k*1080|0)>>2]&1))h=5;else h=(c[j+(k*1080|0)+4>>2]|0)+5|0;e=e>>>0>h>>>0?e:h;k=k+1|0}while((k|0)!=(o|0))}l=l+1|0}while((l|0)!=(s|0))}i=(_(f+12+e|0,q)|0)+i|0}if(p)f=13;else{h=0;f=0;e=c[P>>2]|0;while(1){R=c[e+420>>2]|0;f=f>>>0>R>>>0?f:R;h=h+1|0;if((h|0)==(s|0))break;else e=e+5640|0}f=(f*9|0)+13|0}R=i+u+f|0;c[d+40>>2]=R;R=Pc(R)|0;c[d+36>>2]=R;if(!R){R=0;return R|0}if(((b[r>>1]|0)+-3&65535)>=4){R=1;return R|0}f=Pc((c[d+32>>2]|0)*5|0)|0;c[d+24>>2]=f;if(!f){R=0;return R|0}c[d+28>>2]=f;R=1;return R|0}function Yd(a){a=a|0;return 0.0}function Zd(a){a=a|0;return +(+((((c[a+5588>>2]|0)*14|0)+-14|0)>>>0))}function _d(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=c[b+(d*5640|0)+5584>>2]|0;q=(c[b+(d*5640|0)+420>>2]|0)+1|0;j=a>>>0<257?1:2;p=_(q,(j<<1)+5|0)|0;r=p+4|0;pb(e,65375,2);pb(e+2|0,p+2|0,2);if(!q){c[f>>2]=r;return}k=j+1|0;l=j+3|0;m=j|4;n=m+j|0;o=n+1|0;p=b+(d*5640|0)+8|0;h=g+4|0;i=0;e=e+4|0;g=b+(d*5640|0)+424|0;while(1){pb(e,c[g>>2]|0,1);pb(e+1|0,c[g+4>>2]|0,j);t=g+8|0;pb(e+k|0,c[t>>2]|0,2);b=g+12|0;pb(e+l|0,c[b>>2]|0,1);d=g+16|0;pb(e+m|0,c[d>>2]|0,j);pb(e+n|0,c[g+36>>2]|0,1);u=c[t>>2]|0;s=c[p>>2]|0;c[t>>2]=(u|0)<(s|0)?u:s;t=c[b>>2]|0;s=c[h>>2]|0;c[b>>2]=(t|0)<(s|0)?t:s;b=c[d>>2]|0;c[d>>2]=(b|0)<(a|0)?b:a;i=i+1|0;if((i|0)==(q|0))break;else{e=e+o|0;g=g+148|0}}c[f>>2]=r;return}function $d(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+8|0;j=n;l=c[a+(b*5640|0)+5584>>2]|0;b=c[l+(d*1080|0)+24>>2]|0;do if((b|0)!=1){a=(c[l+(d*1080|0)+4>>2]|0)*3|0;h=a+-2|0;if(!b){a=a+-1|0;if((c[f>>2]|0)>>>0>>0){Ub(g,1,11515,j)|0;f=0;i=n;return f|0}else{pb(e,c[l+(d*1080|0)+804>>2]<<5,1);if(!h)break;else b=0;do{e=e+1|0;pb(e,c[l+(d*1080|0)+28+(b<<3)>>2]<<3,1);b=b+1|0}while((b|0)!=(h|0))}}else m=7}else{h=1;b=1;m=7}while(0);if((m|0)==7){a=h<<1|1;if((c[f>>2]|0)>>>0>>0){Ub(g,1,11515,k)|0;f=0;i=n;return f|0}pb(e,(c[l+(d*1080|0)+804>>2]<<5)+b|0,1);if(h){e=e+1|0;b=0;while(1){pb(e,(c[l+(d*1080|0)+28+(b<<3)>>2]<<11)+(c[l+(d*1080|0)+28+(b<<3)+4>>2]|0)|0,2);b=b+1|0;if((b|0)==(h|0))break;else e=e+2|0}}}c[f>>2]=(c[f>>2]|0)-a;f=1;i=n;return f|0}function ae(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;g=c[a+(b*5640|0)+5584>>2]|0;if((c[e>>2]|0)>>>0<5){Ub(f,1,11587,j)|0;e=0;i=j;return e|0}h=g+4|0;pb(d,(c[h>>2]|0)+-1|0,1);pb(d+1|0,(c[g+8>>2]|0)+-2|0,1);pb(d+2|0,(c[g+12>>2]|0)+-2|0,1);pb(d+3|0,c[g+16>>2]|0,1);pb(d+4|0,c[g+20>>2]|0,1);b=(c[e>>2]|0)+-5|0;c[e>>2]=b;if(!(c[g>>2]&1)){e=1;i=j;return e|0}a=c[h>>2]|0;if(b>>>0>>0){Ub(f,1,11587,j+8|0)|0;e=0;i=j;return e|0}if(!a)a=0;else{b=d+5|0;d=0;while(1){pb(b,(c[g+944+(d<<2)>>2]<<4)+(c[g+812+(d<<2)>>2]|0)|0,1);d=d+1|0;a=c[h>>2]|0;if(d>>>0>=a>>>0)break;else b=b+1|0}b=c[e>>2]|0}c[e>>2]=b-a;e=1;i=j;return e|0}function be(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[b+76>>2]|0;g=c[i+(f*5640|0)+4>>2]|0;h=696;while(1){m=c[h>>2]|0;if((m|0)==-1|(m|0)==(g|0))break;else h=h+12|0}if(!(a[b+93>>0]&8)){b=1;return b|0}m=d[b+92>>0]|0;j=i+(f*5640|0)+424+(e*148|0)+92|0;k=i+(f*5640|0)+424+(e*148|0)+88|0;l=i+(f*5640|0)+424+(e*148|0)+96|0;e=i+(f*5640|0)+424+(e*148|0)+84|0;i=a[h+4>>0]|0;switch(i|0){case 67:{g=c[j>>2]|0;break}case 82:{g=c[k>>2]|0;break}case 80:{g=c[l>>2]|0;break}case 76:{g=c[e>>2]|0;break}default:g=1}if((m|0)!=(i|0)){i=a[h+5>>0]|0;switch(i|0){case 67:{g=_(c[j>>2]|0,g)|0;break}case 82:{g=_(c[k>>2]|0,g)|0;break}case 80:{g=_(c[l>>2]|0,g)|0;break}case 76:{g=_(c[e>>2]|0,g)|0;break}default:{}}if((m|0)!=(i|0)){i=a[h+6>>0]|0;switch(i|0){case 67:{g=_(c[j>>2]|0,g)|0;break}case 82:{g=_(c[k>>2]|0,g)|0;break}case 80:{g=_(c[l>>2]|0,g)|0;break}case 76:{g=_(c[e>>2]|0,g)|0;break}default:{}}if((m|0)!=(i|0)){h=a[h+7>>0]|0;switch(h|0){case 67:{g=_(c[j>>2]|0,g)|0;break}case 82:{g=_(c[k>>2]|0,g)|0;break}case 80:{g=_(c[l>>2]|0,g)|0;break}case 76:{g=_(c[e>>2]|0,g)|0;break}default:{}}if((m|0)==(h|0))h=3;else{b=g;return b|0}}else h=2}else h=1}else h=0;c[b+84>>2]=h;b=g;return b|0}function ce(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=g+16|0;if(!(c[B>>2]|0)){B=1;return B|0}A=0;z=c[g+24>>2]|0;while(1){k=i+44|0;j=c[k>>2]|0;l=i+8|0;if(!j){g=i+12|0;j=Qc(_(c[g>>2]|0,c[l>>2]|0)|0,4)|0;c[k>>2]=j;if(!j){h=0;i=61;break}}else g=i+12|0;q=z+36|0;c[i+36>>2]=c[q>>2];x=c[z+24>>2]|0;t=c[f+24>>2]|0;q=c[q>>2]|0;x=((x&7|0)!=0&1)+(x>>>3)|0;x=(x|0)==3?4:x;n=c[t+(q*136|0)+8>>2]|0;m=c[t+(q*136|0)>>2]|0;v=n-m|0;s=c[t+(q*136|0)+12>>2]|0;q=c[t+(q*136|0)+4>>2]|0;t=s-q|0;k=c[i+16>>2]|0;p=c[i+40>>2]|0;o=Ri(1,0,p|0)|0;w=C;k=Si(k|0,0,-1,-1)|0;k=Si(k|0,C|0,o|0,w|0)|0;k=Ti(k|0,C|0,p|0)|0;r=Si(c[i+20>>2]|0,0,-1,-1)|0;w=Si(r|0,C|0,o|0,w|0)|0;p=Ti(w|0,C|0,p|0)|0;w=c[l>>2]|0;l=k+w|0;o=c[g>>2]|0;r=p+o|0;do if(k>>>0>>0){g=m-k|0;if(n>>>0>l>>>0){y=l-m|0;u=0;m=v-y|0;n=g}else{u=0;m=0;n=g;y=v}}else{g=k-m|0;if(n>>>0>l>>>0){u=g;m=n-l|0;n=0;y=w;break}else{u=g;m=0;n=0;y=v-g|0;break}}while(0);do if(p>>>0>>0){l=q-p|0;if(s>>>0>r>>>0){k=r-q|0;o=k;g=0;k=t-k|0}else{o=t;g=0;k=0}}else{g=p-q|0;if(s>>>0>r>>>0){k=s-r|0;l=0;break}else{o=t-g|0;k=0;l=0;break}}while(0);if((u|m|y|k|g|o|0)<0){h=0;i=61;break}g=(_(g,v)|0)+u|0;q=u+m|0;r=(_(k,v)|0)-u|0;p=w-y|0;j=j+((_(w,l)|0)+n<<2)|0;switch(x|0){case 1:{h=h+g|0;g=(o|0)==0;if(!(c[z+32>>2]|0)){if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=d[j>>0];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+1|0}}g=l;h=h+y|0}h=h+q|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}}else if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=a[j>>0];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+1|0}}g=l;h=h+y|0}h=h+q|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}h=h+r|0;break}case 2:{h=h+(g<<1)|0;g=(o|0)==0;if(!(c[z+32>>2]|0)){if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=e[j>>1];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+2|0}}g=l;h=h+(y<<1)|0}h=h+(q<<1)|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}}else if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=b[j>>1];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+2|0}}g=l;h=h+(y<<1)|0}h=h+(q<<1)|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}h=h+(r<<1)|0;break}case 4:{h=h+(g<<2)|0;if(o){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=c[j>>2];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+4|0}}g=l;h=h+(y<<2)|0}h=h+(q<<2)|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}h=h+(r<<2)|0;break}default:{}}A=A+1|0;if(A>>>0>=(c[B>>2]|0)>>>0){h=1;i=61;break}else{i=i+52|0;z=z+52|0;f=f+52|0}}if((i|0)==61)return h|0;return 0}function de(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;x=z+88|0;u=z+80|0;v=z+72|0;t=z+64|0;q=z+56|0;p=z+48|0;m=z+40|0;k=z+32|0;j=z+24|0;h=z+16|0;r=z+100|0;s=z+96|0;w=z+92|0;c[s>>2]=0;y=b+200|0;if((f|0)!=8){Ub(g,1,8662,z)|0;Ub(g,1,8662,z+8|0)|0;g=0;i=z;return g|0}qb(e,y,2);qb(e+2|0,r,4);qb(e+6|0,w,1);qb(e+7|0,s,1);l=c[y>>2]|0;e=c[b+112>>2]|0;if(l>>>0>=(_(c[b+116>>2]|0,e)|0)>>>0){c[h>>2]=l;Ub(g,1,15258,h)|0;g=0;i=z;return g|0}f=c[b+164>>2]|0;o=(l>>>0)%(e>>>0)|0;n=(l>>>0)/(e>>>0)|0;e=c[r>>2]|0;do if((e+-1|0)>>>0<13){if((e|0)==12){c[j>>2]=12;Ub(g,2,15282,j)|0;e=c[r>>2]|0;break}c[k>>2]=e;Ub(g,1,15319,k)|0;g=0;i=z;return g|0}while(0);if(!e){Ub(g,4,15380,m)|0;c[b+72>>2]=1}e=c[s>>2]|0;do if(!e)e=c[f+(l*5640|0)+5588>>2]|0;else{e=((d[b+76>>0]|0)>>>4&1)+e|0;c[s>>2]=e;h=f+(l*5640|0)+5588|0;j=c[h>>2]|0;f=c[w>>2]|0;if((j+-1|0)>>>0>>0){c[p>>2]=f;c[p+4>>2]=j;Ub(g,1,15491,p)|0;c[b+72>>2]=1;g=0;i=z;return g|0}if(f>>>0>>0){c[h>>2]=e;break}c[q>>2]=f;c[q+4>>2]=e;Ub(g,1,15590,q)|0;c[b+72>>2]=1;g=0;i=z;return g|0}while(0);if((e|0)!=0?(e|0)==((c[w>>2]|0)+1|0):0){q=b+76|0;a[q>>0]=a[q>>0]|1}c[b+24>>2]=(c[b+72>>2]|0)==0?(c[r>>2]|0)+-12|0:0;c[b+8>>2]=16;e=c[b+60>>2]|0;if((e|0)==-1){if((o>>>0>=(c[b+28>>2]|0)>>>0?o>>>0<(c[b+36>>2]|0)>>>0:0)?n>>>0>=(c[b+32>>2]|0)>>>0:0)e=(n>>>0>=(c[b+40>>2]|0)>>>0&1)<<2&255;else e=4;r=b+76|0;a[r>>0]=a[r>>0]&-5|e}else{r=b+76|0;a[r>>0]=((c[y>>2]|0)!=(e|0)&1)<<2&255|a[r>>0]&-5}k=b+196|0;e=c[k>>2]|0;if(!e){g=1;i=z;return g|0}j=c[y>>2]|0;e=c[e+40>>2]|0;c[e+(j*40|0)>>2]=j;c[e+(j*40|0)+12>>2]=c[w>>2];f=c[s>>2]|0;if(f){c[e+(j*40|0)+4>>2]=f;c[e+(j*40|0)+8>>2]=c[s>>2];e=c[e+(j*40|0)+16>>2]|0;if(!e){x=Qc(c[s>>2]|0,24)|0;c[(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16>>2]=x;if(x){g=1;i=z;return g|0}Ub(g,1,15698,t)|0;g=0;i=z;return g|0}e=Tc(e,(c[s>>2]|0)*24|0)|0;f=(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16|0;if(!e){Uc(c[f>>2]|0);c[(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16>>2]=0;Ub(g,1,15698,v)|0;g=0;i=z;return g|0}else{c[f>>2]=e;g=1;i=z;return g|0}}if(!(c[e+(j*40|0)+16>>2]|0)){c[e+(j*40|0)+8>>2]=10;v=Qc(10,24)|0;f=c[y>>2]|0;e=c[(c[k>>2]|0)+40>>2]|0;c[e+(f*40|0)+16>>2]=v;if(!v){c[e+(f*40|0)+8>>2]=0;Ub(g,1,15698,u)|0;g=0;i=z;return g|0}else j=f}f=c[w>>2]|0;h=e+(j*40|0)+8|0;if(f>>>0<(c[h>>2]|0)>>>0){g=1;i=z;return g|0}f=f+1|0;c[h>>2]=f;e=Tc(c[e+(j*40|0)+16>>2]|0,f*24|0)|0;f=(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16|0;if(!e){Uc(c[f>>2]|0);y=c[y>>2]|0;w=c[(c[k>>2]|0)+40>>2]|0;c[w+(y*40|0)+16>>2]=0;c[w+(y*40|0)+8>>2]=0;Ub(g,1,15698,x)|0;g=0;i=z;return g|0}else{c[f>>2]=e;g=1;i=z;return g|0}return 0}function ee(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;p=s+48|0;q=s+40|0;k=s+32|0;n=s+56|0;j=s+52|0;c[n>>2]=e;r=b+80|0;l=c[r>>2]|0;o=b+8|0;if((c[o>>2]|0)==16)m=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else m=c[b+12>>2]|0;g=m+5636|0;h=a[g>>0]|0;if(h&1){Ub(f,1,15025,s)|0;r=0;i=s;return r|0}a[g>>0]=h|1;if(e>>>0<5){Ub(f,1,15089,s+8|0)|0;r=0;i=s;return r|0}qb(d,m,1);if((c[m>>2]|0)>>>0>7){Ub(f,1,15115,s+16|0)|0;r=0;i=s;return r|0}qb(d+1|0,j,1);j=c[j>>2]|0;g=m+4|0;c[g>>2]=j;if((j|0)>4){Ub(f,1,15149,s+24|0)|0;c[g>>2]=-1}g=m+8|0;qb(d+2|0,g,2);g=c[g>>2]|0;if((g+-1|0)>>>0>65534){c[k>>2]=g;Ub(f,1,15190,k)|0;r=0;i=s;return r|0}k=c[b+172>>2]|0;c[m+12>>2]=(k|0)==0?g:k;qb(d+4|0,m+16|0,1);k=d+5|0;c[n>>2]=e+-5;j=c[l+16>>2]|0;if(j){d=c[m>>2]&1;g=c[m+5584>>2]|0;h=0;do{c[g+(h*1080|0)>>2]=d;h=h+1|0}while(h>>>0>>0)}if(!(Fe(b,0,k,n,f)|0)){Ub(f,1,15089,q)|0;r=0;i=s;return r|0}if(c[n>>2]|0){Ub(f,1,15089,p)|0;r=0;i=s;return r|0}if((c[o>>2]|0)==16)g=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else g=c[b+12>>2]|0;g=c[g+5584>>2]|0;e=g+4|0;h=c[e>>2]|0;m=h<<2;if((c[(c[r>>2]|0)+16>>2]|0)>>>0<=1){r=1;i=s;return r|0}n=g+8|0;o=g+12|0;b=g+16|0;f=g+20|0;p=g+812|0;q=g+944|0;c[g+1084>>2]=h;j=c[n>>2]|0;c[g+1088>>2]=j;d=c[o>>2]|0;c[g+1092>>2]=d;k=c[b>>2]|0;c[g+1096>>2]=k;l=c[f>>2]|0;c[g+1100>>2]=l;Ui(g+1892|0,p|0,m|0)|0;Ui(g+2024|0,q|0,m|0)|0;if((c[(c[r>>2]|0)+16>>2]|0)>>>0<=2){r=1;i=s;return r|0}c[g+2164>>2]=h;c[g+2168>>2]=j;c[g+2172>>2]=d;c[g+2176>>2]=k;c[g+2180>>2]=l;Ui(g+2972|0,p|0,m|0)|0;Ui(g+3104|0,q|0,m|0)|0;if((c[(c[r>>2]|0)+16>>2]|0)>>>0>3)h=3;else{r=1;i=s;return r|0}while(1){j=c[n>>2]|0;d=c[o>>2]|0;k=c[b>>2]|0;l=c[f>>2]|0;c[g+3244>>2]=c[e>>2];c[g+3248>>2]=j;c[g+3252>>2]=d;c[g+3256>>2]=k;c[g+3260>>2]=l;Ui(g+4052|0,p|0,m|0)|0;Ui(g+4184|0,q|0,m|0)|0;h=h+1|0;if(h>>>0>=(c[(c[r>>2]|0)+16>>2]|0)>>>0){g=1;break}else g=g+1080|0}i=s;return g|0} +function lg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+272|0;n=u;s=u+136|0;t=u+8|0;if(!a){t=0;i=u;return t|0}m=a+4|0;if((c[a>>2]|0)==(b|0)?(c[m>>2]|0)==(d|0):0)f=a+8|0;else{c[a>>2]=b;c[m>>2]=d;c[s>>2]=b;c[t>>2]=d;f=a+8|0;c[f>>2]=0;g=0;j=d;k=b;l=0;while(1){r=_(j,k)|0;k=(k+1|0)/2|0;h=l+1|0;c[s+(h<<2)>>2]=k;j=(j+1|0)/2|0;c[t+(h<<2)>>2]=j;g=g+r|0;if(r>>>0<=1)break;else l=h}c[f>>2]=g;if(!g){f=a+12|0;g=c[f>>2]|0;if(g){Uc(g);c[f>>2]=0}Uc(a);t=0;i=u;return t|0}h=g<<4;j=a+16|0;k=a+12|0;do if(h>>>0>(c[j>>2]|0)>>>0){g=Tc(c[k>>2]|0,h)|0;if(g){c[k>>2]=g;d=c[j>>2]|0;Qi(g+d|0,0,h-d|0)|0;c[j>>2]=h;d=c[m>>2]|0;b=c[a>>2]|0;break}Ub(e,1,20166,n)|0;f=c[k>>2]|0;if(f){Uc(f);c[k>>2]=0}Uc(a);t=0;i=u;return t|0}while(0);g=c[k>>2]|0;b=g+((_(d,b)|0)<<4)|0;if(l){r=0;d=b;do{p=c[t+(r<<2)>>2]|0;a:do if((p|0)>0){q=c[s+(r<<2)>>2]|0;if((q|0)<=0){h=p+-1|0;j=0;while(1){o=(j&1|0)!=0|(j|0)==(h|0);k=o?d:b+(q<<4)|0;d=o?d:b;j=j+1|0;if((j|0)>=(p|0)){b=k;break a}else b=k}}o=((q+2+((q|0)<2?~q:-3)|0)>>>1)+1|0;e=p+-1|0;n=0;while(1){m=q;k=d;while(1){c[g>>2]=k;h=g+16|0;j=m;m=m+-2|0;if((m|0)>-1){c[h>>2]=k;g=g+32|0}else g=h;if((j|0)<=2)break;else k=k+16|0}d=d+(o<<4)|0;m=(n&1|0)!=0|(n|0)==(e|0);h=m?d:b+(q<<4)|0;d=m?d:b;n=n+1|0;if((n|0)>=(p|0)){b=h;break}else b=h}}while(0);r=r+1|0}while((r|0)!=(l|0))}c[g>>2]=0}f=c[f>>2]|0;if(!f){t=a;i=u;return t|0}g=0;b=c[a+12>>2]|0;while(1){c[b+4>>2]=999;c[b+8>>2]=0;c[b+12>>2]=0;g=g+1|0;if((g|0)==(f|0))break;else b=b+16|0}i=u;return a|0}function mg(a){a=a|0;var b=0,d=0;if(!a)return;b=a+12|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}Uc(a);return}function ng(a,b,d){a=a|0;b=b|0;d=d|0;b=(c[a+12>>2]|0)+(b<<4)|0;if(!b)return;while(1){a=b+4|0;if((c[a>>2]|0)<=(d|0)){b=4;break}c[a>>2]=d;b=c[b>>2]|0;if(!b){b=4;break}}if((b|0)==4)return}function og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+128|0;j=k;d=(c[b+12>>2]|0)+(d<<4)|0;if(!(c[d>>2]|0)){f=0;g=j}else{f=d;b=j;while(1){g=b+4|0;c[b>>2]=d;d=c[f>>2]|0;if(!(c[d>>2]|0)){f=0;break}else{f=d;b=g}}}while(1){h=d+8|0;b=c[h>>2]|0;if((f|0)>(b|0)){c[h>>2]=f;b=f}a:do if((b|0)<(e|0)){f=d+4|0;while(1){if((b|0)>=(c[f>>2]|0))break;Bg(a,0,1);b=b+1|0;if((b|0)>=(e|0)){d=b;break a}}d=d+12|0;if(!(c[d>>2]|0)){Bg(a,1,1);c[d>>2]=1;d=b}else d=b}else d=b;while(0);c[h>>2]=d;if((g|0)==(j|0))break;h=g+-4|0;f=d;d=c[h>>2]|0;g=h}i=k;return}function pg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+128|0;j=k;d=(c[b+12>>2]|0)+(d<<4)|0;if(!(c[d>>2]|0)){b=0;g=j}else{f=d;b=j;while(1){g=b+4|0;c[b>>2]=d;d=c[f>>2]|0;if(!(c[d>>2]|0)){b=0;break}else{f=d;b=g}}}while(1){h=d+8|0;f=c[h>>2]|0;if((b|0)>(f|0))c[h>>2]=b;else b=f;d=d+4|0;a:do if((b|0)<(e|0)){while(1){if((b|0)>=(c[d>>2]|0))break a;if(Cg(a,1)|0)break;b=b+1|0;if((b|0)>=(e|0))break a}c[d>>2]=b}while(0);c[h>>2]=b;if((g|0)==(j|0))break;h=g+-4|0;d=c[h>>2]|0;g=h}i=k;return (c[d>>2]|0)<(e|0)|0}function qg(){var a=0,b=0;a=Qc(1,12)|0;if(!a){a=0;return a|0}c[a+4>>2]=10;b=Qc(10,4)|0;c[a+8>>2]=b;if(b){b=a;return b|0}Uc(a);b=0;return b|0}function rg(a){a=a|0;var b=0;if(!a)return;b=c[a+8>>2]|0;if(b)Uc(b);Uc(a);return}function sg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;g=a+4|0;f=c[g>>2]|0;e=c[a>>2]|0;do if((f|0)==(e|0)){f=f+10|0;c[g>>2]=f;e=a+8|0;f=Tc(c[e>>2]|0,f<<2)|0;if(f){c[e>>2]=f;e=c[a>>2]|0;break}Uc(c[e>>2]|0);c[g>>2]=0;c[a>>2]=0;Ub(d,1,20214,h)|0;a=0;i=j;return a|0}else f=c[a+8>>2]|0;while(0);c[f+(e<<2)>>2]=b;c[a>>2]=e+1;a=1;i=j;return a|0}function tg(a){a=a|0;return c[a>>2]|0}function ug(a){a=a|0;return c[a+8>>2]|0}function vg(a){a=a|0;c[a>>2]=0;return}function wg(){return Pc(20)|0}function xg(a){a=a|0;if(!a)return;Uc(a);return}function yg(a){a=a|0;return (c[a+8>>2]|0)-(c[a>>2]|0)|0}function zg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=b+d;c[a+8>>2]=b;c[a+12>>2]=0;c[a+16>>2]=8;return}function Ag(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=b+d;c[a+8>>2]=b;c[a+12>>2]=0;c[a+16>>2]=0;return}function Bg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!e)return;k=b+16|0;l=b+12|0;m=b+8|0;h=b+4|0;b=c[k>>2]|0;j=e+-1|0;do{i=d>>>j&1;if(!b){g=c[l>>2]|0;b=g<<8&65280;c[l>>2]=b;b=(b|0)==65280?7:8;c[k>>2]=b;f=c[m>>2]|0;if(f>>>0<(c[h>>2]|0)>>>0){c[m>>2]=f+1;a[f>>0]=g;b=c[k>>2]|0}}b=b+-1|0;c[k>>2]=b;c[l>>2]=i<>2];j=j+-1|0}while(j>>>0>>0);return}function Cg(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!b){b=0;return b|0}j=a+16|0;k=a+12|0;l=a+8|0;h=a+4|0;e=c[j>>2]|0;f=c[k>>2]|0;i=b+-1|0;a=0;do{if(!e){g=f<<8&65280;c[k>>2]=g;e=(g|0)==65280?7:8;c[j>>2]=e;f=c[l>>2]|0;if(f>>>0<(c[h>>2]|0)>>>0){c[l>>2]=f+1;f=d[f>>0]|0|g;c[k>>2]=f}else f=g}e=e+-1|0;c[j>>2]=e;a=((f>>>e&1)<>>0>>0);return a|0}function Dg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=b+12|0;d=c[f>>2]|0;i=d<<8&65280;c[f>>2]=i;g=b+16|0;c[g>>2]=(i|0)==65280?7:8;i=b+8|0;e=c[i>>2]|0;h=b+4|0;if(e>>>0>=(c[h>>2]|0)>>>0){i=0;return i|0}c[i>>2]=e+1;a[e>>0]=d;if((c[g>>2]|0)!=7){i=1;return i|0}d=c[f>>2]|0;b=d<<8&65280;c[f>>2]=b;c[g>>2]=(b|0)==65280?7:8;b=c[i>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){i=0;return i|0}c[i>>2]=b+1;a[b>>0]=d;i=1;return i|0}function Eg(a){a=a|0;var b=0,e=0,f=0,g=0,h=0;h=a+12|0;b=c[h>>2]|0;do if((b&255|0)==255){f=b<<8&65280;c[h>>2]=f;b=a+16|0;c[b>>2]=(f|0)==65280?7:8;g=a+8|0;e=c[g>>2]|0;if(e>>>0<(c[a+4>>2]|0)>>>0){c[g>>2]=e+1;c[h>>2]=d[e>>0]|0|f;break}else{a=0;return a|0}}else b=a+16|0;while(0);c[b>>2]=0;a=1;return a|0}function Fg(a){a=a|0;return Pg(a,1)|0}function Gg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+32|0;B=D+16|0;C=D;k=c[a+24>>2]|0;j=(c[k+8>>2]|0)-(c[k>>2]|0)|0;h=(c[k+12>>2]|0)-(c[k+4>>2]|0)|0;A=(c[a+8>>2]|0)-(c[a>>2]|0)|0;if((b|0)==1){C=1;i=D;return C|0}g=b+-1|0;f=(g|0)==0;if(f)b=0;else{d=k;e=g;b=0;do{z=d;d=d+136|0;y=(c[z+144>>2]|0)-(c[d>>2]|0)|0;b=b>>>0>>0?y:b;z=(c[z+148>>2]|0)-(c[z+140>>2]|0)|0;b=b>>>0>>0?z:b;e=e+-1|0}while((e|0)!=0);b=b<<2}z=Rc(b)|0;c[B>>2]=z;if(!z){C=0;i=D;return C|0}c[C>>2]=z;if(!f){s=a+32|0;t=B+8|0;u=C+8|0;v=B+4|0;w=B+12|0;x=C+4|0;y=C+12|0;do{q=c[s>>2]|0;n=k;k=k+136|0;c[t>>2]=j;c[u>>2]=h;o=c[n+144>>2]|0;p=c[k>>2]|0;e=j;j=o-p|0;b=c[n+148>>2]|0;n=n+140|0;r=c[n>>2]|0;d=h;h=b-r|0;c[v>>2]=j-e;c[w>>2]=(p|0)%2|0;r=(b|0)==(r|0);if(!r){m=j<<2;b=0;while(1){a=_(b,A)|0;l=q+(a<<2)|0;if(e){d=l;f=z+(c[w>>2]<<2)|0;while(1){e=e+-1|0;c[f>>2]=c[d>>2];if(!e)break;else{d=d+4|0;f=f+8|0}}}d=c[v>>2]|0;if(d){e=q+((c[t>>2]|0)+a<<2)|0;f=z+(1-(c[w>>2]|0)<<2)|0;while(1){d=d+-1|0;c[f>>2]=c[e>>2];if(!d)break;else{e=e+4|0;f=f+8|0}}}Qg(B);Ui(l|0,z|0,m|0)|0;b=b+1|0;if((b|0)==(h|0))break;e=c[t>>2]|0}d=c[u>>2]|0;b=c[n>>2]|0}c[x>>2]=h-d;c[y>>2]=(b|0)%2|0;a:do if((o|0)!=(p|0)){b=0;while(1){if(d){e=q+(b<<2)|0;f=z+(c[y>>2]<<2)|0;while(1){d=d+-1|0;c[f>>2]=c[e>>2];if(!d)break;else{e=e+(A<<2)|0;f=f+8|0}}}d=c[x>>2]|0;if(d){e=q+((_(c[u>>2]|0,A)|0)+b<<2)|0;f=z+(1-(c[y>>2]|0)<<2)|0;while(1){d=d+-1|0;c[f>>2]=c[e>>2];if(!d)break;else{e=e+(A<<2)|0;f=f+8|0}}}Qg(C);if(!r){d=0;do{c[q+((_(d,A)|0)+b<<2)>>2]=c[z+(d<<2)>>2];d=d+1|0}while((d|0)!=(h|0))}b=b+1|0;if((b|0)==(j|0))break a;d=c[u>>2]|0}}while(0);g=g+-1|0}while((g|0)!=0)}Sc(z);C=1;i=D;return C|0}function Hg(a){a=a|0;if(!a){a=0;return a|0}a=(a+-1|0)>>>0<2?1:2;return a|0}function Ig(a,b){a=a|0;b=b|0;return +(+h[56+(b*80|0)+(a<<3)>>3])}function Jg(a){a=a|0;return Pg(a,2)|0}function Kg(a){a=a|0;return 0}function Lg(a,b){a=a|0;b=b|0;return +(+h[376+(b*80|0)+(a<<3)>>3])}function Mg(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+4|0;l=((c[k>>2]|0)*3|0)+-2|0;if(!l)return;m=a+20|0;n=a+24|0;o=0;do{if(!o){e=0;f=0}else{f=o+-1|0;e=((f>>>0)/3|0)+1|0;f=((f>>>0)%3|0)+1|0}if((f|0)==0|(c[m>>2]|0)==0)g=0;else g=(f+-1|0)>>>0<2?1:2;if(!(c[n>>2]|0))d=1.0;else d=+(1<>2]|0)+~e<<3)>>3];j=~~+M(+(d*8192.0));i=g+b|0;if((j|0)>1){e=j;f=0;while(1){e=e>>1;if((e|0)<=1)break;else f=f+1|0}g=j;e=0;do{g=g>>1;e=e+1|0}while((g|0)>1);f=f+-12|0}else{f=-13;e=0}g=11-e|0;c[a+28+(o<<3)+4>>2]=((g|0)<0?j>>0-g:j<>2]=i-f;o=o+1|0}while((o|0)!=(l|0));return}function Ng(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=i;i=i+32|0;Q=T+16|0;R=T;m=c[a+24>>2]|0;n=c[m+8>>2]|0;o=c[m>>2]|0;k=c[m+12>>2]|0;l=c[m+4>>2]|0;P=a+8|0;h=c[P>>2]|0;j=c[a>>2]|0;O=h-j|0;g=b+-1|0;f=(g|0)==0;if(f)b=80;else{d=m;e=g;b=0;do{N=d;d=d+136|0;M=(c[N+144>>2]|0)-(c[d>>2]|0)|0;b=b>>>0>>0?M:b;N=(c[N+148>>2]|0)-(c[N+140>>2]|0)|0;b=b>>>0>>0?N:b;e=e+-1|0}while((e|0)!=0);b=(b<<4)+80|0}N=Rc(b)|0;c[Q>>2]=N;if(!N){S=0;i=T;return S|0}c[R>>2]=N;a:do if(!f){y=a+32|0;z=a+12|0;A=a+4|0;B=Q+8|0;C=R+8|0;D=Q+4|0;E=Q+12|0;F=R+4|0;G=R+12|0;H=O<<1;I=O<<2;J=O*3|0;L=j<<2;M=h<<2;K=L-M|0;L=M-L|0;M=h-j<<2;b=g;d=N;g=h;e=j;r=k-l|0;f=m;h=n-o|0;while(1){s=c[y>>2]|0;e=_((c[z>>2]|0)-(c[A>>2]|0)|0,g-e|0)|0;c[B>>2]=h;c[C>>2]=r;w=f+136|0;p=c[f+144>>2]|0;q=c[w>>2]|0;x=p-q|0;u=c[f+148>>2]|0;n=f+140|0;t=c[n>>2]|0;v=u-t|0;c[D>>2]=x-h;c[E>>2]=(q|0)%2|0;if((v|0)>3){g=(x|0)>0;h=(u+-4-t|0)>>>2;m=_(K,h)|0;h=s+(L+(_(M,h)|0)<<2)|0;j=s;k=e;l=v;while(1){Sg(Q,j,O,k);Tg(Q);if(g){f=x;do{o=f;f=f+-1|0;c[j+(f<<2)>>2]=c[N+(f<<4)>>2];c[j+(f+O<<2)>>2]=c[N+(f<<4)+4>>2];c[j+(f+H<<2)>>2]=c[N+(f<<4)+8>>2];c[j+(f+J<<2)>>2]=c[N+(f<<4)+12>>2]}while((o|0)>1)}l=l+-4|0;if((l|0)<=3)break;else{j=j+(I<<2)|0;k=k-I|0}}e=K+e+m|0}else h=s;g=v&3;b:do if(!g)S=21;else{Sg(Q,h,O,e);Tg(Q);if((x|0)>0)e=x;else{k=v-r|0;c[F>>2]=k;g=(c[n>>2]|0)%2|0;c[G>>2]=g;l=r;j=s;break}while(1){f=e;e=e+-1|0;switch(g|0){case 3:{c[h+(e+H<<2)>>2]=c[N+(e<<4)+8>>2];S=18;break}case 2:{S=18;break}case 1:{S=19;break}default:{}}if((S|0)==18){c[h+(e+O<<2)>>2]=c[N+(e<<4)+4>>2];S=19}if((S|0)==19){S=0;c[h+(e<<2)>>2]=c[N+(e<<4)>>2]}if((f|0)<=1){S=21;break b}}}while(0);if((S|0)==21){S=0;k=v-r|0;c[F>>2]=k;g=(c[n>>2]|0)%2|0;c[G>>2]=g;if((x|0)>3){o=(u|0)==(t|0);p=p+-4-q|0;n=c[C>>2]|0;l=(n|0)>0;j=1-g|0;m=(k|0)>0;f=s;h=x;while(1){if(l){e=0;do{r=d+((e<<1)+g<<4)|0;q=f+((_(e,O)|0)<<2)|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];e=e+1|0}while((e|0)!=(n|0))}if(m){e=0;do{r=d+(j+(e<<1)<<4)|0;q=f+((_(e+n|0,O)|0)<<2)|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];e=e+1|0}while((e|0)!=(k|0))}Tg(R);if(!o){d=c[R>>2]|0;e=0;do{r=f+((_(e,O)|0)<<2)|0;q=d+(e<<4)|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];e=e+1|0}while((e|0)!=(v|0))}h=h+-4|0;if((h|0)<=3)break;else f=f+16|0}l=n;j=s+((p+4&-4)<<2)|0}else{l=r;j=s}}h=x&3;if(h){d=c[R>>2]|0;if((l|0)>0){e=h<<2;f=0;do{Ui(d+((f<<1)+g<<4)|0,j+((_(f,O)|0)<<2)|0,e|0)|0;f=f+1|0}while((f|0)!=(l|0))}e=1-g|0;if((k|0)>0){f=h<<2;g=0;do{Ui(d+(e+(g<<1)<<4)|0,j+((_(g+l|0,O)|0)<<2)|0,f|0)|0;g=g+1|0}while((g|0)!=(k|0))}Tg(R);if((u|0)!=(t|0)){e=h<<2;f=0;do{Ui(j+((_(f,O)|0)<<2)|0,d+(f<<4)|0,e|0)|0;f=f+1|0}while((f|0)!=(v|0))}}b=b+-1|0;if(!b)break a;g=c[P>>2]|0;e=c[a>>2]|0;r=v;f=w;h=x}}while(0);Sc(N);S=1;i=T;return S|0}function Og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!e){e=(b|0)>0;if(!(e|(d|0)>1))return;if(e){e=a+((d<<1)+-2<<2)|0;f=0;do{j=f;f=f+1|0;k=a+((j<<1|1)<<2)|0;c[k>>2]=(c[k>>2]|0)-((c[((f|0)<(d|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((j|0)<(d|0)?a+(j<<1<<2)|0:e)>>2]|0)>>1)}while((f|0)!=(b|0))}if((d|0)<=0)return;f=a+4|0;g=(b<<1)+-1|0;h=0;do{if((h|0)<1)e=f;else e=a+((((h|0)>(b|0)?b:h)<<1)+-1<<2)|0;k=a+(h<<1<<2)|0;c[k>>2]=((c[e>>2]|0)+2+(c[a+(((h|0)<(b|0)?h<<1|1:g)<<2)>>2]|0)>>2)+(c[k>>2]|0);h=h+1|0}while((h|0)!=(d|0));return}if((b|0)==1&(d|0)==0){c[a>>2]=c[a>>2]<<1;return}if((b|0)>0){f=a+4|0;g=(d<<1)+-1|0;h=a+(g<<2)|0;k=0;do{i=k<<1;j=c[a+(((k|0)<(d|0)?i|1:g)<<2)>>2]|0;if((k|0)>=1)if((k|0)>(d|0))e=h;else e=a+(i+-1<<2)|0;else e=f;i=a+(i<<2)|0;c[i>>2]=(c[i>>2]|0)-((c[e>>2]|0)+j>>1);k=k+1|0}while((k|0)!=(b|0))}if((d|0)<=0)return;e=a+((b<<1)+-2<<2)|0;f=0;do{j=f;f=f+1|0;k=a+((j<<1|1)<<2)|0;c[k>>2]=((c[((j|0)<(b|0)?a+(j<<1<<2)|0:e)>>2]|0)+2+(c[((f|0)<(b|0)?a+(f<<1<<2)|0:e)>>2]|0)>>2)+(c[k>>2]|0)}while((f|0)!=(d|0));return}function Pg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=(c[a+8>>2]|0)-(c[a>>2]|0)|0;g=c[a+16>>2]|0;i=g+-1|0;x=c[a+32>>2]|0;h=c[a+24>>2]|0;f=(i|0)==0;if(f)a=0;else{d=h;e=i;a=0;do{v=d;d=d+136|0;u=(c[v+144>>2]|0)-(c[d>>2]|0)|0;a=a>>>0>>0?u:a;v=(c[v+148>>2]|0)-(c[v+140>>2]|0)|0;a=a>>>0>>0?v:a;e=e+-1|0}while((e|0)!=0);a=a<<2}v=Pc(a)|0;if(!((a|0)==0|(v|0)!=0)){b=0;return b|0}if(!f){t=g+-2|0;u=t;a=h+(i*136|0)|0;t=h+(t*136|0)|0;while(1){q=c[a>>2]|0;s=(c[a+8>>2]|0)-q|0;m=c[a+4>>2]|0;o=(c[a+12>>2]|0)-m|0;p=(c[t+8>>2]|0)-(c[t>>2]|0)|0;a=c[t+12>>2]|0;d=c[t+4>>2]|0;l=a-d|0;q=q&1;m=m&1;n=o-l|0;r=(s|0)>0;a:do if(r){f=(a|0)==(d|0);i=(o|0)==(l|0);j=v+((m^1)<<2)|0;k=_(l,w)|0;h=v+(m<<2)|0;if((o|0)>0){g=0;while(1){d=x+(g<<2)|0;a=0;do{c[v+(a<<2)>>2]=c[x+((_(a,w)|0)+g<<2)>>2];a=a+1|0}while((a|0)!=(o|0));ab[b&3](v,n,l,m);if(!f){e=l;a=h;while(1){e=e+-1|0;c[d>>2]=c[a>>2];if(!e)break;else{d=d+(w<<2)|0;a=a+8|0}}}if(!i){a=n;d=x+(g+k<<2)|0;e=j;while(1){a=a+-1|0;c[d>>2]=c[e>>2];if(!a)break;else{d=d+(w<<2)|0;e=e+8|0}}}g=g+1|0;if((g|0)==(s|0))break a}}if(f){d=0;while(1){ab[b&3](v,n,l,m);if(!i){a=n;e=x+(d+k<<2)|0;f=j;while(1){a=a+-1|0;c[e>>2]=c[f>>2];if(!a)break;else{e=e+(w<<2)|0;f=f+8|0}}}d=d+1|0;if((d|0)==(s|0))break a}}else f=0;do{ab[b&3](v,n,l,m);a=l;d=x+(f<<2)|0;e=h;while(1){a=a+-1|0;c[d>>2]=c[e>>2];if(!a)break;else{d=d+(w<<2)|0;e=e+8|0}}if(!i){a=n;d=x+(f+k<<2)|0;e=j;while(1){a=a+-1|0;c[d>>2]=c[e>>2];if(!a)break;else{d=d+(w<<2)|0;e=e+8|0}}}f=f+1|0}while((f|0)!=(s|0))}while(0);g=s-p|0;if((o|0)>0){h=(p|0)>0;i=v+(q<<2)|0;j=(g|0)>0;k=v+((q^1)<<2)|0;l=0;do{f=_(l,w)|0;d=x+(f<<2)|0;if(r){a=0;do{c[v+(a<<2)>>2]=c[x+(a+f<<2)>>2];a=a+1|0}while((a|0)!=(s|0))}ab[b&3](v,g,p,q);if(h){e=0;a=i;while(1){c[d>>2]=c[a>>2];e=e+1|0;if((e|0)==(p|0))break;else{d=d+4|0;a=a+8|0}}}if(j){e=0;a=x+(f+p<<2)|0;d=k;while(1){c[a>>2]=c[d>>2];e=e+1|0;if((e|0)==(g|0))break;else{a=a+4|0;d=d+8|0}}}l=l+1|0}while((l|0)!=(o|0))}if(!u)break;else{a=t;u=u+-1|0;t=t+-136|0}}}Uc(v);b=1;return b|0}function Qg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[a>>2]|0;j=c[a+4>>2]|0;k=c[a+8>>2]|0;if(!(c[a+12>>2]|0)){e=(j|0)>0;if(!(e|(k|0)>1))return;if((k|0)>0){b=i+4|0;d=(j<<1)+-1|0;f=0;do{if((f|0)<1)a=b;else a=i+((((f|0)>(j|0)?j:f)<<1)+-1<<2)|0;g=f<<1;h=i+(g<<2)|0;c[h>>2]=(c[h>>2]|0)-((c[a>>2]|0)+2+(c[i+(((f|0)<(j|0)?g|1:d)<<2)>>2]|0)>>2);f=f+1|0}while((f|0)!=(k|0))}if(!e)return;a=i+((k<<1)+-2<<2)|0;b=0;do{g=b<<1;f=b;b=b+1|0;h=i+((g|1)<<2)|0;c[h>>2]=((c[((b|0)<(k|0)?i+(b<<1<<2)|0:a)>>2]|0)+(c[((f|0)<(k|0)?i+(g<<2)|0:a)>>2]|0)>>1)+(c[h>>2]|0)}while((b|0)!=(j|0));return}if((j|0)==1&(k|0)==0){c[i>>2]=(c[i>>2]|0)/2|0;return}if((k|0)>0){a=i+((j<<1)+-2<<2)|0;b=0;do{g=b<<1;f=b;b=b+1|0;h=i+((g|1)<<2)|0;c[h>>2]=(c[h>>2]|0)-((c[((f|0)<(j|0)?i+(g<<2)|0:a)>>2]|0)+2+(c[((b|0)<(j|0)?i+(b<<1<<2)|0:a)>>2]|0)>>2)}while((b|0)!=(k|0))}if((j|0)<=0)return;b=i+4|0;d=(k<<1)+-1|0;e=i+(d<<2)|0;h=0;do{f=h<<1;g=c[i+(((h|0)<(k|0)?f|1:d)<<2)>>2]|0;if((h|0)>=1)if((h|0)>(k|0))a=e;else a=i+(f+-1<<2)|0;else a=b;f=i+(f<<2)|0;c[f>>2]=((c[a>>2]|0)+g>>1)+(c[f>>2]|0);h=h+1|0}while((h|0)!=(j|0));return}function Rg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!e){j=(b|0)>0;if(!(j|(d|0)>1))return;if(j){e=a+((d<<1)+-2<<2)|0;f=0;do{m=f;f=f+1|0;l=(c[((f|0)<(d|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((m|0)<(d|0)?a+(m<<1<<2)|0:e)>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,12993,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+((m<<1|1)<<2)|0;c[m>>2]=(c[m>>2]|0)-l}while((f|0)!=(b|0))}i=(d|0)>0;if(i){f=a+4|0;g=(b<<1)+-1|0;h=0;do{if((h|0)<1)e=f;else e=a+((((h|0)>(b|0)?b:h)<<1)+-1<<2)|0;l=(c[a+(((h|0)<(b|0)?h<<1|1:g)<<2)>>2]|0)+(c[e>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,434,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+(h<<1<<2)|0;c[m>>2]=(c[m>>2]|0)-l;h=h+1|0}while((h|0)!=(d|0))}if(j){e=a+((d<<1)+-2<<2)|0;f=0;do{m=f;f=f+1|0;l=(c[((f|0)<(d|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((m|0)<(d|0)?a+(m<<1<<2)|0:e)>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,7233,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+((m<<1|1)<<2)|0;c[m>>2]=l+(c[m>>2]|0)}while((f|0)!=(b|0))}if(i){f=a+4|0;g=(b<<1)+-1|0;h=0;do{if((h|0)<1)e=f;else e=a+((((h|0)>(b|0)?b:h)<<1)+-1<<2)|0;l=(c[a+(((h|0)<(b|0)?h<<1|1:g)<<2)>>2]|0)+(c[e>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,3633,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+(h<<1<<2)|0;c[m>>2]=l+(c[m>>2]|0);h=h+1|0}while((h|0)!=(d|0))}if(j){e=0;do{m=a+((e<<1|1)<<2)|0;l=c[m>>2]|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,5038,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;c[m>>2]=l;e=e+1|0}while((e|0)!=(b|0))}if(i)e=0;else return;do{b=a+(e<<1<<2)|0;m=c[b>>2]|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,6659,0)|0;m=Si(m|0,C|0,4096,0)|0;m=Ti(m|0,C|0,13)|0;c[b>>2]=m;e=e+1|0}while((e|0)!=(d|0));return}m=(d|0)>0;if(!((b|0)>1|m))return;l=(b|0)>0;if(l){f=a+4|0;g=(d<<1)+-1|0;h=a+(g<<2)|0;k=0;do{i=k<<1;j=c[a+(((k|0)<(d|0)?i|1:g)<<2)>>2]|0;if((k|0)>=1)if((k|0)>(d|0))e=h;else e=a+(i+-1<<2)|0;else e=f;e=(c[e>>2]|0)+j|0;e=Zi(e|0,((e|0)<0)<<31>>31|0,12993,0)|0;e=Si(e|0,C|0,4096,0)|0;e=Ti(e|0,C|0,13)|0;j=a+(i<<2)|0;c[j>>2]=(c[j>>2]|0)-e;k=k+1|0}while((k|0)!=(b|0))}if(m){e=a+((b<<1)+-2<<2)|0;f=0;do{k=f;f=f+1|0;j=(c[((f|0)<(b|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((k|0)<(b|0)?a+(k<<1<<2)|0:e)>>2]|0)|0;j=Zi(j|0,((j|0)<0)<<31>>31|0,434,0)|0;j=Si(j|0,C|0,4096,0)|0;j=Ti(j|0,C|0,13)|0;k=a+((k<<1|1)<<2)|0;c[k>>2]=(c[k>>2]|0)-j}while((f|0)!=(d|0))}if(l){f=a+4|0;g=(d<<1)+-1|0;h=a+(g<<2)|0;k=0;do{i=k<<1;j=c[a+(((k|0)<(d|0)?i|1:g)<<2)>>2]|0;if((k|0)>=1)if((k|0)>(d|0))e=h;else e=a+(i+-1<<2)|0;else e=f;e=(c[e>>2]|0)+j|0;e=Zi(e|0,((e|0)<0)<<31>>31|0,7233,0)|0;e=Si(e|0,C|0,4096,0)|0;e=Ti(e|0,C|0,13)|0;j=a+(i<<2)|0;c[j>>2]=e+(c[j>>2]|0);k=k+1|0}while((k|0)!=(b|0))}if(m){e=a+((b<<1)+-2<<2)|0;f=0;do{k=f;f=f+1|0;j=(c[((f|0)<(b|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((k|0)<(b|0)?a+(k<<1<<2)|0:e)>>2]|0)|0;j=Zi(j|0,((j|0)<0)<<31>>31|0,3633,0)|0;j=Si(j|0,C|0,4096,0)|0;j=Ti(j|0,C|0,13)|0;k=a+((k<<1|1)<<2)|0;c[k>>2]=j+(c[k>>2]|0)}while((f|0)!=(d|0))}if(l){e=0;do{l=a+(e<<1<<2)|0;k=c[l>>2]|0;k=Zi(k|0,((k|0)<0)<<31>>31|0,5038,0)|0;k=Si(k|0,C|0,4096,0)|0;k=Ti(k|0,C|0,13)|0;c[l>>2]=k;e=e+1|0}while((e|0)!=(b|0))}if(m)e=0;else return;do{b=a+((e<<1|1)<<2)|0;m=c[b>>2]|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,6659,0)|0;m=Si(m|0,C|0,4096,0)|0;m=Ti(m|0,C|0,13)|0;c[b>>2]=m;e=e+1|0}while((e|0)!=(d|0));return}function Sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=c[a>>2]|0;i=c[a+12>>2]|0;q=c[a+8>>2]|0;n=d*3|0;l=1-i|0;k=a+4|0;j=q;a=0;while(1){h=m+(i<<4)|0;if(((j+n|0)<(e|0)?(b&15|0)==0:0)?((h|d)&15|0)==0:0){if((j|0)>0){f=0;do{h=f<<3;c[m+(i<<4)+(h<<2)>>2]=c[b+(f<<2)>>2];g=f+d|0;c[m+(i<<4)+((h|1)<<2)>>2]=c[b+(g<<2)>>2];g=g+d|0;c[m+(i<<4)+((h|2)<<2)>>2]=c[b+(g<<2)>>2];c[m+(i<<4)+((h|3)<<2)>>2]=c[b+(g+d<<2)>>2];f=f+1|0}while((f|0)!=(j|0))}}else r=3;if((r|0)==3?(r=0,(j|0)>0):0){h=0;do{f=h<<3;c[m+(i<<4)+(f<<2)>>2]=c[b+(h<<2)>>2];g=h+d|0;if(((g|0)<(e|0)?(c[m+(i<<4)+((f|1)<<2)>>2]=c[b+(g<<2)>>2],o=g+d|0,(o|0)<(e|0)):0)?(c[m+(i<<4)+((f|2)<<2)>>2]=c[b+(o<<2)>>2],p=o+d|0,(p|0)<(e|0)):0)c[m+(i<<4)+((f|3)<<2)>>2]=c[b+(p<<2)>>2];h=h+1|0}while((h|0)!=(j|0))}a=a+1|0;if((a|0)==2)break;else{b=b+(q<<2)|0;e=e-q|0;i=l;j=c[k>>2]|0}}return}function Tg(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0,p=0;do if(!(c[a+12>>2]|0)){d=c[a+8>>2]|0;if((c[a+4>>2]|0)>0){b=c[a>>2]|0;if((d|0)>0){i=0;f=1;j=9;break}else{i=0;h=1;break}}if((d|0)>1){e=0;f=1;j=7}else return}else{d=c[a+8>>2]|0;if((d|0)<=0)if((c[a+4>>2]|0)>1){b=c[a>>2]|0;i=1;h=0;break}else return;else{e=1;f=0;j=7}}while(0);if((j|0)==7){b=c[a>>2]|0;i=e;j=9}if((j|0)==9){e=0;do{j=e<<3;o=b+(i<<4)+(j<<2)|0;m=b+(i<<4)+((j|1)<<2)|0;n=+g[m>>2];h=b+(i<<4)+((j|2)<<2)|0;l=+g[h>>2];j=b+(i<<4)+((j|3)<<2)|0;k=+g[j>>2];g[o>>2]=+g[o>>2]*1.2301740646362305;g[m>>2]=n*1.2301740646362305;g[h>>2]=l*1.2301740646362305;g[j>>2]=k*1.2301740646362305;e=e+1|0}while((e|0)!=(d|0));h=f}e=c[a+4>>2]|0;if((e|0)>0){f=0;do{o=f<<3;j=b+(h<<4)+(o<<2)|0;a=b+(h<<4)+((o|1)<<2)|0;k=+g[a>>2];m=b+(h<<4)+((o|2)<<2)|0;l=+g[m>>2];o=b+(h<<4)+((o|3)<<2)|0;n=+g[o>>2];g[j>>2]=+g[j>>2]*1.625732421875;g[a>>2]=k*1.625732421875;g[m>>2]=l*1.625732421875;g[o>>2]=n*1.625732421875;f=f+1|0}while((f|0)!=(e|0))}p=b+(h<<4)|0;f=b+(i+1<<4)|0;j=e-i|0;j=(d|0)<(j|0)?d:j;Ug(p,f,d,j,-.4435068666934967);a=b+(i<<4)|0;m=b+(h+1<<4)|0;o=d-h|0;o=(e|0)<(o|0)?e:o;Ug(a,m,e,o,-.8829110860824585);Ug(p,f,d,j,.05298011749982834);Ug(a,m,e,o,1.5861343145370483);return}function Ug(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0.0;if((d|0)>0){m=d<<1;l=m+-2|0;h=+g[a>>2];i=+g[a+4>>2];j=+g[a+8>>2];f=+g[a+12>>2];a=b;k=0;while(1){w=a+-16|0;t=a+-12|0;v=+g[t>>2];q=a+-8|0;s=+g[q>>2];n=a+-4|0;p=+g[n>>2];x=h;h=+g[a>>2];u=i;i=+g[a+4>>2];r=j;j=+g[a+8>>2];o=f;f=+g[a+12>>2];g[w>>2]=+g[w>>2]+(x+h)*e;g[t>>2]=v+(u+i)*e;g[q>>2]=s+(r+j)*e;g[n>>2]=p+(o+f)*e;k=k+1|0;if((k|0)==(d|0))break;else a=a+32|0}a=b+(l<<4)|0;b=b+(m<<4)|0}if((d|0)>=(c|0))return;f=e+e;h=f*+g[a>>2];i=f*+g[a+4>>2];j=f*+g[a+8>>2];f=f*+g[a+12>>2];while(1){n=b+-16|0;q=b+-12|0;u=+g[q>>2];t=b+-8|0;v=+g[t>>2];w=b+-4|0;x=+g[w>>2];g[n>>2]=h+ +g[n>>2];g[q>>2]=i+u;g[t>>2]=j+v;g[w>>2]=f+x;d=d+1|0;if((d|0)==(c|0))break;else b=b+32|0}return}function Vg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=d<<2;y=Pc(d<<4)|0;if(!y){a=0;return a|0}z=y+x|0;Qi(y|0,0,x|0)|0;v=d+-1|0;u=(d|0)==0;if(!u){e=0;f=y;while(1){c[f>>2]=e;e=e+1|0;if((e|0)==(d|0))break;else f=f+4|0}}a:do if(v){q=v;j=0;e=0;r=a;s=1;t=y;while(1){k=r+(j<<2)|0;if(j>>>0>>0){i=j;f=k;h=0.0}else break;while(1){o=+g[f>>2];o=o>0.0?o:-o;w=o>h;e=w?i:e;h=w?o:h;i=i+1|0;if((i|0)==(d|0))break;else f=f+(d<<2)|0}if(h==0.0)break;if((e|0)!=(j|0)){w=e-j|0;p=t+(w<<2)|0;n=c[t>>2]|0;c[t>>2]=c[p>>2];c[p>>2]=n;w=r+((_(w,d)|0)<<2)|0;Ui(z|0,w|0,x|0)|0;Ui(w|0,r|0,x|0)|0;Ui(r|0,z|0,x|0)|0}f=j;p=j+1|0;o=+g[k>>2];if(s>>>0>>0){l=r+(p<<2)|0;n=p+q|0;m=s;i=r+(f+d<<2)|0;while(1){h=+g[i>>2]/o;g[i>>2]=h;f=s;j=i;k=l;while(1){j=j+4|0;g[j>>2]=+g[j>>2]-h*+g[k>>2];f=f+1|0;if((f|0)==(d|0))break;else k=k+4|0}m=m+1|0;if((m|0)==(d|0))break;else i=i+(n<<2)|0}}if(p>>>0>>0){q=q+-1|0;j=p;r=r+(d<<2)|0;s=s+1|0;t=t+4|0}else break a}Uc(y);a=0;return a|0}while(0);e=d<<1;w=z+(e<<2)|0;if(!u){u=z+(v+d<<2)|0;q=z+(e+v<<2)|0;r=a+((_(d,d)|0)+-1<<2)|0;s=~d;t=0;p=b;while(1){Qi(z|0,0,x|0)|0;g[z+(t<<2)>>2]=1.0;j=0;k=1;l=y;m=w;n=a;while(1){if(!j)h=0.0;else{e=1;f=w;i=n;h=0.0;while(1){h=h+ +g[i>>2]*+g[f>>2];e=e+1|0;if((e|0)==(k|0))break;else{f=f+4|0;i=i+4|0}}}g[m>>2]=+g[z+(c[l>>2]<<2)>>2]-h;j=j+1|0;if((j|0)==(d|0)){j=d;k=u;l=w;m=q;n=r;break}else{k=k+1|0;l=l+4|0;m=m+4|0;n=n+(d<<2)|0}}while(1){e=j;j=j+-1|0;o=+g[n>>2];if(e>>>0>>0){f=l;i=n;h=0.0;while(1){i=i+4|0;h=h+ +g[i>>2]*+g[f>>2];e=e+1|0;if((e|0)==(d|0))break;else f=f+4|0}}else h=0.0;l=l+-4|0;g[k>>2]=(+g[m>>2]-h)/o;if(!j){e=0;f=p;break}else{k=k+-4|0;m=m+-4|0;n=n+(s<<2)|0}}while(1){c[f>>2]=c[z+(e+d<<2)>>2];e=e+1|0;if((e|0)==(d|0))break;else f=f+(d<<2)|0}t=t+1|0;if((t|0)==(d|0))break;else p=p+4|0}}Uc(y);a=1;return a|0}function Wg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=Qc(1,44)|0;if(!g){g=0;return g|0}h=hh()|0;c[g>>2]=h;if(!h){ih(0);c[g>>2]=0;h=g+4|0;yh(c[h>>2]|0);c[h>>2]=0;if((c[g+40>>2]|0)==0?(d=g+8|0,b=c[d>>2]|0,(b|0)!=0):0){Sc(b);c[d>>2]=0}b=g+12|0;d=c[b>>2]|0;if(d){Sc(d);c[b>>2]=0}Uc(g);h=0;return h|0}h=xh()|0;b=g+4|0;c[b>>2]=h;if(h){c[g+40>>2]=a;h=g;return h|0}ih(c[g>>2]|0);c[g>>2]=0;yh(c[b>>2]|0);c[b>>2]=0;if((c[g+40>>2]|0)==0?(e=g+8|0,f=c[e>>2]|0,(f|0)!=0):0){Sc(f);c[e>>2]=0}b=g+12|0;d=c[b>>2]|0;if(d){Sc(d);c[b>>2]=0}Uc(g);h=0;return h|0}function Xg(a){a=a|0;var b=0,d=0,e=0;if(!a)return;ih(c[a>>2]|0);c[a>>2]=0;e=a+4|0;yh(c[e>>2]|0);c[e>>2]=0;if((c[a+40>>2]|0)==0?(b=a+8|0,d=c[b>>2]|0,(d|0)!=0):0){Sc(d);c[b>>2]=0}b=a+12|0;d=c[b>>2]|0;if(d){Sc(d);c[b>>2]=0}Uc(a);return}function Yg(a,f,h){a=a|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;ya=(c[f+8>>2]|0)-(c[f>>2]|0)|0;za=f+20|0;i=c[za>>2]|0;if(!i){a=1;return a|0}Aa=f+24|0;Ba=h+808|0;Ca=h+16|0;ta=a+4|0;va=a+8|0;wa=a+16|0;xa=a+20|0;sa=h+20|0;pa=f+32|0;qa=a+32|0;ra=a+12|0;h=i;oa=0;a:while(1){ma=c[Aa>>2]|0;na=ma+(oa*136|0)+24|0;f=c[na>>2]|0;if(f){ja=ma+(oa*136|0)+16|0;ka=ma+(oa*136|0)+20|0;la=oa+-1|0;h=c[ka>>2]|0;i=c[ja>>2]|0;ia=0;do{if(_(h,i)|0){da=ma+(oa*136|0)+28+(ia*36|0)+20|0;ea=ma+(oa*136|0)+28+(ia*36|0)+16|0;fa=ma+(oa*136|0)+28+(ia*36|0)|0;ga=ma+(oa*136|0)+28+(ia*36|0)+4|0;ha=ma+(oa*136|0)+28+(ia*36|0)+32|0;ca=0;do{f=c[da>>2]|0;aa=f+(ca*40|0)+16|0;ba=f+(ca*40|0)+20|0;if(_(c[ba>>2]|0,c[aa>>2]|0)|0){Z=f+(ca*40|0)+24|0;$=0;do{h=c[Z>>2]|0;S=c[ea>>2]|0;j=c[Ba>>2]|0;f=c[Ca>>2]|0;T=c[ta>>2]|0;U=c[a>>2]|0;V=h+($*56|0)+8|0;Y=h+($*56|0)+12|0;if(!(_g(a,(c[h+($*56|0)+16>>2]|0)-(c[V>>2]|0)|0,(c[h+($*56|0)+20>>2]|0)-(c[Y>>2]|0)|0)|0)){h=0;G=201;break a}W=h+($*56|0)+24|0;k=c[W>>2]|0;qh(U);rh(U,18,0,46);rh(U,17,0,3);rh(U,0,0,4);X=h+($*56|0)+48|0;i=c[X>>2]|0;if(i){N=h+($*56|0)+4|0;O=(f&1|0)!=0;P=(f&2|0)==0;Q=(f&8|0)==0;R=S<<8;M=(f&32|0)==0;f=k+j|0;h=2;L=0;do{k=c[N>>2]|0;K=O&(h>>>0<2?(f|0)<=((c[W>>2]|0)+-4|0):0);j=c[k+(L<<5)>>2]|0;if(j){i=(c[j>>2]|0)+(c[k+(L<<5)+4>>2]|0)|0;j=c[k+(L<<5)+16>>2]|0;if(!K){if(!(vh(U,i,j)|0)){h=0;G=201;break a}}else zh(T,i,j);I=k+(L<<5)+12|0;b:do if(c[I>>2]|0){J=P|K;H=0;while(1){c:do switch(h|0){case 0:{if(K){w=1<>1|w;j=c[xa>>2]|0;if(!j)break c;v=0-w|0;i=c[wa>>2]|0;u=0;while(1){t=u;u=u+4|0;if(!i)i=0;else{q=(t|0)==-4;r=t|3;s=0;do{d:do if(!q)if(Q){o=t;do{if(o>>>0>=(c[xa>>2]|0)>>>0)break d;m=o;o=o+1|0;i=(_(c[qa>>2]|0,o)|0)+s|0;j=i+1|0;k=c[ra>>2]|0;l=k+(j<<1)|0;m=(_(c[wa>>2]|0,m)|0)+s|0;m=(c[va>>2]|0)+(m<<2)|0;n=c[ta>>2]|0;G=b[l>>1]|0;if((G&255|0)!=0&(G&20480|0)==0){if(Ah(n)|0){D=Ah(n)|0;c[m>>2]=(D|0)!=0?v:w;F=c[qa>>2]|0;G=k+(j-F<<1)|0;E=k+(F+j<<1)|0;C=k+(j+~F<<1)|0;b[C>>1]=e[C>>1]|2;b[G>>1]=b[G>>1]|b[3436+(D<<1)>>1];G=i+2|0;C=k+(G-F<<1)|0;b[C>>1]=e[C>>1]|4;C=k+(i<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+2<<1)>>1];b[l>>1]=e[l>>1]|4096;C=k+(G<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+4<<1)>>1];C=k+(F+i<<1)|0;b[C>>1]=e[C>>1]|1;b[E>>1]=b[E>>1]|b[3436+(D+6<<1)>>1];G=k+(F+G<<1)|0;b[G>>1]=e[G>>1]|8}b[l>>1]=e[l>>1]|16384}}while(o>>>0>>0)}else{p=t;do{i=c[xa>>2]|0;if(p>>>0>=i>>>0)break d;F=p;p=p+1|0;j=(_(c[qa>>2]|0,p)|0)+s|0;k=j+1|0;l=c[ra>>2]|0;m=l+(k<<1)|0;n=(_(c[wa>>2]|0,F)|0)+s|0;n=(c[va>>2]|0)+(n<<2)|0;o=c[ta>>2]|0;G=b[m>>1]|0;G=(F|0)==(r|0)|(F|0)==(i+-1|0)?G&-1095:G;if((G&255|0)!=0&(G&20480|0)==0){if(Ah(o)|0){D=Ah(o)|0;c[n>>2]=(D|0)!=0?v:w;F=c[qa>>2]|0;G=l+(k-F<<1)|0;E=l+(F+k<<1)|0;C=l+(k+~F<<1)|0;b[C>>1]=e[C>>1]|2;b[G>>1]=b[G>>1]|b[3436+(D<<1)>>1];G=j+2|0;C=l+(G-F<<1)|0;b[C>>1]=e[C>>1]|4;C=l+(j<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+2<<1)>>1];b[m>>1]=e[m>>1]|4096;C=l+(G<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+4<<1)>>1];C=l+(F+j<<1)|0;b[C>>1]=e[C>>1]|1;b[E>>1]=b[E>>1]|b[3436+(D+6<<1)>>1];G=l+(F+G<<1)|0;b[G>>1]=e[G>>1]|8}b[m>>1]=e[m>>1]|16384}}while(p>>>0>>0)}while(0);s=s+1|0;i=c[wa>>2]|0}while(s>>>0>>0);j=c[xa>>2]|0}if(u>>>0>=j>>>0){G=163;break c}}}if(Q){k=c[va>>2]|0;l=(c[ra>>2]|0)+2|0;r=1<>1|r;i=c[xa>>2]|0;j=c[wa>>2]|0;if(i>>>0>3){o=j;n=0;while(1){if(!j){j=o;m=0}else{j=0;do{G=(c[qa>>2]|0)+j|0;$g(a,l+(G<<1)|0,k+(j<<2)|0,S,r);i=(c[wa>>2]|0)+j|0;G=(c[qa>>2]|0)+G|0;$g(a,l+(G<<1)|0,k+(i<<2)|0,S,r);i=(c[wa>>2]|0)+i|0;G=(c[qa>>2]|0)+G|0;$g(a,l+(G<<1)|0,k+(i<<2)|0,S,r);$g(a,l+((c[qa>>2]|0)+G<<1)|0,k+((c[wa>>2]|0)+i<<2)|0,S,r);j=j+1|0;i=c[wa>>2]|0}while(j>>>0>>0);j=i;m=i;i=c[xa>>2]|0}k=k+(m<<2<<2)|0;l=l+(c[qa>>2]<<2<<1)|0;n=n+4|0;if(n>>>0<(i&-4)>>>0){o=j;j=m}else{q=l;p=n;break}}}else{q=l;p=0}if(!j){G=163;break c}else o=0;while(1){if(p>>>0>>0){l=k+(o<<2)|0;m=q+(o<<1)|0;n=p;while(1){m=m+(c[qa>>2]<<1)|0;$g(a,m,l,S,r);j=c[wa>>2]|0;n=n+1|0;i=c[xa>>2]|0;if(n>>>0>=i>>>0)break;else l=l+(j<<2)|0}}o=o+1|0;if(o>>>0>=j>>>0){G=163;break c}}}w=1<>1|w;i=c[xa>>2]|0;if(!i){G=163;break c}x=0-w|0;j=c[wa>>2]|0;l=j;v=0;while(1){u=v;v=v+4|0;do if(!j){k=l;j=0}else{t=u|3;if((u|0)==-4){k=l;j=l;break}else s=0;do{r=u;do{i=c[xa>>2]|0;if(r>>>0>=i>>>0)break;G=r;r=r+1|0;l=(_(c[qa>>2]|0,r)|0)+s|0;m=l+1|0;n=c[ra>>2]|0;o=n+(m<<1)|0;p=(_(c[wa>>2]|0,G)|0)+s|0;p=(c[va>>2]|0)+(p<<2)|0;q=c[a>>2]|0;j=b[o>>1]|0;i=(G|0)==(t|0)|(G|0)==(i+-1|0)?j&-1095:j;j=i&255;if((j|0)!=0&(i&20480|0)==0){k=q+100|0;c[k>>2]=q+24+(d[20267+(j|R)>>0]<<2);if(wh(q)|0){F=i>>>4&255;c[k>>2]=q+24+(d[21291+F>>0]<<2);G=wh(q)|0;F=d[21547+F>>0]|0;D=F^G;c[p>>2]=(G|0)!=(F|0)?x:w;F=c[qa>>2]|0;G=n+(m-F<<1)|0;E=n+(F+m<<1)|0;C=n+(m+~F<<1)|0;b[C>>1]=e[C>>1]|2;b[G>>1]=b[G>>1]|b[3436+(D<<1)>>1];G=l+2|0;C=n+(G-F<<1)|0;b[C>>1]=e[C>>1]|4;C=n+(l<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+2<<1)>>1];b[o>>1]=e[o>>1]|4096;C=n+(G<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+4<<1)>>1];C=n+(F+l<<1)|0;b[C>>1]=e[C>>1]|1;b[E>>1]=b[E>>1]|b[3436+(D+6<<1)>>1];G=n+(F+G<<1)|0;b[G>>1]=e[G>>1]|8}b[o>>1]=e[o>>1]|16384}}while(r>>>0>>0);s=s+1|0;i=c[wa>>2]|0}while(s>>>0>>0);k=i;j=i;i=c[xa>>2]|0}while(0);if(v>>>0>=i>>>0){G=163;break}else l=k}break}case 1:{if(K){q=1<>1;r=(f|0)>0?0-q|0:-1;j=c[xa>>2]|0;if(!j)break c;k=c[wa>>2]|0;i=k;p=0;while(1){o=p;p=p+4|0;if(!k){l=i;k=0}else{n=(o|0)==-4;m=0;do{l=m;m=m+1|0;if(!n){k=o;do{if(k>>>0>=(c[xa>>2]|0)>>>0)break;j=k;k=k+1|0;i=(_(c[qa>>2]|0,k)|0)+m|0;i=(c[ra>>2]|0)+(i<<1)|0;j=(_(c[wa>>2]|0,j)|0)+l|0;j=(c[va>>2]|0)+(j<<2)|0;if((b[i>>1]&20480)==4096){F=(Ah(c[ta>>2]|0)|0)!=0;F=F?q:r;G=c[j>>2]|0;c[j>>2]=((G|0)<0?0-F|0:F)+G;b[i>>1]=e[i>>1]|8192}}while(k>>>0

>>0);i=c[wa>>2]|0}}while(m>>>0>>0);l=i;k=i;j=c[xa>>2]|0}if(p>>>0>=j>>>0){G=163;break c}else i=l}}if(!Q){t=1<>1;u=(f|0)>0?0-t|0:-1;i=c[xa>>2]|0;if(!i){G=163;break c}j=c[wa>>2]|0;k=j;s=0;while(1){r=s;s=s+4|0;if(!j)j=0;else{p=(r|0)==-4;q=r|3;i=k;o=0;do{n=o;o=o+1|0;if(!p){l=r;do{i=c[xa>>2]|0;if(l>>>0>=i>>>0)break;F=l;l=l+1|0;j=(_(c[qa>>2]|0,l)|0)+o|0;j=(c[ra>>2]|0)+(j<<1)|0;k=(_(c[wa>>2]|0,F)|0)+n|0;k=(c[va>>2]|0)+(k<<2)|0;m=c[a>>2]|0;G=b[j>>1]|0;i=(F|0)==(q|0)|(F|0)==(i+-1|0)?G&-1095:G;if((i&20480|0)==4096){c[m+100>>2]=m+24+(((i&8192|0)!=0?16:(i&255|0)!=0?15:14)<<2);F=(wh(m)|0)!=0;F=F?t:u;G=c[k>>2]|0;c[k>>2]=((G|0)<0?0-F|0:F)+G;b[j>>1]=e[j>>1]|8192}}while(l>>>0>>0);i=c[wa>>2]|0}}while(o>>>0>>0);k=i;j=i;i=c[xa>>2]|0}if(s>>>0>=i>>>0){G=163;break c}}}k=c[va>>2]|0;l=(c[ra>>2]|0)+2|0;v=1<>1;w=(f|0)>0?0-v|0:-1;i=c[xa>>2]|0;j=c[wa>>2]|0;if(i>>>0>3){n=j;t=l;u=0;while(1){if(!j){j=n;m=0}else{i=n;s=0;do{j=k+(s<<2)|0;n=c[qa>>2]|0;p=n+s|0;l=t+(p<<1)|0;o=c[a>>2]|0;m=b[l>>1]|0;if((m&20480|0)==4096){c[o+100>>2]=o+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);n=(wh(o)|0)!=0;n=n?v:w;i=c[j>>2]|0;c[j>>2]=((i|0)<0?0-n|0:n)+i;b[l>>1]=e[l>>1]|8192;i=c[wa>>2]|0;j=c[qa>>2]|0;n=c[a>>2]|0}else{j=n;n=o}q=i+s|0;o=k+(q<<2)|0;r=j+p|0;l=t+(r<<1)|0;m=b[l>>1]|0;if((m&20480|0)==4096){c[n+100>>2]=n+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);j=(wh(n)|0)!=0;j=j?v:w;i=c[o>>2]|0;c[o>>2]=((i|0)<0?0-j|0:j)+i;b[l>>1]=e[l>>1]|8192;i=c[wa>>2]|0;j=c[qa>>2]|0;n=c[a>>2]|0}p=i+q|0;o=k+(p<<2)|0;q=j+r|0;l=t+(q<<1)|0;m=b[l>>1]|0;if((m&20480|0)==4096){c[n+100>>2]=n+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);j=(wh(n)|0)!=0;j=j?v:w;i=c[o>>2]|0;c[o>>2]=((i|0)<0?0-j|0:j)+i;b[l>>1]=e[l>>1]|8192;i=c[wa>>2]|0;j=c[qa>>2]|0;n=c[a>>2]|0}m=k+(i+p<<2)|0;j=t+(j+q<<1)|0;l=b[j>>1]|0;if((l&20480|0)==4096){c[n+100>>2]=n+24+(((l&8192|0)!=0?16:(l&255|0)!=0?15:14)<<2);G=(wh(n)|0)!=0;G=G?v:w;i=c[m>>2]|0;c[m>>2]=((i|0)<0?0-G|0:G)+i;b[j>>1]=e[j>>1]|8192;i=c[wa>>2]|0}s=s+1|0}while(s>>>0>>0);j=i;m=i;i=c[xa>>2]|0}k=k+(m<<2<<2)|0;l=t+(c[qa>>2]<<2<<1)|0;o=u+4|0;if(o>>>0<(i&-4)>>>0){n=j;j=m;t=l;u=o}else{s=o;break}}}else s=0;if(!j){G=163;break c}else r=0;do{if(s>>>0>>0){o=k+(r<<2)|0;p=l+(r<<1)|0;q=s;while(1){p=p+(c[qa>>2]<<1)|0;n=c[a>>2]|0;m=b[p>>1]|0;if((m&20480|0)==4096){c[n+100>>2]=n+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);i=(wh(n)|0)!=0;i=i?v:w;m=c[o>>2]|0;c[o>>2]=((m|0)<0?0-i|0:i)+m;b[p>>1]=e[p>>1]|8192;m=c[wa>>2]|0;i=c[xa>>2]|0}else m=j;q=q+1|0;if(q>>>0>=i>>>0){j=m;break}else{j=m;o=o+(m<<2)|0}}}r=r+1|0}while(r>>>0>>0);G=163;break}case 2:{E=c[a>>2]|0;F=1<>1|F;do if(Q){k=c[va>>2]|0;l=(c[ra>>2]|0)+2|0;j=c[xa>>2]|0;if(j>>>0>3){w=E+92|0;x=E+100|0;y=E+96|0;z=0-F|0;m=c[wa>>2]|0;i=m;o=0;while(1){if(!m)m=0;else{r=o|1;s=r+1|0;t=o|3;u=r+3|0;v=0;do{i=c[qa>>2]|0;j=v;v=v+1|0;D=(_(i,r)|0)+v|0;G=c[ra>>2]|0;D=b[G+((_(i,s)|0)+v<<1)>>1]|b[G+(D<<1)>>1];D=D|b[G+((_(i,t)|0)+v<<1)>>1];e:do if(!((D|b[G+((_(i,u)|0)+v<<1)>>1])&20735)){c[x>>2]=w;if(!(wh(E)|0))break;c[x>>2]=y;p=(wh(E)|0)<<1;p=p|(wh(E)|0);if(p>>>0>=4)break;q=k+((_(c[wa>>2]|0,p)|0)+j<<2)|0;j=l+((_(c[qa>>2]|0,p)|0)+j<<1)|0;n=p;while(1){if(n>>>0>=(c[xa>>2]|0)>>>0)break e;i=c[qa>>2]|0;m=j;j=j+(i<<1)|0;if((n|0)==(p|0)){G=c[a>>2]|0;D=(e[j>>1]|0)>>>4&255;c[G+100>>2]=G+24+(d[21291+D>>0]<<2);G=wh(G)|0;D=d[21547+D>>0]|0;B=D^G;c[q>>2]=(G|0)!=(D|0)?z:F;D=c[qa>>2]|0;G=m+(i-D<<1)|0;C=m+(D+i<<1)|0;A=m+(i+~D<<1)|0;b[A>>1]=e[A>>1]|2;b[G>>1]=b[G>>1]|b[3436+(B<<1)>>1];G=i+1|0;A=m+(G-D<<1)|0;b[A>>1]=e[A>>1]|4;A=i+-1|0;i=m+(A<<1)|0;b[i>>1]=b[i>>1]|b[3436+(B+2<<1)>>1];b[j>>1]=e[j>>1]|4096;i=m+(G<<1)|0;b[i>>1]=b[i>>1]|b[3436+(B+4<<1)>>1];A=m+(D+A<<1)|0;b[A>>1]=e[A>>1]|1;b[C>>1]=b[C>>1]|b[3436+(B+6<<1)>>1];G=m+(D+G<<1)|0;b[G>>1]=e[G>>1]|8;b[j>>1]=e[j>>1]&49151}else ah(a,j,q,S,F);n=n+1|0;if(n>>>0>=4)break;else q=q+(c[wa>>2]<<2)|0}}else{D=i+j|0;ah(a,l+(D<<1)|0,k+(j<<2)|0,S,F);G=(c[wa>>2]|0)+j|0;D=(c[qa>>2]|0)+D|0;ah(a,l+(D<<1)|0,k+(G<<2)|0,S,F);G=(c[wa>>2]|0)+G|0;D=(c[qa>>2]|0)+D|0;ah(a,l+(D<<1)|0,k+(G<<2)|0,S,F);ah(a,l+((c[qa>>2]|0)+D<<1)|0,k+((c[wa>>2]|0)+G<<2)|0,S,F)}while(0);i=c[wa>>2]|0}while(v>>>0>>0);m=i;j=c[xa>>2]|0}k=k+(m<<2<<2)|0;l=l+(c[qa>>2]<<2<<1)|0;o=o+4|0;if(o>>>0>=(j&-4)>>>0){q=k;p=l;break}}}else{i=c[wa>>2]|0;q=k;p=l;o=0}if(!i)break;else n=0;do{if(o>>>0>>0){k=q+(n<<2)|0;l=p+(n<<1)|0;m=o;while(1){l=l+(c[qa>>2]<<1)|0;ah(a,l,k,S,F);i=c[wa>>2]|0;m=m+1|0;j=c[xa>>2]|0;if(m>>>0>=j>>>0)break;else k=k+(i<<2)|0}}n=n+1|0}while(n>>>0>>0)}else{i=c[xa>>2]|0;if(!i)break;A=E+92|0;B=E+100|0;C=E+96|0;D=0-F|0;j=c[wa>>2]|0;z=0;while(1){if(!j){k=z+4|0;j=0}else{v=z|3;w=z|1;x=w+1|0;y=w+3|0;k=z+4|0;u=0;while(1){do if(v>>>0>>0){i=c[qa>>2]|0;l=u+1|0;t=(_(i,w)|0)+l|0;j=c[ra>>2]|0;if(b[j+(t<<1)>>1]&20735){t=0;i=0;G=127;break}if(b[j+((_(i,x)|0)+l<<1)>>1]&20735){t=0;i=0;G=127;break}if(b[j+((_(i,v)|0)+l<<1)>>1]&20735){t=0;i=0;G=127;break}if(b[j+((_(i,y)|0)+l<<1)>>1]&20665){t=0;i=0;G=127;break}c[B>>2]=A;if(!(wh(E)|0))break;c[B>>2]=C;i=(wh(E)|0)<<1;t=1;i=i|(wh(E)|0);G=127}else{t=0;i=0;G=127}while(0);if((G|0)==127){G=0;l=i+z|0;f:do if(l>>>0>>0){s=l;do{i=c[xa>>2]|0;if(s>>>0>=i>>>0)break f;Da=s;s=s+1|0;m=(_(c[qa>>2]|0,s)|0)+u|0;n=m+1|0;o=c[ra>>2]|0;p=o+(n<<1)|0;q=(_(c[wa>>2]|0,Da)|0)+u|0;q=(c[va>>2]|0)+(q<<2)|0;r=c[a>>2]|0;j=b[p>>1]|0;j=(Da|0)==(v|0)|(Da|0)==(i+-1|0)?j&-1095:j;do if(!(t&(Da|0)==(l|0))){if(j&20480)break;i=r+100|0;c[i>>2]=r+24+(d[20267+(j&255|R)>>0]<<2);if(wh(r)|0)G=133}else{i=r+100|0;G=133}while(0);if((G|0)==133){G=0;j=j>>>4&255;c[i>>2]=r+24+(d[21291+j>>0]<<2);Da=wh(r)|0;r=d[21547+j>>0]|0;j=r^Da;c[q>>2]=(Da|0)!=(r|0)?D:F;r=c[qa>>2]|0;Da=o+(n-r<<1)|0;q=o+(r+n<<1)|0;n=o+(n+~r<<1)|0;b[n>>1]=e[n>>1]|2;b[Da>>1]=b[Da>>1]|b[3436+(j<<1)>>1];Da=m+2|0;n=o+(Da-r<<1)|0;b[n>>1]=e[n>>1]|4;n=o+(m<<1)|0;b[n>>1]=b[n>>1]|b[3436+(j+2<<1)>>1];b[p>>1]=e[p>>1]|4096;n=o+(Da<<1)|0;b[n>>1]=b[n>>1]|b[3436+(j+4<<1)>>1];n=o+(r+m<<1)|0;b[n>>1]=e[n>>1]|1;b[q>>1]=b[q>>1]|b[3436+(j+6<<1)>>1];Da=o+(r+Da<<1)|0;b[Da>>1]=e[Da>>1]|8}b[p>>1]=e[p>>1]&49151}while(s>>>0>>0)}while(0);l=u+1|0}j=c[wa>>2]|0;i=c[xa>>2]|0;if(l>>>0>>0)u=l;else break}}if(k>>>0>>0)z=k;else break}}while(0);if(M){G=163;break c}c[E+100>>2]=E+96;wh(E)|0;wh(E)|0;wh(E)|0;wh(E)|0;G=163;break}default:G=163}while(0);do if((G|0)==163){G=0;if(J)break;qh(U);rh(U,18,0,46);rh(U,17,0,3);rh(U,0,0,4)}while(0);h=h+1|0;Da=(h|0)==3;f=(Da<<31>>31)+f|0;h=Da?0:h;H=H+1|0;if(H>>>0>=(c[I>>2]|0)>>>0)break b}}while(0);i=c[X>>2]|0}L=L+1|0}while(L>>>0>>0)}h=(c[V>>2]|0)-(c[fa>>2]|0)|0;f=(c[Y>>2]|0)-(c[ga>>2]|0)|0;i=c[ea>>2]|0;if(i&1){Da=c[Aa>>2]|0;h=(c[Da+(la*136|0)+8>>2]|0)+h-(c[Da+(la*136|0)>>2]|0)|0}if(i&2){Da=c[Aa>>2]|0;f=(c[Da+(la*136|0)+12>>2]|0)+f-(c[Da+(la*136|0)+4>>2]|0)|0}p=c[va>>2]|0;q=c[wa>>2]|0;r=c[xa>>2]|0;i=c[Ba>>2]|0;if((i|0)!=0?(ua=1<>2]|0;m=(l|0)>-1?l:0-l|0;if((m|0)>=(ua|0)){Da=m>>c[Ba>>2];c[k>>2]=(l|0)<0?0-Da|0:Da}n=n+1|0}while((n|0)!=(q|0))}o=o+1|0}while((o|0)!=(r|0))}n=(_(f,ya)|0)+h|0;o=c[pa>>2]|0;h=(r|0)==0;if((c[sa>>2]|0)==1){if(!h){h=(q|0)==0;k=0;do{if(!h){f=_(k,q)|0;i=(_(k,ya)|0)+n|0;j=0;do{c[o+(i+j<<2)>>2]=(c[p+(j+f<<2)>>2]|0)/2|0;j=j+1|0}while((j|0)!=(q|0))}k=k+1|0}while((k|0)!=(r|0))}}else if(!h){m=(q|0)==0;h=p;l=0;k=o+(n<<2)|0;while(1){if(!m){f=h;i=0;j=k;while(1){g[j>>2]=+(c[f>>2]|0)*+g[ha>>2];i=i+1|0;if((i|0)==(q|0))break;else{f=f+4|0;j=j+4|0}}h=h+(q<<2)|0}l=l+1|0;if((l|0)==(r|0))break;else k=k+(ya<<2)|0}}$=$+1|0}while($>>>0<(_(c[ba>>2]|0,c[aa>>2]|0)|0)>>>0);h=c[ka>>2]|0;i=c[ja>>2]|0}ca=ca+1|0}while(ca>>>0<(_(h,i)|0)>>>0);f=c[na>>2]|0}ia=ia+1|0}while(ia>>>0>>0);h=c[za>>2]|0}oa=oa+1|0;if(oa>>>0>=h>>>0){h=1;G=201;break}}if((G|0)==201)return h|0;return 0}function Zg(f,i,j,k,l){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;Ya=i+32|0;h[Ya>>3]=0.0;Za=i+16|0;m=c[Za>>2]|0;if(!m){_a=1;return _a|0}Xa=i+20|0;Sa=j+5584|0;Ta=f+16|0;Ua=f+20|0;Va=f+8|0;Wa=f+36|0;Pa=(k|0)!=0;Qa=f+32|0;Ra=f+12|0;i=m;Oa=0;a:while(1){j=c[Xa>>2]|0;m=c[Sa>>2]|0;Ma=(c[j+(Oa*52|0)+8>>2]|0)-(c[j+(Oa*52|0)>>2]|0)|0;Na=j+(Oa*52|0)+16|0;n=c[Na>>2]|0;if(n){La=j+(Oa*52|0)+24|0;Ja=j+(Oa*52|0)+32|0;Ka=m+(Oa*1080|0)+20|0;Ga=m+(Oa*1080|0)+16|0;Ia=Pa&Oa>>>0>>0;Ha=k+(Oa<<3)|0;i=n;Fa=0;do{Da=c[La>>2]|0;Ea=Da+(Fa*136|0)+24|0;j=c[Ea>>2]|0;if(j){za=Da+(Fa*136|0)+16|0;Aa=Da+(Fa*136|0)+20|0;Ba=~Fa;Ca=Fa+-1|0;i=c[Aa>>2]|0;m=c[za>>2]|0;ya=0;do{xa=Da+(Fa*136|0)+28+(ya*36|0)+32|0;if(_(i,m)|0){ra=67108864/(~~+M(+(+g[xa>>2]*8192.0))|0)|0;sa=Da+(Fa*136|0)+28+(ya*36|0)+20|0;ta=Da+(Fa*136|0)+28+(ya*36|0)|0;ua=Da+(Fa*136|0)+28+(ya*36|0)+4|0;va=Da+(Fa*136|0)+28+(ya*36|0)+16|0;wa=((ra|0)<0)<<31>>31;qa=0;do{j=c[sa>>2]|0;oa=j+(qa*40|0)+16|0;pa=j+(qa*40|0)+20|0;if(_(c[pa>>2]|0,c[oa>>2]|0)|0){ma=j+(qa*40|0)+24|0;na=0;do{la=c[ma>>2]|0;n=c[la+(na*52|0)+12>>2]|0;i=n-(c[ta>>2]|0)|0;o=c[la+(na*52|0)+16>>2]|0;j=o-(c[ua>>2]|0)|0;m=c[va>>2]|0;if(m&1){ka=c[La>>2]|0;i=(c[ka+(Ca*136|0)+8>>2]|0)+i-(c[ka+(Ca*136|0)>>2]|0)|0}if(m&2){ka=c[La>>2]|0;j=(c[ka+(Ca*136|0)+12>>2]|0)+j-(c[ka+(Ca*136|0)+4>>2]|0)|0}if(!(_g(f,(c[la+(na*52|0)+20>>2]|0)-n|0,(c[la+(na*52|0)+24>>2]|0)-o|0)|0)){i=0;_a=173;break a}p=c[Ta>>2]|0;q=c[Ua>>2]|0;r=Ma-p|0;u=(_(j,Ma)|0)+i|0;v=c[Ja>>2]|0;c[Va>>2]=v+(u<<2);c[Wa>>2]=Ma;i=(q|0)==0;if((c[Ka>>2]|0)==1){if(!i){n=(p|0)==0;o=0;i=0;while(1){if(!n){j=0;m=i;while(1){ka=v+(m+u<<2)|0;c[ka>>2]=c[ka>>2]<<6;j=j+1|0;if((j|0)==(p|0))break;else m=m+1|0}i=p+i|0}o=o+1|0;if((o|0)==(q|0))break;else i=i+r|0}}}else if(!i){n=(p|0)==0;o=0;i=0;while(1){if(!n){j=0;m=i;while(1){ka=v+(m+u<<2)|0;ja=c[ka>>2]|0;ja=Zi(ja|0,((ja|0)<0)<<31>>31|0,ra|0,wa|0)|0;ja=Si(ja|0,C|0,4096,0)|0;ja=Ti(ja|0,C|0,18)|0;c[ka>>2]=ja;j=j+1|0;if((j|0)==(p|0))break;else m=m+1|0}i=p+i|0}o=o+1|0;if((o|0)==(q|0))break;else i=i+r|0}}ga=c[va>>2]|0;ha=(c[Na>>2]|0)+Ba|0;r=c[Ka>>2]|0;ia=+g[xa>>2];ja=c[Ga>>2]|0;ka=c[f>>2]|0;n=c[Ta>>2]|0;do if(!n)i=0;else{o=c[Ua>>2]|0;p=(o|0)==0;q=0;i=0;do{if(!p){j=c[Wa>>2]|0;m=0;do{fa=c[v+(u+((_(m,j)|0)+q)<<2)>>2]|0;fa=(fa|0)>-1?fa:0-fa|0;i=(i|0)>(fa|0)?i:fa;m=m+1|0}while((m|0)!=(o|0))}q=q+1|0}while((q|0)!=(n|0));if(!i){i=0;break}if((i|0)>1){j=i;i=0}else{i=-5;break}while(1){j=j>>1;if((j|0)<=1)break;else i=i+1|0}i=i+-4|0}while(0);ea=la+(na*52|0)+28|0;c[ea>>2]=i;i=i+-1|0;qh(ka);rh(ka,18,0,46);rh(ka,17,0,3);rh(ka,0,0,4);fa=la+(na*52|0)|0;kh(ka,c[fa>>2]|0);b:do if((i|0)>-1){ca=la+(na*52|0)+8|0;W=ja&1;da=(W|0)!=0;X=(r|0)==1;Y=(ja&4|0)==0;W=(W|0)==0;Z=(ja&2|0)==0;$=(ja&8|0)==0;aa=ga<<8;ba=(ja&32|0)==0;j=0;T=i;U=0.0;i=0;V=2;while(1){S=c[ca>>2]|0;I=da&(V>>>0<2?(T|0)<((c[ea>>2]|0)+-4|0):0);c:do switch(V|0){case 0:{G=1<>2]|0;if(!j){n=0;break c}H=(T|0)==0;o=c[Ta>>2]|0;m=o;n=0;F=0;do{E=F;F=F+4|0;if(!m)m=0;else{B=(E|0)==-4;D=E|3;m=o;A=0;do{if(!B){z=E;do{j=c[Ua>>2]|0;if(z>>>0>=j>>>0)break;do if($)j=0;else{if((z|0)==(D|0)){j=1;break}j=(z|0)==(j+-1|0)}while(0);p=z;z=z+1|0;u=(_(c[Qa>>2]|0,z)|0)+A|0;v=u+1|0;w=c[Ra>>2]|0;y=w+(v<<1)|0;p=(_(c[Wa>>2]|0,p)|0)+A|0;p=(c[Va>>2]|0)+(p<<2)|0;x=c[f>>2]|0;q=b[y>>1]|0;q=j?q&-1095:q;j=q&255;if((j|0)!=0&(q&20480|0)==0){m=c[p>>2]|0;m=(((m|0)<0?0-m|0:m)&G|0)!=0;o=m&1;r=x+100|0;c[r>>2]=x+24+(d[20267+(j|aa)>>0]<<2);if(I)oh(x,o);else lh(x,o);if(m){j=c[p>>2]|0;m=j>>>31;j=(j|0)<0?0-j|0:j;if(H)j=3708+((j&127)<<1)|0;else j=3452+((j>>>T&127)<<1)|0;n=(b[j>>1]|0)+n|0;j=q>>>4&255;c[r>>2]=x+24+(d[21291+j>>0]<<2);if(I)oh(x,m);else lh(x,d[21547+j>>0]^m);Q=c[Qa>>2]|0;R=w+(v-Q<<1)|0;P=w+(Q+v<<1)|0;O=w+(v+~Q<<1)|0;b[O>>1]=e[O>>1]|2;b[R>>1]=b[R>>1]|b[3436+(m<<1)>>1];R=u+2|0;O=w+(R-Q<<1)|0;b[O>>1]=e[O>>1]|4;O=w+(u<<1)|0;b[O>>1]=b[O>>1]|b[3436+((m|2)<<1)>>1];b[y>>1]=e[y>>1]|4096;O=w+(R<<1)|0;b[O>>1]=b[O>>1]|b[3436+((m|4)<<1)>>1];O=w+(Q+u<<1)|0;b[O>>1]=e[O>>1]|1;b[P>>1]=b[P>>1]|b[3436+((m|6)<<1)>>1];R=w+(Q+R<<1)|0;b[R>>1]=e[R>>1]|8}b[y>>1]=e[y>>1]|16384}}while(z>>>0>>0);m=c[Ta>>2]|0}A=A+1|0}while(A>>>0>>0);j=c[Ua>>2]|0;o=m}}while(F>>>0>>0);break}case 1:{A=1<>2]|0;if(!j){n=0;break c}B=(T|0)==0;o=c[Ta>>2]|0;m=o;n=0;z=0;do{y=z;z=z+4|0;if(!m)m=0;else{w=(y|0)==-4;x=y|3;m=o;v=0;do{u=v;v=v+1|0;if(!w){r=y;do{j=c[Ua>>2]|0;if(r>>>0>=j>>>0)break;do if($)j=0;else{if((r|0)==(x|0)){j=1;break}j=(r|0)==(j+-1|0)}while(0);m=r;r=r+1|0;p=(_(c[Qa>>2]|0,r)|0)+v|0;p=(c[Ra>>2]|0)+(p<<1)|0;q=c[f>>2]|0;o=b[p>>1]|0;o=j?o&-1095:o;if((o&20480|0)==4096){m=c[(c[Va>>2]|0)+((_(c[Wa>>2]|0,m)|0)+u<<2)>>2]|0;m=(m|0)<0?0-m|0:m;if(B)j=4220+((m&127)<<1)|0;else j=3964+((m>>>T&127)<<1)|0;n=(b[j>>1]|0)+n|0;j=(m&A|0)!=0&1;c[q+100>>2]=q+24+(((o&8192|0)!=0?16:(o&255|0)!=0?15:14)<<2);if(I)oh(q,j);else lh(q,j);b[p>>1]=e[p>>1]|8192}}while(r>>>0>>0);m=c[Ta>>2]|0}}while(v>>>0>>0);j=c[Ua>>2]|0;o=m}}while(z>>>0>>0);break}case 2:{L=c[f>>2]|0;N=1<>2]|0;if(!m)j=0;else{O=L+92|0;P=L+100|0;Q=L+96|0;R=(T|0)==0;n=c[Ta>>2]|0;j=0;K=0;while(1){if(!n){o=K+4|0;n=0}else{D=K|3;E=K|1;F=E+1|0;G=E+3|0;o=K+4|0;H=K+1|0;I=K+2|0;J=K+3|0;B=0;while(1){do if(D>>>0>>0){m=c[Qa>>2]|0;q=B+1|0;p=(_(m,E)|0)+q|0;n=c[Ra>>2]|0;p=b[n+(p<<1)>>1]|0;if($){A=b[n+((_(m,F)|0)+q<<1)>>1]|p;A=A|b[n+((_(m,D)|0)+q<<1)>>1];m=((A|b[n+((_(m,G)|0)+q<<1)>>1])&20735)==0&1}else{do if(!(p&20735)){if(b[n+((_(m,F)|0)+q<<1)>>1]&20735){m=1;break}if(b[n+((_(m,D)|0)+q<<1)>>1]&20735){m=1;break}m=(b[n+((_(m,G)|0)+q<<1)>>1]&20665)!=0}else m=1;while(0);m=m&1^1}if(!m){A=0;m=0;_a=109;break}m=c[Wa>>2]|0;n=c[Va>>2]|0;A=c[n+((_(m,K)|0)+B<<2)>>2]|0;do if(!(((A|0)<0?0-A|0:A)&N)){A=c[n+((_(m,H)|0)+B<<2)>>2]|0;if(((A|0)<0?0-A|0:A)&N){m=1;break}A=c[n+((_(m,I)|0)+B<<2)>>2]|0;if(((A|0)<0?0-A|0:A)&N){m=2;break}m=c[n+((_(m,J)|0)+B<<2)>>2]|0;m=(((m|0)<0?0-m|0:m)&N|0)==0?4:3}else m=0;while(0);c[P>>2]=O;lh(L,(m|0)!=4&1);if((m|0)==4){p=q;break}c[P>>2]=Q;lh(L,m>>>1);lh(L,m&1);A=1;_a=109}else{A=0;m=0;_a=109}while(0);if((_a|0)==109){_a=0;z=m+K|0;d:do if(z>>>0>>0){y=z;do{m=c[Ua>>2]|0;if(y>>>0>=m>>>0)break d;do if($)m=0;else{if((y|0)==(D|0)){m=1;break}m=(y|0)==(m+-1|0)}while(0);$a=y;y=y+1|0;r=(_(c[Qa>>2]|0,y)|0)+B|0;u=r+1|0;v=c[Ra>>2]|0;x=v+(u<<1)|0;n=(_(c[Wa>>2]|0,$a)|0)+B|0;n=(c[Va>>2]|0)+(n<<2)|0;w=c[f>>2]|0;p=b[x>>1]|0;q=m?p&-1095:p;do if(!(A&($a|0)==(z|0))){if(p&20480)break;c[w+100>>2]=w+24+(d[20267+(q&255|aa)>>0]<<2);$a=c[n>>2]|0;$a=((($a|0)<0?0-$a|0:$a)&N|0)!=0;lh(w,$a&1);if($a)_a=117}else _a=117;while(0);if((_a|0)==117){_a=0;n=c[n>>2]|0;m=(n|0)<0?0-n|0:n;if(R)m=3708+((m&127)<<1)|0;else m=3452+((m>>>T&127)<<1)|0;j=(b[m>>1]|0)+j|0;$a=q>>>4&255;c[w+100>>2]=w+24+(d[21291+$a>>0]<<2);p=n>>>31;lh(w,d[21547+$a>>0]^p);w=c[Qa>>2]|0;$a=v+(u-w<<1)|0;q=v+(w+u<<1)|0;u=v+(u+~w<<1)|0;b[u>>1]=e[u>>1]|2;b[$a>>1]=b[$a>>1]|b[3436+(p<<1)>>1];$a=r+2|0;u=v+($a-w<<1)|0;b[u>>1]=e[u>>1]|4;u=v+(r<<1)|0;b[u>>1]=b[u>>1]|b[3436+((p|2)<<1)>>1];b[x>>1]=e[x>>1]|4096;u=v+($a<<1)|0;b[u>>1]=b[u>>1]|b[3436+((p|4)<<1)>>1];u=v+(w+r<<1)|0;b[u>>1]=e[u>>1]|1;b[q>>1]=b[q>>1]|b[3436+((p|6)<<1)>>1];$a=v+(w+$a<<1)|0;b[$a>>1]=e[$a>>1]|8}b[x>>1]=e[x>>1]&49151}while(y>>>0>>0)}while(0);p=B+1|0}n=c[Ta>>2]|0;m=c[Ua>>2]|0;if(p>>>0>>0)B=p;else break}}if(o>>>0>>0)K=o;else break}}if(ba){n=j;break c}uh(ka);n=j;break}default:n=j}while(0);if(Ia)s=+h[Ha>>3];else s=1.0;if(X)t=+Ig(ha,ga);else t=+Lg(ha,ga);t=+(1<>3]=+h[Ya>>3]+t;do if(Y)_a=137;else{if((T|0)<1&(V|0)==2){_a=137;break}mh(ka);m=S+(i*24|0)+20|0;j=a[m>>0]|1;a[m>>0]=j;m=1}while(0);do if((_a|0)==137){j=(c[ea>>2]|0)+-4|0;if((V|0)!=0&(T|0)<(j|0))if(W)_a=141;else _a=140;else if(W|((V|0)!=2|(T|0)!=(j|0)))_a=141;else _a=140;if((_a|0)==140){_a=0;mh(ka);m=S+(i*24|0)+20|0;j=a[m>>0]|1;a[m>>0]=j;m=1;break}else if((_a|0)==141){_a=0;m=S+(i*24|0)+20|0;j=a[m>>0]&-2;a[m>>0]=j;m=3;break}}while(0);R=V+1|0;$a=(R|0)==3;V=$a?0:R;T=($a<<31>>31)+T|0;do if((T|0)>0&(j&1)!=0)if(da&(V>>>0<2?(T|0)<((c[ea>>2]|0)+-4|0):0)){nh(ka);break}else{sh(ka);break}while(0);h[S+(i*24|0)+8>>3]=U;c[S+(i*24|0)>>2]=(jh(ka)|0)+m;if(!Z)ph(ka);i=i+1|0;if((T|0)<=-1)break b;else j=n}}else i=0;while(0);do if(!(ja&16)){if(ja&1)break;mh(ka)}else th(ka);while(0);q=la+(na*52|0)+48|0;c[q>>2]=i;if(i){n=la+(na*52|0)+8|0;p=0;do{o=c[n>>2]|0;j=o+(p*24|0)|0;$a=c[j>>2]|0;if($a>>>0>(jh(ka)|0)>>>0){i=jh(ka)|0;c[j>>2]=i}else i=c[j>>2]|0;do if(i>>>0>1){m=i+-1|0;if((a[(c[fa>>2]|0)+m>>0]|0)!=-1)break;c[j>>2]=m;i=m}while(0);if(!p)j=0;else j=c[(c[n>>2]|0)+((p+-1|0)*24|0)>>2]|0;c[o+(p*24|0)+16>>2]=i-j;p=p+1|0}while(p>>>0<(c[q>>2]|0)>>>0)}na=na+1|0}while(na>>>0<(_(c[pa>>2]|0,c[oa>>2]|0)|0)>>>0);i=c[Aa>>2]|0;m=c[za>>2]|0}qa=qa+1|0}while(qa>>>0<(_(i,m)|0)>>>0);j=c[Ea>>2]|0}ya=ya+1|0}while(ya>>>0>>0);i=c[Na>>2]|0}Fa=Fa+1|0}while(Fa>>>0>>0);i=c[Za>>2]|0}Oa=Oa+1|0;if(Oa>>>0>=i>>>0){i=1;_a=173;break}}if((_a|0)==173)return i|0;return 0}function _g(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=_(d,b)|0;if(!(c[a+40>>2]|0)){h=a+24|0;i=a+8|0;e=c[i>>2]|0;do if(g>>>0>(c[h>>2]|0)>>>0){Sc(e);f=g<<2;e=Rc(f)|0;c[i>>2]=e;if(!e){b=0;return b|0}else{c[h>>2]=g;break}}else f=g<<2;while(0);Qi(e|0,0,f|0)|0}g=b+2|0;c[a+32>>2]=g;g=_(d+2|0,g)|0;h=a+28|0;i=a+12|0;e=c[i>>2]|0;do if(g>>>0>(c[h>>2]|0)>>>0){Sc(e);f=g<<1;e=Rc(f)|0;c[i>>2]=e;if(!e){b=0;return b|0}else{c[h>>2]=g;break}}else f=g<<1;while(0);Qi(e|0,0,f|0)|0;c[a+16>>2]=b;c[a+20>>2]=d;b=1;return b|0}function $g(a,f,g,h,i){a=a|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=c[a>>2]|0;l=b[f>>1]|0;m=l&255;if(!((m|0)!=0&(l&20480|0)==0))return;k=j+100|0;c[k>>2]=j+24+(d[20267+(m|h<<8)>>0]<<2);if(wh(j)|0){h=l>>>4&255;c[k>>2]=j+24+(d[21291+h>>0]<<2);l=wh(j)|0;h=d[21547+h>>0]|0;m=h^l;c[g>>2]=(l|0)!=(h|0)?0-i|0:i;a=c[a+32>>2]|0;i=f+(0-a<<1)|0;h=f+(a<<1)|0;g=f+(~a<<1)|0;b[g>>1]=e[g>>1]|2;b[i>>1]=b[i>>1]|b[3436+(m<<1)>>1];i=f+(1-a<<1)|0;b[i>>1]=e[i>>1]|4;i=f+-2|0;b[i>>1]=b[i>>1]|b[3436+(m+2<<1)>>1];b[f>>1]=e[f>>1]|4096;i=f+2|0;b[i>>1]=b[i>>1]|b[3436+(m+4<<1)>>1];i=f+(a+-1<<1)|0;b[i>>1]=e[i>>1]|1;b[h>>1]=b[h>>1]|b[3436+(m+6<<1)>>1];a=f+(a+1<<1)|0;b[a>>1]=e[a>>1]|8}b[f>>1]=e[f>>1]|16384;return}function ah(a,f,g,h,i){a=a|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[a>>2]|0;l=b[f>>1]|0;if(l&20480){a=b[f>>1]|0;a=a&65535;a=a&49151;a=a&65535;b[f>>1]=a;return}k=j+100|0;c[k>>2]=j+24+(d[20267+(l&255|h<<8)>>0]<<2);if(!(wh(j)|0)){a=b[f>>1]|0;a=a&65535;a=a&49151;a=a&65535;b[f>>1]=a;return}h=l>>>4&255;c[k>>2]=j+24+(d[21291+h>>0]<<2);k=wh(j)|0;h=d[21547+h>>0]|0;l=h^k;c[g>>2]=(k|0)!=(h|0)?0-i|0:i;a=c[a+32>>2]|0;i=f+(0-a<<1)|0;h=f+(a<<1)|0;g=f+(~a<<1)|0;b[g>>1]=e[g>>1]|2;b[i>>1]=b[i>>1]|b[3436+(l<<1)>>1];i=f+(1-a<<1)|0;b[i>>1]=e[i>>1]|4;i=f+-2|0;b[i>>1]=b[i>>1]|b[3436+(l+2<<1)>>1];b[f>>1]=e[f>>1]|4096;i=f+2|0;b[i>>1]=b[i>>1]|b[3436+(l+4<<1)>>1];i=f+(a+-1<<1)|0;b[i>>1]=e[i>>1]|1;b[h>>1]=b[h>>1]|b[3436+(l+6<<1)>>1];a=f+(a+1<<1)|0;b[a>>1]=e[a>>1]|8;a=b[f>>1]|0;a=a&65535;a=a&49151;a=a&65535;b[f>>1]=a;return}function bh(a,e,f,g,h,j,k,l,m,n,o,p){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+16|0;H=I;c[H>>2]=0;q=c[a>>2]|0;D=c[a+4>>2]|0;a=c[D+76>>2]|0;F=a+(e*5640|0)|0;s=(b[D>>1]|0)==4?2:1;t=D+80|0;if(!(c[t>>2]|0))r=1;else r=c[q+16>>2]|0;G=(c[a+(e*5640|0)+420>>2]|0)+1|0;E=Lf(q,D,e,p)|0;if(!E){e=0;i=I;return e|0}c[j>>2]=0;a:do if(!p){if(r){a=0;b:while(1){p=0;o=E;q=0;while(1){Mf(E,D,e,q,a,n,0);if((c[o+80>>2]|0)==-1){a=9;break b}m=o+36|0;c:while(1){do if(!(Of(o)|0))break c;while((c[m>>2]|0)>>>0>=g>>>0);c[H>>2]=0;if(!(fh(e,f,F,o,h,H,k,l)|0)){a=13;break b}B=c[H>>2]|0;c[j>>2]=(c[j>>2]|0)+B;k=k-B|0;p=B+p|0;h=h+B|0}B=c[t>>2]|0;if((B|0)!=0&p>>>0>B>>>0){a=17;break b}q=q+1|0;if(q>>>0>>0)o=o+232|0;else break}a=a+1|0;if(a>>>0>=r>>>0)break a}if((a|0)==9){Kf(E,G);e=0;i=I;return e|0}else if((a|0)==13){Kf(E,G);e=0;i=I;return e|0}else if((a|0)==17){Kf(E,G);e=0;i=I;return e|0}}}else{Mf(E,D,e,o,m,n,p);z=E+(o*232|0)|0;if((c[E+(o*232|0)+80>>2]|0)==-1){Kf(E,G);e=0;i=I;return e|0}n=E+(o*232|0)+36|0;u=(l|0)==0;v=f+840|0;w=l+12|0;x=l+8|0;y=l+88|0;t=D+93|0;s=a+(e*5640|0)+5636|0;while(1){do if(!(Of(z)|0))break a;while((c[n>>2]|0)>>>0>=g>>>0);c[H>>2]=0;if(!(fh(e,f,F,z,h,H,k,l)|0))break;r=c[H>>2]|0;h=h+r|0;k=k-r|0;c[j>>2]=(c[j>>2]|0)+r;if(!u){if(!(c[w>>2]|0))a=c[x>>2]|0;else{q=c[y>>2]|0;a=c[x>>2]|0;o=c[q+(e*592|0)+548>>2]|0;p=o+(a<<5)|0;if(!a){m=(c[q+(e*592|0)+12>>2]|0)+1|0;q=((m|0)<0)<<31>>31;D=p;c[D>>2]=m;c[D+4>>2]=q}else{if((((d[s>>0]|0)>>>2|(d[t>>0]|0)>>>3)&1)!=0?(B=p,A=c[B>>2]|0,B=c[B+4>>2]|0,!((A|0)==0&(B|0)==0)):0){m=A;q=B}else{m=o+(a+-1<<5)+16|0;m=Si(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;q=C}D=p;c[D>>2]=m;c[D+4>>2]=q}p=Si(m|0,q|0,-1,-1)|0;m=C;r=Si(p|0,m|0,r|0,0)|0;D=o+(a<<5)+16|0;c[D>>2]=r;c[D+4>>2]=C;D=o+(a<<5)+8|0;r=D;r=Si(p|0,m|0,c[r>>2]|0,c[r+4>>2]|0)|0;c[D>>2]=r;c[D+4>>2]=C}c[x>>2]=a+1}c[v>>2]=(c[v>>2]|0)+1}Kf(E,G);e=0;i=I;return e|0}while(0);Kf(E,G);e=1;i=I;return e|0}function ch(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;$=i;i=i+112|0;W=$+64|0;X=$+32|0;S=$;R=$+96|0;Q=$+92|0;k=c[a>>2]|0;M=a+4|0;Z=c[M>>2]|0;h=c[Z+76>>2]|0;O=h+(b*5640|0)|0;P=h+(b*5640|0)+420|0;Y=(c[P>>2]|0)+1|0;Z=Jf(k,Z,b)|0;if(!Z){aa=0;i=$;return aa|0}N=k+16|0;L=h+(b*5640|0)+12|0;K=d+20|0;J=k+24|0;b=g;a=e;H=Z;I=0;a:while(1){if((c[H+80>>2]|0)==-1){aa=4;break}h=Pc(c[N>>2]<<2)|0;if(!h){aa=6;break}Qi(h|0,1,c[N>>2]<<2|0)|0;if(Of(H)|0){g=H+24|0;d=H+28|0;G=H+36|0;k=H+32|0;F=b;E=a;while(1){if((c[L>>2]|0)>>>0>(c[G>>2]|0)>>>0){b=c[g>>2]|0;a=c[K>>2]|0;if((c[d>>2]|0)>>>0<(c[a+(b*52|0)+20>>2]|0)>>>0){c[h+(b<<2)>>2]=0;D=c[M>>2]|0;c[Q>>2]=0;if(!(gh(D,a,O,H,R,E,Q,F,j)|0)){aa=45;break a}C=c[Q>>2]|0;if(!(c[R>>2]|0))a=C;else{B=F-C|0;z=E+C|0;c[Q>>2]=0;b=c[d>>2]|0;l=c[(c[K>>2]|0)+((c[g>>2]|0)*52|0)+24>>2]|0;x=l+(b*136|0)+24|0;a=c[x>>2]|0;b:do if(!a){a=z;aa=43}else{y=E+F|0;m=a;D=0;w=l+(b*136|0)+28|0;l=z;c:while(1){a=c[k>>2]|0;b=c[w+20>>2]|0;if(((c[w+8>>2]|0)!=(c[w>>2]|0)?(c[w+12>>2]|0)!=(c[w+4>>2]|0):0)?(V=_(c[b+(a*40|0)+20>>2]|0,c[b+(a*40|0)+16>>2]|0)|0,(V|0)!=0):0){A=0;a=c[b+(a*40|0)+24>>2]|0;p=l;while(1){u=a+40|0;if(!(c[u>>2]|0))b=p;else{v=a+44|0;b=c[v>>2]|0;do if(!b){o=c[a+4>>2]|0;c[v>>2]=1;c[a+36>>2]=0}else{l=b+-1|0;m=c[a+4>>2]|0;if((c[m+(l<<5)+8>>2]|0)!=(c[m+(l<<5)+20>>2]|0)){o=m+(l<<5)|0;break}c[v>>2]=b+1;o=m+(b<<5)|0}while(0);t=a+36|0;b=a+32|0;s=p;n=o+28|0;l=c[n>>2]|0;if((l+s|0)>>>0>>0|(p+l|0)>>>0>y>>>0){b=D;a=A;break c}m=c[t>>2]|0;s=p;r=o;while(1){o=l+m|0;if(o>>>0>>0){b=D;a=A;aa=29;break a}p=c[a>>2]|0;if(o>>>0>(c[b>>2]|0)>>>0){l=Tc(p,o)|0;if(!l){aa=32;break a}m=c[t>>2]|0;q=c[n>>2]|0;c[b>>2]=q+m;c[a>>2]=l;p=l;l=q}Ui(p+m|0,s|0,l|0)|0;l=r+8|0;m=c[l>>2]|0;if(!m){c[r>>2]=a;o=c[t>>2]|0;c[r+4>>2]=o}else o=c[t>>2]|0;p=c[n>>2]|0;q=s;s=s+p|0;n=c[r+24>>2]|0;m=n+m|0;c[l>>2]=m;l=c[u>>2]|0;c[u>>2]=l-n;c[r+12>>2]=m;m=p+o|0;c[t>>2]=m;o=r+16|0;c[o>>2]=(c[o>>2]|0)+p;if((l|0)==(n|0)){b=s;break}c[v>>2]=(c[v>>2]|0)+1;o=s;n=r+60|0;l=c[n>>2]|0;if((l+o|0)>>>0>>0?1:(q+(l+p)|0)>>>0>y>>>0){b=D;a=A;break c}else r=r+32|0}c[a+48>>2]=c[v>>2]}A=A+1|0;if(A>>>0>=V>>>0){a=b;break}else{a=a+56|0;p=b}}b=c[x>>2]|0}else{b=m;a=l}D=D+1|0;if(D>>>0>=b>>>0){aa=43;break b}else{m=b;w=w+36|0;l=a}}z=c[k>>2]|0;A=c[d>>2]|0;D=c[g>>2]|0;c[S>>2]=l;c[S+4>>2]=B;c[S+8>>2]=a;c[S+12>>2]=z;c[S+16>>2]=b;c[S+20>>2]=A;c[S+24>>2]=D;Ub(j,2,21803,S)|0;a=c[Q>>2]|0}while(0);if((aa|0)==43){aa=0;a=a-z|0;c[Q>>2]=a}a=a+C|0}l=c[g>>2]|0;C=c[d>>2]|0;b=(c[J>>2]|0)+(l*52|0)+36|0;D=c[b>>2]|0;c[b>>2]=C>>>0>D>>>0?C:D;b=a}else aa=47}else{a=c[K>>2]|0;aa=47}if((aa|0)==47){aa=0;D=c[M>>2]|0;c[Q>>2]=0;if(!(gh(D,a,O,H,R,E,Q,F,j)|0)){aa=69;break a}u=c[Q>>2]|0;if(!(c[R>>2]|0))a=u;else{l=F-u|0;w=c[d>>2]|0;x=c[g>>2]|0;a=c[(c[K>>2]|0)+(x*52|0)+24>>2]|0;c[Q>>2]=0;t=c[a+(w*136|0)+24>>2]|0;if(!t)a=0;else{v=c[k>>2]|0;b=0;s=a+(w*136|0)+28|0;while(1){m=c[s+20>>2]|0;if(((c[s+8>>2]|0)!=(c[s>>2]|0)?(c[s+12>>2]|0)!=(c[s+4>>2]|0):0)?(T=_(c[m+(v*40|0)+20>>2]|0,c[m+(v*40|0)+16>>2]|0)|0,(T|0)!=0):0){a=0;r=c[m+(v*40|0)+24>>2]|0;while(1){p=r+40|0;d:do if(c[p>>2]|0){q=r+44|0;m=c[q>>2]|0;do if(!m){o=c[r+4>>2]|0;c[q>>2]=1;c[r+36>>2]=0}else{n=m+-1|0;o=c[r+4>>2]|0;if((c[o+(n<<5)+8>>2]|0)!=(c[o+(n<<5)+20>>2]|0)){o=o+(n<<5)|0;break}c[q>>2]=m+1;o=o+(m<<5)|0}while(0);D=c[Q>>2]|0;m=c[o+28>>2]|0;n=m+D|0;if(n>>>0>>0|n>>>0>l>>>0){g=v;d=w;k=x;aa=65;break a}while(1){c[Q>>2]=n;D=c[o+24>>2]|0;C=o+8|0;c[C>>2]=(c[C>>2]|0)+D;C=c[p>>2]|0;c[p>>2]=C-D;if((C|0)==(D|0))break d;c[q>>2]=(c[q>>2]|0)+1;D=c[Q>>2]|0;m=c[o+60>>2]|0;n=m+D|0;if(n>>>0>>0|n>>>0>l>>>0){g=v;d=w;k=x;aa=65;break a}else o=o+32|0}}while(0);a=a+1|0;if(a>>>0>=T>>>0)break;else r=r+56|0}}b=b+1|0;if(b>>>0>=t>>>0)break;else s=s+36|0}a=c[Q>>2]|0}a=a+u|0}l=c[g>>2]|0;b=a}if((c[h+(l<<2)>>2]|0)!=0?(U=(c[J>>2]|0)+(l*52|0)+36|0,(c[U>>2]|0)==0):0)c[U>>2]=(c[(c[K>>2]|0)+(l*52|0)+20>>2]|0)+-1;a=E+b|0;b=F-b|0;if(!(Of(H)|0))break;else{F=b;E=a}}}Uc(h);I=I+1|0;if(I>>>0>(c[P>>2]|0)>>>0){h=a;aa=75;break}else H=H+232|0}if((aa|0)==4){Kf(Z,Y);aa=0;i=$;return aa|0}else if((aa|0)==6){Kf(Z,Y);aa=0;i=$;return aa|0}else if((aa|0)==29){f=c[k>>2]|0;e=c[d>>2]|0;W=c[g>>2]|0;c[X>>2]=l;c[X+4>>2]=m;c[X+8>>2]=~l;c[X+12>>2]=a;c[X+16>>2]=f;c[X+20>>2]=b;c[X+24>>2]=e;c[X+28>>2]=W;Ub(j,1,21888,X)|0;aa=45}else if((aa|0)==32){Uc(c[a>>2]|0);c[a>>2]=0;c[b>>2]=0;aa=45}else if((aa|0)==65){c[W>>2]=m;c[W+4>>2]=l;c[W+8>>2]=a;c[W+12>>2]=g;c[W+16>>2]=b;c[W+20>>2]=d;c[W+24>>2]=k;Ub(j,1,21987,W)|0;aa=69}else if((aa|0)==75){Kf(Z,Y);c[f>>2]=h-e;aa=1;i=$;return aa|0}if((aa|0)==45){Kf(Z,Y);Uc(h);aa=0;i=$;return aa|0}else if((aa|0)==69){Kf(Z,Y);Uc(h);aa=0;i=$;return aa|0}return 0}function dh(a,b){a=a|0;b=b|0;var d=0;d=Qc(1,8)|0;if(!d){a=0;return a|0}c[d>>2]=a;c[d+4>>2]=b;a=d;return a|0}function eh(a){a=a|0;if(!a)return;Uc(a);return}function fh(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0;s=c[f+28>>2]|0;J=c[f+32>>2]|0;K=c[f+36>>2]|0;r=c[(c[d+20>>2]|0)+((c[f+24>>2]|0)*52|0)+24>>2]|0;if(!(c[e>>2]&2))G=g;else{a[g>>0]=-1;a[g+1>>0]=-111;a[g+2>>0]=0;a[g+3>>0]=4;G=d+840|0;a[g+4>>0]=(c[G>>2]|0)>>>8;a[g+5>>0]=c[G>>2];j=j+-6|0;G=g+6|0}if((K|0)==0?(q=r+(s*136|0)+24|0,(c[q>>2]|0)!=0):0){o=r+(s*136|0)+28|0;p=0;while(1){f=c[o+20>>2]|0;kg(c[f+(J*40|0)+32>>2]|0);m=f+(J*40|0)+36|0;kg(c[m>>2]|0);n=_(c[f+(J*40|0)+20>>2]|0,c[f+(J*40|0)+16>>2]|0)|0;if(n){f=f+(J*40|0)+24|0;d=o+28|0;l=0;do{H=c[f>>2]|0;c[H+(l*52|0)+40>>2]=0;ng(c[m>>2]|0,l,(c[d>>2]|0)-(c[H+(l*52|0)+28>>2]|0)|0);l=l+1|0}while((l|0)!=(n|0))}p=p+1|0;if(p>>>0>=(c[q>>2]|0)>>>0)break;else o=o+36|0}}E=wg()|0;if(!E){i=0;return i|0}zg(E,G,j);Bg(E,1,1);F=r+(s*136|0)+28|0;H=r+(s*136|0)+24|0;if(c[H>>2]|0){A=K+1|0;C=F;D=0;while(1){n=c[C+20>>2]|0;B=_(c[n+(J*40|0)+20>>2]|0,c[n+(J*40|0)+16>>2]|0)|0;o=n+(J*40|0)+24|0;f=(B|0)==0;if(!f){d=n+(J*40|0)+32|0;l=c[o>>2]|0;m=0;while(1){if((c[l+40>>2]|0)==0?(c[(c[l+4>>2]|0)+(K*24|0)>>2]|0)!=0:0)ng(c[d>>2]|0,m,K);m=m+1|0;if((m|0)==(B|0))break;else l=l+52|0}if(!f){z=n+(J*40|0)+32|0;y=n+(J*40|0)+36|0;w=c[o>>2]|0;x=0;while(1){f=(c[w+4>>2]|0)+(K*24|0)|0;v=w+40|0;if(!(c[v>>2]|0))og(E,c[z>>2]|0,x,A);else Bg(E,(c[f>>2]|0)!=0&1,1);d=c[f>>2]|0;if(d){if(!(c[v>>2]|0)){c[w+32>>2]=3;og(E,c[y>>2]|0,x,999);d=c[f>>2]|0}a:do switch(d|0){case 1:{Bg(E,0,1);break}case 2:{Bg(E,2,2);break}default:{if(d>>>0<6){Bg(E,d+-3|12,4);break a}if(d>>>0<37){Bg(E,d+-6|480,9);break a}if(d>>>0<165)Bg(E,d+-37|65408,16)}}while(0);o=c[v>>2]|0;d=c[f>>2]|0;u=d+o|0;t=w+8|0;if(o>>>0>>0){s=w+32|0;q=o+-1+d|0;m=0;n=0;l=0;r=(c[t>>2]|0)+(o*24|0)|0;while(1){l=l+1|0;n=(c[r+16>>2]|0)+n|0;if((a[r+20>>0]&1)!=0|(o|0)==(q|0)){if((n|0)>1){d=0;do{n=n>>1;d=d+1|0}while((n|0)>1)}else d=0;p=c[s>>2]|0;if((l|0)>1){n=0;do{l=l>>1;n=n+1|0}while((l|0)>1);l=n}else l=0;n=d+1-p-l|0;m=(m|0)>(n|0)?m:n;n=0;l=0}o=o+1|0;if((o|0)==(u|0))break;else r=r+24|0}if((m|0)>0){d=m;while(1){Bg(E,1,1);if((d|0)>1)d=d+-1|0;else{d=n;break}}}else d=n}else{m=0;d=0;l=0}Bg(E,0,1);q=w+32|0;c[q>>2]=(c[q>>2]|0)+m;m=c[v>>2]|0;if(m>>>0>>0){p=(c[t>>2]|0)+(m*24|0)|0;while(1){l=l+1|0;n=(c[p+16>>2]|0)+d|0;if((a[p+20>>0]&1)==0?(m|0)!=((c[v>>2]|0)+-1+(c[f>>2]|0)|0):0)d=n;else{o=c[q>>2]|0;if((l|0)>1){d=0;do{l=l>>1;d=d+1|0}while((l|0)>1)}else d=0;Bg(E,n,d+o|0);d=0;l=0}m=m+1|0;if((m|0)==(u|0))break;else p=p+24|0}}}x=x+1|0;if((x|0)==(B|0))break;else w=w+52|0}}}D=D+1|0;if(D>>>0>=(c[H>>2]|0)>>>0)break;else C=C+36|0}}if(!(Dg(E)|0)){xg(E);i=0;return i|0}d=yg(E)|0;f=G+d|0;j=j-d|0;xg(E);if(c[e>>2]&4){a[f>>0]=-1;a[G+(d+1)>>0]=-110;j=j+-2|0;f=G+(d+2)|0}t=(k|0)!=0;if(t?(c[k+12>>2]|0)!=0:0){G=f-g|0;e=(c[(c[k+88>>2]|0)+(b*592|0)+548>>2]|0)+(c[k+8>>2]<<5)+8|0;c[e>>2]=G;c[e+4>>2]=((G|0)<0)<<31>>31}d=c[H>>2]|0;b:do if(d){u=k+12|0;v=k+8|0;w=k+88|0;r=F;s=0;c:while(1){l=c[r+20>>2]|0;q=_(c[l+(J*40|0)+20>>2]|0,c[l+(J*40|0)+16>>2]|0)|0;l=c[l+(J*40|0)+24>>2]|0;if(q){if(t){p=0;while(1){o=c[l+4>>2]|0;d=o+(K*24|0)|0;if(c[d>>2]|0){m=o+(K*24|0)+4|0;n=c[m>>2]|0;if(n>>>0>j>>>0){f=0;j=81;break c}Ui(f|0,c[o+(K*24|0)+16>>2]|0,n|0)|0;e=l+40|0;c[e>>2]=(c[e>>2]|0)+(c[d>>2]|0);e=c[m>>2]|0;f=f+e|0;j=j-e|0;if((c[u>>2]|0)!=0?(e=(c[(c[w>>2]|0)+(b*592|0)+548>>2]|0)+(c[v>>2]<<5)+24|0,I=+h[o+(K*24|0)+8>>3]+ +h[e>>3],h[e>>3]=I,+h[k>>3]>3]=I}p=p+1|0;if(p>>>0>=q>>>0)break;else l=l+52|0}}else{p=0;while(1){d=c[l+4>>2]|0;m=d+(K*24|0)|0;if(c[m>>2]|0){n=d+(K*24|0)+4|0;o=c[n>>2]|0;if(o>>>0>j>>>0){f=0;j=81;break c}Ui(f|0,c[d+(K*24|0)+16>>2]|0,o|0)|0;e=l+40|0;c[e>>2]=(c[e>>2]|0)+(c[m>>2]|0);e=c[n>>2]|0;j=j-e|0;f=f+e|0}p=p+1|0;if(p>>>0>=q>>>0)break;else l=l+52|0}}d=c[H>>2]|0}s=s+1|0;if(s>>>0>=d>>>0)break b;else r=r+36|0}if((j|0)==81)return f|0}while(0);c[i>>2]=f-g+(c[i>>2]|0);i=1;return i|0}function gh(b,d,e,f,g,h,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+64|0;L=N+40|0;K=N+32|0;x=N+24|0;w=N+16|0;u=N+8|0;t=N;v=N+48|0;M=N+44|0;c[M>>2]=h;z=c[f+28>>2]|0;J=f+24|0;y=c[d+((c[J>>2]|0)*52|0)+24>>2]|0;H=f+36|0;if((c[H>>2]|0)==0?(s=y+(z*136|0)+24|0,m=c[s>>2]|0,(m|0)!=0):0){r=f+32|0;p=0;q=y+(z*136|0)+28|0;while(1){d=c[r>>2]|0;n=c[q+20>>2]|0;if((c[q+8>>2]|0)!=(c[q>>2]|0)?(c[q+12>>2]|0)!=(c[q+4>>2]|0):0){kg(c[n+(d*40|0)+32>>2]|0);kg(c[n+(d*40|0)+36>>2]|0);m=_(c[n+(d*40|0)+20>>2]|0,c[n+(d*40|0)+16>>2]|0)|0;if(m){o=0;d=c[n+(d*40|0)+24>>2]|0;while(1){c[d+44>>2]=0;c[d+48>>2]=0;o=o+1|0;if((o|0)==(m|0))break;else d=d+56|0}}m=c[s>>2]|0}p=p+1|0;if(p>>>0>=m>>>0)break;else q=q+36|0}}do if(c[e>>2]&2){if(k>>>0<6){Ub(l,2,22072,t)|0;break}d=c[M>>2]|0;if((a[d>>0]|0)==-1?(a[d+1>>0]|0)==-111:0){c[M>>2]=d+6;break}Ub(l,2,22114,u)|0}while(0);G=wg()|0;if(!G){h=0;i=N;return h|0}do if(!(a[b+96>>0]&1))if(!(a[e+5636>>0]&2)){E=c[M>>2]|0;c[v>>2]=h+k-E;F=M;break}else{F=e+5168|0;E=c[F>>2]|0;v=e+5180|0;break}else{F=b+40|0;E=c[F>>2]|0;v=b+44|0}while(0);Ag(G,E,c[v>>2]|0);if(!(Cg(G,1)|0)){Eg(G)|0;m=yg(G)|0;d=E+m|0;xg(G);do if(c[e>>2]&4){if(((c[v>>2]|0)-d+(c[F>>2]|0)|0)>>>0<2){Ub(l,2,22135,w)|0;break}if((a[d>>0]|0)==-1?(a[E+(m+1)>>0]|0)==-110:0){d=E+(m+2)|0;break}Ub(l,2,22177,x)|0}while(0);c[v>>2]=(c[v>>2]|0)+((c[F>>2]|0)-d);c[F>>2]=d;c[g>>2]=0;c[j>>2]=(c[M>>2]|0)-h;h=1;i=N;return h|0}D=y+(z*136|0)+24|0;d=c[D>>2]|0;a:do if(d){B=f+32|0;C=e+5584|0;A=0;y=y+(z*136|0)+28|0;b:while(1){m=c[B>>2]|0;n=c[y+20>>2]|0;if(((c[y+8>>2]|0)!=(c[y>>2]|0)?(c[y+12>>2]|0)!=(c[y+4>>2]|0):0)?(I=_(c[n+(m*40|0)+20>>2]|0,c[n+(m*40|0)+16>>2]|0)|0,(I|0)!=0):0){b=n+(m*40|0)+32|0;f=n+(m*40|0)+36|0;w=y+28|0;x=0;k=c[n+(m*40|0)+24>>2]|0;while(1){m=k+44|0;if(!(c[m>>2]|0))d=pg(G,c[b>>2]|0,x,(c[H>>2]|0)+1|0)|0;else d=Cg(G,1)|0;c:do if(!d)c[k+40>>2]=0;else{if(!(c[m>>2]|0)){d=0;while(1)if(!(pg(G,c[f>>2]|0,x,d)|0))d=d+1|0;else break;c[k+24>>2]=1-d+(c[w>>2]|0);c[k+28>>2]=3}do if(Cg(G,1)|0)if(Cg(G,1)|0){d=Cg(G,2)|0;if((d|0)!=3){d=d+3|0;break}d=Cg(G,5)|0;if((d|0)==31){d=(Cg(G,7)|0)+37|0;break}else{d=d+6|0;break}}else d=2;else d=1;while(0);t=k+40|0;c[t>>2]=d;d=0;while(1)if(!(Cg(G,1)|0))break;else d=d+1|0;u=k+28|0;c[u>>2]=(c[u>>2]|0)+d;m=c[m>>2]|0;do if(!m){n=c[(c[C>>2]|0)+((c[J>>2]|0)*1080|0)+16>>2]|0;d=k+52|0;if(!(c[d>>2]|0)){c[d>>2]=10;o=k+4|0;m=Tc(c[o>>2]|0,320)|0;if(!m){m=d;n=o;d=o;o=66;break b}c[o>>2]=m}else m=c[k+4>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[m+24>>2]=0;c[m+28>>2]=0;if(n&4){c[m+20>>2]=1;m=0;break}m=m+20|0;if(!(n&1)){c[m>>2]=109;m=0;break}else{c[m>>2]=10;m=0;break}}else{q=m+-1|0;r=k+4|0;n=c[r>>2]|0;if((c[n+(q<<5)+8>>2]|0)!=(c[n+(q<<5)+20>>2]|0)){d=k+52|0;m=q;break}p=c[(c[C>>2]|0)+((c[J>>2]|0)*1080|0)+16>>2]|0;d=k+52|0;o=c[d>>2]|0;if((m+1|0)>>>0>o>>>0){z=o+10|0;c[d>>2]=z;n=Tc(n,z<<5)|0;if(!n){n=r;m=d;d=r;o=77;break b}c[r>>2]=n}z=n+(m<<5)|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(p&4){c[n+(m<<5)+20>>2]=1;break}if(!(p&1)){c[n+(m<<5)+20>>2]=109;break}else{z=c[n+(q<<5)+20>>2]|0;c[n+(m<<5)+20>>2]=(z|0)==1|(z|0)==10?2:1;break}}while(0);s=k+4|0;q=c[t>>2]|0;while(1){p=c[s>>2]|0;n=(c[p+(m<<5)+20>>2]|0)-(c[p+(m<<5)+8>>2]|0)|0;n=(n|0)<(q|0)?n:q;c[p+(m<<5)+24>>2]=n;p=c[u>>2]|0;if(n>>>0>1){o=0;while(1){o=o+1|0;if(n>>>0>3)n=n>>>1;else{n=o;break}}}else n=0;p=Cg(G,n+p|0)|0;n=c[s>>2]|0;c[n+(m<<5)+28>>2]=p;p=q-(c[n+(m<<5)+24>>2]|0)|0;if((p|0)<=0)break c;q=m+1|0;r=c[(c[C>>2]|0)+((c[J>>2]|0)*1080|0)+16>>2]|0;o=c[d>>2]|0;if((m+2|0)>>>0>o>>>0){z=o+10|0;c[d>>2]=z;n=Tc(n,z<<5)|0;if(!n){n=s;m=s;o=90;break b}c[s>>2]=n}z=n+(q<<5)|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(r&4){c[n+(q<<5)+20>>2]=1;m=q;q=p;continue}if(!(r&1)){c[n+(q<<5)+20>>2]=109;m=q;q=p;continue}else{z=c[n+(m<<5)+20>>2]|0;c[n+(q<<5)+20>>2]=(z|0)==1|(z|0)==10?2:1;m=q;q=p;continue}}}while(0);x=x+1|0;if(x>>>0>=I>>>0)break;else k=k+56|0}d=c[D>>2]|0}A=A+1|0;if(A>>>0>=d>>>0)break a;else y=y+36|0}if((o|0)==66){Uc(c[d>>2]|0);c[n>>2]=0;c[m>>2]=0;xg(G);h=0;i=N;return h|0}else if((o|0)==77){Uc(c[d>>2]|0);c[n>>2]=0;c[m>>2]=0;xg(G);h=0;i=N;return h|0}else if((o|0)==90){Uc(c[m>>2]|0);c[n>>2]=0;c[d>>2]=0;xg(G);h=0;i=N;return h|0}}while(0);if(!(Eg(G)|0)){xg(G);h=0;i=N;return h|0}m=yg(G)|0;d=E+m|0;xg(G);do if(c[e>>2]&4){if(((c[v>>2]|0)-d+(c[F>>2]|0)|0)>>>0<2){Ub(l,2,22135,K)|0;break}if((a[d>>0]|0)==-1?(a[E+(m+1)>>0]|0)==-110:0){d=E+(m+2)|0;break}Ub(l,2,22177,L)|0}while(0);c[v>>2]=(c[v>>2]|0)+((c[F>>2]|0)-d);c[F>>2]=d;c[g>>2]=1;c[j>>2]=(c[M>>2]|0)-h;h=1;i=N;return h|0}function hh(){return Pc(104)|0}function ih(a){a=a|0;if(!a)return;Uc(a);return}function jh(a){a=a|0;return (c[a+12>>2]|0)-(c[a+16>>2]|0)|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0;c[b+100>>2]=b+24;c[b+4>>2]=32768;c[b>>2]=0;f=d+-1|0;c[b+12>>2]=f;e=b+8|0;c[e>>2]=12;c[e>>2]=(a[f>>0]|0)==-1?13:12;c[b+16>>2]=d;return}function lh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=c[b+100>>2]|0;h=c[g>>2]|0;j=(c[h+4>>2]|0)==(d|0);f=c[h>>2]|0;k=b+4|0;d=(c[k>>2]|0)-f|0;c[k>>2]=d;if(!j){if(d>>>0>>0){j=(c[b>>2]|0)+f|0;c[b>>2]=j;f=d;d=j;j=b}else{c[k>>2]=f;d=c[b>>2]|0;j=b}c[g>>2]=c[h+12>>2];i=b+8|0;h=b+12|0;g=d;d=c[i>>2]|0;while(1){f=f<<1;c[k>>2]=f;e=g<<1;c[j>>2]=e;d=d+-1|0;c[i>>2]=d;if(!d){d=c[h>>2]|0;f=a[d>>0]|0;do if(f<<24>>24!=-1){if(!(e&134217728)){e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>18;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}a[d>>0]=f+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){b=c[j>>2]&134217727;c[j>>2]=b;e=d+1|0;c[h>>2]=e;a[e>>0]=b>>>20;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7;break}else{e=d+1|0;c[h>>2]=e;a[e>>0]=(c[j>>2]|0)>>>19;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}}else{e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>19;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7}while(0);f=c[k>>2]|0}if(!(f&32768))g=e;else break}return}if(d&32768){c[b>>2]=(c[b>>2]|0)+f;return}if(d>>>0>>0){c[k>>2]=f;e=c[b>>2]|0;j=b}else{e=(c[b>>2]|0)+f|0;c[b>>2]=e;f=d;j=b}c[g>>2]=c[h+8>>2];i=b+8|0;h=b+12|0;g=e;d=c[i>>2]|0;while(1){f=f<<1;c[k>>2]=f;e=g<<1;c[j>>2]=e;d=d+-1|0;c[i>>2]=d;if(!d){d=c[h>>2]|0;f=a[d>>0]|0;do if(f<<24>>24!=-1){if(!(e&134217728)){e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>18;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}a[d>>0]=f+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){b=c[j>>2]&134217727;c[j>>2]=b;e=d+1|0;c[h>>2]=e;a[e>>0]=b>>>20;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7;break}else{e=d+1|0;c[h>>2]=e;a[e>>0]=(c[j>>2]|0)>>>19;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}}else{e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>19;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7}while(0);f=c[k>>2]|0}if(!(f&32768))g=e;else break}return}function mh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=c[b>>2]|0;f=h|65535;g=b+8|0;f=(f>>>0<((c[b+4>>2]|0)+h|0)>>>0?f:f+-32768|0)<>2];c[b>>2]=f;h=b+12|0;d=c[h>>2]|0;e=a[d>>0]|0;do if(e<<24>>24!=-1){if(!(f&134217728)){d=d+1|0;c[h>>2]=d;a[d>>0]=f>>>19;d=c[b>>2]&524287;c[b>>2]=d;c[g>>2]=8;e=8;break}a[d>>0]=e+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){e=c[b>>2]&134217727;c[b>>2]=e;d=d+1|0;c[h>>2]=d;a[d>>0]=e>>>20;d=c[b>>2]&1048575;c[b>>2]=d;c[g>>2]=7;e=7;break}else{d=d+1|0;c[h>>2]=d;a[d>>0]=(c[b>>2]|0)>>>19;d=c[b>>2]&524287;c[b>>2]=d;c[g>>2]=8;e=8;break}}else{d=d+1|0;c[h>>2]=d;a[d>>0]=f>>>20;d=c[b>>2]&1048575;c[b>>2]=d;c[g>>2]=7;e=7}while(0);d=d<>2]=d;e=c[h>>2]|0;f=a[e>>0]|0;do if(f<<24>>24!=-1){if(!(d&134217728)){f=e+1|0;c[h>>2]=f;a[f>>0]=d>>>19;c[b>>2]=c[b>>2]&524287;c[g>>2]=8;break}a[e>>0]=f+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){e=c[b>>2]&134217727;c[b>>2]=e;f=d+1|0;c[h>>2]=f;a[f>>0]=e>>>20;c[b>>2]=c[b>>2]&1048575;c[g>>2]=7;break}else{f=d+1|0;c[h>>2]=f;a[f>>0]=(c[b>>2]|0)>>>19;c[b>>2]=c[b>>2]&524287;c[g>>2]=8;break}}else{f=e+1|0;c[h>>2]=f;a[f>>0]=d>>>20;c[b>>2]=c[b>>2]&1048575;c[g>>2]=7}while(0);d=c[h>>2]|0;if((a[d>>0]|0)==-1)return;c[h>>2]=d+1;return}function nh(a){a=a|0;c[a>>2]=0;c[a+8>>2]=8;return}function oh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+8|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;d=(d<>2]|0)|0;c[b>>2]=d;if(f)return;f=b+12|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;a[g>>0]=d;c[e>>2]=8;c[e>>2]=(a[c[f>>2]>>0]|0)==-1?7:8;c[b>>2]=0;return}function ph(a){a=a|0;c[a+28>>2]=1156;c[a+32>>2]=1156;c[a+36>>2]=1156;c[a+40>>2]=1156;c[a+44>>2]=1156;c[a+48>>2]=1156;c[a+52>>2]=1156;c[a+56>>2]=1156;c[a+60>>2]=1156;c[a+64>>2]=1156;c[a+68>>2]=1156;c[a+72>>2]=1156;c[a+76>>2]=1156;c[a+80>>2]=1156;c[a+84>>2]=1156;c[a+88>>2]=1156;c[a+96>>2]=2628;c[a+92>>2]=1252;c[a+24>>2]=1284;return}function qh(a){a=a|0;c[a+24>>2]=1156;c[a+28>>2]=1156;c[a+32>>2]=1156;c[a+36>>2]=1156;c[a+40>>2]=1156;c[a+44>>2]=1156;c[a+48>>2]=1156;c[a+52>>2]=1156;c[a+56>>2]=1156;c[a+60>>2]=1156;c[a+64>>2]=1156;c[a+68>>2]=1156;c[a+72>>2]=1156;c[a+76>>2]=1156;c[a+80>>2]=1156;c[a+84>>2]=1156;c[a+88>>2]=1156;c[a+92>>2]=1156;c[a+96>>2]=1156;return}function rh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a+24+(b<<2)>>2]=1156+((e<<1)+d<<4);return}function sh(b){b=b|0;var d=0,e=0;c[b+100>>2]=b+24;c[b+4>>2]=32768;c[b>>2]=0;d=b+8|0;c[d>>2]=12;e=b+12|0;b=(c[e>>2]|0)+-1|0;c[e>>2]=b;if((a[b>>0]|0)!=-1)return;c[d>>2]=13;return}function th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=b+8|0;d=c[i>>2]|0;f=12-d|0;if((f|0)>0){g=b+12|0;e=c[b>>2]|0;do{d=e<>2]=d;c[i>>2]=0;e=c[g>>2]|0;h=a[e>>0]|0;do if(h<<24>>24!=-1){if(!(d&134217728)){e=e+1|0;c[g>>2]=e;a[e>>0]=d>>>19;e=c[b>>2]&524287;c[b>>2]=e;c[i>>2]=8;d=8;break}a[e>>0]=h+1<<24>>24;d=c[g>>2]|0;if((a[d>>0]|0)==-1){h=c[b>>2]&134217727;c[b>>2]=h;e=d+1|0;c[g>>2]=e;a[e>>0]=h>>>20;e=c[b>>2]&1048575;c[b>>2]=e;c[i>>2]=7;d=7;break}else{e=d+1|0;c[g>>2]=e;a[e>>0]=(c[b>>2]|0)>>>19;e=c[b>>2]&524287;c[b>>2]=e;c[i>>2]=8;d=8;break}}else{e=e+1|0;c[g>>2]=e;a[e>>0]=d>>>20;e=c[b>>2]&1048575;c[b>>2]=e;c[i>>2]=7;d=7}while(0);f=f-d|0}while((f|0)>0)}else g=b+12|0;d=c[g>>2]|0;e=a[d>>0]|0;if(e<<24>>24==-1)return;f=c[b>>2]|0;if(!(f&134217728)){h=d+1|0;c[g>>2]=h;a[h>>0]=f>>>19;c[b>>2]=c[b>>2]&524287;c[i>>2]=8;return}a[d>>0]=e+1<<24>>24;d=c[g>>2]|0;if((a[d>>0]|0)==-1){f=c[b>>2]&134217727;c[b>>2]=f;h=d+1|0;c[g>>2]=h;a[h>>0]=f>>>20;c[b>>2]=c[b>>2]&1048575;c[i>>2]=7;return}else{h=d+1|0;c[g>>2]=h;a[h>>0]=(c[b>>2]|0)>>>19;c[b>>2]=c[b>>2]&524287;c[i>>2]=8;return}}function uh(a){a=a|0;c[a+100>>2]=a+96;lh(a,1);lh(a,0);lh(a,1);lh(a,0);return}function vh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;c[b+100>>2]=b+24;c[b+16>>2]=e;c[b+20>>2]=e+f;h=b+12|0;c[h>>2]=e;do if(f){i=d[e>>0]<<16;c[b>>2]=i;g=e+1|0;if((f|0)==1)f=255;else f=d[g>>0]|0;if((a[e>>0]|0)!=-1){c[h>>2]=g;g=i|f<<8;c[b>>2]=g;f=b+8|0;c[f>>2]=8;h=b;i=1;break}if(f>>>0>143){g=i|65280;c[b>>2]=g;f=b+8|0;c[f>>2]=8;h=b;i=1;break}else{c[h>>2]=g;g=i+(f<<9)|0;c[b>>2]=g;f=b+8|0;c[f>>2]=7;h=b;i=0;break}}else{c[b>>2]=16776960;f=b+8|0;c[f>>2]=8;g=16776960;h=b;i=1}while(0);c[h>>2]=g<<7;c[f>>2]=i;c[b+4>>2]=32768;return 1}function wh(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=c[b+100>>2]|0;g=c[f>>2]|0;j=c[g>>2]|0;n=b+4|0;i=(c[n>>2]|0)-j|0;c[n>>2]=i;h=c[b>>2]|0;if(h>>>16>>>0>>0){c[n>>2]=j;e=c[g+4>>2]|0;if(i>>>0>>0)c[f>>2]=c[g+8>>2];else{c[f>>2]=c[g+12>>2];e=1-e|0}k=b+8|0;l=b+12|0;m=b+20|0;g=c[k>>2]|0;f=h;do{do if(!g){h=c[l>>2]|0;g=c[m>>2]|0;if((h|0)==(g|0)){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}i=h+1|0;if((i|0)==(g|0))g=255;else g=d[i>>0]|0;if((a[h>>0]|0)!=-1){c[l>>2]=i;f=f+(g<<8)|0;c[b>>2]=f;c[k>>2]=8;g=8;break}if(g>>>0>143){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}else{c[l>>2]=i;f=f+(g<<9)|0;c[b>>2]=f;c[k>>2]=7;g=7;break}}while(0);j=j<<1;c[n>>2]=j;f=f<<1;c[b>>2]=f;g=g+-1|0;c[k>>2]=g}while(j>>>0<32768);return e|0}h=h-(j<<16)|0;c[b>>2]=h;if(i&32768){b=c[g+4>>2]|0;return b|0}e=c[g+4>>2]|0;if(j>>>0>i>>>0){c[f>>2]=c[g+12>>2];e=1-e|0}else c[f>>2]=c[g+8>>2];k=b+8|0;l=b+12|0;m=b+20|0;g=c[k>>2]|0;f=h;j=i;do{do if(!g){h=c[l>>2]|0;g=c[m>>2]|0;if((h|0)==(g|0)){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}i=h+1|0;if((i|0)==(g|0))g=255;else g=d[i>>0]|0;if((a[h>>0]|0)!=-1){c[l>>2]=i;f=f+(g<<8)|0;c[b>>2]=f;c[k>>2]=8;g=8;break}if(g>>>0>143){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}else{c[l>>2]=i;f=f+(g<<9)|0;c[b>>2]=f;c[k>>2]=7;g=7;break}}while(0);j=j<<1;c[n>>2]=j;f=f<<1;c[b>>2]=f;g=g+-1|0;c[k>>2]=g}while(j>>>0<32768);return e|0}function xh(){return Pc(28)|0}function yh(a){a=a|0;if(!a)return;Uc(a);return}function zh(b,d,e){b=b|0;d=d|0;e=e|0;c[b+20>>2]=d;c[b+8>>2]=e;c[b+12>>2]=0;a[b>>0]=0;c[b+4>>2]=0;return}function Ah(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=b+4|0;d=c[g>>2]|0;do if(!d){c[g>>2]=8;e=b+12|0;f=c[e>>2]|0;if((f|0)==(c[b+8>>2]|0)){a[b>>0]=-1;d=8;e=-1;break}if((a[b>>0]|0)==-1){c[g>>2]=7;d=7}else d=8;h=a[(c[b+20>>2]|0)+f>>0]|0;a[b>>0]=h;c[e>>2]=f+1;e=h}else e=a[b>>0]|0;while(0);h=d+-1|0;c[g>>2]=h;return (e&255)>>>h&1|0}function Bh(){var a=0;if(!(c[665]|0))a=2712;else a=c[(Ca()|0)+60>>2]|0;return a|0}function Ch(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[22198+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=22286;e=5;break}}if((e|0)==2)if(!c)b=22286;else{b=22286;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function Dh(a){a=a|0;if(a>>>0>4294963200){c[(Bh()|0)>>2]=0-a;a=-1}return a|0}function Eh(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=Ti(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+Eh(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=f+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function Fh(a,b){a=+a;b=b|0;return +(+Eh(a,b))}function Gh(a,b){a=+a;b=b|0;return +(+Jh(a,b))}function Hh(a){a=+a;return ~~+Ih(a)|0}function Ih(a){a=+a;var b=0;b=(g[k>>2]=a,c[k>>2]|0);if((b&2130706432)>>>0<=1249902592){b=(b|0)<0;a=b?a+-8388608.0+8388608.0:a+8388608.0+-8388608.0;if(a==0.0)a=b?-0.0:0.0}return +a}function Jh(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=Ri(d+1023|0,0,52)|0;b=C;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function Kh(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(Bh()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Lh(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Kh(a,b,0)|0;return a|0}function Mh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+112|0;n=o+40|0;l=o+24|0;k=o+16|0;g=o;m=o+52|0;f=a[d>>0]|0;if(ri(24090,f<<24>>24,4)|0){e=Fi(1144)|0;if(!e)e=0;else{h=e;j=h+112|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));if(!(ti(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(ti(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;ra(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[k>>2]=b;c[k+4>>2]=3;f=ra(221,k|0)|0;if(!(f&1024)){c[l>>2]=b;c[l+4>>2]=4;c[l+8>>2]=f|1024;ra(221,l|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+120;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21505,c[n+8>>2]=m,(Fa(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=60;c[e+36>>2]=61;c[e+40>>2]=3;c[e+12>>2]=1;if(!(c[666]|0))c[e+76>>2]=-1;Ia(2688);f=c[671]|0;c[e+56>>2]=f;if(f)c[f+52>>2]=e;c[671]=e;Ga(2688)}}else{c[(Bh()|0)>>2]=22;e=0}i=o;return e|0}function Nh(b){b=b|0;var c=0,d=0,e=0;d=(ti(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(ti(b,120)|0)==0;d=e?d:d|128;b=(ti(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function Oh(a){a=a|0;return 0}function Ph(a){a=a|0;return}function Qh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;k=e&255;a[l>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(Xh(b)|0)){h=c[g>>2]|0;j=4}else f=-1;else j=4;do if((j|0)==4){g=b+20|0;j=c[g>>2]|0;if(j>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[g>>2]=j+1;a[j>>0]=k;break}if((Ra[c[b+36>>2]&63](b,l,1)|0)==1)f=d[l>>0]|0;else f=-1}while(0);i=m;return f|0}function Rh(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=Dh(Ja(6,d|0)|0)|0;i=b;return a|0}function Sh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;h=m+16|0;g=m;f=m+32|0;c[f>>2]=d;j=f+4|0;l=b+48|0;n=c[l>>2]|0;c[j>>2]=e-((n|0)!=0&1);k=b+44|0;c[f+8>>2]=c[k>>2];c[f+12>>2]=n;if(!(c[665]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=Dh(Na(145,h|0)|0)|0}else{ua(5,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=Dh(Na(145,g|0)|0)|0;qa(0)}if((f|0)>=1){j=c[j>>2]|0;if(f>>>0>j>>>0){h=c[k>>2]|0;g=b+4|0;c[g>>2]=h;c[b+8>>2]=h+(f-j);if(!(c[l>>2]|0))f=e;else{c[g>>2]=h+1;a[d+(e+-1)>>0]=a[h>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=m;return f|0}function Th(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Dh(Ma(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function Uh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[665]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=Dh(Oa(146,n|0)|0)|0}else{ua(6,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=Dh(Oa(146,m|0)|0)|0;qa(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function Vh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=61;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,(Fa(54,f|0)|0)!=0):0)a[b+75>>0]=-1;f=Uh(b,d,e)|0;i=g;return f|0}function Wh(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Ra[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function Xh(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Yh(a){a=a|0;var b=0,d=0,e=0;e=(c[a>>2]&1|0)!=0;if(!e){Ia(2688);d=c[a+52>>2]|0;b=a+56|0;if(d)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b)c[b+52>>2]=d;if((c[671]|0)==(a|0))c[671]=b;Ga(2688)}b=Zh(a)|0;b=Wa[c[a+12>>2]&15](a)|0|b;d=c[a+92>>2]|0;if(d)Gi(d);if(!e)Gi(a);return b|0}function Zh(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=zi(a)|0;break}d=(Oh(a)|0)==0;b=zi(a)|0;if(!d)Ph(a)}else{if(!(c[677]|0))b=0;else b=Zh(c[677]|0)|0;Ia(2688);a=c[671]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=Oh(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=zi(a)|0|b;if(d)Ph(a);a=c[a+56>>2]|0}while((a|0)!=0);Ga(2688)}while(0);return b|0}function _h(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+32|0;f=g+16|0;e=g;if(ri(24090,a[d>>0]|0,4)|0){h=Nh(d)|0|32768;c[e>>2]=b;c[e+4>>2]=h;c[e+8>>2]=438;e=Dh(Ka(5,e|0)|0)|0;if((e|0)>=0){b=Mh(e,d)|0;if(!b){c[f>>2]=e;Ja(6,f|0)|0;b=0}}else b=0}else{c[(Bh()|0)>>2]=22;b=0}i=g;return b|0}function $h(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=oi(a,b,f)|0;i=e;return d|0}function ai(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((c[d+76>>2]|0)>=0?(Oh(d)|0)!=0:0){if((a[d+75>>0]|0)!=(b|0)?(f=d+20|0,g=c[f>>2]|0,g>>>0<(c[d+16>>2]|0)>>>0):0){c[f>>2]=g+1;a[g>>0]=b;e=b&255}else e=Qh(d,b)|0;Ph(d)}else i=3;do if((i|0)==3){if((a[d+75>>0]|0)!=(b|0)?(h=d+20|0,e=c[h>>2]|0,e>>>0<(c[d+16>>2]|0)>>>0):0){c[h>>2]=e+1;a[e>>0]=b;e=b&255;break}e=Qh(d,b)|0}while(0);return e|0}function bi(a,b){a=a|0;b=b|0;return (ki(a,wi(a)|0,1,b)|0)+-1|0}function ci(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;j=_(e,d)|0;if((c[f+76>>2]|0)>-1)k=Oh(f)|0;else k=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0>>0?i:j;Ui(b|0,h|0,i|0)|0;c[g>>2]=h+i;b=b+i|0;g=j-i|0}else g=j;a:do if(!g)l=13;else{i=f+32|0;h=g;while(1){if(Wh(f)|0){e=h;break}g=Ra[c[i>>2]&63](f,b,h)|0;if((g+1|0)>>>0<2){e=h;break}if((h|0)==(g|0)){l=13;break a}else{b=b+g|0;h=h-g|0}}if(k)Ph(f);e=((j-e|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(k)Ph(f);return e|0}function di(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;f=a+20|0;e=a+28|0;if((c[f>>2]|0)>>>0>(c[e>>2]|0)>>>0?(Ra[c[a+36>>2]&63](a,0,0)|0,(c[f>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[e>>2]=0;c[f>>2]=0;if((Ra[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(Oh(a)|0)==0;b=di(a,b,d)|0;if(!e)Ph(a)}else b=di(a,b,d)|0;return b|0}function fi(a,b,c){a=a|0;b=b|0;c=c|0;return ei(a,b,c)|0}function gi(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Ra[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function hi(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(Oh(a)|0)==0;a=gi(a)|0}else a=gi(a)|0;return a|0}function ii(a){a=a|0;return hi(a)|0}function ji(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(Xh(e)|0)){g=c[f>>2]|0;h=4}else f=0;else h=4;a:do if((h|0)==4){i=e+20|0;h=c[i>>2]|0;if((g-h|0)>>>0>>0){f=Ra[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((Ra[c[e+36>>2]&63](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);Ui(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function ki(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=_(d,b)|0;if((c[e+76>>2]|0)>-1){g=(Oh(e)|0)==0;a=ji(a,f,e)|0;if(!g)Ph(e)}else a=ji(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function li(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;b=oi(c[676]|0,a,e)|0;i=d;return b|0}function mi(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[676]|0;if((c[f+76>>2]|0)>-1)g=Oh(f)|0;else g=0;do if((bi(b,f)|0)<0)d=1;else{if((a[f+75>>0]|0)!=10?(d=f+20|0,e=c[d>>2]|0,e>>>0<(c[f+16>>2]|0)>>>0):0){c[d>>2]=e+1;a[e>>0]=10;d=0;break}d=(Qh(f,10)|0)<0}while(0);if(g)Ph(f);return d<<31>>31|0}function ni(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=qi(a,b,f)|0;i=e;return d|0}function oi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=c[e>>2];if((Ai(0,d,o,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)m=Oh(b)|0;else m=0;e=c[b>>2]|0;n=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=p;j=b+28|0;c[j>>2]=p;k=b+20|0;c[k>>2]=p;c[e>>2]=80;l=b+16|0;c[l>>2]=p+80;f=Ai(b,d,o,q,r)|0;if(h){Ra[c[b+36>>2]&63](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[l>>2]=0;c[j>>2]=0;c[k>>2]=0}}else f=Ai(b,d,o,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|n;if(m)Ph(b);e=(e&32|0)==0?f:-1}i=s;return e|0}function pi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;g=n+112|0;m=n;h=m;j=2716;k=h+112|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;l=4}else{c[(Bh()|0)>>2]=75;d=-1}else{g=b;l=4}if((l|0)==4){l=-2-g|0;l=d>>>0>l>>>0?l:d;c[m+48>>2]=l;b=m+20|0;c[b>>2]=g;c[m+44>>2]=g;d=g+l|0;g=m+16|0;c[g>>2]=d;c[m+28>>2]=d;d=oi(m,e,f)|0;if(l){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=n;return d|0}function qi(a,b,c){a=a|0;b=b|0;c=c|0;return pi(a,2147483647,b,c)|0}function ri(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=_(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return ((e|0)!=0?b:0)|0}function si(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function ti(b,c){b=b|0;c=c|0;b=ui(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function ui(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(wi(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=_(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009)break b;b=b+4|0;e=c[b>>2]|0}while(((e&-2139062144^-2139062144)&e+-16843009|0)==0);while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function vi(a,b){a=a|0;b=b|0;si(a,b)|0;return a|0}function wi(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function xi(a){a=a|0;if(!(c[a+68>>2]|0))Ph(a);return}function yi(a){a=a|0;if(!(c[a+68>>2]|0))Ph(a);return}function zi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(Ra[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)Ra[c[a+40>>2]&63](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0} +function Ai(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+624|0;ca=ha+24|0;ea=ha+16|0;da=ha+588|0;Y=ha+576|0;ba=ha;V=ha+536|0;ga=ha+8|0;fa=ha+528|0;M=(e|0)!=0;N=V+40|0;U=N;V=V+39|0;W=ga+4|0;X=Y+12|0;Y=Y+11|0;Z=da;$=X;aa=$-Z|0;O=-2-Z|0;P=$+2|0;Q=ca+288|0;R=da+9|0;S=R;T=da+8|0;m=0;w=f;n=0;f=0;a:while(1){do if((m|0)>-1)if((n|0)>(2147483647-m|0)){c[(Bh()|0)>>2]=75;m=-1;break}else{m=n+m|0;break}while(0);n=a[w>>0]|0;if(!(n<<24>>24)){L=245;break}else o=w;b:while(1){switch(n<<24>>24){case 37:{n=o;L=9;break b}case 0:{n=o;break b}default:{}}K=o+1|0;n=a[K>>0]|0;o=K}c:do if((L|0)==9)while(1){L=0;if((a[n+1>>0]|0)!=37)break c;o=o+1|0;n=n+2|0;if((a[n>>0]|0)==37)L=9;else break}while(0);y=o-w|0;if(M?(c[e>>2]&32|0)==0:0)ji(w,y,e)|0;if((o|0)!=(w|0)){w=n;n=y;continue}r=n+1|0;o=a[r>>0]|0;p=(o<<24>>24)+-48|0;if(p>>>0<10){K=(a[n+2>>0]|0)==36;r=K?n+3|0:r;o=a[r>>0]|0;u=K?p:-1;f=K?1:f}else u=-1;n=o<<24>>24;d:do if((n&-32|0)==32){p=0;while(1){if(!(1<>24)+-32|p;r=r+1|0;o=a[r>>0]|0;n=o<<24>>24;if((n&-32|0)!=32){s=p;n=r;break}}}else{s=0;n=r}while(0);do if(o<<24>>24==42){p=n+1|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[l+(o<<2)>>2]=10;f=1;n=n+3|0;o=c[j+((a[p>>0]|0)+-48<<3)>>2]|0}else{if(f){m=-1;break a}if(!M){x=s;n=p;f=0;K=0;break}f=(c[g>>2]|0)+(4-1)&~(4-1);o=c[f>>2]|0;c[g>>2]=f+4;f=0;n=p}if((o|0)<0){x=s|8192;K=0-o|0}else{x=s;K=o}}else{p=(o<<24>>24)+-48|0;if(p>>>0<10){o=0;do{o=(o*10|0)+p|0;n=n+1|0;p=(a[n>>0]|0)+-48|0}while(p>>>0<10);if((o|0)<0){m=-1;break a}else{x=s;K=o}}else{x=s;K=0}}while(0);e:do if((a[n>>0]|0)==46){p=n+1|0;o=a[p>>0]|0;if(o<<24>>24!=42){r=(o<<24>>24)+-48|0;if(r>>>0<10){n=p;o=0}else{n=p;r=0;break}while(1){o=(o*10|0)+r|0;n=n+1|0;r=(a[n>>0]|0)+-48|0;if(r>>>0>=10){r=o;break e}}}p=n+2|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+3>>0]|0)==36:0){c[l+(o<<2)>>2]=10;n=n+4|0;r=c[j+((a[p>>0]|0)+-48<<3)>>2]|0;break}if(f){m=-1;break a}if(M){n=(c[g>>2]|0)+(4-1)&~(4-1);r=c[n>>2]|0;c[g>>2]=n+4;n=p}else{n=p;r=0}}else r=-1;while(0);t=0;while(1){o=(a[n>>0]|0)+-65|0;if(o>>>0>57){m=-1;break a}p=n+1|0;o=a[25126+(t*58|0)+o>>0]|0;s=o&255;if((s+-1|0)>>>0<8){n=p;t=s}else{J=p;break}}if(!(o<<24>>24)){m=-1;break}p=(u|0)>-1;do if(o<<24>>24==19)if(p){m=-1;break a}else L=52;else{if(p){c[l+(u<<2)>>2]=s;H=j+(u<<3)|0;I=c[H+4>>2]|0;L=ba;c[L>>2]=c[H>>2];c[L+4>>2]=I;L=52;break}if(!M){m=0;break a}Ci(ba,s,g)}while(0);if((L|0)==52?(L=0,!M):0){w=J;n=y;continue}u=a[n>>0]|0;u=(t|0)!=0&(u&15|0)==3?u&-33:u;p=x&-65537;I=(x&8192|0)==0?x:p;f:do switch(u|0){case 110:switch(t|0){case 0:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 1:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 2:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}case 3:{b[c[ba>>2]>>1]=m;w=J;n=y;continue a}case 4:{a[c[ba>>2]>>0]=m;w=J;n=y;continue a}case 6:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 7:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}default:{w=J;n=y;continue a}}case 112:{t=I|8;r=r>>>0>8?r:8;u=120;L=64;break}case 88:case 120:{t=I;L=64;break}case 111:{p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;if((o|0)==0&(p|0)==0)n=N;else{n=N;do{n=n+-1|0;a[n>>0]=o&7|48;o=Ti(o|0,p|0,3)|0;p=C}while(!((o|0)==0&(p|0)==0))}if(!(I&8)){o=I;t=0;s=25606;L=77}else{t=U-n+1|0;o=I;r=(r|0)<(t|0)?t:r;t=0;s=25606;L=77}break}case 105:case 100:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)<0){n=Oi(0,0,n|0,o|0)|0;o=C;p=ba;c[p>>2]=n;c[p+4>>2]=o;p=1;s=25606;L=76;break f}if(!(I&2048)){s=I&1;p=s;s=(s|0)==0?25606:25608;L=76}else{p=1;s=25607;L=76}break}case 117:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;p=0;s=25606;L=76;break}case 99:{a[V>>0]=c[ba>>2];w=V;o=1;t=0;u=25606;n=N;break}case 109:{n=Ch(c[(Bh()|0)>>2]|0)|0;L=82;break}case 115:{n=c[ba>>2]|0;n=(n|0)!=0?n:25616;L=82;break}case 67:{c[ga>>2]=c[ba>>2];c[W>>2]=0;c[ba>>2]=ga;r=-1;L=86;break}case 83:{if(!r){Ei(e,32,K,0,I);n=0;L=98}else L=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=+h[ba>>3];c[ea>>2]=0;h[k>>3]=q;if((c[k+4>>2]|0)>=0)if(!(I&2048)){H=I&1;G=H;H=(H|0)==0?25624:25629}else{G=1;H=25626}else{q=-q;G=1;H=25623}h[k>>3]=q;F=c[k+4>>2]&2146435072;do if(F>>>0<2146435072|(F|0)==2146435072&0<0){v=+Fh(q,ea)*2.0;o=v!=0.0;if(o)c[ea>>2]=(c[ea>>2]|0)+-1;D=u|32;if((D|0)==97){w=u&32;y=(w|0)==0?H:H+9|0;x=G|2;n=12-r|0;do if(!(r>>>0>11|(n|0)==0)){q=8.0;do{n=n+-1|0;q=q*16.0}while((n|0)!=0);if((a[y>>0]|0)==45){q=-(q+(-v-q));break}else{q=v+q-q;break}}else q=v;while(0);o=c[ea>>2]|0;n=(o|0)<0?0-o|0:o;n=Di(n,((n|0)<0)<<31>>31,X)|0;if((n|0)==(X|0)){a[Y>>0]=48;n=Y}a[n+-1>>0]=(o>>31&2)+43;t=n+-2|0;a[t>>0]=u+15;s=(r|0)<1;p=(I&8|0)==0;o=da;while(1){H=~~q;n=o+1|0;a[o>>0]=d[25590+H>>0]|w;q=(q-+(H|0))*16.0;do if((n-Z|0)==1){if(p&(s&q==0.0))break;a[n>>0]=46;n=o+2|0}while(0);if(!(q!=0.0))break;else o=n}r=(r|0)!=0&(O+n|0)<(r|0)?P+r-t|0:aa-t+n|0;p=r+x|0;Ei(e,32,K,p,I);if(!(c[e>>2]&32))ji(y,x,e)|0;Ei(e,48,K,p,I^65536);n=n-Z|0;if(!(c[e>>2]&32))ji(da,n,e)|0;o=$-t|0;Ei(e,48,r-(n+o)|0,0,0);if(!(c[e>>2]&32))ji(t,o,e)|0;Ei(e,32,K,p,I^8192);n=(p|0)<(K|0)?K:p;break}n=(r|0)<0?6:r;if(o){o=(c[ea>>2]|0)+-28|0;c[ea>>2]=o;q=v*268435456.0}else{q=v;o=c[ea>>2]|0}F=(o|0)<0?ca:Q;E=F;o=F;do{B=~~q>>>0;c[o>>2]=B;o=o+4|0;q=(q-+(B>>>0))*1.0e9}while(q!=0.0);p=o;o=c[ea>>2]|0;if((o|0)>0){s=F;while(1){t=(o|0)>29?29:o;r=p+-4|0;do if(r>>>0>>0)r=s;else{o=0;do{B=Ri(c[r>>2]|0,0,t|0)|0;B=Si(B|0,C|0,o|0,0)|0;o=C;A=$i(B|0,o|0,1e9,0)|0;c[r>>2]=A;o=_i(B|0,o|0,1e9,0)|0;r=r+-4|0}while(r>>>0>=s>>>0);if(!o){r=s;break}r=s+-4|0;c[r>>2]=o}while(0);while(1){if(p>>>0<=r>>>0)break;o=p+-4|0;if(!(c[o>>2]|0))p=o;else break}o=(c[ea>>2]|0)-t|0;c[ea>>2]=o;if((o|0)>0)s=r;else break}}else r=F;if((o|0)<0){y=((n+25|0)/9|0)+1|0;z=(D|0)==102;w=r;while(1){x=0-o|0;x=(x|0)>9?9:x;do if(w>>>0

>>0){o=(1<>>x;r=0;t=w;do{B=c[t>>2]|0;c[t>>2]=(B>>>x)+r;r=_(B&o,s)|0;t=t+4|0}while(t>>>0

>>0);o=(c[w>>2]|0)==0?w+4|0:w;if(!r){r=o;break}c[p>>2]=r;r=o;p=p+4|0}else r=(c[w>>2]|0)==0?w+4|0:w;while(0);o=z?F:r;p=(p-o>>2|0)>(y|0)?o+(y<<2)|0:p;o=(c[ea>>2]|0)+x|0;c[ea>>2]=o;if((o|0)>=0){w=r;break}else w=r}}else w=r;do if(w>>>0

>>0){o=(E-w>>2)*9|0;s=c[w>>2]|0;if(s>>>0<10)break;else r=10;do{r=r*10|0;o=o+1|0}while(s>>>0>=r>>>0)}else o=0;while(0);A=(D|0)==103;B=(n|0)!=0;r=n-((D|0)!=102?o:0)+((B&A)<<31>>31)|0;if((r|0)<(((p-E>>2)*9|0)+-9|0)){t=r+9216|0;z=(t|0)/9|0;r=F+(z+-1023<<2)|0;t=((t|0)%9|0)+1|0;if((t|0)<9){s=10;do{s=s*10|0;t=t+1|0}while((t|0)!=9)}else s=10;x=c[r>>2]|0;y=(x>>>0)%(s>>>0)|0;if((y|0)==0?(F+(z+-1022<<2)|0)==(p|0):0)s=w;else L=163;do if((L|0)==163){L=0;v=(((x>>>0)/(s>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;t=(s|0)/2|0;do if(y>>>0>>0)q=.5;else{if((y|0)==(t|0)?(F+(z+-1022<<2)|0)==(p|0):0){q=1.0;break}q=1.5}while(0);do if(G){if((a[H>>0]|0)!=45)break;v=-v;q=-q}while(0);t=x-y|0;c[r>>2]=t;if(!(v+q!=v)){s=w;break}D=t+s|0;c[r>>2]=D;if(D>>>0>999999999){o=w;while(1){s=r+-4|0;c[r>>2]=0;if(s>>>0>>0){o=o+-4|0;c[o>>2]=0}D=(c[s>>2]|0)+1|0;c[s>>2]=D;if(D>>>0>999999999)r=s;else{w=o;r=s;break}}}o=(E-w>>2)*9|0;t=c[w>>2]|0;if(t>>>0<10){s=w;break}else s=10;do{s=s*10|0;o=o+1|0}while(t>>>0>=s>>>0);s=w}while(0);D=r+4|0;w=s;p=p>>>0>D>>>0?D:p}y=0-o|0;while(1){if(p>>>0<=w>>>0){z=0;D=p;break}r=p+-4|0;if(!(c[r>>2]|0))p=r;else{z=1;D=p;break}}do if(A){n=(B&1^1)+n|0;if((n|0)>(o|0)&(o|0)>-5){u=u+-1|0;n=n+-1-o|0}else{u=u+-2|0;n=n+-1|0}p=I&8;if(p)break;do if(z){p=c[D+-4>>2]|0;if(!p){r=9;break}if(!((p>>>0)%10|0)){s=10;r=0}else{r=0;break}do{s=s*10|0;r=r+1|0}while(((p>>>0)%(s>>>0)|0|0)==0)}else r=9;while(0);p=((D-E>>2)*9|0)+-9|0;if((u|32|0)==102){p=p-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}else{p=p+o-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}}else p=I&8;while(0);x=n|p;s=(x|0)!=0&1;t=(u|32|0)==102;if(t){o=(o|0)>0?o:0;u=0}else{r=(o|0)<0?y:o;r=Di(r,((r|0)<0)<<31>>31,X)|0;if(($-r|0)<2)do{r=r+-1|0;a[r>>0]=48}while(($-r|0)<2);a[r+-1>>0]=(o>>31&2)+43;E=r+-2|0;a[E>>0]=u;o=$-E|0;u=E}y=G+1+n+s+o|0;Ei(e,32,K,y,I);if(!(c[e>>2]&32))ji(H,G,e)|0;Ei(e,48,K,y,I^65536);do if(t){r=w>>>0>F>>>0?F:w;o=r;do{p=Di(c[o>>2]|0,0,R)|0;do if((o|0)==(r|0)){if((p|0)!=(R|0))break;a[T>>0]=48;p=T}else{if(p>>>0<=da>>>0)break;do{p=p+-1|0;a[p>>0]=48}while(p>>>0>da>>>0)}while(0);if(!(c[e>>2]&32))ji(p,S-p|0,e)|0;o=o+4|0}while(o>>>0<=F>>>0);do if(x){if(c[e>>2]&32)break;ji(25658,1,e)|0}while(0);if((n|0)>0&o>>>0>>0){p=o;while(1){o=Di(c[p>>2]|0,0,R)|0;if(o>>>0>da>>>0)do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0);if(!(c[e>>2]&32))ji(o,(n|0)>9?9:n,e)|0;p=p+4|0;o=n+-9|0;if(!((n|0)>9&p>>>0>>0)){n=o;break}else n=o}}Ei(e,48,n+9|0,9,0)}else{t=z?D:w+4|0;if((n|0)>-1){s=(p|0)==0;r=w;do{o=Di(c[r>>2]|0,0,R)|0;if((o|0)==(R|0)){a[T>>0]=48;o=T}do if((r|0)==(w|0)){p=o+1|0;if(!(c[e>>2]&32))ji(o,1,e)|0;if(s&(n|0)<1){o=p;break}if(c[e>>2]&32){o=p;break}ji(25658,1,e)|0;o=p}else{if(o>>>0<=da>>>0)break;do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0)}while(0);p=S-o|0;if(!(c[e>>2]&32))ji(o,(n|0)>(p|0)?p:n,e)|0;n=n-p|0;r=r+4|0}while(r>>>0>>0&(n|0)>-1)}Ei(e,48,n+18|0,18,0);if(c[e>>2]&32)break;ji(u,$-u|0,e)|0}while(0);Ei(e,32,K,y,I^8192);n=(y|0)<(K|0)?K:y}else{t=(u&32|0)!=0;s=q!=q|0.0!=0.0;o=s?0:G;r=o+3|0;Ei(e,32,K,r,p);n=c[e>>2]|0;if(!(n&32)){ji(H,o,e)|0;n=c[e>>2]|0}if(!(n&32))ji(s?(t?25650:25654):t?25642:25646,3,e)|0;Ei(e,32,K,r,I^8192);n=(r|0)<(K|0)?K:r}while(0);w=J;continue a}default:{p=I;o=r;t=0;u=25606;n=N}}while(0);g:do if((L|0)==64){p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;s=u&32;if(!((o|0)==0&(p|0)==0)){n=N;do{n=n+-1|0;a[n>>0]=d[25590+(o&15)>>0]|s;o=Ti(o|0,p|0,4)|0;p=C}while(!((o|0)==0&(p|0)==0));L=ba;if((t&8|0)==0|(c[L>>2]|0)==0&(c[L+4>>2]|0)==0){o=t;t=0;s=25606;L=77}else{o=t;t=2;s=25606+(u>>4)|0;L=77}}else{n=N;o=t;t=0;s=25606;L=77}}else if((L|0)==76){n=Di(n,o,N)|0;o=I;t=p;L=77}else if((L|0)==82){L=0;I=ri(n,0,r)|0;H=(I|0)==0;w=n;o=H?r:I-n|0;t=0;u=25606;n=H?n+r|0:I}else if((L|0)==86){L=0;o=0;n=0;s=c[ba>>2]|0;while(1){p=c[s>>2]|0;if(!p)break;n=Lh(fa,p)|0;if((n|0)<0|n>>>0>(r-o|0)>>>0)break;o=n+o|0;if(r>>>0>o>>>0)s=s+4|0;else break}if((n|0)<0){m=-1;break a}Ei(e,32,K,o,I);if(!o){n=0;L=98}else{p=0;r=c[ba>>2]|0;while(1){n=c[r>>2]|0;if(!n){n=o;L=98;break g}n=Lh(fa,n)|0;p=n+p|0;if((p|0)>(o|0)){n=o;L=98;break g}if(!(c[e>>2]&32))ji(fa,n,e)|0;if(p>>>0>=o>>>0){n=o;L=98;break}else r=r+4|0}}}while(0);if((L|0)==98){L=0;Ei(e,32,K,n,I^8192);w=J;n=(K|0)>(n|0)?K:n;continue}if((L|0)==77){L=0;p=(r|0)>-1?o&-65537:o;o=ba;o=(c[o>>2]|0)!=0|(c[o+4>>2]|0)!=0;if((r|0)!=0|o){o=(o&1^1)+(U-n)|0;w=n;o=(r|0)>(o|0)?r:o;u=s;n=N}else{w=N;o=0;u=s;n=N}}s=n-w|0;o=(o|0)<(s|0)?s:o;r=t+o|0;n=(K|0)<(r|0)?r:K;Ei(e,32,n,r,p);if(!(c[e>>2]&32))ji(u,t,e)|0;Ei(e,48,n,r,p^65536);Ei(e,48,o,s,0);if(!(c[e>>2]&32))ji(w,s,e)|0;Ei(e,32,n,r,p^8192);w=J}h:do if((L|0)==245)if(!e)if(f){m=1;while(1){f=c[l+(m<<2)>>2]|0;if(!f)break;Ci(j+(m<<3)|0,f,g);m=m+1|0;if((m|0)>=10){m=1;break h}}if((m|0)<10)while(1){if(c[l+(m<<2)>>2]|0){m=-1;break h}m=m+1|0;if((m|0)>=10){m=1;break}}else m=1}else m=0;while(0);i=ha;return m|0}function Bi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Ui(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function Ci(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Di(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=$i(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=_i(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=C}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function Ei(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+256|0;h=j;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;Qi(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){ji(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;ji(h,f,a)|0}while(0);i=j;return}function Fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[735]|0;d=i>>>a;if(d&3){a=(d&1^1)+a|0;e=a<<1;d=2980+(e<<2)|0;e=2980+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[739]|0)>>>0)ta();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else ta()}else c[735]=i&~(1<>2]=M|3;M=f+(M|4)|0;c[M>>2]=c[M>>2]|1;M=g;return M|0}h=c[737]|0;if(o>>>0>h>>>0){if(d){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;a=e>>>1&1;a=(f|j|g|d|a)+(e>>>a)|0;e=a<<1;d=2980+(e<<2)|0;e=2980+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[739]|0)>>>0)ta();b=f+12|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;c[e>>2]=f;k=c[737]|0;break}else ta()}else{c[735]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+M>>2]=h;if(k){f=c[740]|0;d=k>>>3;b=d<<1;e=2980+(b<<2)|0;a=c[735]|0;d=1<>2]|0;if(b>>>0<(c[739]|0)>>>0)ta();else{l=a;m=b}}else{c[735]=a|d;l=2980+(b+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[737]=h;c[740]=i;M=j;return M|0}a=c[736]|0;if(a){d=(a&0-a)+-1|0;L=d>>>12&16;d=d>>>L;K=d>>>5&8;d=d>>>K;M=d>>>2&4;d=d>>>M;a=d>>>1&2;d=d>>>a;e=d>>>1&1;e=c[3244+((K|L|M|a|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;a=e;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b){j=d;break}}a=(c[b+4>>2]&-8)-o|0;M=a>>>0>>0;d=M?a:d;a=b;e=M?b:e}g=c[739]|0;if(e>>>0>>0)ta();i=e+o|0;if(e>>>0>=i>>>0)ta();h=c[e+24>>2]|0;d=c[e+12>>2]|0;do if((d|0)==(e|0)){a=e+20|0;b=c[a>>2]|0;if(!b){a=e+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;f=c[d>>2]|0;if(f){b=f;a=d;continue}d=b+16|0;f=c[d>>2]|0;if(!f)break;else{b=f;a=d}}if(a>>>0>>0)ta();else{c[a>>2]=0;n=b;break}}else{f=c[e+8>>2]|0;if(f>>>0>>0)ta();b=f+12|0;if((c[b>>2]|0)!=(e|0))ta();a=d+8|0;if((c[a>>2]|0)==(e|0)){c[b>>2]=d;c[a>>2]=f;n=d;break}else ta()}while(0);do if(h){b=c[e+28>>2]|0;a=3244+(b<<2)|0;if((e|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=h+16|0;if((c[b>>2]|0)==(e|0))c[b>>2]=n;else c[h+20>>2]=n;if(!n)break}a=c[739]|0;if(n>>>0>>0)ta();c[n+24>>2]=h;b=c[e+16>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[e+20>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){M=j+o|0;c[e+4>>2]=M|3;M=e+(M+4)|0;c[M>>2]=c[M>>2]|1}else{c[e+4>>2]=o|3;c[e+(o|4)>>2]=j|1;c[e+(j+o)>>2]=j;b=c[737]|0;if(b){g=c[740]|0;d=b>>>3;b=d<<1;f=2980+(b<<2)|0;a=c[735]|0;d=1<>2]|0;if(a>>>0<(c[739]|0)>>>0)ta();else{p=b;q=a}}else{c[735]=a|d;p=2980+(b+2<<2)|0;q=f}c[p>>2]=g;c[q+12>>2]=g;c[g+8>>2]=q;c[g+12>>2]=f}c[737]=j;c[740]=i}M=e+8|0;return M|0}else q=o}else q=o}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;l=c[736]|0;if(l){d=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)k=31;else{q=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;k=14-(p|q|k)+(v<>>15)|0;k=m>>>(k+7|0)&1|k<<1}else k=0;a=c[3244+(k<<2)>>2]|0;a:do if(!a){f=0;a=0;v=86}else{h=d;f=0;i=m<<((k|0)==31?0:25-(k>>>1)|0);j=a;a=0;while(1){g=c[j+4>>2]&-8;d=g-m|0;if(d>>>0>>0)if((g|0)==(m|0)){g=j;a=j;v=90;break a}else a=j;else d=h;v=c[j+20>>2]|0;j=c[j+16+(i>>>31<<2)>>2]|0;f=(v|0)==0|(v|0)==(j|0)?f:v;if(!j){v=86;break}else{h=d;i=i<<1}}}while(0);if((v|0)==86){if((f|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;l=a>>>5&8;a=a>>>l;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;f=a>>>1&1;f=c[3244+((l|n|p|q|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;j=a}else{g=f;v=90}}if((v|0)==90)while(1){v=0;q=(c[g+4>>2]&-8)-m|0;f=q>>>0>>0;d=f?q:d;a=f?g:a;f=c[g+16>>2]|0;if(f){g=f;v=90;continue}g=c[g+20>>2]|0;if(!g){i=d;j=a;break}else v=90}if((j|0)!=0?i>>>0<((c[737]|0)-m|0)>>>0:0){f=c[739]|0;if(j>>>0>>0)ta();h=j+m|0;if(j>>>0>=h>>>0)ta();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){o=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)ta();else{c[a>>2]=0;o=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)ta();b=e+12|0;if((c[b>>2]|0)!=(j|0))ta();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;o=d;break}else ta()}while(0);do if(g){b=c[j+28>>2]|0;a=3244+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=o;if(!o){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=g+16|0;if((c[b>>2]|0)==(j|0))c[b>>2]=o;else c[g+20>>2]=o;if(!o)break}a=c[739]|0;if(o>>>0>>0)ta();c[o+24>>2]=g;b=c[j+16>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[o+16>>2]=b;c[b+24>>2]=o;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[o+20>>2]=b;c[b+24>>2]=o;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=m|3;c[j+(m|4)>>2]=i|1;c[j+(i+m)>>2]=i;b=i>>>3;if(i>>>0<256){a=b<<1;e=2980+(a<<2)|0;d=c[735]|0;b=1<>2]|0;if(a>>>0<(c[739]|0)>>>0)ta();else{s=b;t=a}}else{c[735]=d|b;s=2980+(a+2<<2)|0;t=e}c[s>>2]=h;c[t+12>>2]=h;c[j+(m+8)>>2]=t;c[j+(m+12)>>2]=e;break}b=i>>>8;if(b)if(i>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;b=3244+(e<<2)|0;c[j+(m+28)>>2]=e;c[j+(m+20)>>2]=0;c[j+(m+16)>>2]=0;a=c[736]|0;d=1<>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(i|0)){y=d;break c}else{e=e<<1;b=d}}if(a>>>0<(c[739]|0)>>>0)ta();else{c[a>>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break b}}else y=b;while(0);b=y+8|0;a=c[b>>2]|0;M=c[739]|0;if(a>>>0>=M>>>0&y>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[j+(m+8)>>2]=a;c[j+(m+12)>>2]=y;c[j+(m+24)>>2]=0;break}else ta()}else{M=i+m|0;c[j+4>>2]=M|3;M=j+(M+4)|0;c[M>>2]=c[M>>2]|1}while(0);M=j+8|0;return M|0}else q=m}else q=m}else q=-1;while(0);d=c[737]|0;if(d>>>0>=q>>>0){b=d-q|0;a=c[740]|0;if(b>>>0>15){c[740]=a+q;c[737]=b;c[a+(q+4)>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=q|3}else{c[737]=0;c[740]=0;c[a+4>>2]=d|3;M=a+(d+4)|0;c[M>>2]=c[M>>2]|1}M=a+8|0;return M|0}a=c[738]|0;if(a>>>0>q>>>0){L=a-q|0;c[738]=L;M=c[741]|0;c[741]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}do if(!(c[853]|0)){a=za(30)|0;if(!(a+-1&a)){c[855]=a;c[854]=a;c[856]=-1;c[857]=-1;c[858]=0;c[846]=0;c[853]=(La(0)|0)&-16^1431655768;break}else ta()}while(0);j=q+48|0;i=c[855]|0;k=q+47|0;h=i+k|0;i=0-i|0;l=h&i;if(l>>>0<=q>>>0){M=0;return M|0}a=c[845]|0;if((a|0)!=0?(t=c[843]|0,y=t+l|0,y>>>0<=t>>>0|y>>>0>a>>>0):0){M=0;return M|0}d:do if(!(c[846]&4)){a=c[741]|0;e:do if(a){f=3388;while(1){d=c[f>>2]|0;if(d>>>0<=a>>>0?(r=f+4|0,(d+(c[r>>2]|0)|0)>>>0>a>>>0):0){g=f;a=r;break}f=c[f+8>>2]|0;if(!f){v=174;break e}}d=h-(c[738]|0)&i;if(d>>>0<2147483647){f=xa(d|0)|0;y=(f|0)==((c[g>>2]|0)+(c[a>>2]|0)|0);a=y?d:0;if(y){if((f|0)!=(-1|0)){w=f;p=a;v=194;break d}}else v=184}else a=0}else v=174;while(0);do if((v|0)==174){g=xa(0)|0;if((g|0)!=(-1|0)){a=g;d=c[854]|0;f=d+-1|0;if(!(f&a))d=l;else d=l-a+(f+a&0-d)|0;a=c[843]|0;f=a+d|0;if(d>>>0>q>>>0&d>>>0<2147483647){y=c[845]|0;if((y|0)!=0?f>>>0<=a>>>0|f>>>0>y>>>0:0){a=0;break}f=xa(d|0)|0;y=(f|0)==(g|0);a=y?d:0;if(y){w=g;p=a;v=194;break d}else v=184}else a=0}else a=0}while(0);f:do if((v|0)==184){g=0-d|0;do if(j>>>0>d>>>0&(d>>>0<2147483647&(f|0)!=(-1|0))?(u=c[855]|0,u=k-d+u&0-u,u>>>0<2147483647):0)if((xa(u|0)|0)==(-1|0)){xa(g|0)|0;break f}else{d=u+d|0;break}while(0);if((f|0)!=(-1|0)){w=f;p=d;v=194;break d}}while(0);c[846]=c[846]|4;v=191}else{a=0;v=191}while(0);if((((v|0)==191?l>>>0<2147483647:0)?(w=xa(l|0)|0,x=xa(0)|0,w>>>0>>0&((w|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(z=x-w|0,A=z>>>0>(q+40|0)>>>0,A):0){p=A?z:a;v=194}if((v|0)==194){a=(c[843]|0)+p|0;c[843]=a;if(a>>>0>(c[844]|0)>>>0)c[844]=a;h=c[741]|0;g:do if(h){g=3388;do{a=c[g>>2]|0;d=g+4|0;f=c[d>>2]|0;if((w|0)==(a+f|0)){B=a;C=d;D=f;E=g;v=204;break}g=c[g+8>>2]|0}while((g|0)!=0);if(((v|0)==204?(c[E+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=B>>>0:0){c[C>>2]=D+p;M=(c[738]|0)+p|0;L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=M-L|0;c[741]=h+L;c[738]=K;c[h+(L+4)>>2]=K|1;c[h+(M+4)>>2]=40;c[742]=c[857];break}a=c[739]|0;if(w>>>0>>0){c[739]=w;a=w}d=w+p|0;g=3388;while(1){if((c[g>>2]|0)==(d|0)){f=g;d=g;v=212;break}g=c[g+8>>2]|0;if(!g){d=3388;break}}if((v|0)==212)if(!(c[d+12>>2]&8)){c[f>>2]=w;n=d+4|0;c[n>>2]=(c[n>>2]|0)+p;n=w+8|0;n=(n&7|0)==0?0:0-n&7;k=w+(p+8)|0;k=(k&7|0)==0?0:0-k&7;b=w+(k+p)|0;m=n+q|0;o=w+m|0;l=b-(w+n)-q|0;c[w+(n+4)>>2]=q|3;h:do if((b|0)!=(h|0)){if((b|0)==(c[740]|0)){M=(c[737]|0)+l|0;c[737]=M;c[740]=o;c[w+(m+4)>>2]=M|1;c[w+(M+m)>>2]=M;break}i=p+4|0;d=c[w+(i+k)>>2]|0;if((d&3|0)==1){j=d&-8;g=d>>>3;i:do if(d>>>0>=256){h=c[w+((k|24)+p)>>2]|0;e=c[w+(p+12+k)>>2]|0;do if((e|0)==(b|0)){f=k|16;e=w+(i+f)|0;d=c[e>>2]|0;if(!d){e=w+(f+p)|0;d=c[e>>2]|0;if(!d){J=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;J=d;break}}else{f=c[w+((k|8)+p)>>2]|0;if(f>>>0>>0)ta();a=f+12|0;if((c[a>>2]|0)!=(b|0))ta();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;J=e;break}else ta()}while(0);if(!h)break;a=c[w+(p+28+k)>>2]|0;d=3244+(a<<2)|0;do if((b|0)!=(c[d>>2]|0)){if(h>>>0<(c[739]|0)>>>0)ta();a=h+16|0;if((c[a>>2]|0)==(b|0))c[a>>2]=J;else c[h+20>>2]=J;if(!J)break i}else{c[d>>2]=J;if(J)break;c[736]=c[736]&~(1<>>0>>0)ta();c[J+24>>2]=h;b=k|16;a=c[w+(b+p)>>2]|0;do if(a)if(a>>>0>>0)ta();else{c[J+16>>2]=a;c[a+24>>2]=J;break}while(0);b=c[w+(i+b)>>2]|0;if(!b)break;if(b>>>0<(c[739]|0)>>>0)ta();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{e=c[w+((k|8)+p)>>2]|0;f=c[w+(p+12+k)>>2]|0;d=2980+(g<<1<<2)|0;do if((e|0)!=(d|0)){if(e>>>0>>0)ta();if((c[e+12>>2]|0)==(b|0))break;ta()}while(0);if((f|0)==(e|0)){c[735]=c[735]&~(1<>>0>>0)ta();a=f+8|0;if((c[a>>2]|0)==(b|0)){F=a;break}ta()}while(0);c[e+12>>2]=f;c[F>>2]=e}while(0);b=w+((j|k)+p)|0;f=j+l|0}else f=l;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[w+(m+4)>>2]=f|1;c[w+(f+m)>>2]=f;b=f>>>3;if(f>>>0<256){a=b<<1;e=2980+(a<<2)|0;d=c[735]|0;b=1<>2]|0;if(a>>>0>=(c[739]|0)>>>0){K=b;L=a;break}ta()}while(0);c[K>>2]=o;c[L+12>>2]=o;c[w+(m+8)>>2]=L;c[w+(m+12)>>2]=e;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}K=(b+1048320|0)>>>16&8;L=b<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=3244+(e<<2)|0;c[w+(m+28)>>2]=e;c[w+(m+20)>>2]=0;c[w+(m+16)>>2]=0;a=c[736]|0;d=1<>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break}b=c[b>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(f|0)){M=d;break j}else{e=e<<1;b=d}}if(a>>>0<(c[739]|0)>>>0)ta();else{c[a>>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break h}}else M=b;while(0);b=M+8|0;a=c[b>>2]|0;L=c[739]|0;if(a>>>0>=L>>>0&M>>>0>=L>>>0){c[a+12>>2]=o;c[b>>2]=o;c[w+(m+8)>>2]=a;c[w+(m+12)>>2]=M;c[w+(m+24)>>2]=0;break}else ta()}else{M=(c[738]|0)+l|0;c[738]=M;c[741]=o;c[w+(m+4)>>2]=M|1}while(0);M=w+(n|8)|0;return M|0}else d=3388;while(1){a=c[d>>2]|0;if(a>>>0<=h>>>0?(b=c[d+4>>2]|0,e=a+b|0,e>>>0>h>>>0):0)break;d=c[d+8>>2]|0}f=a+(b+-39)|0;a=a+(b+-47+((f&7|0)==0?0:0-f&7))|0;f=h+16|0;a=a>>>0>>0?h:a;b=a+8|0;d=w+8|0;d=(d&7|0)==0?0:0-d&7;M=p+-40-d|0;c[741]=w+d;c[738]=M;c[w+(d+4)>>2]=M|1;c[w+(p+-36)>>2]=40;c[742]=c[857];d=a+4|0;c[d>>2]=27;c[b>>2]=c[847];c[b+4>>2]=c[848];c[b+8>>2]=c[849];c[b+12>>2]=c[850];c[847]=w;c[848]=p;c[850]=0;c[849]=b;b=a+28|0;c[b>>2]=7;if((a+32|0)>>>0>>0)do{M=b;b=b+4|0;c[b>>2]=7}while((M+8|0)>>>0>>0);if((a|0)!=(h|0)){g=a-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){a=b<<1;e=2980+(a<<2)|0;d=c[735]|0;b=1<>2]|0;if(a>>>0<(c[739]|0)>>>0)ta();else{G=b;H=a}}else{c[735]=d|b;G=2980+(a+2<<2)|0;H=e}c[G>>2]=h;c[H+12>>2]=h;c[h+8>>2]=H;c[h+12>>2]=e;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=3244+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;b=c[736]|0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=c[d>>2]|0;k:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){I=d;break k}else{e=e<<1;b=d}}if(a>>>0<(c[739]|0)>>>0)ta();else{c[a>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else I=b;while(0);b=I+8|0;a=c[b>>2]|0;M=c[739]|0;if(a>>>0>=M>>>0&I>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=I;c[h+24>>2]=0;break}else ta()}}else{M=c[739]|0;if((M|0)==0|w>>>0>>0)c[739]=w;c[847]=w;c[848]=p;c[850]=0;c[744]=c[853];c[743]=-1;b=0;do{M=b<<1;L=2980+(M<<2)|0;c[2980+(M+3<<2)>>2]=L;c[2980+(M+2<<2)>>2]=L;b=b+1|0}while((b|0)!=32);M=w+8|0;M=(M&7|0)==0?0:0-M&7;L=p+-40-M|0;c[741]=w+M;c[738]=L;c[w+(M+4)>>2]=L|1;c[w+(p+-36)>>2]=40;c[742]=c[857]}while(0);b=c[738]|0;if(b>>>0>q>>>0){L=b-q|0;c[738]=L;M=c[741]|0;c[741]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}}c[(Bh()|0)>>2]=12;M=0;return M|0}function Gi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[739]|0;if(b>>>0>>0)ta();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)ta();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)ta();if((l|0)==(c[740]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[737]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=2980+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)ta();if((c[e+12>>2]|0)!=(l|0))ta()}if((d|0)==(e|0)){c[735]=c[735]&~(1<>>0>>0)ta();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else ta()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)ta();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)ta();b=f+12|0;if((c[b>>2]|0)!=(l|0))ta();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else ta()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=3244+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[739]|0;if(k>>>0>>0)ta();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)ta();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))ta();if(!(d&2)){if((q|0)==(c[741]|0)){t=(c[738]|0)+g|0;c[738]=t;c[741]=u;c[u+4>>2]=t|1;if((u|0)!=(c[740]|0))return;c[740]=0;c[737]=0;return}if((q|0)==(c[740]|0)){t=(c[737]|0)+g|0;c[737]=t;c[740]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[739]|0)>>>0)ta();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[739]|0)>>>0)ta();e=d+12|0;if((c[e>>2]|0)!=(q|0))ta();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else ta()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=3244+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[739]|0;if(p>>>0>>0)ta();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=2980+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[739]|0)>>>0)ta();if((c[e+12>>2]|0)!=(q|0))ta()}if((d|0)==(e|0)){c[735]=c[735]&~(1<>>0<(c[739]|0)>>>0)ta();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else ta()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[740]|0)){c[737]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=2980+(d<<2)|0;e=c[735]|0;b=1<>2]|0;if(d>>>0<(c[739]|0)>>>0)ta();else{r=b;s=d}}else{c[735]=e|b;r=2980+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=3244+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[736]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){d=b+16+(f>>>31<<2)|0;e=c[d>>2]|0;if(!e)break;if((c[e+4>>2]&-8|0)==(g|0)){t=e;break b}else{f=f<<1;b=e}}if(d>>>0<(c[739]|0)>>>0)ta();else{c[d>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[739]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else ta()}else{c[736]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[743]|0)+-1|0;c[743]=u;if(!u)b=3396;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[743]=-1;return}function Hi(a,b){a=a|0;b=b|0;var d=0;if(a){d=_(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=Fi(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;Qi(b|0,0,d|0)|0;return b|0}function Ii(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=Fi(b)|0;return a|0}if(b>>>0>4294967231){c[(Bh()|0)>>2]=12;a=0;return a|0}d=Ki(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){a=d+8|0;return a|0}d=Fi(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;Ui(d|0,a|0,(e>>>0>>0?e:b)|0)|0;Gi(a);a=d;return a|0}function Ji(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;do if((b|0)!=8){e=b>>>2;if((b&3|0)!=0|(e|0)==0){a=22;return a|0}if(e+1073741823&e){a=22;return a|0}if((-64-b|0)>>>0>>0){a=12;return a|0}else{e=Li(b>>>0<16?16:b,d)|0;break}}else e=Fi(d)|0;while(0);if(!e){a=12;return a|0}c[a>>2]=e;a=0;return a|0}function Ki(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=a+4|0;p=c[o>>2]|0;j=p&-8;l=a+j|0;i=c[739]|0;d=p&3;if(!((d|0)!=1&a>>>0>=i>>>0&a>>>0>>0))ta();e=a+(j|4)|0;f=c[e>>2]|0;if(!(f&1))ta();if(!d){if(b>>>0<256){a=0;return a|0}if(j>>>0>=(b+4|0)>>>0?(j-b|0)>>>0<=c[855]<<1>>>0:0)return a|0;a=0;return a|0}if(j>>>0>=b>>>0){d=j-b|0;if(d>>>0<=15)return a|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|3;c[e>>2]=c[e>>2]|1;Mi(a+b|0,d);return a|0}if((l|0)==(c[741]|0)){d=(c[738]|0)+j|0;if(d>>>0<=b>>>0){a=0;return a|0}n=d-b|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|1;c[741]=a+b;c[738]=n;return a|0}if((l|0)==(c[740]|0)){e=(c[737]|0)+j|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|1;c[a+e>>2]=d;e=a+(e+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[o>>2]=p&1|e|2;e=a+(e+4)|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[737]=d;c[740]=e;return a|0}if(f&2){a=0;return a|0}m=(f&-8)+j|0;if(m>>>0>>0){a=0;return a|0}n=m-b|0;g=f>>>3;do if(f>>>0>=256){h=c[a+(j+24)>>2]|0;g=c[a+(j+12)>>2]|0;do if((g|0)==(l|0)){e=a+(j+20)|0;d=c[e>>2]|0;if(!d){e=a+(j+16)|0;d=c[e>>2]|0;if(!d){k=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;k=d;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)ta();d=f+12|0;if((c[d>>2]|0)!=(l|0))ta();e=g+8|0;if((c[e>>2]|0)==(l|0)){c[d>>2]=g;c[e>>2]=f;k=g;break}else ta()}while(0);if(h){d=c[a+(j+28)>>2]|0;e=3244+(d<<2)|0;if((l|0)==(c[e>>2]|0)){c[e>>2]=k;if(!k){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();d=h+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=k;else c[h+20>>2]=k;if(!k)break}e=c[739]|0;if(k>>>0>>0)ta();c[k+24>>2]=h;d=c[a+(j+16)>>2]|0;do if(d)if(d>>>0>>0)ta();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(j+20)>>2]|0;if(d)if(d>>>0<(c[739]|0)>>>0)ta();else{c[k+20>>2]=d;c[d+24>>2]=k;break}}}else{f=c[a+(j+8)>>2]|0;e=c[a+(j+12)>>2]|0;d=2980+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)ta();if((c[f+12>>2]|0)!=(l|0))ta()}if((e|0)==(f|0)){c[735]=c[735]&~(1<>>0>>0)ta();d=e+8|0;if((c[d>>2]|0)==(l|0))h=d;else ta()}else h=e+8|0;c[f+12>>2]=e;c[h>>2]=f}while(0);if(n>>>0<16){c[o>>2]=m|p&1|2;b=a+(m|4)|0;c[b>>2]=c[b>>2]|1;return a|0}else{c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|3;p=a+(m|4)|0;c[p>>2]=c[p>>2]|1;Mi(a+b|0,n);return a|0}return 0}function Li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0<16?16:a;if(a+-1&a){d=16;while(1)if(d>>>0>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(Bh()|0)>>2]=12;i=0;return i|0}h=b>>>0<11?16:b+11&-8;e=Fi(h+12+a|0)|0;if(!e){i=0;return i|0}b=e+-8|0;d=a+-1|0;do if(e&d){f=e+d&0-a;d=f+-8|0;g=b;f=(d-g|0)>>>0>15?d:f+(a+-8)|0;g=f-g|0;a=e+-4|0;e=c[a>>2]|0;d=(e&-8)-g|0;if(!(e&3)){c[f>>2]=(c[b>>2]|0)+g;c[f+4>>2]=d;b=f;break}else{e=f+4|0;c[e>>2]=d|c[e>>2]&1|2;d=f+(d+4)|0;c[d>>2]=c[d>>2]|1;c[a>>2]=g|c[a>>2]&1|2;c[e>>2]=c[e>>2]|1;Mi(b,g);b=f;break}}while(0);a=b+4|0;d=c[a>>2]|0;if((d&3|0)!=0?(i=d&-8,i>>>0>(h+16|0)>>>0):0){g=i-h|0;c[a>>2]=h|d&1|2;c[b+(h|4)>>2]=g|3;i=b+(i|4)|0;c[i>>2]=c[i>>2]|1;Mi(b+h|0,g)}i=b+8|0;return i|0}function Mi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){k=c[a>>2]|0;if(!(d&3))return;n=a+(0-k)|0;m=k+b|0;j=c[739]|0;if(n>>>0>>0)ta();if((n|0)==(c[740]|0)){e=a+(b+4)|0;d=c[e>>2]|0;if((d&3|0)!=3){t=n;h=m;break}c[737]=m;c[e>>2]=d&-2;c[a+(4-k)>>2]=m|1;c[q>>2]=m;return}g=k>>>3;if(k>>>0<256){f=c[a+(8-k)>>2]|0;e=c[a+(12-k)>>2]|0;d=2980+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)ta();if((c[f+12>>2]|0)!=(n|0))ta()}if((e|0)==(f|0)){c[735]=c[735]&~(1<>>0>>0)ta();d=e+8|0;if((c[d>>2]|0)==(n|0))i=d;else ta()}else i=e+8|0;c[f+12>>2]=e;c[i>>2]=f;t=n;h=m;break}i=c[a+(24-k)>>2]|0;f=c[a+(12-k)>>2]|0;do if((f|0)==(n|0)){f=16-k|0;e=a+(f+4)|0;d=c[e>>2]|0;if(!d){e=a+f|0;d=c[e>>2]|0;if(!d){l=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;l=d;break}}else{g=c[a+(8-k)>>2]|0;if(g>>>0>>0)ta();d=g+12|0;if((c[d>>2]|0)!=(n|0))ta();e=f+8|0;if((c[e>>2]|0)==(n|0)){c[d>>2]=f;c[e>>2]=g;l=f;break}else ta()}while(0);if(i){d=c[a+(28-k)>>2]|0;e=3244+(d<<2)|0;if((n|0)==(c[e>>2]|0)){c[e>>2]=l;if(!l){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();d=i+16|0;if((c[d>>2]|0)==(n|0))c[d>>2]=l;else c[i+20>>2]=l;if(!l){t=n;h=m;break}}f=c[739]|0;if(l>>>0>>0)ta();c[l+24>>2]=i;d=16-k|0;e=c[a+d>>2]|0;do if(e)if(e>>>0>>0)ta();else{c[l+16>>2]=e;c[e+24>>2]=l;break}while(0);d=c[a+(d+4)>>2]|0;if(d)if(d>>>0<(c[739]|0)>>>0)ta();else{c[l+20>>2]=d;c[d+24>>2]=l;t=n;h=m;break}else{t=n;h=m}}else{t=n;h=m}}else{t=a;h=b}while(0);j=c[739]|0;if(q>>>0>>0)ta();d=a+(b+4)|0;e=c[d>>2]|0;if(!(e&2)){if((q|0)==(c[741]|0)){s=(c[738]|0)+h|0;c[738]=s;c[741]=t;c[t+4>>2]=s|1;if((t|0)!=(c[740]|0))return;c[740]=0;c[737]=0;return}if((q|0)==(c[740]|0)){s=(c[737]|0)+h|0;c[737]=s;c[740]=t;c[t+4>>2]=s|1;c[t+s>>2]=s;return}h=(e&-8)+h|0;g=e>>>3;do if(e>>>0>=256){i=c[a+(b+24)>>2]|0;f=c[a+(b+12)>>2]|0;do if((f|0)==(q|0)){e=a+(b+20)|0;d=c[e>>2]|0;if(!d){e=a+(b+16)|0;d=c[e>>2]|0;if(!d){p=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;p=d;break}}else{g=c[a+(b+8)>>2]|0;if(g>>>0>>0)ta();d=g+12|0;if((c[d>>2]|0)!=(q|0))ta();e=f+8|0;if((c[e>>2]|0)==(q|0)){c[d>>2]=f;c[e>>2]=g;p=f;break}else ta()}while(0);if(i){d=c[a+(b+28)>>2]|0;e=3244+(d<<2)|0;if((q|0)==(c[e>>2]|0)){c[e>>2]=p;if(!p){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();d=i+16|0;if((c[d>>2]|0)==(q|0))c[d>>2]=p;else c[i+20>>2]=p;if(!p)break}e=c[739]|0;if(p>>>0>>0)ta();c[p+24>>2]=i;d=c[a+(b+16)>>2]|0;do if(d)if(d>>>0>>0)ta();else{c[p+16>>2]=d;c[d+24>>2]=p;break}while(0);d=c[a+(b+20)>>2]|0;if(d)if(d>>>0<(c[739]|0)>>>0)ta();else{c[p+20>>2]=d;c[d+24>>2]=p;break}}}else{f=c[a+(b+8)>>2]|0;e=c[a+(b+12)>>2]|0;d=2980+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)ta();if((c[f+12>>2]|0)!=(q|0))ta()}if((e|0)==(f|0)){c[735]=c[735]&~(1<>>0>>0)ta();d=e+8|0;if((c[d>>2]|0)==(q|0))o=d;else ta()}else o=e+8|0;c[f+12>>2]=e;c[o>>2]=f}while(0);c[t+4>>2]=h|1;c[t+h>>2]=h;if((t|0)==(c[740]|0)){c[737]=h;return}}else{c[d>>2]=e&-2;c[t+4>>2]=h|1;c[t+h>>2]=h}d=h>>>3;if(h>>>0<256){e=d<<1;g=2980+(e<<2)|0;f=c[735]|0;d=1<>2]|0;if(e>>>0<(c[739]|0)>>>0)ta();else{r=d;s=e}}else{c[735]=f|d;r=2980+(e+2<<2)|0;s=g}c[r>>2]=t;c[s+12>>2]=t;c[t+8>>2]=s;c[t+12>>2]=g;return}d=h>>>8;if(d)if(h>>>0>16777215)g=31;else{r=(d+1048320|0)>>>16&8;s=d<>>16&4;s=s<>>16&2;g=14-(q|r|g)+(s<>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;d=3244+(g<<2)|0;c[t+28>>2]=g;c[t+20>>2]=0;c[t+16>>2]=0;e=c[736]|0;f=1<>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}d=c[d>>2]|0;a:do if((c[d+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=d+16+(g>>>31<<2)|0;f=c[e>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(h|0)){d=f;break a}else{g=g<<1;d=f}}if(e>>>0<(c[739]|0)>>>0)ta();c[e>>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}while(0);e=d+8|0;f=c[e>>2]|0;s=c[739]|0;if(!(f>>>0>=s>>>0&d>>>0>=s>>>0))ta();c[f+12>>2]=t;c[e>>2]=t;c[t+8>>2]=f;c[t+12>>2]=d;c[t+24>>2]=0;return}function Ni(){}function Oi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (C=d,a-c>>>0|0)|0}function Pi(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<>c-32|0}function Qi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function Ri(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<>>32-c;return a<>>0;return (C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Ti(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Ui(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return ya(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function Vi(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function Wi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return (C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Xi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Oi(j^a,i^b,j,i)|0;g=C;a=f^j;b=e^i;return Oi((aj(h,g,Oi(f^c,e^d,f,e)|0,C,0)|0)^a,C^b,a,b)|0}function Yi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Oi(h^a,g^b,h,g)|0;b=C;aj(a,b,Oi(l^d,k^e,l,k)|0,C,j)|0;e=Oi(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=C;i=f;return (C=d,e)|0}function Zi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Wi(e,f)|0;a=C;return (C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function _i(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return aj(a,b,c,d,0)|0}function $i(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;aj(a,b,d,e,f)|0;i=g;return (C=c[f+4>>2]|0,c[f>>2]|0)|0}function aj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (C=n,f)|0}else{if(!g){n=0;f=0;return (C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (C=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (C=n,f)|0}g=h-1|0;if(g&h){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (C=o,p)|0}else{p=Vi(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Vi(i|0)|0)>>>0);return (C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Si(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;Oi(k,d,e,n)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Oi(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (C=o,p)|0}function bj(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Qa[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function cj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ra[a&63](b|0,c|0,d|0)|0}function dj(a,b){a=a|0;b=b|0;return +Sa[a&3](b|0)}function ej(a,b){a=a|0;b=b|0;Ta[a&7](b|0)}function fj(a,b,c){a=a|0;b=b|0;c=c|0;Ua[a&7](b|0,c|0)}function gj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Va[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function hj(a,b){a=a|0;b=b|0;return Wa[a&15](b|0)|0}function ij(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Xa[a&15](b|0,c|0,d|0)}function jj(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Ya[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function kj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Za[a&63](b|0,c|0,d|0,e|0)|0}function lj(a,b,c){a=a|0;b=b|0;c=c|0;return _a[a&7](b|0,c|0)|0}function mj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return $a[a&3](b|0,c|0,d|0,e|0,f|0)|0}function nj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ab[a&3](b|0,c|0,d|0,e|0)}function oj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ba(0);return 0}function pj(a,b,c){a=a|0;b=b|0;c=c|0;ba(1);return 0}function qj(a){a=a|0;ba(2);return 0.0}function rj(a){a=a|0;ba(3)}function sj(a,b){a=a|0;b=b|0;ba(4)}function tj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(5);return 0}function uj(a){a=a|0;ba(6);return 0}function vj(a,b,c){a=a|0;b=b|0;c=c|0;ba(7)}function wj(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ba(8);return 0}function xj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(9);return 0}function yj(a,b){a=a|0;b=b|0;ba(10);return 0}function zj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ba(11);return 0}function Aj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(12)} + +// EMSCRIPTEN_END_FUNCS +var Qa=[oj,ed,We,oj];var Ra=[pj,Bi,Vh,Th,Ab,Bb,Cb,Db,Hc,Ic,Kc,$c,nd,Oe,af,od,pd,Ne,Pe,Lc,Mc,Nc,Oc,td,ud,vd,wd,yd,zd,Bd,Cd,Dd,Ed,Fd,Gd,Hd,Id,Jd,Kd,Ld,Md,Nd,Od,Pd,Qd,Rd,Sd,Td,Ud,Vd,Wd,Xd,ef,ff,gf,hf,jf,kf,lf,mf,Sh,Uh,pj,pj];var Sa=[qj,Yd,Zd,qj];var Ta=[rj,Yc,Ve,gg,hg,xi,yi,rj];var Ua=[sj,mb,nb,ob,Wb,Wc,Le,sj];var Va=[tj,dd,Ue,rd,Te,tj,tj,tj];var Wa=[uj,Rh,jd,kd,$e,_e,Yh,Kg,Hg,uj,uj,uj,uj,uj,uj,uj];var Xa=[vj,Ge,He,Ie,Je,Ae,Be,Ce,De,we,xe,ye,ze,gd,Ze,vj];var Ya=[wj,cd,Se,wj];var Za=[xj,de,ee,fe,ge,he,ie,je,ke,le,me,ne,oe,pe,qe,re,se,te,ue,ve,xf,yf,zf,rf,sf,tf,uf,vf,wf,wb,xb,yb,zb,ld,ad,Ke,Re,qd,Zc,Qe,Me,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj];var _a=[yj,Jc,nf,of,pf,qf,yj,yj];var $a=[zj,md,Xe,zj];var ab=[Aj,Og,Rg,Aj];return{_opj_stream_destroy:Fb,_opj_stream_set_read_function:Gb,_opj_read_tile_header:mc,_opj_set_warning_handler:cc,_opj_destroy_cstr_info:Cc,_opj_image_create:Yb,_opj_set_error_handler:dc,_opj_stream_set_user_data:Kb,_opj_end_decompress:wc,_bitshift64Lshr:Ti,_opj_stream_set_seek_function:Hb,_opj_decode:kc,_opj_set_decoded_resolution_factor:pc,_i64Add:Si,_opj_stream_create_default_file_stream:Fc,_opj_set_default_decoder_parameters:hc,_bitshift64Ashr:Pi,_opj_get_decoded_tile:oc,_memset:Qi,_opj_version:fc,_memcpy:Ui,_opj_destroy_cstr_index:Ec,_opj_stream_set_user_data_length:Lb,_opj_stream_set_skip_function:Jb,_opj_image_destroy:Zb,_opj_stream_create_file_stream:Gc,_opj_setup_encoder:sc,_opj_stream_default_create:Eb,_bitshift64Shl:Ri,_opj_stream_create:vb,_jp2_version:lb,_i64Subtract:Oi,_opj_get_cstr_index:Dc,_opj_encode:uc,_opj_read_header:jc,_opj_get_cstr_info:Bc,_opj_set_default_encoder_parameters:rc,_opj_set_decode_area:lc,_opj_stream_set_write_function:Ib,_opj_dump_codec:Ac,_opj_create_decompress:gc,_opj_decode_tile_data:nc,_free:Gi,_opj_image_tile_create:ac,_opj_set_MCT:xc,_opj_set_info_handler:bc,_opj_start_compress:tc,_opj_write_tile:yc,_opj_setup_decoder:ic,_malloc:Fi,_opj_end_compress:vc,_opj_destroy_codec:zc,_jp2_decode:kb,_opj_stream_create_buffer_stream:ec,_opj_create_compress:qc,runPostSets:Ni,stackAlloc:bb,stackSave:cb,stackRestore:db,establishStackSpace:eb,setThrew:fb,setTempRet0:ib,getTempRet0:jb,dynCall_iiiiiiii:bj,dynCall_iiii:cj,dynCall_di:dj,dynCall_vi:ej,dynCall_vii:fj,dynCall_iiiiiii:gj,dynCall_ii:hj,dynCall_viii:ij,dynCall_iiiiiiiiiiii:jj,dynCall_iiiii:kj,dynCall_iii:lj,dynCall_iiiiii:mj,dynCall_viiii:nj}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _opj_stream_destroy=Module["_opj_stream_destroy"]=asm["_opj_stream_destroy"];var _opj_stream_set_read_function=Module["_opj_stream_set_read_function"]=asm["_opj_stream_set_read_function"];var _opj_read_tile_header=Module["_opj_read_tile_header"]=asm["_opj_read_tile_header"];var _opj_set_warning_handler=Module["_opj_set_warning_handler"]=asm["_opj_set_warning_handler"];var _opj_destroy_cstr_info=Module["_opj_destroy_cstr_info"]=asm["_opj_destroy_cstr_info"];var _opj_image_create=Module["_opj_image_create"]=asm["_opj_image_create"];var _opj_set_error_handler=Module["_opj_set_error_handler"]=asm["_opj_set_error_handler"];var _opj_image_tile_create=Module["_opj_image_tile_create"]=asm["_opj_image_tile_create"];var _opj_end_decompress=Module["_opj_end_decompress"]=asm["_opj_end_decompress"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _opj_stream_set_seek_function=Module["_opj_stream_set_seek_function"]=asm["_opj_stream_set_seek_function"];var _opj_decode=Module["_opj_decode"]=asm["_opj_decode"];var _opj_set_decoded_resolution_factor=Module["_opj_set_decoded_resolution_factor"]=asm["_opj_set_decoded_resolution_factor"];var _opj_stream_create_default_file_stream=Module["_opj_stream_create_default_file_stream"]=asm["_opj_stream_create_default_file_stream"];var _opj_encode=Module["_opj_encode"]=asm["_opj_encode"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _opj_get_decoded_tile=Module["_opj_get_decoded_tile"]=asm["_opj_get_decoded_tile"];var _memset=Module["_memset"]=asm["_memset"];var _opj_version=Module["_opj_version"]=asm["_opj_version"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _opj_destroy_cstr_index=Module["_opj_destroy_cstr_index"]=asm["_opj_destroy_cstr_index"];var _opj_stream_set_user_data_length=Module["_opj_stream_set_user_data_length"]=asm["_opj_stream_set_user_data_length"];var _opj_stream_set_skip_function=Module["_opj_stream_set_skip_function"]=asm["_opj_stream_set_skip_function"];var _opj_image_destroy=Module["_opj_image_destroy"]=asm["_opj_image_destroy"];var _opj_stream_create_file_stream=Module["_opj_stream_create_file_stream"]=asm["_opj_stream_create_file_stream"];var _opj_setup_encoder=Module["_opj_setup_encoder"]=asm["_opj_setup_encoder"];var _opj_stream_default_create=Module["_opj_stream_default_create"]=asm["_opj_stream_default_create"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _opj_stream_create=Module["_opj_stream_create"]=asm["_opj_stream_create"];var _jp2_version=Module["_jp2_version"]=asm["_jp2_version"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _opj_get_cstr_index=Module["_opj_get_cstr_index"]=asm["_opj_get_cstr_index"];var _opj_set_default_decoder_parameters=Module["_opj_set_default_decoder_parameters"]=asm["_opj_set_default_decoder_parameters"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _opj_get_cstr_info=Module["_opj_get_cstr_info"]=asm["_opj_get_cstr_info"];var _opj_set_default_encoder_parameters=Module["_opj_set_default_encoder_parameters"]=asm["_opj_set_default_encoder_parameters"];var _opj_set_decode_area=Module["_opj_set_decode_area"]=asm["_opj_set_decode_area"];var _opj_stream_set_write_function=Module["_opj_stream_set_write_function"]=asm["_opj_stream_set_write_function"];var _opj_dump_codec=Module["_opj_dump_codec"]=asm["_opj_dump_codec"];var _opj_read_header=Module["_opj_read_header"]=asm["_opj_read_header"];var _opj_create_decompress=Module["_opj_create_decompress"]=asm["_opj_create_decompress"];var _opj_decode_tile_data=Module["_opj_decode_tile_data"]=asm["_opj_decode_tile_data"];var _opj_set_info_handler=Module["_opj_set_info_handler"]=asm["_opj_set_info_handler"];var _opj_stream_set_user_data=Module["_opj_stream_set_user_data"]=asm["_opj_stream_set_user_data"];var _opj_set_MCT=Module["_opj_set_MCT"]=asm["_opj_set_MCT"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _opj_start_compress=Module["_opj_start_compress"]=asm["_opj_start_compress"];var _opj_write_tile=Module["_opj_write_tile"]=asm["_opj_write_tile"];var _opj_setup_decoder=Module["_opj_setup_decoder"]=asm["_opj_setup_decoder"];var _malloc=Module["_malloc"]=asm["_malloc"];var _opj_end_compress=Module["_opj_end_compress"]=asm["_opj_end_compress"];var _opj_destroy_codec=Module["_opj_destroy_codec"]=asm["_opj_destroy_codec"];var _jp2_decode=Module["_jp2_decode"]=asm["_jp2_decode"];var _opj_stream_create_buffer_stream=Module["_opj_stream_create_buffer_stream"]=asm["_opj_stream_create_buffer_stream"];var _opj_create_compress=Module["_opj_create_compress"]=asm["_opj_create_compress"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_iiiiiiiiiiii=Module["dynCall_iiiiiiiiiiii"]=asm["dynCall_iiiiiiiiiiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run() + + + + + + return Module; +}; + + +/*** EXPORTS FROM exports-loader ***/ +module.exports = OpenJPEG; + +/***/ }), + +/***/ "../node_modules/worker-loader/dist/workers/InlineWorker.js": +/*!******************************************************************!*\ + !*** ../node_modules/worker-loader/dist/workers/InlineWorker.js ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// http://stackoverflow.com/questions/10343913/how-to-create-a-web-worker-from-a-string + +var URL = window.URL || window.webkitURL; + +module.exports = function (content, url) { + try { + try { + var blob; + + try { + // BlobBuilder = Deprecated, but widely implemented + var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder; + + blob = new BlobBuilder(); + + blob.append(content); + + blob = blob.getBlob(); + } catch (e) { + // The proposed API + blob = new Blob([content]); + } + + return new Worker(URL.createObjectURL(blob)); + } catch (e) { + return new Worker('data:application/javascript,' + encodeURIComponent(content)); + } + } catch (e) { + if (!url) { + throw Error('Inline worker is not supported'); + } + + return new Worker(url); + } +}; + +/***/ }), + +/***/ "./externalModules.js": +/*!****************************!*\ + !*** ./externalModules.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _imageLoader_registerLoaders_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./imageLoader/registerLoaders.js */ "./imageLoader/registerLoaders.js"); +/* eslint import/extensions:0 */ + +var cornerstone; +var dicomParser; +var external = { + set cornerstone(cs) { + cornerstone = cs; + Object(_imageLoader_registerLoaders_js__WEBPACK_IMPORTED_MODULE_0__["default"])(cornerstone); + }, + + get cornerstone() { + if (!cornerstone) { + if (window && window.cornerstone) { + cornerstone = window.cornerstone; + Object(_imageLoader_registerLoaders_js__WEBPACK_IMPORTED_MODULE_0__["default"])(cornerstone); + } else { + throw new Error('cornerstoneWADOImageLoader requires a copy of Cornerstone to work properly. Please add cornerstoneWADOImageLoader.external.cornerstone = cornerstone; to your application.'); + } + } + + return cornerstone; + }, + + set dicomParser(dp) { + dicomParser = dp; + }, + + get dicomParser() { + if (!dicomParser) { + if (window && window.dicomParser) { + dicomParser = window.dicomParser; + } else { + throw new Error('cornerstoneWADOImageLoader requires a copy of dicomParser to work properly. Please add cornerstoneWADOImageLoader.external.dicomParser = dicomParser; to your application.'); + } + } + + return dicomParser; + } + +}; +/* harmony default export */ __webpack_exports__["default"] = (external); + +/***/ }), + +/***/ "./imageLoader/colorSpaceConverters/convertPALETTECOLOR.js": +/*!*****************************************************************!*\ + !*** ./imageLoader/colorSpaceConverters/convertPALETTECOLOR.js ***! + \*****************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* eslint no-bitwise: 0 */ +function convertLUTto8Bit(lut, shift) { + var numEntries = lut.length; + var cleanedLUT = new Uint8ClampedArray(numEntries); + + for (var i = 0; i < numEntries; ++i) { + cleanedLUT[i] = lut[i] >> shift; + } + + return cleanedLUT; +} +/** + * Convert pixel data with PALETTE COLOR Photometric Interpretation to RGBA + * + * @param {ImageFrame} imageFrame + * @param {Uint8ClampedArray} rgbaBuffer + * @returns {void} + */ + + +/* harmony default export */ __webpack_exports__["default"] = (function (imageFrame, rgbaBuffer) { + var numPixels = imageFrame.columns * imageFrame.rows; + var pixelData = imageFrame.pixelData; + var rData = imageFrame.redPaletteColorLookupTableData; + var gData = imageFrame.greenPaletteColorLookupTableData; + var bData = imageFrame.bluePaletteColorLookupTableData; + var len = imageFrame.redPaletteColorLookupTableData.length; + var palIndex = 0; + var rgbaIndex = 0; + var start = imageFrame.redPaletteColorLookupTableDescriptor[1]; + var shift = imageFrame.redPaletteColorLookupTableDescriptor[2] === 8 ? 0 : 8; + var rDataCleaned = convertLUTto8Bit(rData, shift); + var gDataCleaned = convertLUTto8Bit(gData, shift); + var bDataCleaned = convertLUTto8Bit(bData, shift); + + for (var i = 0; i < numPixels; ++i) { + var value = pixelData[palIndex++]; + + if (value < start) { + value = 0; + } else if (value > start + len - 1) { + value = len - 1; + } else { + value -= start; + } + + rgbaBuffer[rgbaIndex++] = rDataCleaned[value]; + rgbaBuffer[rgbaIndex++] = gDataCleaned[value]; + rgbaBuffer[rgbaIndex++] = bDataCleaned[value]; + rgbaBuffer[rgbaIndex++] = 255; + } +}); + +/***/ }), + +/***/ "./imageLoader/colorSpaceConverters/convertRGBColorByPixel.js": +/*!********************************************************************!*\ + !*** ./imageLoader/colorSpaceConverters/convertRGBColorByPixel.js ***! + \********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (imageFrame, rgbaBuffer) { + if (imageFrame === undefined) { + throw new Error('decodeRGB: rgbBuffer must not be undefined'); + } + + if (imageFrame.length % 3 !== 0) { + throw new Error('decodeRGB: rgbBuffer length must be divisible by 3'); + } + + var numPixels = imageFrame.length / 3; + var rgbIndex = 0; + var rgbaIndex = 0; + + for (var i = 0; i < numPixels; i++) { + rgbaBuffer[rgbaIndex++] = imageFrame[rgbIndex++]; // red + + rgbaBuffer[rgbaIndex++] = imageFrame[rgbIndex++]; // green + + rgbaBuffer[rgbaIndex++] = imageFrame[rgbIndex++]; // blue + + rgbaBuffer[rgbaIndex++] = 255; // alpha + } +}); + +/***/ }), + +/***/ "./imageLoader/colorSpaceConverters/convertRGBColorByPlane.js": +/*!********************************************************************!*\ + !*** ./imageLoader/colorSpaceConverters/convertRGBColorByPlane.js ***! + \********************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (imageFrame, rgbaBuffer) { + if (imageFrame === undefined) { + throw new Error('decodeRGB: rgbBuffer must not be undefined'); + } + + if (imageFrame.length % 3 !== 0) { + throw new Error('decodeRGB: rgbBuffer length must be divisible by 3'); + } + + var numPixels = imageFrame.length / 3; + var rgbaIndex = 0; + var rIndex = 0; + var gIndex = numPixels; + var bIndex = numPixels * 2; + + for (var i = 0; i < numPixels; i++) { + rgbaBuffer[rgbaIndex++] = imageFrame[rIndex++]; // red + + rgbaBuffer[rgbaIndex++] = imageFrame[gIndex++]; // green + + rgbaBuffer[rgbaIndex++] = imageFrame[bIndex++]; // blue + + rgbaBuffer[rgbaIndex++] = 255; // alpha + } +}); + +/***/ }), + +/***/ "./imageLoader/colorSpaceConverters/convertYBRFullByPixel.js": +/*!*******************************************************************!*\ + !*** ./imageLoader/colorSpaceConverters/convertYBRFullByPixel.js ***! + \*******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (imageFrame, rgbaBuffer) { + if (imageFrame === undefined) { + throw new Error('decodeRGB: ybrBuffer must not be undefined'); + } + + if (imageFrame.length % 3 !== 0) { + throw new Error('decodeRGB: ybrBuffer length must be divisble by 3'); + } + + var numPixels = imageFrame.length / 3; + var ybrIndex = 0; + var rgbaIndex = 0; + + for (var i = 0; i < numPixels; i++) { + var y = imageFrame[ybrIndex++]; + var cb = imageFrame[ybrIndex++]; + var cr = imageFrame[ybrIndex++]; + rgbaBuffer[rgbaIndex++] = y + 1.40200 * (cr - 128); // red + + rgbaBuffer[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green + + rgbaBuffer[rgbaIndex++] = y + 1.77200 * (cb - 128); // blue + + rgbaBuffer[rgbaIndex++] = 255; // alpha + } +}); + +/***/ }), + +/***/ "./imageLoader/colorSpaceConverters/convertYBRFullByPlane.js": +/*!*******************************************************************!*\ + !*** ./imageLoader/colorSpaceConverters/convertYBRFullByPlane.js ***! + \*******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (imageFrame, rgbaBuffer) { + if (imageFrame === undefined) { + throw new Error('decodeRGB: ybrBuffer must not be undefined'); + } + + if (imageFrame.length % 3 !== 0) { + throw new Error('decodeRGB: ybrBuffer length must be divisble by 3'); + } + + var numPixels = imageFrame.length / 3; + var rgbaIndex = 0; + var yIndex = 0; + var cbIndex = numPixels; + var crIndex = numPixels * 2; + + for (var i = 0; i < numPixels; i++) { + var y = imageFrame[yIndex++]; + var cb = imageFrame[cbIndex++]; + var cr = imageFrame[crIndex++]; + rgbaBuffer[rgbaIndex++] = y + 1.40200 * (cr - 128); // red + + rgbaBuffer[rgbaIndex++] = y - 0.34414 * (cb - 128) - 0.71414 * (cr - 128); // green + + rgbaBuffer[rgbaIndex++] = y + 1.77200 * (cb - 128); // blue + + rgbaBuffer[rgbaIndex++] = 255; // alpha + } +}); + +/***/ }), + +/***/ "./imageLoader/colorSpaceConverters/index.js": +/*!***************************************************!*\ + !*** ./imageLoader/colorSpaceConverters/index.js ***! + \***************************************************/ +/*! exports provided: convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _convertRGBColorByPixel_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./convertRGBColorByPixel.js */ "./imageLoader/colorSpaceConverters/convertRGBColorByPixel.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertRGBColorByPixel", function() { return _convertRGBColorByPixel_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _convertRGBColorByPlane_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./convertRGBColorByPlane.js */ "./imageLoader/colorSpaceConverters/convertRGBColorByPlane.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertRGBColorByPlane", function() { return _convertRGBColorByPlane_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _convertYBRFullByPixel_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./convertYBRFullByPixel.js */ "./imageLoader/colorSpaceConverters/convertYBRFullByPixel.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertYBRFullByPixel", function() { return _convertYBRFullByPixel_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _convertYBRFullByPlane_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./convertYBRFullByPlane.js */ "./imageLoader/colorSpaceConverters/convertYBRFullByPlane.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertYBRFullByPlane", function() { return _convertYBRFullByPlane_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _convertPALETTECOLOR_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./convertPALETTECOLOR.js */ "./imageLoader/colorSpaceConverters/convertPALETTECOLOR.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertPALETTECOLOR", function() { return _convertPALETTECOLOR_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + + + + + + + + +/***/ }), + +/***/ "./imageLoader/configure.js": +/*!**********************************!*\ + !*** ./imageLoader/configure.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/index.js */ "./imageLoader/internal/index.js"); + + +function configure(options) { + Object(_internal_index_js__WEBPACK_IMPORTED_MODULE_0__["setOptions"])(options); +} + +/* harmony default export */ __webpack_exports__["default"] = (configure); + +/***/ }), + +/***/ "./imageLoader/convertColorSpace.js": +/*!******************************************!*\ + !*** ./imageLoader/convertColorSpace.js ***! + \******************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return convertColorSpace; }); +/* harmony import */ var _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colorSpaceConverters/index.js */ "./imageLoader/colorSpaceConverters/index.js"); + + +function convertRGB(imageFrame, rgbaBuffer) { + if (imageFrame.planarConfiguration === 0) { + Object(_colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertRGBColorByPixel"])(imageFrame.pixelData, rgbaBuffer); + } else { + Object(_colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertRGBColorByPlane"])(imageFrame.pixelData, rgbaBuffer); + } +} + +function convertYBRFull(imageFrame, rgbaBuffer) { + if (imageFrame.planarConfiguration === 0) { + Object(_colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertYBRFullByPixel"])(imageFrame.pixelData, rgbaBuffer); + } else { + Object(_colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertYBRFullByPlane"])(imageFrame.pixelData, rgbaBuffer); + } +} + +function convertColorSpace(imageFrame, imageData) { + var rgbaBuffer = imageData.data; // convert based on the photometric interpretation + + if (imageFrame.photometricInterpretation === 'RGB') { + convertRGB(imageFrame, rgbaBuffer); + } else if (imageFrame.photometricInterpretation === 'YBR_RCT') { + convertRGB(imageFrame, rgbaBuffer); + } else if (imageFrame.photometricInterpretation === 'YBR_ICT') { + convertRGB(imageFrame, rgbaBuffer); + } else if (imageFrame.photometricInterpretation === 'PALETTE COLOR') { + Object(_colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertPALETTECOLOR"])(imageFrame, rgbaBuffer); + } else if (imageFrame.photometricInterpretation === 'YBR_FULL_422') { + convertRGB(imageFrame, rgbaBuffer); + } else if (imageFrame.photometricInterpretation === 'YBR_FULL') { + convertYBRFull(imageFrame, rgbaBuffer); + } else { + throw new Error("No color space conversion for photometric interpretation ".concat(imageFrame.photometricInterpretation)); + } +} + +/***/ }), + +/***/ "./imageLoader/createImage.js": +/*!************************************!*\ + !*** ./imageLoader/createImage.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _getImageFrame_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getImageFrame.js */ "./imageLoader/getImageFrame.js"); +/* harmony import */ var _decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decodeImageFrame.js */ "./imageLoader/decodeImageFrame.js"); +/* harmony import */ var _isColorImage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isColorImage.js */ "./imageLoader/isColorImage.js"); +/* harmony import */ var _convertColorSpace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./convertColorSpace.js */ "./imageLoader/convertColorSpace.js"); +/* harmony import */ var _shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../shared/getMinMax.js */ "./shared/getMinMax.js"); +/* harmony import */ var _isJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isJPEGBaseline8BitColor.js */ "./imageLoader/isJPEGBaseline8BitColor.js"); + + + + + + + +var lastImageIdDrawn = ''; + +function isModalityLUTForDisplay(sopClassUid) { + // special case for XA and XRF + // https://groups.google.com/forum/#!searchin/comp.protocols.dicom/Modality$20LUT$20XA/comp.protocols.dicom/UBxhOZ2anJ0/D0R_QP8V2wIJ + return sopClassUid !== '1.2.840.10008.5.1.4.1.1.12.1' && // XA + sopClassUid !== '1.2.840.10008.5.1.4.1.1.12.2.1'; // XRF +} + +function convertToIntPixelData(floatPixelData) { + var floatMinMax = Object(_shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_5__["default"])(floatPixelData); + var floatRange = Math.abs(floatMinMax.max - floatMinMax.min); + var intRange = 65535; + var slope = floatRange / intRange; + var intercept = floatMinMax.min; + var numPixels = floatPixelData.length; + var intPixelData = new Uint16Array(numPixels); + var min = 65535; + var max = 0; + + for (var i = 0; i < numPixels; i++) { + var rescaledPixel = Math.floor((floatPixelData[i] - intercept) / slope); + intPixelData[i] = rescaledPixel; + min = Math.min(min, rescaledPixel); + max = Math.max(max, rescaledPixel); + } + + return { + min: min, + max: max, + intPixelData: intPixelData, + slope: slope, + intercept: intercept + }; +} +/** + * Helper function to set pixel data to the right typed array. This is needed because web workers + * can transfer array buffers but not typed arrays + * @param imageFrame + */ + + +function setPixelDataType(imageFrame) { + if (imageFrame.bitsAllocated === 32) { + imageFrame.pixelData = new Float32Array(imageFrame.pixelData); + } else if (imageFrame.bitsAllocated === 16) { + if (imageFrame.pixelRepresentation === 0) { + imageFrame.pixelData = new Uint16Array(imageFrame.pixelData); + } else { + imageFrame.pixelData = new Int16Array(imageFrame.pixelData); + } + } else { + imageFrame.pixelData = new Uint8Array(imageFrame.pixelData); + } +} + +function createImage(imageId, pixelData, transferSyntax, options) { + if (!pixelData || !pixelData.length) { + return Promise.reject(new Error('The file does not contain image data.')); + } + + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var canvas = document.createElement('canvas'); + var imageFrame = Object(_getImageFrame_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imageId); + var decodePromise = Object(_decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_2__["default"])(imageFrame, transferSyntax, pixelData, canvas, options); + return new Promise(function (resolve, reject) { + decodePromise.then(function (imageFrame) { + var imagePlaneModule = cornerstone.metaData.get('imagePlaneModule', imageId) || {}; + var voiLutModule = cornerstone.metaData.get('voiLutModule', imageId) || {}; + var modalityLutModule = cornerstone.metaData.get('modalityLutModule', imageId) || {}; + var sopCommonModule = cornerstone.metaData.get('sopCommonModule', imageId) || {}; + var isColorImage = Object(_isColorImage_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imageFrame.photometricInterpretation); // JPEGBaseline (8 bits) is already returning the pixel data in the right format (rgba) + // because it's using a canvas to load and decode images. + + if (!Object(_isJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_6__["default"])(imageFrame, transferSyntax)) { + setPixelDataType(imageFrame); // convert color space + + if (isColorImage) { + // setup the canvas context + canvas.height = imageFrame.rows; + canvas.width = imageFrame.columns; + var context = canvas.getContext('2d'); + var imageData = context.createImageData(imageFrame.columns, imageFrame.rows); + Object(_convertColorSpace_js__WEBPACK_IMPORTED_MODULE_4__["default"])(imageFrame, imageData); + imageFrame.imageData = imageData; + imageFrame.pixelData = imageData.data; // calculate smallest and largest PixelValue of the converted pixelData + + var minMax = Object(_shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_5__["default"])(imageFrame.pixelData); + imageFrame.smallestPixelValue = minMax.min; + imageFrame.largestPixelValue = minMax.max; + } + } + + var image = { + imageId: imageId, + color: isColorImage, + columnPixelSpacing: imagePlaneModule.columnPixelSpacing, + columns: imageFrame.columns, + height: imageFrame.rows, + intercept: modalityLutModule.rescaleIntercept ? modalityLutModule.rescaleIntercept : 0, + invert: imageFrame.photometricInterpretation === 'MONOCHROME1', + minPixelValue: imageFrame.smallestPixelValue, + maxPixelValue: imageFrame.largestPixelValue, + rowPixelSpacing: imagePlaneModule.rowPixelSpacing, + rows: imageFrame.rows, + sizeInBytes: imageFrame.pixelData.length, + slope: modalityLutModule.rescaleSlope ? modalityLutModule.rescaleSlope : 1, + width: imageFrame.columns, + windowCenter: voiLutModule.windowCenter ? voiLutModule.windowCenter[0] : undefined, + windowWidth: voiLutModule.windowWidth ? voiLutModule.windowWidth[0] : undefined, + decodeTimeInMS: imageFrame.decodeTimeInMS, + floatPixelData: undefined + }; // add function to return pixel data + + if (imageFrame.pixelData instanceof Float32Array) { + var floatPixelData = imageFrame.pixelData; + var results = convertToIntPixelData(floatPixelData); + image.minPixelValue = results.min; + image.maxPixelValue = results.max; + image.slope = results.slope; + image.intercept = results.intercept; + image.floatPixelData = floatPixelData; + + image.getPixelData = function () { + return results.intPixelData; + }; + } else { + image.getPixelData = function () { + return imageFrame.pixelData; + }; + } + + if (image.color) { + image.getCanvas = function () { + if (lastImageIdDrawn === imageId) { + return canvas; + } + + canvas.height = image.rows; + canvas.width = image.columns; + var context = canvas.getContext('2d'); + context.putImageData(imageFrame.imageData, 0, 0); + lastImageIdDrawn = imageId; + return canvas; + }; + } // Modality LUT + + + if (modalityLutModule.modalityLUTSequence && modalityLutModule.modalityLUTSequence.length > 0 && isModalityLUTForDisplay(sopCommonModule.sopClassUID)) { + image.modalityLUT = modalityLutModule.modalityLUTSequence[0]; + } // VOI LUT + + + if (voiLutModule.voiLUTSequence && voiLutModule.voiLUTSequence.length > 0) { + image.voiLUT = voiLutModule.voiLUTSequence[0]; + } + + if (image.color) { + image.windowWidth = 255; + image.windowCenter = 127; + } // set the ww/wc to cover the dynamic range of the image if no values are supplied + + + if (image.windowCenter === undefined || image.windowWidth === undefined) { + var maxVoi = image.maxPixelValue * image.slope + image.intercept; + var minVoi = image.minPixelValue * image.slope + image.intercept; + image.windowWidth = maxVoi - minVoi; + image.windowCenter = (maxVoi + minVoi) / 2; + } + + resolve(image); + }, reject); + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (createImage); + +/***/ }), + +/***/ "./imageLoader/decodeImageFrame.js": +/*!*****************************************!*\ + !*** ./imageLoader/decodeImageFrame.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_options_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./internal/options.js */ "./imageLoader/internal/options.js"); +/* harmony import */ var _webWorkerManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webWorkerManager.js */ "./imageLoader/webWorkerManager.js"); +/* harmony import */ var _decodeJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decodeJPEGBaseline8BitColor.js */ "./imageLoader/decodeJPEGBaseline8BitColor.js"); +/* harmony import */ var _shared_decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/decodeImageFrame.js */ "./shared/decodeImageFrame.js"); +/* harmony import */ var _shared_calculateMinMax_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/calculateMinMax.js */ "./shared/calculateMinMax.js"); +/* harmony import */ var _shared_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../shared/decoders/decodeJPEG2000.js */ "./shared/decoders/decodeJPEG2000.js"); +/* harmony import */ var _shared_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../shared/decoders/decodeJPEGLS.js */ "./shared/decoders/decodeJPEGLS.js"); + + + // TODO: Find a way to allow useWebWorkers: false that doesn't make the main bundle huge + + + + + +var codecsInitialized = false; + +function processDecodeTask(imageFrame, transferSyntax, pixelData, options) { + var priority = options.priority || undefined; + var transferList = options.transferPixelData ? [pixelData.buffer] : undefined; + var loaderOptions = Object(_internal_options_js__WEBPACK_IMPORTED_MODULE_0__["getOptions"])(); + var strict = loaderOptions.strict, + decodeConfig = loaderOptions.decodeConfig, + useWebWorkers = loaderOptions.useWebWorkers; + + if (useWebWorkers === false) { + if (codecsInitialized === false) { + Object(_shared_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_5__["initializeJPEG2000"])(decodeConfig); + Object(_shared_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_6__["initializeJPEGLS"])(decodeConfig); + codecsInitialized = true; + } + + return new Promise(function (resolve, reject) { + try { + var decodeArguments = [imageFrame, transferSyntax, pixelData, decodeConfig, options]; + var decodedImageFrame = _shared_decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"].apply(void 0, decodeArguments); + Object(_shared_calculateMinMax_js__WEBPACK_IMPORTED_MODULE_4__["default"])(decodedImageFrame, strict); + resolve(decodedImageFrame); + } catch (error) { + reject(error); + } + }); + } + + return _webWorkerManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].addTask('decodeTask', { + imageFrame: imageFrame, + transferSyntax: transferSyntax, + pixelData: pixelData, + options: options + }, priority, transferList).promise; +} + +function decodeImageFrame(imageFrame, transferSyntax, pixelData, canvas) { + var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + + // TODO: Turn this into a switch statement instead + if (transferSyntax === '1.2.840.10008.1.2') { + // Implicit VR Little Endian + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.1') { + // Explicit VR Little Endian + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.2') { + // Explicit VR Big Endian (retired) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.1.99') { + // Deflate transfer syntax (deflated by dicomParser) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.5') { + // RLE Lossless + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.50') { + // JPEG Baseline lossy process 1 (8 bit) + // Handle 8-bit JPEG Baseline color images using the browser's built-in + // JPEG decoding + if (imageFrame.bitsAllocated === 8 && (imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4)) { + return Object(_decodeJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_2__["default"])(imageFrame, pixelData, canvas); + } + + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.51') { + // JPEG Baseline lossy process 2 & 4 (12 bit) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.57') { + // JPEG Lossless, Nonhierarchical (Processes 14) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.70') { + // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1]) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.80') { + // JPEG-LS Lossless Image Compression + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.81') { + // JPEG-LS Lossy (Near-Lossless) Image Compression + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.90') { + // JPEG 2000 Lossless + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.91') { + // JPEG 2000 Lossy + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + } + /* Don't know if these work... + // JPEG 2000 Part 2 Multicomponent Image Compression (Lossless Only) + else if(transferSyntax === "1.2.840.10008.1.2.4.92") + { + return cornerstoneWADOImageLoader.decodeJPEG2000(dataSet, frame); + } + // JPEG 2000 Part 2 Multicomponent Image Compression + else if(transferSyntax === "1.2.840.10008.1.2.4.93") + { + return cornerstoneWADOImageLoader.decodeJPEG2000(dataSet, frame); + } + */ + + + return new Promise(function (resolve, reject) { + reject(new Error("No decoder for transfer syntax ".concat(transferSyntax))); + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeImageFrame); + +/***/ }), + +/***/ "./imageLoader/decodeJPEGBaseline8BitColor.js": +/*!****************************************************!*\ + !*** ./imageLoader/decodeJPEGBaseline8BitColor.js ***! + \****************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/getMinMax.js */ "./shared/getMinMax.js"); + +/** + * Special decoder for 8 bit jpeg that leverages the browser's built in JPEG decoder for increased performance + */ + +function arrayBufferToString(buffer) { + return binaryToString(String.fromCharCode.apply(null, Array.prototype.slice.apply(new Uint8Array(buffer)))); +} + +function binaryToString(binary) { + var error; + + try { + return decodeURIComponent(escape(binary)); + } catch (_error) { + error = _error; + + if (error instanceof URIError) { + return binary; + } + + throw error; + } +} + +function decodeJPEGBaseline8BitColor(imageFrame, pixelData, canvas) { + var start = new Date().getTime(); + var imgBlob = new Blob([pixelData], { + type: 'image/jpeg' + }); + return new Promise(function (resolve, reject) { + var fileReader = new FileReader(); + + if (fileReader.readAsBinaryString === undefined) { + fileReader.readAsArrayBuffer(imgBlob); + } else { + fileReader.readAsBinaryString(imgBlob); // doesn't work on IE11 + } + + fileReader.onload = function () { + var img = new Image(); + + img.onload = function () { + canvas.height = img.height; + canvas.width = img.width; + imageFrame.rows = img.height; + imageFrame.columns = img.width; + var context = canvas.getContext('2d'); + context.drawImage(this, 0, 0); + var imageData = context.getImageData(0, 0, img.width, img.height); + var end = new Date().getTime(); + imageFrame.pixelData = imageData.data; + imageFrame.imageData = imageData; + imageFrame.decodeTimeInMS = end - start; // calculate smallest and largest PixelValue + + var minMax = Object(_shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageFrame.pixelData); + imageFrame.smallestPixelValue = minMax.min; + imageFrame.largestPixelValue = minMax.max; + resolve(imageFrame); + }; + + img.onerror = function (error) { + reject(error); + }; + + if (fileReader.readAsBinaryString === undefined) { + img.src = "data:image/jpeg;base64,".concat(window.btoa(arrayBufferToString(fileReader.result))); + } else { + img.src = "data:image/jpeg;base64,".concat(window.btoa(fileReader.result)); // doesn't work on IE11 + } + }; + + fileReader.onerror = function (e) { + reject(e); + }; + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeJPEGBaseline8BitColor); + +/***/ }), + +/***/ "./imageLoader/getImageFrame.js": +/*!**************************************!*\ + !*** ./imageLoader/getImageFrame.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); + + +function getImageFrame(imageId) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var imagePixelModule = cornerstone.metaData.get('imagePixelModule', imageId); + return { + samplesPerPixel: imagePixelModule.samplesPerPixel, + photometricInterpretation: imagePixelModule.photometricInterpretation, + planarConfiguration: imagePixelModule.planarConfiguration, + rows: imagePixelModule.rows, + columns: imagePixelModule.columns, + bitsAllocated: imagePixelModule.bitsAllocated, + bitsStored: imagePixelModule.bitsStored, + pixelRepresentation: imagePixelModule.pixelRepresentation, + // 0 = unsigned, + smallestPixelValue: imagePixelModule.smallestPixelValue, + largestPixelValue: imagePixelModule.largestPixelValue, + redPaletteColorLookupTableDescriptor: imagePixelModule.redPaletteColorLookupTableDescriptor, + greenPaletteColorLookupTableDescriptor: imagePixelModule.greenPaletteColorLookupTableDescriptor, + bluePaletteColorLookupTableDescriptor: imagePixelModule.bluePaletteColorLookupTableDescriptor, + redPaletteColorLookupTableData: imagePixelModule.redPaletteColorLookupTableData, + greenPaletteColorLookupTableData: imagePixelModule.greenPaletteColorLookupTableData, + bluePaletteColorLookupTableData: imagePixelModule.bluePaletteColorLookupTableData, + pixelData: undefined // populated later after decoding + + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (getImageFrame); + +/***/ }), + +/***/ "./imageLoader/index.js": +/*!******************************!*\ + !*** ./imageLoader/index.js ***! + \******************************/ +/*! exports provided: convertRGBColorByPixel, convertRGBColorByPlane, convertYBRFullByPixel, convertYBRFullByPlane, convertPALETTECOLOR, wadouri, wadors, configure, convertColorSpace, createImage, decodeImageFrame, decodeJPEGBaseline8BitColor, getImageFrame, getMinMax, isColorImage, isJPEGBaseline8BitColor, webWorkerManager, version, internal, external, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./colorSpaceConverters/index.js */ "./imageLoader/colorSpaceConverters/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertRGBColorByPixel", function() { return _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertRGBColorByPixel"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertRGBColorByPlane", function() { return _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertRGBColorByPlane"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertYBRFullByPixel", function() { return _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertYBRFullByPixel"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertYBRFullByPlane", function() { return _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertYBRFullByPlane"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertPALETTECOLOR", function() { return _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertPALETTECOLOR"]; }); + +/* harmony import */ var _wadouri_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wadouri/index.js */ "./imageLoader/wadouri/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "wadouri", function() { return _wadouri_index_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _wadors_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./wadors/index.js */ "./imageLoader/wadors/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "wadors", function() { return _wadors_index_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _configure_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./configure.js */ "./imageLoader/configure.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "configure", function() { return _configure_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _convertColorSpace_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./convertColorSpace.js */ "./imageLoader/convertColorSpace.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convertColorSpace", function() { return _convertColorSpace_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + +/* harmony import */ var _createImage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createImage.js */ "./imageLoader/createImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createImage", function() { return _createImage_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }); + +/* harmony import */ var _decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./decodeImageFrame.js */ "./imageLoader/decodeImageFrame.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "decodeImageFrame", function() { return _decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }); + +/* harmony import */ var _decodeJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./decodeJPEGBaseline8BitColor.js */ "./imageLoader/decodeJPEGBaseline8BitColor.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "decodeJPEGBaseline8BitColor", function() { return _decodeJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }); + +/* harmony import */ var _getImageFrame_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getImageFrame.js */ "./imageLoader/getImageFrame.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getImageFrame", function() { return _getImageFrame_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../shared/getMinMax.js */ "./shared/getMinMax.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getMinMax", function() { return _shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + +/* harmony import */ var _isColorImage_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./isColorImage.js */ "./imageLoader/isColorImage.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isColorImage", function() { return _isColorImage_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }); + +/* harmony import */ var _isJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./isJPEGBaseline8BitColor.js */ "./imageLoader/isJPEGBaseline8BitColor.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isJPEGBaseline8BitColor", function() { return _isJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }); + +/* harmony import */ var _webWorkerManager_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./webWorkerManager.js */ "./imageLoader/webWorkerManager.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "webWorkerManager", function() { return _webWorkerManager_js__WEBPACK_IMPORTED_MODULE_12__["default"]; }); + +/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../version.js */ "./version.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "version", function() { return _version_js__WEBPACK_IMPORTED_MODULE_13__["default"]; }); + +/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./internal/index.js */ "./imageLoader/internal/index.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return _internal_index_js__WEBPACK_IMPORTED_MODULE_14__["internal"]; }); + +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../externalModules.js */ "./externalModules.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "external", function() { return _externalModules_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }); + + + + + + + + + + + + + + + + + +var cornerstoneWADOImageLoader = { + convertRGBColorByPixel: _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertRGBColorByPixel"], + convertRGBColorByPlane: _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertRGBColorByPlane"], + convertYBRFullByPixel: _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertYBRFullByPixel"], + convertYBRFullByPlane: _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertYBRFullByPlane"], + convertPALETTECOLOR: _colorSpaceConverters_index_js__WEBPACK_IMPORTED_MODULE_0__["convertPALETTECOLOR"], + wadouri: _wadouri_index_js__WEBPACK_IMPORTED_MODULE_1__["default"], + wadors: _wadors_index_js__WEBPACK_IMPORTED_MODULE_2__["default"], + configure: _configure_js__WEBPACK_IMPORTED_MODULE_3__["default"], + convertColorSpace: _convertColorSpace_js__WEBPACK_IMPORTED_MODULE_4__["default"], + createImage: _createImage_js__WEBPACK_IMPORTED_MODULE_5__["default"], + decodeImageFrame: _decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_6__["default"], + decodeJPEGBaseline8BitColor: _decodeJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_7__["default"], + getImageFrame: _getImageFrame_js__WEBPACK_IMPORTED_MODULE_8__["default"], + getMinMax: _shared_getMinMax_js__WEBPACK_IMPORTED_MODULE_9__["default"], + isColorImage: _isColorImage_js__WEBPACK_IMPORTED_MODULE_10__["default"], + isJPEGBaseline8BitColor: _isJPEGBaseline8BitColor_js__WEBPACK_IMPORTED_MODULE_11__["default"], + webWorkerManager: _webWorkerManager_js__WEBPACK_IMPORTED_MODULE_12__["default"], + version: _version_js__WEBPACK_IMPORTED_MODULE_13__["default"], + internal: _internal_index_js__WEBPACK_IMPORTED_MODULE_14__["internal"], + external: _externalModules_js__WEBPACK_IMPORTED_MODULE_15__["default"] +}; + +/* harmony default export */ __webpack_exports__["default"] = (cornerstoneWADOImageLoader); + +/***/ }), + +/***/ "./imageLoader/internal/index.js": +/*!***************************************!*\ + !*** ./imageLoader/internal/index.js ***! + \***************************************/ +/*! exports provided: setOptions, getOptions, xhrRequest, internal */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "internal", function() { return internal; }); +/* harmony import */ var _xhrRequest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xhrRequest.js */ "./imageLoader/internal/xhrRequest.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "xhrRequest", function() { return _xhrRequest_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _options_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./options.js */ "./imageLoader/internal/options.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setOptions", function() { return _options_js__WEBPACK_IMPORTED_MODULE_1__["setOptions"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getOptions", function() { return _options_js__WEBPACK_IMPORTED_MODULE_1__["getOptions"]; }); + + + +var internal = { + xhrRequest: _xhrRequest_js__WEBPACK_IMPORTED_MODULE_0__["default"], + setOptions: _options_js__WEBPACK_IMPORTED_MODULE_1__["setOptions"], + getOptions: _options_js__WEBPACK_IMPORTED_MODULE_1__["getOptions"] +}; + + +/***/ }), + +/***/ "./imageLoader/internal/options.js": +/*!*****************************************!*\ + !*** ./imageLoader/internal/options.js ***! + \*****************************************/ +/*! exports provided: setOptions, getOptions */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setOptions", function() { return setOptions; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOptions", function() { return getOptions; }); +var options = { + // callback allowing customization of the xhr (e.g. adding custom auth headers, cors, etc) + beforeSend: function beforeSend() + /* xhr, imageId */ + {}, + // callback allowing modification of newly created image objects + imageCreated: function imageCreated() + /* image */ + {}, + strict: false, + useWebWorkers: true, + decodeConfig: { + usePDFJS: false + } +}; +function setOptions(newOptions) { + options = Object.assign(options, newOptions); +} +function getOptions() { + return options; +} + +/***/ }), + +/***/ "./imageLoader/internal/xhrRequest.js": +/*!********************************************!*\ + !*** ./imageLoader/internal/xhrRequest.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _options_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./options.js */ "./imageLoader/internal/options.js"); + + + +function xhrRequest(url, imageId) { + var headers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; + var options = Object(_options_js__WEBPACK_IMPORTED_MODULE_1__["getOptions"])(); // Make the request for the DICOM P10 SOP Instance + + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + xhr.open('get', url, true); + xhr.responseType = 'arraybuffer'; + options.beforeSend(xhr, imageId, headers, params); + Object.keys(headers).forEach(function (key) { + xhr.setRequestHeader(key, headers[key]); + }); + params.deferred = { + resolve: resolve, + reject: reject + }; + params.url = url; + params.imageId = imageId; // Event triggered when downloading an image starts + + xhr.onloadstart = function (event) { + // Action + if (options.onloadstart) { + options.onloadstart(event, params); + } // Event + + + var eventData = { + url: url, + imageId: imageId + }; + cornerstone.triggerEvent(cornerstone.events, 'cornerstoneimageloadstart', eventData); + }; // Event triggered when downloading an image ends + + + xhr.onloadend = function (event) { + // Action + if (options.onloadend) { + options.onloadend(event, params); + } + + var eventData = { + url: url, + imageId: imageId + }; // Event + + cornerstone.triggerEvent(cornerstone.events, 'cornerstoneimageloadend', eventData); + }; // handle response data + + + xhr.onreadystatechange = function (event) { + // Action + if (options.onreadystatechange) { + options.onreadystatechange(event, params); + return; + } // Default action + // TODO: consider sending out progress messages here as we receive the pixel data + + + if (xhr.readyState === 4) { + if (xhr.status === 200) { + resolve(xhr.response, xhr); + } else { + // request failed, reject the Promise + reject(xhr); + } + } + }; // Event triggered when downloading an image progresses + + + xhr.onprogress = function (oProgress) { + // console.log('progress:',oProgress) + var loaded = oProgress.loaded; // evt.loaded the bytes browser receive + + var total; + var percentComplete; + + if (oProgress.lengthComputable) { + total = oProgress.total; // evt.total the total bytes seted by the header + + percentComplete = Math.round(loaded / total * 100); + } // Action + + + if (options.onprogress) { + options.onprogress(oProgress, params); + } // Event + + + var eventData = { + url: url, + imageId: imageId, + loaded: loaded, + total: total, + percentComplete: percentComplete + }; + cornerstone.triggerEvent(cornerstone.events, 'cornerstoneimageloadprogress', eventData); + }; + + xhr.send(); + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (xhrRequest); + +/***/ }), + +/***/ "./imageLoader/isColorImage.js": +/*!*************************************!*\ + !*** ./imageLoader/isColorImage.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = (function (photoMetricInterpretation) { + return photoMetricInterpretation === 'RGB' || photoMetricInterpretation === 'PALETTE COLOR' || photoMetricInterpretation === 'YBR_FULL' || photoMetricInterpretation === 'YBR_FULL_422' || photoMetricInterpretation === 'YBR_PARTIAL_422' || photoMetricInterpretation === 'YBR_PARTIAL_420' || photoMetricInterpretation === 'YBR_RCT' || photoMetricInterpretation === 'YBR_ICT'; +}); + +/***/ }), + +/***/ "./imageLoader/isJPEGBaseline8BitColor.js": +/*!************************************************!*\ + !*** ./imageLoader/isJPEGBaseline8BitColor.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function isJPEGBaseline8BitColor(imageFrame, transferSyntax) { + transferSyntax = transferSyntax || imageFrame.transferSyntax; + + if (imageFrame.bitsAllocated === 8 && transferSyntax === '1.2.840.10008.1.2.4.50' && (imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4)) { + return true; + } +} + +/* harmony default export */ __webpack_exports__["default"] = (isJPEGBaseline8BitColor); + +/***/ }), + +/***/ "./imageLoader/registerLoaders.js": +/*!****************************************!*\ + !*** ./imageLoader/registerLoaders.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _wadors_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wadors/index.js */ "./imageLoader/wadors/index.js"); +/* harmony import */ var _wadouri_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wadouri/index.js */ "./imageLoader/wadouri/index.js"); + + +/** + * Register the WADO-URI and WADO-RS image loaders and metaData providers + * with an instance of Cornerstone Core. + * + * @param cornerstone The Cornerstone Core library to register the image loaders with + */ + +function registerLoaders(cornerstone) { + _wadors_index_js__WEBPACK_IMPORTED_MODULE_0__["default"].register(cornerstone); + _wadouri_index_js__WEBPACK_IMPORTED_MODULE_1__["default"].register(cornerstone); +} + +/* harmony default export */ __webpack_exports__["default"] = (registerLoaders); + +/***/ }), + +/***/ "./imageLoader/wadors/findIndexOfString.js": +/*!*************************************************!*\ + !*** ./imageLoader/wadors/findIndexOfString.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function checkToken(token, data, dataOffset) { + if (dataOffset + token.length > data.length) { + return false; + } + + var endIndex = dataOffset; + + for (var i = 0; i < token.length; i++) { + if (token[i] !== data[endIndex++]) { + return false; + } + } + + return true; +} + +function stringToUint8Array(str) { + var uint = new Uint8Array(str.length); + + for (var i = 0, j = str.length; i < j; i++) { + uint[i] = str.charCodeAt(i); + } + + return uint; +} + +function findIndexOfString(data, str, offset) { + offset = offset || 0; + var token = stringToUint8Array(str); + + for (var i = offset; i < data.length; i++) { + if (token[0] === data[i]) { + // console.log('match @', i); + if (checkToken(token, data, i)) { + return i; + } + } + } + + return -1; +} + +/* harmony default export */ __webpack_exports__["default"] = (findIndexOfString); + +/***/ }), + +/***/ "./imageLoader/wadors/getPixelData.js": +/*!********************************************!*\ + !*** ./imageLoader/wadors/getPixelData.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internal/index.js */ "./imageLoader/internal/index.js"); +/* harmony import */ var _findIndexOfString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./findIndexOfString.js */ "./imageLoader/wadors/findIndexOfString.js"); + + + +function findBoundary(header) { + for (var i = 0; i < header.length; i++) { + if (header[i].substr(0, 2) === '--') { + return header[i]; + } + } +} + +function findContentType(header) { + for (var i = 0; i < header.length; i++) { + if (header[i].substr(0, 13) === 'Content-Type:') { + return header[i].substr(13).trim(); + } + } +} + +function uint8ArrayToString(data, offset, length) { + offset = offset || 0; + length = length || data.length - offset; + var str = ''; + + for (var i = offset; i < offset + length; i++) { + str += String.fromCharCode(data[i]); + } + + return str; +} + +function getPixelData(uri, imageId) { + var mediaType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'application/octet-stream'; + var headers = { + accept: mediaType + }; + return new Promise(function (resolve, reject) { + var loadPromise = Object(_internal_index_js__WEBPACK_IMPORTED_MODULE_0__["xhrRequest"])(uri, imageId, headers); + loadPromise.then(function (imageFrameAsArrayBuffer + /* , xhr*/ + ) { + // request succeeded, Parse the multi-part mime response + var response = new Uint8Array(imageFrameAsArrayBuffer); // First look for the multipart mime header + + var tokenIndex = Object(_findIndexOfString_js__WEBPACK_IMPORTED_MODULE_1__["default"])(response, '\r\n\r\n'); + + if (tokenIndex === -1) { + reject(new Error('invalid response - no multipart mime header')); + } + + var header = uint8ArrayToString(response, 0, tokenIndex); // Now find the boundary marker + + var split = header.split('\r\n'); + var boundary = findBoundary(split); + + if (!boundary) { + reject(new Error('invalid response - no boundary marker')); + } + + var offset = tokenIndex + 4; // skip over the \r\n\r\n + // find the terminal boundary marker + + var endIndex = Object(_findIndexOfString_js__WEBPACK_IMPORTED_MODULE_1__["default"])(response, boundary, offset); + + if (endIndex === -1) { + reject(new Error('invalid response - terminating boundary not found')); + } // Remove \r\n from the length + + + var length = endIndex - offset - 2; // return the info for this pixel data + + resolve({ + contentType: findContentType(split), + imageFrame: { + pixelData: new Uint8Array(imageFrameAsArrayBuffer, offset, length) + } + }); + }); + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (getPixelData); + +/***/ }), + +/***/ "./imageLoader/wadors/index.js": +/*!*************************************!*\ + !*** ./imageLoader/wadors/index.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metaData/index.js */ "./imageLoader/wadors/metaData/index.js"); +/* harmony import */ var _findIndexOfString_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./findIndexOfString.js */ "./imageLoader/wadors/findIndexOfString.js"); +/* harmony import */ var _getPixelData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getPixelData.js */ "./imageLoader/wadors/getPixelData.js"); +/* harmony import */ var _metaDataManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./metaDataManager.js */ "./imageLoader/wadors/metaDataManager.js"); +/* harmony import */ var _loadImage_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./loadImage.js */ "./imageLoader/wadors/loadImage.js"); +/* harmony import */ var _register_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./register.js */ "./imageLoader/wadors/register.js"); + + + + + + +var metaData = { + getNumberString: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getNumberString"], + getNumberValue: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getNumberValue"], + getNumberValues: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getNumberValues"], + getValue: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getValue"], + metaDataProvider: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["metaDataProvider"] +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + metaData: metaData, + findIndexOfString: _findIndexOfString_js__WEBPACK_IMPORTED_MODULE_1__["default"], + getPixelData: _getPixelData_js__WEBPACK_IMPORTED_MODULE_2__["default"], + loadImage: _loadImage_js__WEBPACK_IMPORTED_MODULE_4__["default"], + metaDataManager: _metaDataManager_js__WEBPACK_IMPORTED_MODULE_3__["default"], + register: _register_js__WEBPACK_IMPORTED_MODULE_5__["default"] +}); + +/***/ }), + +/***/ "./imageLoader/wadors/loadImage.js": +/*!*****************************************!*\ + !*** ./imageLoader/wadors/loadImage.js ***! + \*****************************************/ +/*! exports provided: getTransferSyntaxForContentType, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTransferSyntaxForContentType", function() { return getTransferSyntaxForContentType; }); +/* harmony import */ var _metaDataManager_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metaDataManager.js */ "./imageLoader/wadors/metaDataManager.js"); +/* harmony import */ var _getPixelData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getPixelData.js */ "./imageLoader/wadors/getPixelData.js"); +/* harmony import */ var _createImage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../createImage.js */ "./imageLoader/createImage.js"); + + + +/** + * Helper method to extract the transfer-syntax from the response of the server. + * @param {string} contentType The value of the content-type header as returned by the WADO-RS server. + * @return The transfer-syntax as announced by the server, or Implicit Little Endian by default. + */ + +function getTransferSyntaxForContentType(contentType) { + var defaultTransferSyntax = '1.2.840.10008.1.2'; // Default is Implicit Little Endian. + + if (!contentType) { + return defaultTransferSyntax; + } // Browse through the content type parameters + + + var parameters = contentType.split(';'); + var params = {}; + parameters.forEach(function (parameter) { + // Look for a transfer-syntax=XXXX pair + var parameterValues = parameter.split('='); + + if (parameterValues.length !== 2) { + return; + } + + var value = parameterValues[1].trim().replace(/"/g, ''); + params[parameterValues[0].trim()] = value; + }); // This is useful if the PACS doesn't respond with a syntax + // in the content type. + // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/chapter_6.html#table_6.1.1.8-3b + + var defaultTransferSyntaxByType = { + 'image/jpeg': '1.2.840.10008.1.2.4.70', + 'image/x-dicom-rle': '1.2.840.10008.1.2.5', + 'image/x-jls': '1.2.840.10008.1.2.4.80', + 'image/jp2': '1.2.840.10008.1.2.4.90', + 'image/jpx': '1.2.840.10008.1.2.4.92' + }; + + if (params['transfer-syntax']) { + return params['transfer-syntax']; + } else if (contentType && !Object.keys(params).length && defaultTransferSyntaxByType[contentType]) { + // dcm4che seems to be reporting the content type as just 'image/jp2'? + return defaultTransferSyntaxByType[contentType]; + } else if (params.type && defaultTransferSyntaxByType[params.type]) { + return defaultTransferSyntaxByType[params.type]; + } + + return defaultTransferSyntax; +} + +function loadImage(imageId, options) { + var start = new Date().getTime(); + var uri = imageId.substring(7); + var promise = new Promise(function (resolve, reject) { + // check to make sure we have metadata for this imageId + var metaData = _metaDataManager_js__WEBPACK_IMPORTED_MODULE_0__["default"].get(imageId); + + if (metaData === undefined) { + var error = new Error("no metadata for imageId ".concat(imageId)); + return reject(error); + } // TODO: load bulk data items that we might need + + + var mediaType = 'multipart/related; type="application/octet-stream"'; // 'image/dicom+jp2'; + // get the pixel data from the server + + Object(_getPixelData_js__WEBPACK_IMPORTED_MODULE_1__["default"])(uri, imageId, mediaType).then(function (result) { + var transferSyntax = getTransferSyntaxForContentType(result.contentType); + var pixelData = result.imageFrame.pixelData; + var imagePromise = Object(_createImage_js__WEBPACK_IMPORTED_MODULE_2__["default"])(imageId, pixelData, transferSyntax, options); + imagePromise.then(function (image) { + // add the loadTimeInMS property + var end = new Date().getTime(); + image.loadTimeInMS = end - start; + resolve(image); + }, reject); + }, reject); + }); + return { + promise: promise, + cancelFn: undefined + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (loadImage); + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/getNumberString.js": +/*!********************************************************!*\ + !*** ./imageLoader/wadors/metaData/getNumberString.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getValue.js */ "./imageLoader/wadors/metaData/getValue.js"); + +/** + * Returns the first string value as a Javascript number + * + * @param element - The javascript object for the specified element in the metadata + * @param [index] - the index of the value in a multi-valued element, default is 0 + * @param [defaultValue] - The default value to return if the element does not exist + * @returns {*} + */ + +function getNumberString(element, index, defaultValue) { + var value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, index, defaultValue); + + if (value === undefined) { + return; + } + + return parseFloat(value); +} + +/* harmony default export */ __webpack_exports__["default"] = (getNumberString); + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/getNumberValue.js": +/*!*******************************************************!*\ + !*** ./imageLoader/wadors/metaData/getNumberValue.js ***! + \*******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getValue.js */ "./imageLoader/wadors/metaData/getValue.js"); + + +function getNumberValue(element, index) { + var value = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element, index); + + if (value === undefined) { + return; + } + + return parseFloat(value); +} + +/* harmony default export */ __webpack_exports__["default"] = (getNumberValue); + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/getNumberValues.js": +/*!********************************************************!*\ + !*** ./imageLoader/wadors/metaData/getNumberValues.js ***! + \********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Returns the values as an array of javascript numbers + * + * @param element - The javascript object for the specified element in the metadata + * @param [minimumLength] - the minimum number of values + * @returns {*} + */ +function getNumberValues(element, minimumLength) { + if (!element) { + return; + } // Value is not present if the attribute has a zero length value + + + if (!element.Value) { + return; + } // make sure we have the expected length + + + if (minimumLength && element.Value.length < minimumLength) { + return; + } + + var values = []; + + for (var i = 0; i < element.Value.length; i++) { + values.push(parseFloat(element.Value[i])); + } + + return values; +} + +/* harmony default export */ __webpack_exports__["default"] = (getNumberValues); + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/getOverlayPlaneModule.js": +/*!**************************************************************!*\ + !*** ./imageLoader/wadors/metaData/getOverlayPlaneModule.js ***! + \**************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getOverlayPlaneModule; }); +/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getValue.js */ "./imageLoader/wadors/metaData/getValue.js"); +/* harmony import */ var _getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberValue.js */ "./imageLoader/wadors/metaData/getNumberValue.js"); + + +function getOverlayPlaneModule(metaData) { + var overlays = []; + + for (var overlayGroup = 0x00; overlayGroup <= 0x1E; overlayGroup += 0x02) { + var groupStr = "x60".concat(overlayGroup.toString(16)); + + if (groupStr.length === 4) { + groupStr = "x600".concat(overlayGroup.toString(16)); + } + + var data = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "3000")]); + + if (!data) { + continue; + } + + var pixelData = []; + + for (var i = 0; i < data.length; i++) { + for (var k = 0; k < 8; k++) { + var byte_as_int = metaData.Value[data.dataOffset + i]; + pixelData[i * 8 + k] = byte_as_int >> k & 1; // eslint-disable-line no-bitwise + } + } + + overlays.push({ + rows: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData["".concat(groupStr, "0010")]), + columns: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData["".concat(groupStr, "0011")]), + type: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "0040")]), + x: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData["".concat(groupStr, "0050")], 1) - 1, + y: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData["".concat(groupStr, "0050")], 0) - 1, + pixelData: pixelData, + description: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "0022")]), + label: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "1500")]), + roiArea: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "1301")]), + roiMean: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "1302")]), + roiStandardDeviation: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_0__["default"])(metaData["".concat(groupStr, "1303")]) + }); + } + + return { + overlays: overlays + }; +} + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/getValue.js": +/*!*************************************************!*\ + !*** ./imageLoader/wadors/metaData/getValue.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Returns the raw value + * + * @param element - The javascript object for the specified element in the metadata + * @param [index] - the index of the value in a multi-valued element, default is 0 + * @param [defaultValue] - The default value to return if the element does not exist + * @returns {*} + */ +function getValue(element, index, defaultValue) { + index = index || 0; + + if (!element) { + return defaultValue; + } // Value is not present if the attribute has a zero length value + + + if (!element.Value) { + return defaultValue; + } // make sure we have the specified index + + + if (element.Value.length <= index) { + return defaultValue; + } + + return element.Value[index]; +} + +/* harmony default export */ __webpack_exports__["default"] = (getValue); + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/index.js": +/*!**********************************************!*\ + !*** ./imageLoader/wadors/metaData/index.js ***! + \**********************************************/ +/*! exports provided: getNumberString, getNumberValue, getNumberValues, getValue, metaDataProvider */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getNumberString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNumberString.js */ "./imageLoader/wadors/metaData/getNumberString.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getNumberString", function() { return _getNumberString_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberValue.js */ "./imageLoader/wadors/metaData/getNumberValue.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getNumberValue", function() { return _getNumberValue_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _getNumberValues_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getNumberValues.js */ "./imageLoader/wadors/metaData/getNumberValues.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getNumberValues", function() { return _getNumberValues_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getValue.js */ "./imageLoader/wadors/metaData/getValue.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getValue", function() { return _getValue_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _metaDataProvider_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./metaDataProvider.js */ "./imageLoader/wadors/metaData/metaDataProvider.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "metaDataProvider", function() { return _metaDataProvider_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + + + + + + + +/***/ }), + +/***/ "./imageLoader/wadors/metaData/metaDataProvider.js": +/*!*********************************************************!*\ + !*** ./imageLoader/wadors/metaData/metaDataProvider.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberValues.js */ "./imageLoader/wadors/metaData/getNumberValues.js"); +/* harmony import */ var _getValue_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getValue.js */ "./imageLoader/wadors/metaData/getValue.js"); +/* harmony import */ var _getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getNumberValue.js */ "./imageLoader/wadors/metaData/getNumberValue.js"); +/* harmony import */ var _getOverlayPlaneModule_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getOverlayPlaneModule.js */ "./imageLoader/wadors/metaData/getOverlayPlaneModule.js"); +/* harmony import */ var _metaDataManager_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../metaDataManager.js */ "./imageLoader/wadors/metaDataManager.js"); + + + + + + + +function metaDataProvider(type, imageId) { + var dicomParser = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].dicomParser; + var metaData = _metaDataManager_js__WEBPACK_IMPORTED_MODULE_5__["default"].get(imageId); + + if (!metaData) { + return; + } + + if (type === 'generalSeriesModule') { + return { + modality: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00080060']), + seriesInstanceUID: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['0020000e']), + seriesNumber: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00200011']), + studyInstanceUID: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['0020000d']), + seriesDate: dicomParser.parseDA(Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00080021'])), + seriesTime: dicomParser.parseTM(Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00080031'], 0, '')) + }; + } + + if (type === 'patientStudyModule') { + return { + patientAge: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00101010']), + patientSize: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00101020']), + patientWeight: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00101030']) + }; + } + + if (type === 'imagePlaneModule') { + var imageOrientationPatient = Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00200037'], 6); + var imagePositionPatient = Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00200032'], 3); + var pixelSpacing = Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00280030'], 2); + var columnPixelSpacing = null; + var rowPixelSpacing = null; + + if (pixelSpacing) { + rowPixelSpacing = pixelSpacing[0]; + columnPixelSpacing = pixelSpacing[1]; + } + + var rowCosines = null; + var columnCosines = null; + + if (imageOrientationPatient) { + rowCosines = [parseFloat(imageOrientationPatient[0]), parseFloat(imageOrientationPatient[1]), parseFloat(imageOrientationPatient[2])]; + columnCosines = [parseFloat(imageOrientationPatient[3]), parseFloat(imageOrientationPatient[4]), parseFloat(imageOrientationPatient[5])]; + } + + return { + frameOfReferenceUID: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00200052']), + rows: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280010']), + columns: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280011']), + imageOrientationPatient: imageOrientationPatient, + rowCosines: rowCosines, + columnCosines: columnCosines, + imagePositionPatient: imagePositionPatient, + sliceThickness: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00180050']), + sliceLocation: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00201041']), + pixelSpacing: pixelSpacing, + rowPixelSpacing: rowPixelSpacing, + columnPixelSpacing: columnPixelSpacing + }; + } + + if (type === 'imagePixelModule') { + return { + samplesPerPixel: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280002']), + photometricInterpretation: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00280004']), + rows: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280010']), + columns: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280011']), + bitsAllocated: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280100']), + bitsStored: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280101']), + highBit: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00280102']), + pixelRepresentation: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280103']), + planarConfiguration: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280006']), + pixelAspectRatio: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00280034']), + smallestPixelValue: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280106']), + largestPixelValue: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00280107']), + redPaletteColorLookupTableDescriptor: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281101']), + greenPaletteColorLookupTableDescriptor: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281102']), + bluePaletteColorLookupTableDescriptor: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281103']), + redPaletteColorLookupTableData: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281201']), + greenPaletteColorLookupTableData: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281202']), + bluePaletteColorLookupTableData: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281203']) + }; + } + + if (type === 'voiLutModule') { + return { + // TODO VOT LUT Sequence + windowCenter: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281050'], 1), + windowWidth: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(metaData['00281051'], 1) + }; + } + + if (type === 'modalityLutModule') { + return { + // TODO VOT LUT Sequence + rescaleIntercept: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00281052']), + rescaleSlope: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(metaData['00281053']), + rescaleType: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00281054']) + }; + } + + if (type === 'sopCommonModule') { + return { + sopClassUID: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00080016']), + sopInstanceUID: Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00080018']) + }; + } + + if (type === 'petIsotopeModule') { + var radiopharmaceuticalInfo = Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(metaData['00540016']); + + if (radiopharmaceuticalInfo === undefined) { + return; + } + + return { + radiopharmaceuticalInfo: { + radiopharmaceuticalStartTime: dicomParser.parseTM(Object(_getValue_js__WEBPACK_IMPORTED_MODULE_2__["default"])(radiopharmaceuticalInfo['00181072'], 0, '')), + radionuclideTotalDose: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(radiopharmaceuticalInfo['00181074']), + radionuclideHalfLife: Object(_getNumberValue_js__WEBPACK_IMPORTED_MODULE_3__["default"])(radiopharmaceuticalInfo['00181075']) + } + }; + } + + if (type === 'overlayPlaneModule') { + return Object(_getOverlayPlaneModule_js__WEBPACK_IMPORTED_MODULE_4__["default"])(metaData); + } +} + +/* harmony default export */ __webpack_exports__["default"] = (metaDataProvider); + +/***/ }), + +/***/ "./imageLoader/wadors/metaDataManager.js": +/*!***********************************************!*\ + !*** ./imageLoader/wadors/metaDataManager.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var imageIds = []; + +function add(imageId, metadata) { + imageIds[imageId] = metadata; +} + +function get(imageId) { + return imageIds[imageId]; +} + +function remove(imageId) { + imageIds[imageId] = undefined; +} + +function purge() { + imageIds = []; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + add: add, + get: get, + remove: remove, + purge: purge +}); + +/***/ }), + +/***/ "./imageLoader/wadors/register.js": +/*!****************************************!*\ + !*** ./imageLoader/wadors/register.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _loadImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loadImage.js */ "./imageLoader/wadors/loadImage.js"); +/* harmony import */ var _metaData_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./metaData/index.js */ "./imageLoader/wadors/metaData/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function (cornerstone) { + // register wadors scheme and metadata provider + cornerstone.registerImageLoader('wadors', _loadImage_js__WEBPACK_IMPORTED_MODULE_0__["default"]); + cornerstone.metaData.addProvider(_metaData_index_js__WEBPACK_IMPORTED_MODULE_1__["metaDataProvider"]); +}); + +/***/ }), + +/***/ "./imageLoader/wadouri/dataSetCacheManager.js": +/*!****************************************************!*\ + !*** ./imageLoader/wadouri/dataSetCacheManager.js ***! + \****************************************************/ +/*! exports provided: getInfo, default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getInfo", function() { return getInfo; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internal/index.js */ "./imageLoader/internal/index.js"); + + +/** + * This object supports loading of DICOM P10 dataset from a uri and caching it so it can be accessed + * by the caller. This allows a caller to access the datasets without having to go through cornerstone's + * image loader mechanism. One reason a caller may need to do this is to determine the number of frames + * in a multiframe sop instance so it can create the imageId's correctly. + */ + +var cacheSizeInBytes = 0; +var loadedDataSets = {}; +var promises = {}; // returns true if the wadouri for the specified index has been loaded + +function isLoaded(uri) { + return loadedDataSets[uri] !== undefined; +} + +function get(uri) { + if (!loadedDataSets[uri]) { + return; + } + + return loadedDataSets[uri].dataSet; +} // loads the dicom dataset from the wadouri sp + + +function load(uri) { + var loadRequest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _internal_index_js__WEBPACK_IMPORTED_MODULE_1__["xhrRequest"]; + var imageId = arguments.length > 2 ? arguments[2] : undefined; + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone, + dicomParser = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].dicomParser; // if already loaded return it right away + + if (loadedDataSets[uri]) { + // console.log('using loaded dataset ' + uri); + return new Promise(function (resolve) { + loadedDataSets[uri].cacheCount++; + resolve(loadedDataSets[uri].dataSet); + }); + } // if we are currently loading this uri, increment the cacheCount and return its promise + + + if (promises[uri]) { + // console.log('returning existing load promise for ' + uri); + promises[uri].cacheCount++; + return promises[uri]; + } // This uri is not loaded or being loaded, load it via an xhrRequest + + + var loadDICOMPromise = loadRequest(uri, imageId); // handle success and failure of the XHR request load + + var promise = new Promise(function (resolve, reject) { + loadDICOMPromise.then(function (dicomPart10AsArrayBuffer + /* , xhr*/ + ) { + var byteArray = new Uint8Array(dicomPart10AsArrayBuffer); // Reject the promise if parsing the dicom file fails + + var dataSet; + + try { + dataSet = dicomParser.parseDicom(byteArray); + } catch (error) { + return reject(error); + } + + loadedDataSets[uri] = { + dataSet: dataSet, + cacheCount: promise.cacheCount + }; + cacheSizeInBytes += dataSet.byteArray.length; + resolve(dataSet); + cornerstone.triggerEvent(cornerstone.events, 'datasetscachechanged', { + uri: uri, + action: 'loaded', + cacheInfo: getInfo() + }); + }, reject).then(function () { + // Remove the promise if success + delete promises[uri]; + }, function () { + // Remove the promise if failure + delete promises[uri]; + }); + }); + promise.cacheCount = 1; + promises[uri] = promise; + return promise; +} // remove the cached/loaded dicom dataset for the specified wadouri to free up memory + + +function unload(uri) { + var cornerstone = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].cornerstone; // console.log('unload for ' + uri); + + if (loadedDataSets[uri]) { + loadedDataSets[uri].cacheCount--; + + if (loadedDataSets[uri].cacheCount === 0) { + // console.log('removing loaded dataset for ' + uri); + cacheSizeInBytes -= loadedDataSets[uri].dataSet.byteArray.length; + delete loadedDataSets[uri]; + cornerstone.triggerEvent(cornerstone.events, 'datasetscachechanged', { + uri: uri, + action: 'unloaded', + cacheInfo: getInfo() + }); + } + } +} + +function getInfo() { + return { + cacheSizeInBytes: cacheSizeInBytes, + numberOfDataSetsCached: Object.keys(loadedDataSets).length + }; +} // removes all cached datasets from memory + +function purge() { + loadedDataSets = {}; + promises = {}; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + isLoaded: isLoaded, + load: load, + unload: unload, + getInfo: getInfo, + purge: purge, + get: get +}); + +/***/ }), + +/***/ "./imageLoader/wadouri/fileManager.js": +/*!********************************************!*\ + !*** ./imageLoader/wadouri/fileManager.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +var files = []; + +function add(file) { + var fileIndex = files.push(file); + return "dicomfile:".concat(fileIndex - 1); +} + +function get(index) { + return files[index]; +} + +function remove(index) { + files[index] = undefined; +} + +function purge() { + files = []; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + add: add, + get: get, + remove: remove, + purge: purge +}); + +/***/ }), + +/***/ "./imageLoader/wadouri/getEncapsulatedImageFrame.js": +/*!**********************************************************!*\ + !*** ./imageLoader/wadouri/getEncapsulatedImageFrame.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getEncapsulatedImageFrame; }); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../externalModules.js */ "./externalModules.js"); + +/** + * Function to deal with extracting an image frame from an encapsulated data set. + */ + +function framesAreFragmented(dataSet) { + var numberOfFrames = dataSet.intString('x00280008'); + var pixelDataElement = dataSet.elements.x7fe00010; + return numberOfFrames !== pixelDataElement.fragments.length; +} + +function getEncapsulatedImageFrame(dataSet, frameIndex) { + var dicomParser = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].dicomParser; + + if (dataSet.elements.x7fe00010 && dataSet.elements.x7fe00010.basicOffsetTable.length) { + // Basic Offset Table is not empty + return dicomParser.readEncapsulatedImageFrame(dataSet, dataSet.elements.x7fe00010, frameIndex); + } // Empty basic offset table + + + if (framesAreFragmented(dataSet)) { + var basicOffsetTable = dicomParser.createJPEGBasicOffsetTable(dataSet, dataSet.elements.x7fe00010); + return dicomParser.readEncapsulatedImageFrame(dataSet, dataSet.elements.x7fe00010, frameIndex, basicOffsetTable); + } + + return dicomParser.readEncapsulatedPixelDataFromFragments(dataSet, dataSet.elements.x7fe00010, frameIndex); +} + +/***/ }), + +/***/ "./imageLoader/wadouri/getPixelData.js": +/*!*********************************************!*\ + !*** ./imageLoader/wadouri/getPixelData.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getEncapsulatedImageFrame_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getEncapsulatedImageFrame.js */ "./imageLoader/wadouri/getEncapsulatedImageFrame.js"); +/* harmony import */ var _getUncompressedImageFrame_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getUncompressedImageFrame.js */ "./imageLoader/wadouri/getUncompressedImageFrame.js"); + + + +function getPixelData(dataSet) { + var frameIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + var pixelDataElement = dataSet.elements.x7fe00010 || dataSet.elements.x7fe00008; + + if (!pixelDataElement) { + return null; + } + + if (pixelDataElement.encapsulatedPixelData) { + return Object(_getEncapsulatedImageFrame_js__WEBPACK_IMPORTED_MODULE_0__["default"])(dataSet, frameIndex); + } + + return Object(_getUncompressedImageFrame_js__WEBPACK_IMPORTED_MODULE_1__["default"])(dataSet, frameIndex); +} + +/* harmony default export */ __webpack_exports__["default"] = (getPixelData); + +/***/ }), + +/***/ "./imageLoader/wadouri/getUncompressedImageFrame.js": +/*!**********************************************************!*\ + !*** ./imageLoader/wadouri/getUncompressedImageFrame.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _unpackBinaryFrame_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./unpackBinaryFrame.js */ "./imageLoader/wadouri/unpackBinaryFrame.js"); + +/** + * Function to deal with extracting an image frame from an encapsulated data set. + */ + +function getUncompressedImageFrame(dataSet, frameIndex) { + var pixelDataElement = dataSet.elements.x7fe00010 || dataSet.elements.x7fe00008; + var bitsAllocated = dataSet.uint16('x00280100'); + var rows = dataSet.uint16('x00280010'); + var columns = dataSet.uint16('x00280011'); + var samplesPerPixel = dataSet.uint16('x00280002'); + var pixelDataOffset = pixelDataElement.dataOffset; + var pixelsPerFrame = rows * columns * samplesPerPixel; + var frameOffset; + + if (bitsAllocated === 8) { + frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame; + + if (frameOffset >= dataSet.byteArray.length) { + throw new Error('frame exceeds size of pixelData'); + } + + return new Uint8Array(dataSet.byteArray.buffer, frameOffset, pixelsPerFrame); + } else if (bitsAllocated === 16) { + frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 2; + + if (frameOffset >= dataSet.byteArray.length) { + throw new Error('frame exceeds size of pixelData'); + } + + return new Uint8Array(dataSet.byteArray.buffer, frameOffset, pixelsPerFrame * 2); + } else if (bitsAllocated === 1) { + frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 0.125; + + if (frameOffset >= dataSet.byteArray.length) { + throw new Error('frame exceeds size of pixelData'); + } + + return Object(_unpackBinaryFrame_js__WEBPACK_IMPORTED_MODULE_0__["default"])(dataSet.byteArray, frameOffset, pixelsPerFrame); + } else if (bitsAllocated === 32) { + frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 4; + + if (frameOffset >= dataSet.byteArray.length) { + throw new Error('frame exceeds size of pixelData'); + } + + return new Uint8Array(dataSet.byteArray.buffer, frameOffset, pixelsPerFrame * 4); + } + + throw new Error('unsupported pixel format'); +} + +/* harmony default export */ __webpack_exports__["default"] = (getUncompressedImageFrame); + +/***/ }), + +/***/ "./imageLoader/wadouri/index.js": +/*!**************************************!*\ + !*** ./imageLoader/wadouri/index.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metaData/index.js */ "./imageLoader/wadouri/metaData/index.js"); +/* harmony import */ var _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dataSetCacheManager.js */ "./imageLoader/wadouri/dataSetCacheManager.js"); +/* harmony import */ var _fileManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fileManager.js */ "./imageLoader/wadouri/fileManager.js"); +/* harmony import */ var _getEncapsulatedImageFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getEncapsulatedImageFrame.js */ "./imageLoader/wadouri/getEncapsulatedImageFrame.js"); +/* harmony import */ var _getUncompressedImageFrame_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getUncompressedImageFrame.js */ "./imageLoader/wadouri/getUncompressedImageFrame.js"); +/* harmony import */ var _loadFileRequest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./loadFileRequest.js */ "./imageLoader/wadouri/loadFileRequest.js"); +/* harmony import */ var _loadImage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./loadImage.js */ "./imageLoader/wadouri/loadImage.js"); +/* harmony import */ var _parseImageId_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./parseImageId.js */ "./imageLoader/wadouri/parseImageId.js"); +/* harmony import */ var _unpackBinaryFrame_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./unpackBinaryFrame.js */ "./imageLoader/wadouri/unpackBinaryFrame.js"); +/* harmony import */ var _register_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./register.js */ "./imageLoader/wadouri/register.js"); + + + + + + + + + + +var metaData = { + getImagePixelModule: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getImagePixelModule"], + getLUTs: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getLUTs"], + getModalityLUTOutputPixelRepresentation: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getModalityLUTOutputPixelRepresentation"], + getNumberValues: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["getNumberValues"], + metaDataProvider: _metaData_index_js__WEBPACK_IMPORTED_MODULE_0__["metaDataProvider"] +}; +/* harmony default export */ __webpack_exports__["default"] = ({ + metaData: metaData, + dataSetCacheManager: _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_1__["default"], + fileManager: _fileManager_js__WEBPACK_IMPORTED_MODULE_2__["default"], + getEncapsulatedImageFrame: _getEncapsulatedImageFrame_js__WEBPACK_IMPORTED_MODULE_3__["default"], + getUncompressedImageFrame: _getUncompressedImageFrame_js__WEBPACK_IMPORTED_MODULE_4__["default"], + loadFileRequest: _loadFileRequest_js__WEBPACK_IMPORTED_MODULE_5__["default"], + loadImageFromPromise: _loadImage_js__WEBPACK_IMPORTED_MODULE_6__["loadImageFromPromise"], + getLoaderForScheme: _loadImage_js__WEBPACK_IMPORTED_MODULE_6__["getLoaderForScheme"], + loadImage: _loadImage_js__WEBPACK_IMPORTED_MODULE_6__["loadImage"], + parseImageId: _parseImageId_js__WEBPACK_IMPORTED_MODULE_7__["default"], + unpackBinaryFrame: _unpackBinaryFrame_js__WEBPACK_IMPORTED_MODULE_8__["default"], + register: _register_js__WEBPACK_IMPORTED_MODULE_9__["default"] +}); + +/***/ }), + +/***/ "./imageLoader/wadouri/loadFileRequest.js": +/*!************************************************!*\ + !*** ./imageLoader/wadouri/loadFileRequest.js ***! + \************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _parseImageId_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parseImageId.js */ "./imageLoader/wadouri/parseImageId.js"); +/* harmony import */ var _fileManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fileManager.js */ "./imageLoader/wadouri/fileManager.js"); + + + +function loadFileRequest(uri) { + var parsedImageId = Object(_parseImageId_js__WEBPACK_IMPORTED_MODULE_0__["default"])(uri); + var fileIndex = parseInt(parsedImageId.url, 10); + var file = _fileManager_js__WEBPACK_IMPORTED_MODULE_1__["default"].get(fileIndex); + return new Promise(function (resolve, reject) { + var fileReader = new FileReader(); + + fileReader.onload = function (e) { + var dicomPart10AsArrayBuffer = e.target.result; + resolve(dicomPart10AsArrayBuffer); + }; + + fileReader.onerror = reject; + fileReader.readAsArrayBuffer(file); + }); +} + +/* harmony default export */ __webpack_exports__["default"] = (loadFileRequest); + +/***/ }), + +/***/ "./imageLoader/wadouri/loadImage.js": +/*!******************************************!*\ + !*** ./imageLoader/wadouri/loadImage.js ***! + \******************************************/ +/*! exports provided: loadImageFromPromise, getLoaderForScheme, loadImage */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadImageFromPromise", function() { return loadImageFromPromise; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLoaderForScheme", function() { return getLoaderForScheme; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadImage", function() { return loadImage; }); +/* harmony import */ var _createImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createImage.js */ "./imageLoader/createImage.js"); +/* harmony import */ var _parseImageId_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parseImageId.js */ "./imageLoader/wadouri/parseImageId.js"); +/* harmony import */ var _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dataSetCacheManager.js */ "./imageLoader/wadouri/dataSetCacheManager.js"); +/* harmony import */ var _loadFileRequest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./loadFileRequest.js */ "./imageLoader/wadouri/loadFileRequest.js"); +/* harmony import */ var _getPixelData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getPixelData.js */ "./imageLoader/wadouri/getPixelData.js"); +/* harmony import */ var _internal_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../internal/index.js */ "./imageLoader/internal/index.js"); + + + + + + // add a decache callback function to clear out our dataSetCacheManager + +function addDecache(imageLoadObject, imageId) { + imageLoadObject.decache = function () { + // console.log('decache'); + var parsedImageId = Object(_parseImageId_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imageId); + _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].unload(parsedImageId.url); + }; +} + +function loadImageFromPromise(dataSetPromise, imageId) { + var frame = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var sharedCacheKey = arguments.length > 3 ? arguments[3] : undefined; + var options = arguments.length > 4 ? arguments[4] : undefined; + var callbacks = arguments.length > 5 ? arguments[5] : undefined; + var start = new Date().getTime(); + var imageLoadObject = { + cancelFn: undefined + }; + imageLoadObject.promise = new Promise(function (resolve, reject) { + dataSetPromise.then(function (dataSet + /* , xhr*/ + ) { + var pixelData = Object(_getPixelData_js__WEBPACK_IMPORTED_MODULE_4__["default"])(dataSet, frame); + var transferSyntax = dataSet.string('x00020010'); + var loadEnd = new Date().getTime(); + var imagePromise = Object(_createImage_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageId, pixelData, transferSyntax, options); + addDecache(imageLoadObject, imageId); + imagePromise.then(function (image) { + image.data = dataSet; + image.sharedCacheKey = sharedCacheKey; + var end = new Date().getTime(); + image.loadTimeInMS = loadEnd - start; + image.totalTimeInMS = end - start; + + if (callbacks !== undefined && callbacks.imageDoneCallback !== undefined) { + callbacks.imageDoneCallback(image); + } + + resolve(image); + }, function (error) { + // Reject the error, and the dataSet + reject({ + error: error, + dataSet: dataSet + }); + }); + }, function (error) { + // Reject the error + reject({ + error: error + }); + }); + }); + return imageLoadObject; +} + +function loadImageFromDataSet(dataSet, imageId) { + var frame = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var sharedCacheKey = arguments.length > 3 ? arguments[3] : undefined; + var options = arguments.length > 4 ? arguments[4] : undefined; + var start = new Date().getTime(); + var promise = new Promise(function (resolve, reject) { + var loadEnd = new Date().getTime(); + var imagePromise; + + try { + var pixelData = Object(_getPixelData_js__WEBPACK_IMPORTED_MODULE_4__["default"])(dataSet, frame); + var transferSyntax = dataSet.string('x00020010'); + imagePromise = Object(_createImage_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageId, pixelData, transferSyntax, options); + } catch (error) { + // Reject the error, and the dataSet + reject({ + error: error, + dataSet: dataSet + }); + return; + } + + imagePromise.then(function (image) { + image.data = dataSet; + image.sharedCacheKey = sharedCacheKey; + var end = new Date().getTime(); + image.loadTimeInMS = loadEnd - start; + image.totalTimeInMS = end - start; + resolve(image); + }, reject); + }); + return { + promise: promise, + cancelFn: undefined + }; +} + +function getLoaderForScheme(scheme) { + if (scheme === 'dicomweb' || scheme === 'wadouri') { + return _internal_index_js__WEBPACK_IMPORTED_MODULE_5__["xhrRequest"]; + } else if (scheme === 'dicomfile') { + return _loadFileRequest_js__WEBPACK_IMPORTED_MODULE_3__["default"]; + } +} + +function loadImage(imageId) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var parsedImageId = Object(_parseImageId_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imageId); + options = Object.assign({}, options); + var loader = options.loader; + + if (loader === undefined) { + loader = getLoaderForScheme(parsedImageId.scheme); + } else { + delete options.loader; + } // if the dataset for this url is already loaded, use it + + + if (_dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].isLoaded(parsedImageId.url)) { + var dataSet = _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].get(parsedImageId.url, loader, imageId); + return loadImageFromDataSet(dataSet, imageId, parsedImageId.frame, parsedImageId.url, options); + } // load the dataSet via the dataSetCacheManager + + + var dataSetPromise = _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_2__["default"].load(parsedImageId.url, loader, imageId); + return loadImageFromPromise(dataSetPromise, imageId, parsedImageId.frame, parsedImageId.url, options); +} + + + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/getImagePixelModule.js": +/*!*************************************************************!*\ + !*** ./imageLoader/wadouri/metaData/getImagePixelModule.js ***! + \*************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function getLutDescriptor(dataSet, tag) { + if (!dataSet.elements[tag] || dataSet.elements[tag].length !== 6) { + return; + } + + return [dataSet.uint16(tag, 0), dataSet.uint16(tag, 1), dataSet.uint16(tag, 2)]; +} + +function getLutData(lutDataSet, tag, lutDescriptor) { + var lut = []; + var lutData = lutDataSet.elements[tag]; + + for (var i = 0; i < lutDescriptor[0]; i++) { + // Output range is always unsigned + if (lutDescriptor[2] === 16) { + lut[i] = lutDataSet.uint16(tag, i); + } else { + lut[i] = lutDataSet.byteArray[i + lutData.dataOffset]; + } + } + + return lut; +} + +function populatePaletteColorLut(dataSet, imagePixelModule) { + imagePixelModule.redPaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281101'); + imagePixelModule.greenPaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281102'); + imagePixelModule.bluePaletteColorLookupTableDescriptor = getLutDescriptor(dataSet, 'x00281103'); // The first Palette Color Lookup Table Descriptor value is the number of entries in the lookup table. + // When the number of table entries is equal to 2ˆ16 then this value shall be 0. + // See http://dicom.nema.org/MEDICAL/DICOM/current/output/chtml/part03/sect_C.7.6.3.html#sect_C.7.6.3.1.5 + + if (imagePixelModule.redPaletteColorLookupTableDescriptor[0] === 0) { + imagePixelModule.redPaletteColorLookupTableDescriptor[0] = 65536; + imagePixelModule.greenPaletteColorLookupTableDescriptor[0] = 65536; + imagePixelModule.bluePaletteColorLookupTableDescriptor[0] = 65536; + } // The third Palette Color Lookup Table Descriptor value specifies the number of bits for each entry in the Lookup Table Data. + // It shall take the value of 8 or 16. + // The LUT Data shall be stored in a format equivalent to 8 bits allocated when the number of bits for each entry is 8, and 16 bits allocated when the number of bits for each entry is 16, where in both cases the high bit is equal to bits allocated-1. + // The third value shall be identical for each of the Red, Green and Blue Palette Color Lookup Table Descriptors. + // + // Note: Some implementations have encoded 8 bit entries with 16 bits allocated, padding the high bits; + // this can be detected by comparing the number of entries specified in the LUT Descriptor with the actual value length of the LUT Data entry. + // The value length in bytes should equal the number of entries if bits allocated is 8, and be twice as long if bits allocated is 16. + + + var numLutEntries = imagePixelModule.redPaletteColorLookupTableDescriptor[0]; + var lutData = dataSet.elements.x00281201; + var lutBitsAllocated = lutData.length === numLutEntries ? 8 : 16; // If the descriptors do not appear to have the correct values, correct them + + if (imagePixelModule.redPaletteColorLookupTableDescriptor[2] !== lutBitsAllocated) { + imagePixelModule.redPaletteColorLookupTableDescriptor[2] = lutBitsAllocated; + imagePixelModule.greenPaletteColorLookupTableDescriptor[2] = lutBitsAllocated; + imagePixelModule.bluePaletteColorLookupTableDescriptor[2] = lutBitsAllocated; + } + + imagePixelModule.redPaletteColorLookupTableData = getLutData(dataSet, 'x00281201', imagePixelModule.redPaletteColorLookupTableDescriptor); + imagePixelModule.greenPaletteColorLookupTableData = getLutData(dataSet, 'x00281202', imagePixelModule.greenPaletteColorLookupTableDescriptor); + imagePixelModule.bluePaletteColorLookupTableData = getLutData(dataSet, 'x00281203', imagePixelModule.bluePaletteColorLookupTableDescriptor); +} + +function populateSmallestLargestPixelValues(dataSet, imagePixelModule) { + var pixelRepresentation = dataSet.uint16('x00280103'); + + if (pixelRepresentation === 0) { + imagePixelModule.smallestPixelValue = dataSet.uint16('x00280106'); + imagePixelModule.largestPixelValue = dataSet.uint16('x00280107'); + } else { + imagePixelModule.smallestPixelValue = dataSet.int16('x00280106'); + imagePixelModule.largestPixelValue = dataSet.int16('x00280107'); + } +} + +function getImagePixelModule(dataSet) { + var imagePixelModule = { + samplesPerPixel: dataSet.uint16('x00280002'), + photometricInterpretation: dataSet.string('x00280004'), + rows: dataSet.uint16('x00280010'), + columns: dataSet.uint16('x00280011'), + bitsAllocated: dataSet.uint16('x00280100'), + bitsStored: dataSet.uint16('x00280101'), + highBit: dataSet.uint16('x00280102'), + pixelRepresentation: dataSet.uint16('x00280103'), + planarConfiguration: dataSet.uint16('x00280006'), + pixelAspectRatio: dataSet.string('x00280034') + }; + populateSmallestLargestPixelValues(dataSet, imagePixelModule); + + if (imagePixelModule.photometricInterpretation === 'PALETTE COLOR' && dataSet.elements.x00281101) { + populatePaletteColorLut(dataSet, imagePixelModule); + } + + return imagePixelModule; +} + +/* harmony default export */ __webpack_exports__["default"] = (getImagePixelModule); + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/getLUTs.js": +/*!*************************************************!*\ + !*** ./imageLoader/wadouri/metaData/getLUTs.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function getLUT(pixelRepresentation, lutDataSet) { + var numLUTEntries = lutDataSet.uint16('x00283002', 0); + + if (numLUTEntries === 0) { + numLUTEntries = 65535; + } + + var firstValueMapped = 0; + + if (pixelRepresentation === 0) { + firstValueMapped = lutDataSet.uint16('x00283002', 1); + } else { + firstValueMapped = lutDataSet.int16('x00283002', 1); + } + + var numBitsPerEntry = lutDataSet.uint16('x00283002', 2); // console.log('LUT(', numLUTEntries, ',', firstValueMapped, ',', numBitsPerEntry, ')'); + + var lut = { + id: '1', + firstValueMapped: firstValueMapped, + numBitsPerEntry: numBitsPerEntry, + lut: [] + }; // console.log("minValue=", minValue, "; maxValue=", maxValue); + + for (var i = 0; i < numLUTEntries; i++) { + if (pixelRepresentation === 0) { + lut.lut[i] = lutDataSet.uint16('x00283006', i); + } else { + lut.lut[i] = lutDataSet.int16('x00283006', i); + } + } + + return lut; +} + +function getLUTs(pixelRepresentation, lutSequence) { + if (!lutSequence || !lutSequence.items || !lutSequence.items.length) { + return; + } + + var luts = []; + + for (var i = 0; i < lutSequence.items.length; i++) { + var lutDataSet = lutSequence.items[i].dataSet; + var lut = getLUT(pixelRepresentation, lutDataSet); + + if (lut) { + luts.push(lut); + } + } + + return luts; +} + +/* harmony default export */ __webpack_exports__["default"] = (getLUTs); + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js": +/*!*********************************************************************************!*\ + !*** ./imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js ***! + \*********************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* eslint no-bitwise: 0 */ +function getMinStoredPixelValue(dataSet) { + var pixelRepresentation = dataSet.uint16('x00280103'); + var bitsStored = dataSet.uint16('x00280101'); + + if (pixelRepresentation === 0) { + return 0; + } + + return -1 << bitsStored - 1; +} // 0 = unsigned / US, 1 = signed / SS + + +function getModalityLUTOutputPixelRepresentation(dataSet) { + // CT SOP Classes are always signed + var sopClassUID = dataSet.string('x00080016'); + + if (sopClassUID === '1.2.840.10008.5.1.4.1.1.2' || sopClassUID === '1.2.840.10008.5.1.4.1.1.2.1') { + return 1; + } // if rescale intercept and rescale slope are present, pass the minimum stored + // pixel value through them to see if we get a signed output range + + + var rescaleIntercept = dataSet.floatString('x00281052'); + var rescaleSlope = dataSet.floatString('x00281053'); + + if (rescaleIntercept !== undefined && rescaleSlope !== undefined) { + var minStoredPixelValue = getMinStoredPixelValue(dataSet); // + + var minModalityLutValue = minStoredPixelValue * rescaleSlope + rescaleIntercept; + + if (minModalityLutValue < 0) { + return 1; + } + + return 0; + } // Output of non linear modality lut is always unsigned + + + if (dataSet.elements.x00283000 && dataSet.elements.x00283000.length > 0) { + return 0; + } // If no modality lut transform, output is same as pixel representation + + + return dataSet.uint16('x00280103'); +} + +/* harmony default export */ __webpack_exports__["default"] = (getModalityLUTOutputPixelRepresentation); + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/getNumberValues.js": +/*!*********************************************************!*\ + !*** ./imageLoader/wadouri/metaData/getNumberValues.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function getNumberValues(dataSet, tag, minimumLength) { + var values = []; + var valueAsString = dataSet.string(tag); + + if (!valueAsString) { + return; + } + + var split = valueAsString.split('\\'); + + if (minimumLength && split.length < minimumLength) { + return; + } + + for (var i = 0; i < split.length; i++) { + values.push(parseFloat(split[i])); + } + + return values; +} + +/* harmony default export */ __webpack_exports__["default"] = (getNumberValues); + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/getOverlayPlaneModule.js": +/*!***************************************************************!*\ + !*** ./imageLoader/wadouri/metaData/getOverlayPlaneModule.js ***! + \***************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return getOverlayPlaneModule; }); +function getOverlayPlaneModule(dataSet) { + var overlays = []; + + for (var overlayGroup = 0x00; overlayGroup <= 0x1E; overlayGroup += 0x02) { + var groupStr = "x60".concat(overlayGroup.toString(16)); + + if (groupStr.length === 4) { + groupStr = "x600".concat(overlayGroup.toString(16)); + } + + var data = dataSet.elements["".concat(groupStr, "3000")]; + + if (!data) { + continue; + } + + var pixelData = []; + + for (var i = 0; i < data.length; i++) { + for (var k = 0; k < 8; k++) { + var byte_as_int = dataSet.byteArray[data.dataOffset + i]; + pixelData[i * 8 + k] = byte_as_int >> k & 1; // eslint-disable-line no-bitwise + } + } + + overlays.push({ + rows: dataSet.uint16("".concat(groupStr, "0010")), + columns: dataSet.uint16("".concat(groupStr, "0011")), + type: dataSet.string("".concat(groupStr, "0040")), + x: dataSet.int16("".concat(groupStr, "0050"), 1) - 1, + y: dataSet.int16("".concat(groupStr, "0050"), 0) - 1, + pixelData: pixelData, + description: dataSet.string("".concat(groupStr, "0022")), + label: dataSet.string("".concat(groupStr, "1500")), + roiArea: dataSet.string("".concat(groupStr, "1301")), + roiMean: dataSet.string("".concat(groupStr, "1302")), + roiStandardDeviation: dataSet.string("".concat(groupStr, "1303")) + }); + } + + return { + overlays: overlays + }; +} + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/index.js": +/*!***********************************************!*\ + !*** ./imageLoader/wadouri/metaData/index.js ***! + \***********************************************/ +/*! exports provided: getImagePixelModule, getLUTs, getModalityLUTOutputPixelRepresentation, getNumberValues, metaDataProvider */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _getImagePixelModule_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getImagePixelModule.js */ "./imageLoader/wadouri/metaData/getImagePixelModule.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getImagePixelModule", function() { return _getImagePixelModule_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }); + +/* harmony import */ var _getLUTs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getLUTs.js */ "./imageLoader/wadouri/metaData/getLUTs.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getLUTs", function() { return _getLUTs_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }); + +/* harmony import */ var _getModalityLUTOutputPixelRepresentation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getModalityLUTOutputPixelRepresentation.js */ "./imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getModalityLUTOutputPixelRepresentation", function() { return _getModalityLUTOutputPixelRepresentation_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }); + +/* harmony import */ var _getNumberValues_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getNumberValues.js */ "./imageLoader/wadouri/metaData/getNumberValues.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getNumberValues", function() { return _getNumberValues_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }); + +/* harmony import */ var _metaDataProvider_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./metaDataProvider.js */ "./imageLoader/wadouri/metaData/metaDataProvider.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "metaDataProvider", function() { return _metaDataProvider_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }); + + + + + + + +/***/ }), + +/***/ "./imageLoader/wadouri/metaData/metaDataProvider.js": +/*!**********************************************************!*\ + !*** ./imageLoader/wadouri/metaData/metaDataProvider.js ***! + \**********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _externalModules_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../externalModules.js */ "./externalModules.js"); +/* harmony import */ var _getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNumberValues.js */ "./imageLoader/wadouri/metaData/getNumberValues.js"); +/* harmony import */ var _parseImageId_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../parseImageId.js */ "./imageLoader/wadouri/parseImageId.js"); +/* harmony import */ var _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dataSetCacheManager.js */ "./imageLoader/wadouri/dataSetCacheManager.js"); +/* harmony import */ var _getImagePixelModule_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getImagePixelModule.js */ "./imageLoader/wadouri/metaData/getImagePixelModule.js"); +/* harmony import */ var _getOverlayPlaneModule_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getOverlayPlaneModule.js */ "./imageLoader/wadouri/metaData/getOverlayPlaneModule.js"); +/* harmony import */ var _getLUTs_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getLUTs.js */ "./imageLoader/wadouri/metaData/getLUTs.js"); +/* harmony import */ var _getModalityLUTOutputPixelRepresentation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getModalityLUTOutputPixelRepresentation.js */ "./imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js"); + + + + + + + + + +function metaDataProvider(type, imageId) { + var dicomParser = _externalModules_js__WEBPACK_IMPORTED_MODULE_0__["default"].dicomParser; + var parsedImageId = Object(_parseImageId_js__WEBPACK_IMPORTED_MODULE_2__["default"])(imageId); + var dataSet = _dataSetCacheManager_js__WEBPACK_IMPORTED_MODULE_3__["default"].get(parsedImageId.url); + + if (!dataSet) { + return; + } + + if (type === 'generalSeriesModule') { + return { + modality: dataSet.string('x00080060'), + seriesInstanceUID: dataSet.string('x0020000e'), + seriesNumber: dataSet.intString('x00200011'), + studyInstanceUID: dataSet.string('x0020000d'), + seriesDate: dicomParser.parseDA(dataSet.string('x00080021')), + seriesTime: dicomParser.parseTM(dataSet.string('x00080031') || '') + }; + } + + if (type === 'patientStudyModule') { + return { + patientAge: dataSet.intString('x00101010'), + patientSize: dataSet.floatString('x00101020'), + patientWeight: dataSet.floatString('x00101030') + }; + } + + if (type === 'imagePlaneModule') { + var imageOrientationPatient = Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(dataSet, 'x00200037', 6); + var imagePositionPatient = Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(dataSet, 'x00200032', 3); + var pixelSpacing = Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(dataSet, 'x00280030', 2); + var columnPixelSpacing = null; + var rowPixelSpacing = null; + + if (pixelSpacing) { + rowPixelSpacing = pixelSpacing[0]; + columnPixelSpacing = pixelSpacing[1]; + } + + var rowCosines = null; + var columnCosines = null; + + if (imageOrientationPatient) { + rowCosines = [parseFloat(imageOrientationPatient[0]), parseFloat(imageOrientationPatient[1]), parseFloat(imageOrientationPatient[2])]; + columnCosines = [parseFloat(imageOrientationPatient[3]), parseFloat(imageOrientationPatient[4]), parseFloat(imageOrientationPatient[5])]; + } + + return { + frameOfReferenceUID: dataSet.string('x00200052'), + rows: dataSet.uint16('x00280010'), + columns: dataSet.uint16('x00280011'), + imageOrientationPatient: imageOrientationPatient, + rowCosines: rowCosines, + columnCosines: columnCosines, + imagePositionPatient: imagePositionPatient, + sliceThickness: dataSet.floatString('x00180050'), + sliceLocation: dataSet.floatString('x00201041'), + pixelSpacing: pixelSpacing, + rowPixelSpacing: rowPixelSpacing, + columnPixelSpacing: columnPixelSpacing + }; + } + + if (type === 'imagePixelModule') { + return Object(_getImagePixelModule_js__WEBPACK_IMPORTED_MODULE_4__["default"])(dataSet); + } + + if (type === 'modalityLutModule') { + return { + rescaleIntercept: dataSet.floatString('x00281052'), + rescaleSlope: dataSet.floatString('x00281053'), + rescaleType: dataSet.string('x00281054'), + modalityLUTSequence: Object(_getLUTs_js__WEBPACK_IMPORTED_MODULE_6__["default"])(dataSet.uint16('x00280103'), dataSet.elements.x00283000) + }; + } + + if (type === 'voiLutModule') { + var modalityLUTOutputPixelRepresentation = Object(_getModalityLUTOutputPixelRepresentation_js__WEBPACK_IMPORTED_MODULE_7__["default"])(dataSet); + return { + windowCenter: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(dataSet, 'x00281050', 1), + windowWidth: Object(_getNumberValues_js__WEBPACK_IMPORTED_MODULE_1__["default"])(dataSet, 'x00281051', 1), + voiLUTSequence: Object(_getLUTs_js__WEBPACK_IMPORTED_MODULE_6__["default"])(modalityLUTOutputPixelRepresentation, dataSet.elements.x00283010) + }; + } + + if (type === 'sopCommonModule') { + return { + sopClassUID: dataSet.string('x00080016'), + sopInstanceUID: dataSet.string('x00080018') + }; + } + + if (type === 'petIsotopeModule') { + var radiopharmaceuticalInfo = dataSet.elements.x00540016; + + if (radiopharmaceuticalInfo === undefined) { + return; + } + + var firstRadiopharmaceuticalInfoDataSet = radiopharmaceuticalInfo.items[0].dataSet; + return { + radiopharmaceuticalInfo: { + radiopharmaceuticalStartTime: dicomParser.parseTM(firstRadiopharmaceuticalInfoDataSet.string('x00181072') || ''), + radionuclideTotalDose: firstRadiopharmaceuticalInfoDataSet.floatString('x00181074'), + radionuclideHalfLife: firstRadiopharmaceuticalInfoDataSet.floatString('x00181075') + } + }; + } + + if (type === 'overlayPlaneModule') { + return Object(_getOverlayPlaneModule_js__WEBPACK_IMPORTED_MODULE_5__["default"])(dataSet); + } +} + +/* harmony default export */ __webpack_exports__["default"] = (metaDataProvider); + +/***/ }), + +/***/ "./imageLoader/wadouri/parseImageId.js": +/*!*********************************************!*\ + !*** ./imageLoader/wadouri/parseImageId.js ***! + \*********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function parseImageId(imageId) { + // build a url by parsing out the url scheme and frame index from the imageId + var firstColonIndex = imageId.indexOf(':'); + var url = imageId.substring(firstColonIndex + 1); + var frameIndex = url.indexOf('frame='); + var frame; + + if (frameIndex !== -1) { + var frameStr = url.substr(frameIndex + 6); + frame = parseInt(frameStr, 10); + url = url.substr(0, frameIndex - 1); + } + + return { + scheme: imageId.substr(0, firstColonIndex), + url: url, + frame: frame + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (parseImageId); + +/***/ }), + +/***/ "./imageLoader/wadouri/register.js": +/*!*****************************************!*\ + !*** ./imageLoader/wadouri/register.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _loadImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loadImage.js */ "./imageLoader/wadouri/loadImage.js"); +/* harmony import */ var _metaData_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./metaData/index.js */ "./imageLoader/wadouri/metaData/index.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (function (cornerstone) { + // register dicomweb and wadouri image loader prefixes + cornerstone.registerImageLoader('dicomweb', _loadImage_js__WEBPACK_IMPORTED_MODULE_0__["loadImage"]); + cornerstone.registerImageLoader('wadouri', _loadImage_js__WEBPACK_IMPORTED_MODULE_0__["loadImage"]); + cornerstone.registerImageLoader('dicomfile', _loadImage_js__WEBPACK_IMPORTED_MODULE_0__["loadImage"]); // add wadouri metadata provider + + cornerstone.metaData.addProvider(_metaData_index_js__WEBPACK_IMPORTED_MODULE_1__["metaDataProvider"]); +}); + +/***/ }), + +/***/ "./imageLoader/wadouri/unpackBinaryFrame.js": +/*!**************************************************!*\ + !*** ./imageLoader/wadouri/unpackBinaryFrame.js ***! + \**************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* eslint no-bitwise: 0 */ +function isBitSet(_byte, bitPos) { + return _byte & 1 << bitPos; +} +/** + * Function to deal with unpacking a binary frame + */ + + +function unpackBinaryFrame(byteArray, frameOffset, pixelsPerFrame) { + // Create a new pixel array given the image size + var pixelData = new Uint8Array(pixelsPerFrame); + + for (var i = 0; i < pixelsPerFrame; i++) { + // Compute byte position + var bytePos = Math.floor(i / 8); // Get the current byte + + var _byte2 = byteArray[bytePos + frameOffset]; // Bit position (0-7) within byte + + var bitPos = i % 8; // Check whether bit at bitpos is set + + pixelData[i] = isBitSet(_byte2, bitPos) ? 1 : 0; + } + + return pixelData; +} + +/* harmony default export */ __webpack_exports__["default"] = (unpackBinaryFrame); + +/***/ }), + +/***/ "./imageLoader/webWorkerManager.js": +/*!*****************************************!*\ + !*** ./imageLoader/webWorkerManager.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _webWorker_index_worker_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../webWorker/index.worker.js */ "./webWorker/index.worker.js"); +/* harmony import */ var _webWorker_index_worker_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_webWorker_index_worker_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _internal_options_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/options.js */ "./imageLoader/internal/options.js"); + + // the taskId to assign to the next task added via addTask() + +var nextTaskId = 0; // array of queued tasks sorted with highest priority task first + +var tasks = []; // array of web workers to dispatch decode tasks to + +var webWorkers = []; // The options for CornerstoneWADOImageLoader + +var options = Object(_internal_options_js__WEBPACK_IMPORTED_MODULE_1__["getOptions"])(); +var defaultConfig = { + maxWebWorkers: navigator.hardwareConcurrency || 1, + startWebWorkersOnDemand: true, + webWorkerTaskPaths: [], + taskConfiguration: { + decodeTask: { + initializeCodecsOnStartup: false, + usePDFJS: false, + strict: options.strict + } + } +}; +var config; +var statistics = { + maxWebWorkers: 0, + numWebWorkers: 0, + numTasksQueued: 0, + numTasksExecuting: 0, + numTasksCompleted: 0, + totalTaskTimeInMS: 0, + totalTimeDelayedInMS: 0 +}; +/** + * Function to start a task on a web worker + */ + +function startTaskOnWebWorker() { + // return immediately if no decode tasks to do + if (!tasks.length) { + return; + } // look for a web worker that is ready + + + for (var i = 0; i < webWorkers.length; i++) { + if (webWorkers[i].status === 'ready') { + // mark it as busy so tasks are not assigned to it + webWorkers[i].status = 'busy'; // get the highest priority task + + var task = tasks.shift(); + task.start = new Date().getTime(); // update stats with how long this task was delayed (waiting in queue) + + var end = new Date().getTime(); + statistics.totalTimeDelayedInMS += end - task.added; // assign this task to this web worker and send the web worker + // a message to execute it + + webWorkers[i].task = task; + webWorkers[i].worker.postMessage({ + taskType: task.taskType, + workerIndex: i, + data: task.data + }, task.transferList); + statistics.numTasksExecuting++; + return; + } + } // if no available web workers and we haven't started max web workers, start a new one + + + if (webWorkers.length < config.maxWebWorkers) { + spawnWebWorker(); + } +} +/** + * Function to handle a message from a web worker + * @param msg + */ + + +function handleMessageFromWorker(msg) { + // console.log('handleMessageFromWorker', msg.data); + if (msg.data.taskType === 'initialize') { + webWorkers[msg.data.workerIndex].status = 'ready'; + startTaskOnWebWorker(); + } else { + var start = webWorkers[msg.data.workerIndex].task.start; + var action = msg.data.status === 'success' ? 'resolve' : 'reject'; + webWorkers[msg.data.workerIndex].task.deferred[action](msg.data.result); + webWorkers[msg.data.workerIndex].task = undefined; + statistics.numTasksExecuting--; + webWorkers[msg.data.workerIndex].status = 'ready'; + statistics.numTasksCompleted++; + var end = new Date().getTime(); + statistics.totalTaskTimeInMS += end - start; + startTaskOnWebWorker(); + } +} +/** + * Spawns a new web worker + */ + + +function spawnWebWorker() { + // prevent exceeding maxWebWorkers + if (webWorkers.length >= config.maxWebWorkers) { + return; + } // spawn the webworker + + + var worker = new _webWorker_index_worker_js__WEBPACK_IMPORTED_MODULE_0___default.a(); + webWorkers.push({ + worker: worker, + status: 'initializing' + }); + worker.addEventListener('message', handleMessageFromWorker); + worker.postMessage({ + taskType: 'initialize', + workerIndex: webWorkers.length - 1, + config: config + }); +} +/** + * Initialization function for the web worker manager - spawns web workers + * @param configObject + */ + + +function initialize(configObject) { + configObject = configObject || defaultConfig; // prevent being initialized more than once + + if (config) { + throw new Error('WebWorkerManager already initialized'); + } + + config = configObject; + config.maxWebWorkers = config.maxWebWorkers || navigator.hardwareConcurrency || 1; // Spawn new web workers + + if (!config.startWebWorkersOnDemand) { + for (var i = 0; i < config.maxWebWorkers; i++) { + spawnWebWorker(); + } + } +} +/** + * Terminate all running web workers. + */ + + +function terminate() { + for (var i = 0; i < webWorkers.length; i++) { + webWorkers[i].worker.terminate(); + } + + webWorkers.length = 0; + config = undefined; +} +/** + * dynamically loads a web worker task + * @param sourcePath + * @param taskConfig + */ + + +function loadWebWorkerTask(sourcePath, taskConfig) { + // add it to the list of web worker tasks paths so on demand web workers + // load this properly + config.webWorkerTaskPaths.push(sourcePath); // if a task specific configuration is provided, merge it into the config + + if (taskConfig) { + config.taskConfiguration = Object.assign(config.taskConfiguration, taskConfig); + } // tell each spawned web worker to load this task + + + for (var i = 0; i < webWorkers.length; i++) { + webWorkers[i].worker.postMessage({ + taskType: 'loadWebWorkerTask', + workerIndex: webWorkers.length - 1, + sourcePath: sourcePath, + config: config + }); + } +} +/** + * Function to add a decode task to be performed + * + * @param taskType - the taskType for this task + * @param data - data specific to the task + * @param priority - optional priority of the task (defaults to 0), > 0 is higher, < 0 is lower + * @param transferList - optional array of data to transfer to web worker + * @returns {*} + */ + + +function addTask(taskType, data) { + var priority = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; + var transferList = arguments.length > 3 ? arguments[3] : undefined; + + if (!config) { + initialize(); + } + + var deferred = {}; + var promise = new Promise(function (resolve, reject) { + deferred = { + resolve: resolve, + reject: reject + }; + }); // find the right spot to insert this decode task (based on priority) + + var i; + + for (i = 0; i < tasks.length; i++) { + if (tasks[i].priority < priority) { + break; + } + } + + var taskId = nextTaskId++; // insert the decode task at position i + + tasks.splice(i, 0, { + taskId: taskId, + taskType: taskType, + status: 'ready', + added: new Date().getTime(), + data: data, + deferred: deferred, + priority: priority, + transferList: transferList + }); // try to start a task on the web worker since we just added a new task and a web worker may be available + + startTaskOnWebWorker(); + return { + taskId: taskId, + promise: promise + }; +} +/** + * Changes the priority of a queued task + * @param taskId - the taskId to change the priority of + * @param priority - priority of the task (defaults to 0), > 0 is higher, < 0 is lower + * @returns boolean - true on success, false if taskId not found + */ + + +function setTaskPriority(taskId) { + var priority = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + + // search for this taskId + for (var i = 0; i < tasks.length; i++) { + if (tasks[i].taskId === taskId) { + // taskId found, remove it + var task = tasks.splice(i, 1)[0]; // set its priority + + task.priority = priority; // find the right spot to insert this decode task (based on priority) + + for (i = 0; i < tasks.length; i++) { + if (tasks[i].priority < priority) { + break; + } + } // insert the decode task at position i + + + tasks.splice(i, 0, task); + return true; + } + } + + return false; +} +/** + * Cancels a queued task and rejects + * @param taskId - the taskId to cancel + * @param reason - optional reason the task was rejected + * @returns boolean - true on success, false if taskId not found + */ + + +function cancelTask(taskId, reason) { + // search for this taskId + for (var i = 0; i < tasks.length; i++) { + if (tasks[i].taskId === taskId) { + // taskId found, remove it + var task = tasks.splice(i, 1); + task.deferred.reject(reason); + return true; + } + } + + return false; +} +/** + * Function to return the statistics on running web workers + * @returns object containing statistics + */ + + +function getStatistics() { + statistics.maxWebWorkers = config.maxWebWorkers; + statistics.numWebWorkers = webWorkers.length; + statistics.numTasksQueued = tasks.length; + return statistics; +} + +/* harmony default export */ __webpack_exports__["default"] = ({ + initialize: initialize, + loadWebWorkerTask: loadWebWorkerTask, + addTask: addTask, + getStatistics: getStatistics, + setTaskPriority: setTaskPriority, + cancelTask: cancelTask, + webWorkers: webWorkers, + terminate: terminate +}); + +/***/ }), + +/***/ "./shared/calculateMinMax.js": +/*!***********************************!*\ + !*** ./shared/calculateMinMax.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return calculateMinMax; }); +/* harmony import */ var _getMinMax_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getMinMax.js */ "./shared/getMinMax.js"); + +/** + * Check the minimum and maximum values in the imageFrame pixel data + * match with the provided smallestPixelValue and largestPixelValue metaData. + * + * If 'strict' is true, log to the console a warning if these values do not match. + * Otherwise, correct them automatically. + * + * @param {Object} imageFrame + * @param {Boolean} strict If 'strict' is true, log to the console a warning if these values do not match. + * Otherwise, correct them automatically.Default is true. + */ + +function calculateMinMax(imageFrame) { + var strict = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var minMax = Object(_getMinMax_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageFrame.pixelData); + var mustAssign = !(isNumber(imageFrame.smallestPixelValue) && isNumber(imageFrame.largestPixelValue)); + + if (strict === true && !mustAssign) { + if (imageFrame.smallestPixelValue !== minMax.min) { + console.warn('Image smallestPixelValue tag is incorrect. Rendering performance will suffer considerably.'); + } + + if (imageFrame.largestPixelValue !== minMax.max) { + console.warn('Image largestPixelValue tag is incorrect. Rendering performance will suffer considerably.'); + } + } else { + imageFrame.smallestPixelValue = minMax.min; + imageFrame.largestPixelValue = minMax.max; + } +} + +function isNumber(numValue) { + return typeof numValue === 'number'; +} + +/***/ }), + +/***/ "./shared/decodeImageFrame.js": +/*!************************************!*\ + !*** ./shared/decodeImageFrame.js ***! + \************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decoders/decodeLittleEndian.js */ "./shared/decoders/decodeLittleEndian.js"); +/* harmony import */ var _decoders_decodeBigEndian_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./decoders/decodeBigEndian.js */ "./shared/decoders/decodeBigEndian.js"); +/* harmony import */ var _decoders_decodeRLE_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decoders/decodeRLE.js */ "./shared/decoders/decodeRLE.js"); +/* harmony import */ var _decoders_decodeJPEGBaseline_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./decoders/decodeJPEGBaseline.js */ "./shared/decoders/decodeJPEGBaseline.js"); +/* harmony import */ var _decoders_decodeJPEGLossless_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./decoders/decodeJPEGLossless.js */ "./shared/decoders/decodeJPEGLossless.js"); +/* harmony import */ var _decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./decoders/decodeJPEGLS.js */ "./shared/decoders/decodeJPEGLS.js"); +/* harmony import */ var _decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./decoders/decodeJPEG2000.js */ "./shared/decoders/decodeJPEG2000.js"); + + + + + + + + +function decodeImageFrame(imageFrame, transferSyntax, pixelData, decodeConfig, options) { + var start = new Date().getTime(); + + if (transferSyntax === '1.2.840.10008.1.2') { + // Implicit VR Little Endian + imageFrame = Object(_decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.1') { + // Explicit VR Little Endian + imageFrame = Object(_decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.2') { + // Explicit VR Big Endian (retired) + imageFrame = Object(_decoders_decodeBigEndian_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.1.99') { + // Deflate transfer syntax (deflated by dicomParser) + imageFrame = Object(_decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.5') { + // RLE Lossless + imageFrame = Object(_decoders_decodeRLE_js__WEBPACK_IMPORTED_MODULE_2__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.50') { + // JPEG Baseline lossy process 1 (8 bit) + imageFrame = Object(_decoders_decodeJPEGBaseline_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.51') { + // JPEG Baseline lossy process 2 & 4 (12 bit) + imageFrame = Object(_decoders_decodeJPEGBaseline_js__WEBPACK_IMPORTED_MODULE_3__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.57') { + // JPEG Lossless, Nonhierarchical (Processes 14) + imageFrame = Object(_decoders_decodeJPEGLossless_js__WEBPACK_IMPORTED_MODULE_4__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.70') { + // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1]) + imageFrame = Object(_decoders_decodeJPEGLossless_js__WEBPACK_IMPORTED_MODULE_4__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.80') { + // JPEG-LS Lossless Image Compression + imageFrame = Object(_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_5__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.81') { + // JPEG-LS Lossy (Near-Lossless) Image Compression + imageFrame = Object(_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_5__["default"])(imageFrame, pixelData); + } else if (transferSyntax === '1.2.840.10008.1.2.4.90') { + // JPEG 2000 Lossless + imageFrame = Object(_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_6__["default"])(imageFrame, pixelData, decodeConfig, options); + } else if (transferSyntax === '1.2.840.10008.1.2.4.91') { + // JPEG 2000 Lossy + imageFrame = Object(_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_6__["default"])(imageFrame, pixelData, decodeConfig, options); + } else { + throw new Error("no decoder for transfer syntax ".concat(transferSyntax)); + } + /* Don't know if these work... + // JPEG 2000 Part 2 Multicomponent Image Compression (Lossless Only) + else if(transferSyntax === "1.2.840.10008.1.2.4.92") + { + return decodeJPEG2000(dataSet, frame); + } + // JPEG 2000 Part 2 Multicomponent Image Compression + else if(transferSyntax === "1.2.840.10008.1.2.4.93") + { + return decodeJPEG2000(dataSet, frame); + } + */ + + + var shouldShift = imageFrame.pixelRepresentation !== undefined && imageFrame.pixelRepresentation === 1; + var shift = shouldShift && imageFrame.bitsStored !== undefined ? 32 - imageFrame.bitsStored : undefined; + + if (shouldShift && shift !== undefined) { + for (var i = 0; i < imageFrame.pixelData.length; i++) { + // eslint-disable-next-line no-bitwise + imageFrame.pixelData[i] = imageFrame.pixelData[i] << shift >> shift; + } + } + + var end = new Date().getTime(); + imageFrame.decodeTimeInMS = end - start; + return imageFrame; +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeImageFrame); + +/***/ }), + +/***/ "./shared/decoders/decodeBigEndian.js": +/*!********************************************!*\ + !*** ./shared/decoders/decodeBigEndian.js ***! + \********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* eslint no-bitwise: 0 */ +function swap16(val) { + return (val & 0xFF) << 8 | val >> 8 & 0xFF; +} + +function decodeBigEndian(imageFrame, pixelData) { + if (imageFrame.bitsAllocated === 16) { + var arrayBuffer = pixelData.buffer; + var offset = pixelData.byteOffset; + var length = pixelData.length; // if pixel data is not aligned on even boundary, shift it so we can create the 16 bit array + // buffers on it + + if (offset % 2) { + arrayBuffer = arrayBuffer.slice(offset); + offset = 0; + } + + if (imageFrame.pixelRepresentation === 0) { + imageFrame.pixelData = new Uint16Array(arrayBuffer, offset, length / 2); + } else { + imageFrame.pixelData = new Int16Array(arrayBuffer, offset, length / 2); + } // Do the byte swap + + + for (var i = 0; i < imageFrame.pixelData.length; i++) { + imageFrame.pixelData[i] = swap16(imageFrame.pixelData[i]); + } + } else if (imageFrame.bitsAllocated === 8) { + imageFrame.pixelData = pixelData; + } + + return imageFrame; +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeBigEndian); + +/***/ }), + +/***/ "./shared/decoders/decodeJPEG2000.js": +/*!*******************************************!*\ + !*** ./shared/decoders/decodeJPEG2000.js ***! + \*******************************************/ +/*! exports provided: default, initializeJPEG2000 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initializeJPEG2000", function() { return initializeJPEG2000; }); +/* harmony import */ var _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/openJPEG-FixedMemory.js */ "../codecs/openJPEG-FixedMemory.js"); +/* harmony import */ var _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../codecs/jpx.min.js */ "../codecs/jpx.min.js"); +/* harmony import */ var _codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1__); + + + +function decodeJpx(imageFrame, pixelData) { + var jpxImage = new _codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1___default.a(); + jpxImage.parse(pixelData); + var tileCount = jpxImage.tiles.length; + + if (tileCount !== 1) { + throw new Error("JPEG2000 decoder returned a tileCount of ".concat(tileCount, ", when 1 is expected")); + } + + imageFrame.columns = jpxImage.width; + imageFrame.rows = jpxImage.height; + imageFrame.pixelData = jpxImage.tiles[0].items; + return imageFrame; +} + +var openJPEG; + +function decodeOpenJPEG(data, bytesPerPixel, signed) { + var dataPtr = openJPEG._malloc(data.length); + + openJPEG.writeArrayToMemory(data, dataPtr); // create param outpout + + var imagePtrPtr = openJPEG._malloc(4); + + var imageSizePtr = openJPEG._malloc(4); + + var imageSizeXPtr = openJPEG._malloc(4); + + var imageSizeYPtr = openJPEG._malloc(4); + + var imageSizeCompPtr = openJPEG._malloc(4); + + var t0 = new Date().getTime(); + var ret = openJPEG.ccall('jp2_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, data.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]); // add num vomp..etc + + if (ret !== 0) { + console.log('[opj_decode] decoding failed!'); + + openJPEG._free(dataPtr); + + openJPEG._free(openJPEG.getValue(imagePtrPtr, '*')); + + openJPEG._free(imageSizeXPtr); + + openJPEG._free(imageSizeYPtr); + + openJPEG._free(imageSizePtr); + + openJPEG._free(imageSizeCompPtr); + + return; + } + + var imagePtr = openJPEG.getValue(imagePtrPtr, '*'); + var image = { + length: openJPEG.getValue(imageSizePtr, 'i32'), + sx: openJPEG.getValue(imageSizeXPtr, 'i32'), + sy: openJPEG.getValue(imageSizeYPtr, 'i32'), + nbChannels: openJPEG.getValue(imageSizeCompPtr, 'i32'), + // hard coded for now + perf_timetodecode: undefined, + pixelData: undefined + }; // Copy the data from the EMSCRIPTEN heap into the correct type array + + var length = image.sx * image.sy * image.nbChannels; + var src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length); + + if (bytesPerPixel === 1) { + if (Uint8Array.from) { + image.pixelData = Uint8Array.from(src32); + } else { + image.pixelData = new Uint8Array(length); + + for (var i = 0; i < length; i++) { + image.pixelData[i] = src32[i]; + } + } + } else if (signed) { + if (Int16Array.from) { + image.pixelData = Int16Array.from(src32); + } else { + image.pixelData = new Int16Array(length); + + for (var _i = 0; _i < length; _i++) { + image.pixelData[_i] = src32[_i]; + } + } + } else if (Uint16Array.from) { + image.pixelData = Uint16Array.from(src32); + } else { + image.pixelData = new Uint16Array(length); + + for (var _i2 = 0; _i2 < length; _i2++) { + image.pixelData[_i2] = src32[_i2]; + } + } + + var t1 = new Date().getTime(); + image.perf_timetodecode = t1 - t0; // free + + openJPEG._free(dataPtr); + + openJPEG._free(imagePtrPtr); + + openJPEG._free(imagePtr); + + openJPEG._free(imageSizePtr); + + openJPEG._free(imageSizeXPtr); + + openJPEG._free(imageSizeYPtr); + + openJPEG._free(imageSizeCompPtr); + + return image; +} + +function decodeOpenJpeg2000(imageFrame, pixelData) { + var bytesPerPixel = imageFrame.bitsAllocated <= 8 ? 1 : 2; + var signed = imageFrame.pixelRepresentation === 1; + var image = decodeOpenJPEG(pixelData, bytesPerPixel, signed); + imageFrame.columns = image.sx; + imageFrame.rows = image.sy; + imageFrame.pixelData = image.pixelData; + + if (image.nbChannels > 1) { + imageFrame.photometricInterpretation = 'RGB'; + } + + return imageFrame; +} + +function initializeJPEG2000(decodeConfig) { + // check to make sure codec is loaded + if (!decodeConfig.usePDFJS) { + if (typeof _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') { + throw new Error('OpenJPEG decoder not loaded'); + } + } + + if (!openJPEG) { + openJPEG = _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0___default()(); + + if (!openJPEG || !openJPEG._jp2_decode) { + throw new Error('OpenJPEG failed to initialize'); + } + } +} + +function decodeJPEG2000(imageFrame, pixelData, decodeConfig) { + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; + initializeJPEG2000(decodeConfig); + + if (options.usePDFJS || decodeConfig.usePDFJS) { + // OHIF image-JPEG2000 https://github.com/OHIF/image-JPEG2000 + // console.log('PDFJS') + return decodeJpx(imageFrame, pixelData); + } // OpenJPEG2000 https://github.com/jpambrun/openjpeg + // console.log('OpenJPEG') + + + return decodeOpenJpeg2000(imageFrame, pixelData); +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeJPEG2000); + + +/***/ }), + +/***/ "./shared/decoders/decodeJPEGBaseline.js": +/*!***********************************************!*\ + !*** ./shared/decoders/decodeJPEGBaseline.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/jpeg.js */ "../codecs/jpeg.js"); +/* harmony import */ var _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0__); + + +function decodeJPEGBaseline(imageFrame, pixelData) { + // check to make sure codec is loaded + if (typeof _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') { + throw new Error('No JPEG Baseline decoder loaded'); + } + + var jpeg = new _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0___default.a(); + jpeg.parse(pixelData); // Do not use the internal jpeg.js color transformation, + // since we will handle this afterwards + + jpeg.colorTransform = false; + + if (imageFrame.bitsAllocated === 8) { + imageFrame.pixelData = jpeg.getData(imageFrame.columns, imageFrame.rows); + return imageFrame; + } else if (imageFrame.bitsAllocated === 16) { + imageFrame.pixelData = jpeg.getData16(imageFrame.columns, imageFrame.rows); + return imageFrame; + } +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeJPEGBaseline); + +/***/ }), + +/***/ "./shared/decoders/decodeJPEGLS.js": +/*!*****************************************!*\ + !*** ./shared/decoders/decodeJPEGLS.js ***! + \*****************************************/ +/*! exports provided: default, initializeJPEGLS */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initializeJPEGLS", function() { return initializeJPEGLS; }); +/* harmony import */ var _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/charLS-FixedMemory-browser.js */ "../codecs/charLS-FixedMemory-browser.js"); +/* harmony import */ var _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0__); + +var charLS; + +function jpegLSDecode(data, isSigned) { + // prepare input parameters + var dataPtr = charLS._malloc(data.length); + + charLS.writeArrayToMemory(data, dataPtr); // prepare output parameters + + var imagePtrPtr = charLS._malloc(4); + + var imageSizePtr = charLS._malloc(4); + + var widthPtr = charLS._malloc(4); + + var heightPtr = charLS._malloc(4); + + var bitsPerSamplePtr = charLS._malloc(4); + + var stridePtr = charLS._malloc(4); + + var allowedLossyErrorPtr = charLS._malloc(4); + + var componentsPtr = charLS._malloc(4); + + var interleaveModePtr = charLS._malloc(4); // Decode the image + + + var result = charLS.ccall('jpegls_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, data.length, imagePtrPtr, imageSizePtr, widthPtr, heightPtr, bitsPerSamplePtr, stridePtr, componentsPtr, allowedLossyErrorPtr, interleaveModePtr]); // Extract result values into object + + var image = { + result: result, + width: charLS.getValue(widthPtr, 'i32'), + height: charLS.getValue(heightPtr, 'i32'), + bitsPerSample: charLS.getValue(bitsPerSamplePtr, 'i32'), + stride: charLS.getValue(stridePtr, 'i32'), + components: charLS.getValue(componentsPtr, 'i32'), + allowedLossyError: charLS.getValue(allowedLossyErrorPtr, 'i32'), + interleaveMode: charLS.getValue(interleaveModePtr, 'i32'), + pixelData: undefined + }; // Copy image from emscripten heap into appropriate array buffer type + + var imagePtr = charLS.getValue(imagePtrPtr, '*'); + + if (image.bitsPerSample <= 8) { + image.pixelData = new Uint8Array(image.width * image.height * image.components); + image.pixelData.set(new Uint8Array(charLS.HEAP8.buffer, imagePtr, image.pixelData.length)); + } else if (isSigned) { + image.pixelData = new Int16Array(image.width * image.height * image.components); + image.pixelData.set(new Int16Array(charLS.HEAP16.buffer, imagePtr, image.pixelData.length)); + } else { + image.pixelData = new Uint16Array(image.width * image.height * image.components); + image.pixelData.set(new Uint16Array(charLS.HEAP16.buffer, imagePtr, image.pixelData.length)); + } // free memory and return image object + + + charLS._free(dataPtr); + + charLS._free(imagePtr); + + charLS._free(imagePtrPtr); + + charLS._free(imageSizePtr); + + charLS._free(widthPtr); + + charLS._free(heightPtr); + + charLS._free(bitsPerSamplePtr); + + charLS._free(stridePtr); + + charLS._free(componentsPtr); + + charLS._free(interleaveModePtr); + + return image; +} + +function initializeJPEGLS() { + // check to make sure codec is loaded + if (typeof _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') { + throw new Error('No JPEG-LS decoder loaded'); + } // Try to initialize CharLS + // CharLS https://github.com/cornerstonejs/charls + + + if (!charLS) { + charLS = _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0___default()(); + + if (!charLS || !charLS._jpegls_decode) { + throw new Error('JPEG-LS failed to initialize'); + } + } +} + +function decodeJPEGLS(imageFrame, pixelData) { + initializeJPEGLS(); + var image = jpegLSDecode(pixelData, imageFrame.pixelRepresentation === 1); // throw error if not success or too much data + + if (image.result !== 0 && image.result !== 6) { + throw new Error("JPEG-LS decoder failed to decode frame (error code ".concat(image.result, ")")); + } + + imageFrame.columns = image.width; + imageFrame.rows = image.height; + imageFrame.pixelData = image.pixelData; + return imageFrame; +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeJPEGLS); + + +/***/ }), + +/***/ "./shared/decoders/decodeJPEGLossless.js": +/*!***********************************************!*\ + !*** ./shared/decoders/decodeJPEGLossless.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/jpegLossless.js */ "../codecs/jpegLossless.js"); +/* harmony import */ var _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0__); + + +function decodeJPEGLossless(imageFrame, pixelData) { + // check to make sure codec is loaded + if (typeof _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined' || typeof _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a.lossless === 'undefined' || typeof _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a.lossless.Decoder === 'undefined') { + throw new Error('No JPEG Lossless decoder loaded'); + } + + var byteOutput = imageFrame.bitsAllocated <= 8 ? 1 : 2; // console.time('jpeglossless'); + + var buffer = pixelData.buffer; + var decoder = new _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a.lossless.Decoder(); + var decompressedData = decoder.decode(buffer, pixelData.byteOffset, pixelData.length, byteOutput); // console.timeEnd('jpeglossless'); + + if (imageFrame.pixelRepresentation === 0) { + if (imageFrame.bitsAllocated === 16) { + imageFrame.pixelData = new Uint16Array(decompressedData.buffer); + return imageFrame; + } // untested! + + + imageFrame.pixelData = new Uint8Array(decompressedData.buffer); + return imageFrame; + } + + imageFrame.pixelData = new Int16Array(decompressedData.buffer); + return imageFrame; +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeJPEGLossless); + +/***/ }), + +/***/ "./shared/decoders/decodeLittleEndian.js": +/*!***********************************************!*\ + !*** ./shared/decoders/decodeLittleEndian.js ***! + \***********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function decodeLittleEndian(imageFrame, pixelData) { + var arrayBuffer = pixelData.buffer; + var offset = pixelData.byteOffset; + var length = pixelData.length; + + if (imageFrame.bitsAllocated === 16) { + // if pixel data is not aligned on even boundary, shift it so we can create the 16 bit array + // buffers on it + if (offset % 2) { + arrayBuffer = arrayBuffer.slice(offset); + offset = 0; + } + + if (imageFrame.pixelRepresentation === 0) { + imageFrame.pixelData = new Uint16Array(arrayBuffer, offset, length / 2); + } else { + imageFrame.pixelData = new Int16Array(arrayBuffer, offset, length / 2); + } + } else if (imageFrame.bitsAllocated === 8 || imageFrame.bitsAllocated === 1) { + imageFrame.pixelData = pixelData; + } else if (imageFrame.bitsAllocated === 32) { + // if pixel data is not aligned on even boundary, shift it + if (offset % 2) { + arrayBuffer = arrayBuffer.slice(offset); + offset = 0; + } + + imageFrame.pixelData = new Float32Array(arrayBuffer, offset, length / 4); + } + + return imageFrame; +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeLittleEndian); + +/***/ }), + +/***/ "./shared/decoders/decodeRLE.js": +/*!**************************************!*\ + !*** ./shared/decoders/decodeRLE.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +function decodeRLE(imageFrame, pixelData) { + if (imageFrame.bitsAllocated === 8) { + if (imageFrame.planarConfiguration) { + return decode8Planar(imageFrame, pixelData); + } + + return decode8(imageFrame, pixelData); + } else if (imageFrame.bitsAllocated === 16) { + return decode16(imageFrame, pixelData); + } + + throw new Error('unsupported pixel format for RLE'); +} + +function decode8(imageFrame, pixelData) { + var frameData = pixelData; + var frameSize = imageFrame.rows * imageFrame.columns; + var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); + var header = new DataView(frameData.buffer, frameData.byteOffset); + var data = new Int8Array(frameData.buffer, frameData.byteOffset); + var out = new Int8Array(outFrame); + var outIndex = 0; + var numSegments = header.getInt32(0, true); + + for (var s = 0; s < numSegments; ++s) { + outIndex = s; + var inIndex = header.getInt32((s + 1) * 4, true); + var maxIndex = header.getInt32((s + 2) * 4, true); + + if (maxIndex === 0) { + maxIndex = frameData.length; + } + + var endOfSegment = frameSize * numSegments; + + while (inIndex < maxIndex) { + var n = data[inIndex++]; + + if (n >= 0 && n <= 127) { + // copy n bytes + for (var i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { + out[outIndex] = data[inIndex++]; + outIndex += imageFrame.samplesPerPixel; + } + } else if (n <= -1 && n >= -127) { + var value = data[inIndex++]; // run of n bytes + + for (var j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { + out[outIndex] = value; + outIndex += imageFrame.samplesPerPixel; + } + } + /* else if (n === -128) { + } // do nothing */ + + } + } + + imageFrame.pixelData = new Uint8Array(outFrame); + return imageFrame; +} + +function decode8Planar(imageFrame, pixelData) { + var frameData = pixelData; + var frameSize = imageFrame.rows * imageFrame.columns; + var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel); + var header = new DataView(frameData.buffer, frameData.byteOffset); + var data = new Int8Array(frameData.buffer, frameData.byteOffset); + var out = new Int8Array(outFrame); + var outIndex = 0; + var numSegments = header.getInt32(0, true); + + for (var s = 0; s < numSegments; ++s) { + outIndex = s * frameSize; + var inIndex = header.getInt32((s + 1) * 4, true); + var maxIndex = header.getInt32((s + 2) * 4, true); + + if (maxIndex === 0) { + maxIndex = frameData.length; + } + + var endOfSegment = frameSize * numSegments; + + while (inIndex < maxIndex) { + var n = data[inIndex++]; + + if (n >= 0 && n <= 127) { + // copy n bytes + for (var i = 0; i < n + 1 && outIndex < endOfSegment; ++i) { + out[outIndex] = data[inIndex++]; + outIndex++; + } + } else if (n <= -1 && n >= -127) { + var value = data[inIndex++]; // run of n bytes + + for (var j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) { + out[outIndex] = value; + outIndex++; + } + } + /* else if (n === -128) { + } // do nothing */ + + } + } + + imageFrame.pixelData = new Uint8Array(outFrame); + return imageFrame; +} + +function decode16(imageFrame, pixelData) { + var frameData = pixelData; + var frameSize = imageFrame.rows * imageFrame.columns; + var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel * 2); + var header = new DataView(frameData.buffer, frameData.byteOffset); + var data = new Int8Array(frameData.buffer, frameData.byteOffset); + var out = new Int8Array(outFrame); + var numSegments = header.getInt32(0, true); + + for (var s = 0; s < numSegments; ++s) { + var outIndex = 0; + var highByte = s === 0 ? 1 : 0; + var inIndex = header.getInt32((s + 1) * 4, true); + var maxIndex = header.getInt32((s + 2) * 4, true); + + if (maxIndex === 0) { + maxIndex = frameData.length; + } + + while (inIndex < maxIndex) { + var n = data[inIndex++]; + + if (n >= 0 && n <= 127) { + for (var i = 0; i < n + 1 && outIndex < frameSize; ++i) { + out[outIndex * 2 + highByte] = data[inIndex++]; + outIndex++; + } + } else if (n <= -1 && n >= -127) { + var value = data[inIndex++]; + + for (var j = 0; j < -n + 1 && outIndex < frameSize; ++j) { + out[outIndex * 2 + highByte] = value; + outIndex++; + } + } + /* else if (n === -128) { + } // do nothing */ + + } + } + + if (imageFrame.pixelRepresentation === 0) { + imageFrame.pixelData = new Uint16Array(outFrame); + } else { + imageFrame.pixelData = new Int16Array(outFrame); + } + + return imageFrame; +} + +/* harmony default export */ __webpack_exports__["default"] = (decodeRLE); + +/***/ }), + +/***/ "./shared/getMinMax.js": +/*!*****************************!*\ + !*** ./shared/getMinMax.js ***! + \*****************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** + * Calculate the minimum and maximum values in an Array + * + * @param {Number[]} storedPixelData + * @return {{min: Number, max: Number}} + */ +function getMinMax(storedPixelData) { + // we always calculate the min max values since they are not always + // present in DICOM and we don't want to trust them anyway as cornerstone + // depends on us providing reliable values for these + var min = storedPixelData[0]; + var max = storedPixelData[0]; + var storedPixel; + var numPixels = storedPixelData.length; + + for (var index = 1; index < numPixels; index++) { + storedPixel = storedPixelData[index]; + min = Math.min(min, storedPixel); + max = Math.max(max, storedPixel); + } + + return { + min: min, + max: max + }; +} + +/* harmony default export */ __webpack_exports__["default"] = (getMinMax); + +/***/ }), + +/***/ "./version.js": +/*!********************!*\ + !*** ./version.js ***! + \********************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony default export */ __webpack_exports__["default"] = ('3.0.6'); + +/***/ }), + +/***/ "./webWorker/index.worker.js": +/*!***********************************!*\ + !*** ./webWorker/index.worker.js ***! + \***********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = function() { + return __webpack_require__(/*! !../node_modules/worker-loader/dist/workers/InlineWorker.js */ "../node_modules/worker-loader/dist/workers/InlineWorker.js")("/*! cornerstone-wado-image-loader - 3.0.6 - 2019-09-19 | (c) 2019 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWADOImageLoader */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \tvar parentHotUpdateCallback = this[\"webpackHotUpdate_name_\"];\n/******/ \tthis[\"webpackHotUpdate_name_\"] = // eslint-disable-next-line no-unused-vars\n/******/ \tfunction webpackHotUpdateCallback(chunkId, moreModules) {\n/******/ \t\thotAddUpdateChunk(chunkId, moreModules);\n/******/ \t\tif (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);\n/******/ \t} ;\n/******/\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tfunction hotDownloadUpdateChunk(chunkId) {\n/******/ \t\timportScripts(__webpack_require__.p + \"\" + chunkId + \".\" + hotCurrentHash + \".hot-update.js\");\n/******/ \t}\n/******/\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tfunction hotDownloadManifest(requestTimeout) {\n/******/ \t\trequestTimeout = requestTimeout || 10000;\n/******/ \t\treturn new Promise(function(resolve, reject) {\n/******/ \t\t\tif (typeof XMLHttpRequest === \"undefined\") {\n/******/ \t\t\t\treturn reject(new Error(\"No browser support\"));\n/******/ \t\t\t}\n/******/ \t\t\ttry {\n/******/ \t\t\t\tvar request = new XMLHttpRequest();\n/******/ \t\t\t\tvar requestPath = __webpack_require__.p + \"\" + hotCurrentHash + \".hot-update.json\";\n/******/ \t\t\t\trequest.open(\"GET\", requestPath, true);\n/******/ \t\t\t\trequest.timeout = requestTimeout;\n/******/ \t\t\t\trequest.send(null);\n/******/ \t\t\t} catch (err) {\n/******/ \t\t\t\treturn reject(err);\n/******/ \t\t\t}\n/******/ \t\t\trequest.onreadystatechange = function() {\n/******/ \t\t\t\tif (request.readyState !== 4) return;\n/******/ \t\t\t\tif (request.status === 0) {\n/******/ \t\t\t\t\t// timeout\n/******/ \t\t\t\t\treject(\n/******/ \t\t\t\t\t\tnew Error(\"Manifest request to \" + requestPath + \" timed out.\")\n/******/ \t\t\t\t\t);\n/******/ \t\t\t\t} else if (request.status === 404) {\n/******/ \t\t\t\t\t// no update available\n/******/ \t\t\t\t\tresolve();\n/******/ \t\t\t\t} else if (request.status !== 200 && request.status !== 304) {\n/******/ \t\t\t\t\t// other failure\n/******/ \t\t\t\t\treject(new Error(\"Manifest request to \" + requestPath + \" failed.\"));\n/******/ \t\t\t\t} else {\n/******/ \t\t\t\t\t// success\n/******/ \t\t\t\t\ttry {\n/******/ \t\t\t\t\t\tvar update = JSON.parse(request.responseText);\n/******/ \t\t\t\t\t} catch (e) {\n/******/ \t\t\t\t\t\treject(e);\n/******/ \t\t\t\t\t\treturn;\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t\tresolve(update);\n/******/ \t\t\t\t}\n/******/ \t\t\t};\n/******/ \t\t});\n/******/ \t}\n/******/\n/******/ \t//eslint-disable-next-line no-unused-vars\n/******/ \tfunction hotDisposeChunk(chunkId) {\n/******/ \t\tdelete installedChunks[chunkId];\n/******/ \t}\n/******/\n/******/ \tvar hotApplyOnUpdate = true;\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tvar hotCurrentHash = \"922d2a9b8827ff21dc41\";\n/******/ \tvar hotRequestTimeout = 10000;\n/******/ \tvar hotCurrentModuleData = {};\n/******/ \tvar hotCurrentChildModule;\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tvar hotCurrentParents = [];\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tvar hotCurrentParentsTemp = [];\n/******/\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tfunction hotCreateRequire(moduleId) {\n/******/ \t\tvar me = installedModules[moduleId];\n/******/ \t\tif (!me) return __webpack_require__;\n/******/ \t\tvar fn = function(request) {\n/******/ \t\t\tif (me.hot.active) {\n/******/ \t\t\t\tif (installedModules[request]) {\n/******/ \t\t\t\t\tif (installedModules[request].parents.indexOf(moduleId) === -1) {\n/******/ \t\t\t\t\t\tinstalledModules[request].parents.push(moduleId);\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t} else {\n/******/ \t\t\t\t\thotCurrentParents = [moduleId];\n/******/ \t\t\t\t\thotCurrentChildModule = request;\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif (me.children.indexOf(request) === -1) {\n/******/ \t\t\t\t\tme.children.push(request);\n/******/ \t\t\t\t}\n/******/ \t\t\t} else {\n/******/ \t\t\t\tconsole.warn(\n/******/ \t\t\t\t\t\"[HMR] unexpected require(\" +\n/******/ \t\t\t\t\t\trequest +\n/******/ \t\t\t\t\t\t\") from disposed module \" +\n/******/ \t\t\t\t\t\tmoduleId\n/******/ \t\t\t\t);\n/******/ \t\t\t\thotCurrentParents = [];\n/******/ \t\t\t}\n/******/ \t\t\treturn __webpack_require__(request);\n/******/ \t\t};\n/******/ \t\tvar ObjectFactory = function ObjectFactory(name) {\n/******/ \t\t\treturn {\n/******/ \t\t\t\tconfigurable: true,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: function() {\n/******/ \t\t\t\t\treturn __webpack_require__[name];\n/******/ \t\t\t\t},\n/******/ \t\t\t\tset: function(value) {\n/******/ \t\t\t\t\t__webpack_require__[name] = value;\n/******/ \t\t\t\t}\n/******/ \t\t\t};\n/******/ \t\t};\n/******/ \t\tfor (var name in __webpack_require__) {\n/******/ \t\t\tif (\n/******/ \t\t\t\tObject.prototype.hasOwnProperty.call(__webpack_require__, name) &&\n/******/ \t\t\t\tname !== \"e\" &&\n/******/ \t\t\t\tname !== \"t\"\n/******/ \t\t\t) {\n/******/ \t\t\t\tObject.defineProperty(fn, name, ObjectFactory(name));\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tfn.e = function(chunkId) {\n/******/ \t\t\tif (hotStatus === \"ready\") hotSetStatus(\"prepare\");\n/******/ \t\t\thotChunksLoading++;\n/******/ \t\t\treturn __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {\n/******/ \t\t\t\tfinishChunkLoading();\n/******/ \t\t\t\tthrow err;\n/******/ \t\t\t});\n/******/\n/******/ \t\t\tfunction finishChunkLoading() {\n/******/ \t\t\t\thotChunksLoading--;\n/******/ \t\t\t\tif (hotStatus === \"prepare\") {\n/******/ \t\t\t\t\tif (!hotWaitingFilesMap[chunkId]) {\n/******/ \t\t\t\t\t\thotEnsureUpdateChunk(chunkId);\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t\tif (hotChunksLoading === 0 && hotWaitingFiles === 0) {\n/******/ \t\t\t\t\t\thotUpdateDownloaded();\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\tfn.t = function(value, mode) {\n/******/ \t\t\tif (mode & 1) value = fn(value);\n/******/ \t\t\treturn __webpack_require__.t(value, mode & ~1);\n/******/ \t\t};\n/******/ \t\treturn fn;\n/******/ \t}\n/******/\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tfunction hotCreateModule(moduleId) {\n/******/ \t\tvar hot = {\n/******/ \t\t\t// private stuff\n/******/ \t\t\t_acceptedDependencies: {},\n/******/ \t\t\t_declinedDependencies: {},\n/******/ \t\t\t_selfAccepted: false,\n/******/ \t\t\t_selfDeclined: false,\n/******/ \t\t\t_disposeHandlers: [],\n/******/ \t\t\t_main: hotCurrentChildModule !== moduleId,\n/******/\n/******/ \t\t\t// Module API\n/******/ \t\t\tactive: true,\n/******/ \t\t\taccept: function(dep, callback) {\n/******/ \t\t\t\tif (dep === undefined) hot._selfAccepted = true;\n/******/ \t\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n/******/ \t\t\t\telse if (typeof dep === \"object\")\n/******/ \t\t\t\t\tfor (var i = 0; i < dep.length; i++)\n/******/ \t\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function() {};\n/******/ \t\t\t\telse hot._acceptedDependencies[dep] = callback || function() {};\n/******/ \t\t\t},\n/******/ \t\t\tdecline: function(dep) {\n/******/ \t\t\t\tif (dep === undefined) hot._selfDeclined = true;\n/******/ \t\t\t\telse if (typeof dep === \"object\")\n/******/ \t\t\t\t\tfor (var i = 0; i < dep.length; i++)\n/******/ \t\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n/******/ \t\t\t\telse hot._declinedDependencies[dep] = true;\n/******/ \t\t\t},\n/******/ \t\t\tdispose: function(callback) {\n/******/ \t\t\t\thot._disposeHandlers.push(callback);\n/******/ \t\t\t},\n/******/ \t\t\taddDisposeHandler: function(callback) {\n/******/ \t\t\t\thot._disposeHandlers.push(callback);\n/******/ \t\t\t},\n/******/ \t\t\tremoveDisposeHandler: function(callback) {\n/******/ \t\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n/******/ \t\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n/******/ \t\t\t},\n/******/\n/******/ \t\t\t// Management API\n/******/ \t\t\tcheck: hotCheck,\n/******/ \t\t\tapply: hotApply,\n/******/ \t\t\tstatus: function(l) {\n/******/ \t\t\t\tif (!l) return hotStatus;\n/******/ \t\t\t\thotStatusHandlers.push(l);\n/******/ \t\t\t},\n/******/ \t\t\taddStatusHandler: function(l) {\n/******/ \t\t\t\thotStatusHandlers.push(l);\n/******/ \t\t\t},\n/******/ \t\t\tremoveStatusHandler: function(l) {\n/******/ \t\t\t\tvar idx = hotStatusHandlers.indexOf(l);\n/******/ \t\t\t\tif (idx >= 0) hotStatusHandlers.splice(idx, 1);\n/******/ \t\t\t},\n/******/\n/******/ \t\t\t//inherit from previous dispose call\n/******/ \t\t\tdata: hotCurrentModuleData[moduleId]\n/******/ \t\t};\n/******/ \t\thotCurrentChildModule = undefined;\n/******/ \t\treturn hot;\n/******/ \t}\n/******/\n/******/ \tvar hotStatusHandlers = [];\n/******/ \tvar hotStatus = \"idle\";\n/******/\n/******/ \tfunction hotSetStatus(newStatus) {\n/******/ \t\thotStatus = newStatus;\n/******/ \t\tfor (var i = 0; i < hotStatusHandlers.length; i++)\n/******/ \t\t\thotStatusHandlers[i].call(null, newStatus);\n/******/ \t}\n/******/\n/******/ \t// while downloading\n/******/ \tvar hotWaitingFiles = 0;\n/******/ \tvar hotChunksLoading = 0;\n/******/ \tvar hotWaitingFilesMap = {};\n/******/ \tvar hotRequestedFilesMap = {};\n/******/ \tvar hotAvailableFilesMap = {};\n/******/ \tvar hotDeferred;\n/******/\n/******/ \t// The update info\n/******/ \tvar hotUpdate, hotUpdateNewHash;\n/******/\n/******/ \tfunction toModuleId(id) {\n/******/ \t\tvar isNumber = +id + \"\" === id;\n/******/ \t\treturn isNumber ? +id : id;\n/******/ \t}\n/******/\n/******/ \tfunction hotCheck(apply) {\n/******/ \t\tif (hotStatus !== \"idle\") {\n/******/ \t\t\tthrow new Error(\"check() is only allowed in idle status\");\n/******/ \t\t}\n/******/ \t\thotApplyOnUpdate = apply;\n/******/ \t\thotSetStatus(\"check\");\n/******/ \t\treturn hotDownloadManifest(hotRequestTimeout).then(function(update) {\n/******/ \t\t\tif (!update) {\n/******/ \t\t\t\thotSetStatus(\"idle\");\n/******/ \t\t\t\treturn null;\n/******/ \t\t\t}\n/******/ \t\t\thotRequestedFilesMap = {};\n/******/ \t\t\thotWaitingFilesMap = {};\n/******/ \t\t\thotAvailableFilesMap = update.c;\n/******/ \t\t\thotUpdateNewHash = update.h;\n/******/\n/******/ \t\t\thotSetStatus(\"prepare\");\n/******/ \t\t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\t\thotDeferred = {\n/******/ \t\t\t\t\tresolve: resolve,\n/******/ \t\t\t\t\treject: reject\n/******/ \t\t\t\t};\n/******/ \t\t\t});\n/******/ \t\t\thotUpdate = {};\n/******/ \t\t\tvar chunkId = \"main\";\n/******/ \t\t\t// eslint-disable-next-line no-lone-blocks\n/******/ \t\t\t{\n/******/ \t\t\t\t/*globals chunkId */\n/******/ \t\t\t\thotEnsureUpdateChunk(chunkId);\n/******/ \t\t\t}\n/******/ \t\t\tif (\n/******/ \t\t\t\thotStatus === \"prepare\" &&\n/******/ \t\t\t\thotChunksLoading === 0 &&\n/******/ \t\t\t\thotWaitingFiles === 0\n/******/ \t\t\t) {\n/******/ \t\t\t\thotUpdateDownloaded();\n/******/ \t\t\t}\n/******/ \t\t\treturn promise;\n/******/ \t\t});\n/******/ \t}\n/******/\n/******/ \t// eslint-disable-next-line no-unused-vars\n/******/ \tfunction hotAddUpdateChunk(chunkId, moreModules) {\n/******/ \t\tif (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])\n/******/ \t\t\treturn;\n/******/ \t\thotRequestedFilesMap[chunkId] = false;\n/******/ \t\tfor (var moduleId in moreModules) {\n/******/ \t\t\tif (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\thotUpdate[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif (--hotWaitingFiles === 0 && hotChunksLoading === 0) {\n/******/ \t\t\thotUpdateDownloaded();\n/******/ \t\t}\n/******/ \t}\n/******/\n/******/ \tfunction hotEnsureUpdateChunk(chunkId) {\n/******/ \t\tif (!hotAvailableFilesMap[chunkId]) {\n/******/ \t\t\thotWaitingFilesMap[chunkId] = true;\n/******/ \t\t} else {\n/******/ \t\t\thotRequestedFilesMap[chunkId] = true;\n/******/ \t\t\thotWaitingFiles++;\n/******/ \t\t\thotDownloadUpdateChunk(chunkId);\n/******/ \t\t}\n/******/ \t}\n/******/\n/******/ \tfunction hotUpdateDownloaded() {\n/******/ \t\thotSetStatus(\"ready\");\n/******/ \t\tvar deferred = hotDeferred;\n/******/ \t\thotDeferred = null;\n/******/ \t\tif (!deferred) return;\n/******/ \t\tif (hotApplyOnUpdate) {\n/******/ \t\t\t// Wrap deferred object in Promise to mark it as a well-handled Promise to\n/******/ \t\t\t// avoid triggering uncaught exception warning in Chrome.\n/******/ \t\t\t// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666\n/******/ \t\t\tPromise.resolve()\n/******/ \t\t\t\t.then(function() {\n/******/ \t\t\t\t\treturn hotApply(hotApplyOnUpdate);\n/******/ \t\t\t\t})\n/******/ \t\t\t\t.then(\n/******/ \t\t\t\t\tfunction(result) {\n/******/ \t\t\t\t\t\tdeferred.resolve(result);\n/******/ \t\t\t\t\t},\n/******/ \t\t\t\t\tfunction(err) {\n/******/ \t\t\t\t\t\tdeferred.reject(err);\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t);\n/******/ \t\t} else {\n/******/ \t\t\tvar outdatedModules = [];\n/******/ \t\t\tfor (var id in hotUpdate) {\n/******/ \t\t\t\tif (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {\n/******/ \t\t\t\t\toutdatedModules.push(toModuleId(id));\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t\tdeferred.resolve(outdatedModules);\n/******/ \t\t}\n/******/ \t}\n/******/\n/******/ \tfunction hotApply(options) {\n/******/ \t\tif (hotStatus !== \"ready\")\n/******/ \t\t\tthrow new Error(\"apply() is only allowed in ready status\");\n/******/ \t\toptions = options || {};\n/******/\n/******/ \t\tvar cb;\n/******/ \t\tvar i;\n/******/ \t\tvar j;\n/******/ \t\tvar module;\n/******/ \t\tvar moduleId;\n/******/\n/******/ \t\tfunction getAffectedStuff(updateModuleId) {\n/******/ \t\t\tvar outdatedModules = [updateModuleId];\n/******/ \t\t\tvar outdatedDependencies = {};\n/******/\n/******/ \t\t\tvar queue = outdatedModules.map(function(id) {\n/******/ \t\t\t\treturn {\n/******/ \t\t\t\t\tchain: [id],\n/******/ \t\t\t\t\tid: id\n/******/ \t\t\t\t};\n/******/ \t\t\t});\n/******/ \t\t\twhile (queue.length > 0) {\n/******/ \t\t\t\tvar queueItem = queue.pop();\n/******/ \t\t\t\tvar moduleId = queueItem.id;\n/******/ \t\t\t\tvar chain = queueItem.chain;\n/******/ \t\t\t\tmodule = installedModules[moduleId];\n/******/ \t\t\t\tif (!module || module.hot._selfAccepted) continue;\n/******/ \t\t\t\tif (module.hot._selfDeclined) {\n/******/ \t\t\t\t\treturn {\n/******/ \t\t\t\t\t\ttype: \"self-declined\",\n/******/ \t\t\t\t\t\tchain: chain,\n/******/ \t\t\t\t\t\tmoduleId: moduleId\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif (module.hot._main) {\n/******/ \t\t\t\t\treturn {\n/******/ \t\t\t\t\t\ttype: \"unaccepted\",\n/******/ \t\t\t\t\t\tchain: chain,\n/******/ \t\t\t\t\t\tmoduleId: moduleId\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}\n/******/ \t\t\t\tfor (var i = 0; i < module.parents.length; i++) {\n/******/ \t\t\t\t\tvar parentId = module.parents[i];\n/******/ \t\t\t\t\tvar parent = installedModules[parentId];\n/******/ \t\t\t\t\tif (!parent) continue;\n/******/ \t\t\t\t\tif (parent.hot._declinedDependencies[moduleId]) {\n/******/ \t\t\t\t\t\treturn {\n/******/ \t\t\t\t\t\t\ttype: \"declined\",\n/******/ \t\t\t\t\t\t\tchain: chain.concat([parentId]),\n/******/ \t\t\t\t\t\t\tmoduleId: moduleId,\n/******/ \t\t\t\t\t\t\tparentId: parentId\n/******/ \t\t\t\t\t\t};\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t\tif (outdatedModules.indexOf(parentId) !== -1) continue;\n/******/ \t\t\t\t\tif (parent.hot._acceptedDependencies[moduleId]) {\n/******/ \t\t\t\t\t\tif (!outdatedDependencies[parentId])\n/******/ \t\t\t\t\t\t\toutdatedDependencies[parentId] = [];\n/******/ \t\t\t\t\t\taddAllToSet(outdatedDependencies[parentId], [moduleId]);\n/******/ \t\t\t\t\t\tcontinue;\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t\tdelete outdatedDependencies[parentId];\n/******/ \t\t\t\t\toutdatedModules.push(parentId);\n/******/ \t\t\t\t\tqueue.push({\n/******/ \t\t\t\t\t\tchain: chain.concat([parentId]),\n/******/ \t\t\t\t\t\tid: parentId\n/******/ \t\t\t\t\t});\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/\n/******/ \t\t\treturn {\n/******/ \t\t\t\ttype: \"accepted\",\n/******/ \t\t\t\tmoduleId: updateModuleId,\n/******/ \t\t\t\toutdatedModules: outdatedModules,\n/******/ \t\t\t\toutdatedDependencies: outdatedDependencies\n/******/ \t\t\t};\n/******/ \t\t}\n/******/\n/******/ \t\tfunction addAllToSet(a, b) {\n/******/ \t\t\tfor (var i = 0; i < b.length; i++) {\n/******/ \t\t\t\tvar item = b[i];\n/******/ \t\t\t\tif (a.indexOf(item) === -1) a.push(item);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// at begin all updates modules are outdated\n/******/ \t\t// the \"outdated\" status can propagate to parents if they don't accept the children\n/******/ \t\tvar outdatedDependencies = {};\n/******/ \t\tvar outdatedModules = [];\n/******/ \t\tvar appliedUpdate = {};\n/******/\n/******/ \t\tvar warnUnexpectedRequire = function warnUnexpectedRequire() {\n/******/ \t\t\tconsole.warn(\n/******/ \t\t\t\t\"[HMR] unexpected require(\" + result.moduleId + \") to disposed module\"\n/******/ \t\t\t);\n/******/ \t\t};\n/******/\n/******/ \t\tfor (var id in hotUpdate) {\n/******/ \t\t\tif (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {\n/******/ \t\t\t\tmoduleId = toModuleId(id);\n/******/ \t\t\t\t/** @type {TODO} */\n/******/ \t\t\t\tvar result;\n/******/ \t\t\t\tif (hotUpdate[id]) {\n/******/ \t\t\t\t\tresult = getAffectedStuff(moduleId);\n/******/ \t\t\t\t} else {\n/******/ \t\t\t\t\tresult = {\n/******/ \t\t\t\t\t\ttype: \"disposed\",\n/******/ \t\t\t\t\t\tmoduleId: id\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}\n/******/ \t\t\t\t/** @type {Error|false} */\n/******/ \t\t\t\tvar abortError = false;\n/******/ \t\t\t\tvar doApply = false;\n/******/ \t\t\t\tvar doDispose = false;\n/******/ \t\t\t\tvar chainInfo = \"\";\n/******/ \t\t\t\tif (result.chain) {\n/******/ \t\t\t\t\tchainInfo = \"\\nUpdate propagation: \" + result.chain.join(\" -> \");\n/******/ \t\t\t\t}\n/******/ \t\t\t\tswitch (result.type) {\n/******/ \t\t\t\t\tcase \"self-declined\":\n/******/ \t\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n/******/ \t\t\t\t\t\tif (!options.ignoreDeclined)\n/******/ \t\t\t\t\t\t\tabortError = new Error(\n/******/ \t\t\t\t\t\t\t\t\"Aborted because of self decline: \" +\n/******/ \t\t\t\t\t\t\t\t\tresult.moduleId +\n/******/ \t\t\t\t\t\t\t\t\tchainInfo\n/******/ \t\t\t\t\t\t\t);\n/******/ \t\t\t\t\t\tbreak;\n/******/ \t\t\t\t\tcase \"declined\":\n/******/ \t\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n/******/ \t\t\t\t\t\tif (!options.ignoreDeclined)\n/******/ \t\t\t\t\t\t\tabortError = new Error(\n/******/ \t\t\t\t\t\t\t\t\"Aborted because of declined dependency: \" +\n/******/ \t\t\t\t\t\t\t\t\tresult.moduleId +\n/******/ \t\t\t\t\t\t\t\t\t\" in \" +\n/******/ \t\t\t\t\t\t\t\t\tresult.parentId +\n/******/ \t\t\t\t\t\t\t\t\tchainInfo\n/******/ \t\t\t\t\t\t\t);\n/******/ \t\t\t\t\t\tbreak;\n/******/ \t\t\t\t\tcase \"unaccepted\":\n/******/ \t\t\t\t\t\tif (options.onUnaccepted) options.onUnaccepted(result);\n/******/ \t\t\t\t\t\tif (!options.ignoreUnaccepted)\n/******/ \t\t\t\t\t\t\tabortError = new Error(\n/******/ \t\t\t\t\t\t\t\t\"Aborted because \" + moduleId + \" is not accepted\" + chainInfo\n/******/ \t\t\t\t\t\t\t);\n/******/ \t\t\t\t\t\tbreak;\n/******/ \t\t\t\t\tcase \"accepted\":\n/******/ \t\t\t\t\t\tif (options.onAccepted) options.onAccepted(result);\n/******/ \t\t\t\t\t\tdoApply = true;\n/******/ \t\t\t\t\t\tbreak;\n/******/ \t\t\t\t\tcase \"disposed\":\n/******/ \t\t\t\t\t\tif (options.onDisposed) options.onDisposed(result);\n/******/ \t\t\t\t\t\tdoDispose = true;\n/******/ \t\t\t\t\t\tbreak;\n/******/ \t\t\t\t\tdefault:\n/******/ \t\t\t\t\t\tthrow new Error(\"Unexception type \" + result.type);\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif (abortError) {\n/******/ \t\t\t\t\thotSetStatus(\"abort\");\n/******/ \t\t\t\t\treturn Promise.reject(abortError);\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif (doApply) {\n/******/ \t\t\t\t\tappliedUpdate[moduleId] = hotUpdate[moduleId];\n/******/ \t\t\t\t\taddAllToSet(outdatedModules, result.outdatedModules);\n/******/ \t\t\t\t\tfor (moduleId in result.outdatedDependencies) {\n/******/ \t\t\t\t\t\tif (\n/******/ \t\t\t\t\t\t\tObject.prototype.hasOwnProperty.call(\n/******/ \t\t\t\t\t\t\t\tresult.outdatedDependencies,\n/******/ \t\t\t\t\t\t\t\tmoduleId\n/******/ \t\t\t\t\t\t\t)\n/******/ \t\t\t\t\t\t) {\n/******/ \t\t\t\t\t\t\tif (!outdatedDependencies[moduleId])\n/******/ \t\t\t\t\t\t\t\toutdatedDependencies[moduleId] = [];\n/******/ \t\t\t\t\t\t\taddAllToSet(\n/******/ \t\t\t\t\t\t\t\toutdatedDependencies[moduleId],\n/******/ \t\t\t\t\t\t\t\tresult.outdatedDependencies[moduleId]\n/******/ \t\t\t\t\t\t\t);\n/******/ \t\t\t\t\t\t}\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif (doDispose) {\n/******/ \t\t\t\t\taddAllToSet(outdatedModules, [result.moduleId]);\n/******/ \t\t\t\t\tappliedUpdate[moduleId] = warnUnexpectedRequire;\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// Store self accepted outdated modules to require them later by the module system\n/******/ \t\tvar outdatedSelfAcceptedModules = [];\n/******/ \t\tfor (i = 0; i < outdatedModules.length; i++) {\n/******/ \t\t\tmoduleId = outdatedModules[i];\n/******/ \t\t\tif (\n/******/ \t\t\t\tinstalledModules[moduleId] &&\n/******/ \t\t\t\tinstalledModules[moduleId].hot._selfAccepted &&\n/******/ \t\t\t\t// removed self-accepted modules should not be required\n/******/ \t\t\t\tappliedUpdate[moduleId] !== warnUnexpectedRequire\n/******/ \t\t\t) {\n/******/ \t\t\t\toutdatedSelfAcceptedModules.push({\n/******/ \t\t\t\t\tmodule: moduleId,\n/******/ \t\t\t\t\terrorHandler: installedModules[moduleId].hot._selfAccepted\n/******/ \t\t\t\t});\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// Now in \"dispose\" phase\n/******/ \t\thotSetStatus(\"dispose\");\n/******/ \t\tObject.keys(hotAvailableFilesMap).forEach(function(chunkId) {\n/******/ \t\t\tif (hotAvailableFilesMap[chunkId] === false) {\n/******/ \t\t\t\thotDisposeChunk(chunkId);\n/******/ \t\t\t}\n/******/ \t\t});\n/******/\n/******/ \t\tvar idx;\n/******/ \t\tvar queue = outdatedModules.slice();\n/******/ \t\twhile (queue.length > 0) {\n/******/ \t\t\tmoduleId = queue.pop();\n/******/ \t\t\tmodule = installedModules[moduleId];\n/******/ \t\t\tif (!module) continue;\n/******/\n/******/ \t\t\tvar data = {};\n/******/\n/******/ \t\t\t// Call dispose handlers\n/******/ \t\t\tvar disposeHandlers = module.hot._disposeHandlers;\n/******/ \t\t\tfor (j = 0; j < disposeHandlers.length; j++) {\n/******/ \t\t\t\tcb = disposeHandlers[j];\n/******/ \t\t\t\tcb(data);\n/******/ \t\t\t}\n/******/ \t\t\thotCurrentModuleData[moduleId] = data;\n/******/\n/******/ \t\t\t// disable module (this disables requires from this module)\n/******/ \t\t\tmodule.hot.active = false;\n/******/\n/******/ \t\t\t// remove module from cache\n/******/ \t\t\tdelete installedModules[moduleId];\n/******/\n/******/ \t\t\t// when disposing there is no need to call dispose handler\n/******/ \t\t\tdelete outdatedDependencies[moduleId];\n/******/\n/******/ \t\t\t// remove \"parents\" references from all children\n/******/ \t\t\tfor (j = 0; j < module.children.length; j++) {\n/******/ \t\t\t\tvar child = installedModules[module.children[j]];\n/******/ \t\t\t\tif (!child) continue;\n/******/ \t\t\t\tidx = child.parents.indexOf(moduleId);\n/******/ \t\t\t\tif (idx >= 0) {\n/******/ \t\t\t\t\tchild.parents.splice(idx, 1);\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// remove outdated dependency from module children\n/******/ \t\tvar dependency;\n/******/ \t\tvar moduleOutdatedDependencies;\n/******/ \t\tfor (moduleId in outdatedDependencies) {\n/******/ \t\t\tif (\n/******/ \t\t\t\tObject.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)\n/******/ \t\t\t) {\n/******/ \t\t\t\tmodule = installedModules[moduleId];\n/******/ \t\t\t\tif (module) {\n/******/ \t\t\t\t\tmoduleOutdatedDependencies = outdatedDependencies[moduleId];\n/******/ \t\t\t\t\tfor (j = 0; j < moduleOutdatedDependencies.length; j++) {\n/******/ \t\t\t\t\t\tdependency = moduleOutdatedDependencies[j];\n/******/ \t\t\t\t\t\tidx = module.children.indexOf(dependency);\n/******/ \t\t\t\t\t\tif (idx >= 0) module.children.splice(idx, 1);\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// Now in \"apply\" phase\n/******/ \t\thotSetStatus(\"apply\");\n/******/\n/******/ \t\thotCurrentHash = hotUpdateNewHash;\n/******/\n/******/ \t\t// insert new code\n/******/ \t\tfor (moduleId in appliedUpdate) {\n/******/ \t\t\tif (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = appliedUpdate[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// call accept handlers\n/******/ \t\tvar error = null;\n/******/ \t\tfor (moduleId in outdatedDependencies) {\n/******/ \t\t\tif (\n/******/ \t\t\t\tObject.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)\n/******/ \t\t\t) {\n/******/ \t\t\t\tmodule = installedModules[moduleId];\n/******/ \t\t\t\tif (module) {\n/******/ \t\t\t\t\tmoduleOutdatedDependencies = outdatedDependencies[moduleId];\n/******/ \t\t\t\t\tvar callbacks = [];\n/******/ \t\t\t\t\tfor (i = 0; i < moduleOutdatedDependencies.length; i++) {\n/******/ \t\t\t\t\t\tdependency = moduleOutdatedDependencies[i];\n/******/ \t\t\t\t\t\tcb = module.hot._acceptedDependencies[dependency];\n/******/ \t\t\t\t\t\tif (cb) {\n/******/ \t\t\t\t\t\t\tif (callbacks.indexOf(cb) !== -1) continue;\n/******/ \t\t\t\t\t\t\tcallbacks.push(cb);\n/******/ \t\t\t\t\t\t}\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t\tfor (i = 0; i < callbacks.length; i++) {\n/******/ \t\t\t\t\t\tcb = callbacks[i];\n/******/ \t\t\t\t\t\ttry {\n/******/ \t\t\t\t\t\t\tcb(moduleOutdatedDependencies);\n/******/ \t\t\t\t\t\t} catch (err) {\n/******/ \t\t\t\t\t\t\tif (options.onErrored) {\n/******/ \t\t\t\t\t\t\t\toptions.onErrored({\n/******/ \t\t\t\t\t\t\t\t\ttype: \"accept-errored\",\n/******/ \t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n/******/ \t\t\t\t\t\t\t\t\tdependencyId: moduleOutdatedDependencies[i],\n/******/ \t\t\t\t\t\t\t\t\terror: err\n/******/ \t\t\t\t\t\t\t\t});\n/******/ \t\t\t\t\t\t\t}\n/******/ \t\t\t\t\t\t\tif (!options.ignoreErrored) {\n/******/ \t\t\t\t\t\t\t\tif (!error) error = err;\n/******/ \t\t\t\t\t\t\t}\n/******/ \t\t\t\t\t\t}\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// Load self accepted modules\n/******/ \t\tfor (i = 0; i < outdatedSelfAcceptedModules.length; i++) {\n/******/ \t\t\tvar item = outdatedSelfAcceptedModules[i];\n/******/ \t\t\tmoduleId = item.module;\n/******/ \t\t\thotCurrentParents = [moduleId];\n/******/ \t\t\ttry {\n/******/ \t\t\t\t__webpack_require__(moduleId);\n/******/ \t\t\t} catch (err) {\n/******/ \t\t\t\tif (typeof item.errorHandler === \"function\") {\n/******/ \t\t\t\t\ttry {\n/******/ \t\t\t\t\t\titem.errorHandler(err);\n/******/ \t\t\t\t\t} catch (err2) {\n/******/ \t\t\t\t\t\tif (options.onErrored) {\n/******/ \t\t\t\t\t\t\toptions.onErrored({\n/******/ \t\t\t\t\t\t\t\ttype: \"self-accept-error-handler-errored\",\n/******/ \t\t\t\t\t\t\t\tmoduleId: moduleId,\n/******/ \t\t\t\t\t\t\t\terror: err2,\n/******/ \t\t\t\t\t\t\t\toriginalError: err\n/******/ \t\t\t\t\t\t\t});\n/******/ \t\t\t\t\t\t}\n/******/ \t\t\t\t\t\tif (!options.ignoreErrored) {\n/******/ \t\t\t\t\t\t\tif (!error) error = err2;\n/******/ \t\t\t\t\t\t}\n/******/ \t\t\t\t\t\tif (!error) error = err;\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t} else {\n/******/ \t\t\t\t\tif (options.onErrored) {\n/******/ \t\t\t\t\t\toptions.onErrored({\n/******/ \t\t\t\t\t\t\ttype: \"self-accept-errored\",\n/******/ \t\t\t\t\t\t\tmoduleId: moduleId,\n/******/ \t\t\t\t\t\t\terror: err\n/******/ \t\t\t\t\t\t});\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t\tif (!options.ignoreErrored) {\n/******/ \t\t\t\t\t\tif (!error) error = err;\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t}\n/******/\n/******/ \t\t// handle errors in accept handlers and self accepted module load\n/******/ \t\tif (error) {\n/******/ \t\t\thotSetStatus(\"fail\");\n/******/ \t\t\treturn Promise.reject(error);\n/******/ \t\t}\n/******/\n/******/ \t\thotSetStatus(\"idle\");\n/******/ \t\treturn new Promise(function(resolve) {\n/******/ \t\t\tresolve(outdatedModules);\n/******/ \t\t});\n/******/ \t}\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {},\n/******/ \t\t\thot: hotCreateModule(moduleId),\n/******/ \t\t\tparents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),\n/******/ \t\t\tchildren: []\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// __webpack_hash__\n/******/ \t__webpack_require__.h = function() { return hotCurrentHash; };\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn hotCreateRequire(\"../node_modules/babel-loader/lib/index.js!../node_modules/eslint-loader/index.js?!./webWorker/index.worker.js\")(__webpack_require__.s = \"../node_modules/babel-loader/lib/index.js!../node_modules/eslint-loader/index.js?!./webWorker/index.worker.js\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"../codecs/charLS-FixedMemory-browser.js\":\n/*!***********************************************!*\\\n !*** ../codecs/charLS-FixedMemory-browser.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n/*! CharLS.js - v2.0.1 - 2016-06-08 | (c) 2016 Chris Hafey | https://github.com/chafey/charls */\n\n// Notes:\n// - Had to patch parsejsfunc\nvar CharLS = function(Module) {\n Module = Module || {};\n\n var Module;if(!Module)Module=(typeof CharLS!==\"undefined\"?CharLS:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window===\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";var ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module[\"print\"])Module[\"print\"]=function print(x){process[\"stdout\"].write(x+\"\\n\")};if(!Module[\"printErr\"])Module[\"printErr\"]=function printErr(x){process[\"stderr\"].write(x+\"\\n\")};var nodeFS=require(\"fs\");var nodePath=require(\"path\");Module[\"read\"]=function read(filename,binary){filename=nodePath[\"normalize\"](filename);var ret=nodeFS[\"readFileSync\"](filename);if(!ret&&filename!=nodePath[\"resolve\"](filename)){filename=path.join(__dirname,\"..\",\"src\",filename);ret=nodeFS[\"readFileSync\"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module[\"load\"]=function load(f){globalEval(read(f))};if(!Module[\"thisProgram\"]){if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\")}else{Module[\"thisProgram\"]=\"unknown-program\"}}Module[\"arguments\"]=process[\"argv\"].slice(2);if(typeof module!==\"undefined\"){module[\"exports\"]=Module}process[\"on\"](\"uncaughtException\",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module[\"inspect\"]=(function(){return\"[Emscripten Module object]\"})}else if(ENVIRONMENT_IS_SHELL){if(!Module[\"print\"])Module[\"print\"]=print;if(typeof printErr!=\"undefined\")Module[\"printErr\"]=printErr;if(typeof read!=\"undefined\"){Module[\"read\"]=read}else{Module[\"read\"]=function read(){throw\"no read() available (jsc?)\"}}Module[\"readBinary\"]=function readBinary(f){if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}var data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module[\"read\"]=function read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}if(typeof console!==\"undefined\"){if(!Module[\"print\"])Module[\"print\"]=function print(x){console.log(x)};if(!Module[\"printErr\"])Module[\"printErr\"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module[\"print\"])Module[\"print\"]=TRY_USE_DUMP&&typeof dump!==\"undefined\"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module[\"load\"]=importScripts}if(typeof Module[\"setWindowTitle\"]===\"undefined\"){Module[\"setWindowTitle\"]=(function(title){document.title=title})}}else{throw\"Unknown runtime environment. Where are we?\"}function globalEval(x){eval.call(null,x)}if(!Module[\"load\"]&&Module[\"read\"]){Module[\"load\"]=function load(f){globalEval(Module[\"read\"](f))}}if(!Module[\"print\"]){Module[\"print\"]=(function(){})}if(!Module[\"printErr\"]){Module[\"printErr\"]=Module[\"print\"]}if(!Module[\"arguments\"]){Module[\"arguments\"]=[]}if(!Module[\"thisProgram\"]){Module[\"thisProgram\"]=\"./this.program\"}Module.print=Module[\"print\"];Module.printErr=Module[\"printErr\"];Module[\"preRun\"]=[];Module[\"postRun\"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return Runtime.QUANTUM_SIZE}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type===\"double\"||type===\"i64\"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type==\"i64\"||type==\"double\"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module[\"dynCall_\"+sig].apply(null,args)}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module[\"Runtime\"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}var globalScope=this;function getCFunc(ident){var func=Module[\"_\"+ident];if(!func){try{func=eval(\"_\"+ident)}catch(e){}}assert(func,\"Cannot call unknown function \"+ident+\" (perhaps LLVM optimizations or closure removed it?)\");return func}var cwrap,ccall;((function(){var JSfuncs={\"stackSave\":(function(){Runtime.stackSave()}),\"stackRestore\":(function(){Runtime.stackRestore()}),\"arrayToC\":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),\"stringToC\":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}Module[\"setValue\"]=setValue;function getValue(ptr,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP32[ptr>>2];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];default:abort(\"invalid type for setValue: \"+type)}return null}Module[\"getValue\"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module[\"ALLOC_NORMAL\"]=ALLOC_NORMAL;Module[\"ALLOC_STACK\"]=ALLOC_STACK;Module[\"ALLOC_STATIC\"]=ALLOC_STATIC;Module[\"ALLOC_DYNAMIC\"]=ALLOC_DYNAMIC;Module[\"ALLOC_NONE\"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab===\"number\"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types===\"string\"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType===\"i8\"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module[\"UTF8ToString\"](ptr)}Module[\"Pointer_stringify\"]=Pointer_stringify;function AsciiToString(ptr){var str=\"\";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module[\"AsciiToString\"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module[\"stringToAscii\"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module[\"UTF8ArrayToString\"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module[\"UTF8ToString\"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module[\"stringToUTF8Array\"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module[\"stringToUTF8\"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module[\"lengthBytesUTF8\"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str=\"\";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module[\"UTF16ToString\"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module[\"stringToUTF16\"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module[\"lengthBytesUTF16\"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str=\"\";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module[\"UTF32ToString\"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module[\"stringToUTF32\"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module[\"lengthBytesUTF32\"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module[\"___cxa_demangle\"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module[\"___cxa_demangle\"](buf,0,0,status);if(getValue(status,\"i32\")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={\"v\":\"void\",\"b\":\"bool\",\"c\":\"char\",\"s\":\"short\",\"i\":\"int\",\"l\":\"long\",\"f\":\"float\",\"d\":\"double\",\"w\":\"wchar_t\",\"a\":\"signed char\",\"h\":\"unsigned char\",\"t\":\"unsigned short\",\"j\":\"unsigned int\",\"m\":\"unsigned long\",\"x\":\"long long\",\"y\":\"unsigned long long\",\"z\":\"...\"};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre=\"\";for(var a=0;a\"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case\"P\":list.push(parse(true,1,true)[0]+\"*\");break;case\"R\":list.push(parse(true,1,true)[0]+\"&\");break;case\"L\":{i++;var end=func.indexOf(\"E\",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case\"A\":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!==\"_\")throw\"?\";i++;list.push(parse(true,1,true)[0]+\" [\"+size+\"]\");break};case\"E\":break paramLoop;default:ret+=\"?\"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]===\"void\")list=[];if(rawList){if(ret){list.push(ret+\"?\")}return list}else{return ret+flushList()}}var parsed=func;try{if(func==\"Object._main\"||func==\"_main\"){return\"main()\"}if(typeof func===\"number\")func=Pointer_stringify(func);if(func[0]!==\"_\")return func;if(func[1]!==\"_\")return func;if(func[2]!==\"Z\")return func;switch(func[3]){case\"n\":return\"operator new()\";case\"d\":return\"operator delete()\"}parsed=parse()}catch(e){parsed+=\"?\"}if(parsed.indexOf(\"?\")>=0&&!hasLibcxxabi){Runtime.warnOnce(\"warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling\")}return parsed}function demangleAll(text){return text.replace(/__Z[\\w\\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module[\"stackTrace\"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 \")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||4e8;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Runtime.dynCall(\"v\",func)}else{Runtime.dynCall(\"vi\",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module[\"addOnPreRun\"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module[\"addOnInit\"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module[\"addOnPreMain\"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module[\"addOnExit\"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module[\"addOnPostRun\"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module[\"intArrayFromString\"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}Module[\"intArrayToString\"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module[\"writeStringToMemory\"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module[\"writeArrayToMemory\"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module[\"writeAsciiToMemory\"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math[\"imul\"]||Math[\"imul\"](4294967295,5)!==-5)Math[\"imul\"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math[\"imul\"];if(!Math[\"clz32\"])Math[\"clz32\"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math[\"clz32\"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}Module[\"addRunDependency\"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"removeRunDependency\"]=removeRunDependency;Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+59744;__ATINIT__.push({func:(function(){__GLOBAL__I_000101()})},{func:(function(){__GLOBAL__sub_I_jpegls_cpp()})},{func:(function(){__GLOBAL__sub_I_iostream_cpp()})});allocate([0,0,0,0,0,0,0,0,84,144,0,0,31,194,0,0,216,0,0,0,0,0,0,0,84,144,0,0,237,191,0,0,48,0,0,0,0,0,0,0,44,144,0,0,41,192,0,0,84,144,0,0,55,192,0,0,48,0,0,0,0,0,0,0,84,144,0,0,115,192,0,0,48,0,0,0,0,0,0,0,84,144,0,0,175,192,0,0,152,3,0,0,0,0,0,0,84,144,0,0,241,192,0,0,216,3,0,0,0,0,0,0,84,144,0,0,55,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,95,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,135,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,175,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,216,193,0,0,48,0,0,0,0,0,0,0,84,144,0,0,241,193,0,0,48,0,0,0,0,0,0,0,44,144,0,0,13,194,0,0,84,144,0,0,80,194,0,0,216,0,0,0,0,0,0,0,84,144,0,0,44,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,139,194,0,0,48,0,0,0,0,0,0,0,84,144,0,0,179,194,0,0,48,0,0,0,0,0,0,0,84,144,0,0,219,194,0,0,48,0,0,0,0,0,0,0,84,144,0,0,3,195,0,0,48,0,0,0,0,0,0,0,84,144,0,0,103,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,157,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,211,195,0,0,216,0,0,0,0,0,0,0,84,144,0,0,8,196,0,0,216,0,0,0,0,0,0,0,84,144,0,0,71,196,0,0,216,0,0,0,0,0,0,0,84,144,0,0,138,196,0,0,160,1,0,0,0,0,0,0,44,144,0,0,120,196,0,0,84,144,0,0,187,196,0,0,160,1,0,0,0,0,0,0,84,144,0,0,246,196,0,0,160,1,0,0,0,0,0,0,84,144,0,0,49,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,103,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,157,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,210,197,0,0,160,1,0,0,0,0,0,0,84,144,0,0,17,198,0,0,160,1,0,0,0,0,0,0,84,144,0,0,86,198,0,0,72,3,0,0,0,0,0,0,84,144,0,0,162,198,0,0,56,2,0,0,0,0,0,0,44,144,0,0,182,198,0,0,84,144,0,0,196,198,0,0,56,2,0,0,0,0,0,0,84,144,0,0,112,199,0,0,96,2,0,0,0,0,0,0,44,144,0,0,125,199,0,0,84,144,0,0,138,199,0,0,96,2,0,0,0,0,0,0,44,144,0,0,156,199,0,0,84,144,0,0,169,199,0,0,96,2,0,0,0,0,0,0,84,144,0,0,181,199,0,0,120,2,0,0,0,0,0,0,84,144,0,0,214,199,0,0,144,2,0,0,0,0,0,0,84,144,0,0,28,200,0,0,144,2,0,0,0,0,0,0,84,144,0,0,248,199,0,0,176,2,0,0,0,0,0,0,84,144,0,0,62,200,0,0,160,2,0,0,0,0,0,0,84,144,0,0,99,200,0,0,160,2,0,0,0,0,0,0,84,144,0,0,182,221,0,0,160,3,0,0,0,0,0,0,84,144,0,0,245,221,0,0,160,3,0,0,0,0,0,0,84,144,0,0,13,222,0,0,152,3,0,0,0,0,0,0,84,144,0,0,38,222,0,0,152,3,0,0,0,0,0,0,44,144,0,0,62,222,0,0,84,144,0,0,87,222,0,0,104,2,0,0,0,0,0,0,44,144,0,0,110,222,0,0,84,144,0,0,135,222,0,0,72,3,0,0,0,0,0,0,84,144,0,0,161,222,0,0,56,3,0,0,0,0,0,0,44,144,0,0,187,222,0,0,84,144,0,0,205,222,0,0,112,3,0,0,0,0,0,0,84,144,0,0,247,222,0,0,112,3,0,0,0,0,0,0,44,144,0,0,33,223,0,0,44,144,0,0,82,223,0,0,124,144,0,0,131,223,0,0,0,0,0,0,1,0,0,0,120,3,0,0,3,244,255,255,124,144,0,0,178,223,0,0,0,0,0,0,1,0,0,0,136,3,0,0,3,244,255,255,124,144,0,0,225,223,0,0,0,0,0,0,1,0,0,0,120,3,0,0,3,244,255,255,124,144,0,0,16,224,0,0,0,0,0,0,1,0,0,0,136,3,0,0,3,244,255,255,84,144,0,0,63,224,0,0,80,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,144,0,0,187,224,0,0,48,3,0,0,0,0,0,0,124,144,0,0,209,224,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,64,10,0,0,2,0,0,0,124,144,0,0,227,224,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,124,144,0,0,5,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,124,144,0,0,40,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,84,144,0,0,75,225,0,0,144,4,0,0,0,0,0,0,84,144,0,0,109,225,0,0,144,4,0,0,0,0,0,0,124,144,0,0,144,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,72,10,0,0,2,0,0,0,84,144,0,0,178,225,0,0,32,4,0,0,0,0,0,0,84,144,0,0,200,225,0,0,32,4,0,0,0,0,0,0,84,144,0,0,220,225,0,0,32,4,0,0,0,0,0,0,124,144,0,0,240,225,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,64,10,0,0,2,0,0,0,84,144,0,0,2,226,0,0,32,4,0,0,0,0,0,0,84,144,0,0,23,226,0,0,32,4,0,0,0,0,0,0,124,144,0,0,44,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,80,10,0,0,0,0,0,0,124,144,0,0,112,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,104,10,0,0,0,0,0,0,124,144,0,0,180,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,128,10,0,0,0,0,0,0,124,144,0,0,248,226,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,152,10,0,0,0,0,0,0,124,144,0,0,60,227,0,0,0,0,0,0,3,0,0,0,32,4,0,0,2,0,0,0,176,10,0,0,2,0,0,0,184,10,0,0,0,8,0,0,124,144,0,0,129,227,0,0,0,0,0,0,3,0,0,0,32,4,0,0,2,0,0,0,176,10,0,0,2,0,0,0,192,10,0,0,0,8,0,0,124,144,0,0,198,227,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,200,10,0,0,0,8,0,0,124,144,0,0,11,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,200,10,0,0,0,8,0,0,124,144,0,0,80,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,108,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,136,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,164,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,208,10,0,0,2,0,0,0,124,144,0,0,192,228,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,216,10,0,0,0,0,0,0,124,144,0,0,6,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,224,10,0,0,0,0,0,0,124,144,0,0,76,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,232,10,0,0,0,0,0,0,124,144,0,0,146,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,240,10,0,0,0,0,0,0,124,144,0,0,216,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,248,10,0,0,2,0,0,0,124,144,0,0,237,229,0,0,0,0,0,0,2,0,0,0,32,4,0,0,2,0,0,0,248,10,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,144,0,0,73,233,0,0,44,144,0,0,50,233,0,0,124,144,0,0,28,233,0,0,0,0,0,0,1,0,0,0,8,11,0,0,0,0,0,0,124,144,0,0,237,232,0,0,0,0,0,0,1,0,0,0,8,11,0,0,0,0,0,0,124,144,0,0,215,232,0,0,0,0,0,0,1,0,0,0,0,11,0,0,0,0,0,0,124,144,0,0,168,232,0,0,0,0,0,0,1,0,0,0,0,11,0,0,0,0,0,0,44,144,0,0,149,232,0,0,44,144,0,0,115,232,0,0,44,144,0,0,81,232,0,0,44,144,0,0,60,232,0,0,44,144,0,0,39,232,0,0,44,144,0,0,14,232,0,0,44,144,0,0,245,231,0,0,44,144,0,0,220,231,0,0,44,144,0,0,195,231,0,0,44,144,0,0,171,231,0,0,44,144,0,0,190,232,0,0,44,144,0,0,3,233],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([156,143,0,0,0,0,0,0,8,2,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,248,1,0,0,3,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,232,1,0,0,5,0,0,0,6,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,216,1,0,0,7,0,0,0,8,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,200,1,0,0,9,0,0,0,10,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,184,1,0,0,11,0,0,0,12,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,168,1,0,0,13,0,0,0,14,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,144,1,0,0,15,0,0,0,16,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,128,1,0,0,17,0,0,0,18,0,0,0,9,0,0,0,1,0,0,0,9,0,0,0,0,0,0,0,112,1,0,0,19,0,0,0,20,0,0,0,10,0,0,0,2,0,0,0,10,0,0,0,0,0,0,0,96,1,0,0,21,0,0,0,22,0,0,0,11,0,0,0,3,0,0,0,11,0,0,0,0,0,0,0,80,1,0,0,23,0,0,0,24,0,0,0,12,0,0,0,4,0,0,0,12,0,0,0,0,0,0,0,64,1,0,0,25,0,0,0,26,0,0,0,13,0,0,0,5,0,0,0,13,0,0,0,0,0,0,0,240,0,0,0,27,0,0,0,28,0,0,0,14,0,0,0,6,0,0,0,14,0,0,0,0,0,0,0,224,0,0,0,29,0,0,0,30,0,0,0,15,0,0,0,7,0,0,0,15,0,0,0,0,0,0,0,16,0,0,0,31,0,0,0,32,0,0,0,16,0,0,0,8,0,0,0,16,0,0,0,0,0,0,0,200,0,0,0,33,0,0,0,34,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,184,0,0,0,33,0,0,0,35,0,0,0,3,0,0,0,4,0,0,0,56,0,0,0,0,0,0,0,216,3,0,0,36,0,0,0,37,0,0,0,200,255,255,255,200,255,255,255,216,3,0,0,38,0,0,0,39,0,0,0,56,0,0,0,0,0,0,0,104,0,0,0,40,0,0,0,41,0,0,0,200,255,255,255,200,255,255,255,104,0,0,0,42,0,0,0,43,0,0,0,0,0,0,0,88,0,0,0,44,0,0,0,45,0,0,0,17,0,0,0,1,0,0,0,1,0,0,0,5,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,17,0,0,0,3,0,0,0,18,0,0,0,104,141,0,0,64,141,0,0,84,141,0,0,124,141,0,0,0,0,0,0,32,0,0,0,46,0,0,0,47,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,56,0,0,0,48,0,0,0,49,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,72,0,0,0,50,0,0,0,51,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,120,0,0,0,52,0,0,0,53,0,0,0,12,0,0,0,13,0,0,0,0,0,0,0,136,0,0,0,54,0,0,0,55,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,152,0,0,0,56,0,0,0,57,0,0,0,16,0,0,0,17,0,0,0,0,0,0,0,168,0,0,0,58,0,0,0,59,0,0,0,18,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,0,0,0,0,216,0,0,0,60,0,0,0,61,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,62,0,0,0,63,0,0,0,20,0,0,0,21,0,0,0,0,0,0,0,16,1,0,0,64,0,0,0,65,0,0,0,22,0,0,0,23,0,0,0,0,0,0,0,32,1,0,0,66,0,0,0,67,0,0,0,24,0,0,0,25,0,0,0,0,0,0,0,48,1,0,0,68,0,0,0,69,0,0,0,26,0,0,0,27,0,0,0,0,0,0,0,160,1,0,0,70,0,0,0,71,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,24,2,0,0,72,0,0,0,73,0,0,0,5,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,0,0,0,0,40,2,0,0,74,0,0,0,75,0,0,0,18,0,0,0,0,0,0,0,64,2,0,0,76,0,0,0,77,0,0,0,19,0,0,0,2,0,0,0,0,0,0,0,80,2,0,0,78,0,0,0,79,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,104,2,0,0,80,0,0,0,81,0,0,0,7,0,0,0,0,0,0,0,128,2,0,0,82,0,0,0,83,0,0,0,8,0,0,0,0,0,0,0,160,2,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,6,0,0,0,2,0,0,0,9,0,0,0,28,0,0,0,0,0,0,0,208,2,0,0,84,0,0,0,88,0,0,0,86,0,0,0,87,0,0,0,6,0,0,0,3,0,0,0,10,0,0,0,29,0,0,0,0,0,0,0,224,2,0,0,84,0,0,0,89,0,0,0,86,0,0,0,87,0,0,0,6,0,0,0,4,0,0,0,11,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,1,203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,192,3,0,0,192,4,0,0,192,5,0,0,192,6,0,0,192,7,0,0,192,8,0,0,192,9,0,0,192,10,0,0,192,11,0,0,192,12,0,0,192,13,0,0,192,14,0,0,192,15,0,0,192,16,0,0,192,17,0,0,192,18,0,0,192,19,0,0,192,20,0,0,192,21,0,0,192,22,0,0,192,23,0,0,192,24,0,0,192,25,0,0,192,26,0,0,192,27,0,0,192,28,0,0,192,29,0,0,192,30,0,0,192,31,0,0,192,0,0,0,179,1,0,0,195,2,0,0,195,3,0,0,195,4,0,0,195,5,0,0,195,6,0,0,195,7,0,0,195,8,0,0,195,9,0,0,195,10,0,0,195,11,0,0,195,12,0,0,195,13,0,0,211,14,0,0,195,15,0,0,195,0,0,12,187,1,0,12,195,2,0,12,195,3,0,12,195,4,0,12,211,88,146,0,0,200,146,0,0,56,147,0,0,56,147,0,0,120,187,0,0,168,155,0,0,168,149,0,0,0,0,0,0,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,9,0,0,0,159,219,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,9,0,0,0,151,215,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,9,0,0,0,143,211,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0,70,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,89,0,0,0,90,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+35640);allocate([1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,91,0,0,0,92,0,0,0,93,0,0,0,94,0,0,0,95,0,0,0,96,0,0,0,97,0,0,0,98,0,0,0,99,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,103,0,0,0,104,0,0,0,105,0,0,0,106,0,0,0,107,0,0,0,108,0,0,0,109,0,0,0,110,0,0,0,111,0,0,0,112,0,0,0,113,0,0,0,114,0,0,0,115,0,0,0,116,0,0,0,117,0,0,0,118,0,0,0,119,0,0,0,120,0,0,0,121,0,0,0,122,0,0,0,123,0,0,0,124,0,0,0,125,0,0,0,126,0,0,0,127],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+39844);allocate([240,2,0,0,90,0,0,0,91,0,0,0,20,0,0,0,12,0,0,0,5,0,0,0,31,0,0,0,10,0,0,0,11,0,0,0,13,0,0,0,12,0,0,0,13,0,0,0,19,0,0,0,14,0,0,0,20,0,0,0,0,0,0,0,0,3,0,0,90,0,0,0,92,0,0,0,21,0,0,0,12,0,0,0,5,0,0,0,31,0,0,0,14,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,16,0,0,0,21,0,0,0,15,0,0,0,22,0,0,0,0,0,0,0,16,3,0,0,93,0,0,0,94,0,0,0,22,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,17,0,0,0,2,0,0,0,2,0,0,0,18,0,0,0,4,0,0,0,23,0,0,0,16,0,0,0,24,0,0,0,0,0,0,0,32,3,0,0,93,0,0,0,95,0,0,0,23,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,19,0,0,0,20,0,0,0,25,0,0,0,3,0,0,0,26,0,0,0,0,0,0,0,56,3,0,0,96,0,0,0,97,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,3,0,0,93,0,0,0,98,0,0,0,17,0,0,0,1,0,0,0,6,0,0,0,32,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,18,0,0,0,4,0,0,0,23,0,0,0,3,0,0,0,26,0,0,0,0,0,0,0,160,3,0,0,90,0,0,0,99,0,0,0,24,0,0,0,12,0,0,0,5,0,0,0,31,0,0,0,14,0,0,0,11,0,0,0,13,0,0,0,12,0,0,0,13,0,0,0,19,0,0,0,15,0,0,0,22,0,0,0,8,0,0,0,0,0,0,0,168,3,0,0,100,0,0,0,101,0,0,0,248,255,255,255,248,255,255,255,168,3,0,0,102,0,0,0,103,0,0,0,8,0,0,0,0,0,0,0,192,3,0,0,104,0,0,0,105,0,0,0,248,255,255,255,248,255,255,255,192,3,0,0,106,0,0,0,107,0,0,0,4,0,0,0,0,0,0,0,216,3,0,0,36,0,0,0,37,0,0,0,252,255,255,255,252,255,255,255,216,3,0,0,38,0,0,0,39,0,0,0,4,0,0,0,0,0,0,0,240,3,0,0,108,0,0,0,109,0,0,0,252,255,255,255,252,255,255,255,240,3,0,0,110,0,0,0,111,0,0,0,0,0,0,0,96,3,0,0,112,0,0,0,113,0,0,0,7,0,0,0,0,0,0,0,112,3,0,0,114,0,0,0,115,0,0,0,0,0,0,0,8,4,0,0,72,0,0,0,116,0,0,0,21,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,117,0,0,0,118,0,0,0,119,0,0,0,1,0,0,0,33,0,0,0,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,5,0,0,120,0,0,0,121,0,0,0,119,0,0,0,2,0,0,0,34,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,5,0,0,122,0,0,0,123,0,0,0,119,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,5,0,0,124,0,0,0,125,0,0,0,119,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,5,0,0,126,0,0,0,127,0,0,0,119,0,0,0,3,0,0,0,4,0,0,0,23,0,0,0,5,0,0,0,24,0,0,0,1,0,0,0,2,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,5,0,0,128,0,0,0,129,0,0,0,119,0,0,0,7,0,0,0,8,0,0,0,25,0,0,0,9,0,0,0,26,0,0,0,3,0,0,0,4,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,5,0,0,130,0,0,0,131,0,0,0,119,0,0,0,22,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,1,0,0,0,248,255,255,255,224,5,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,132,0,0,0,133,0,0,0,119,0,0,0,30,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,2,0,0,0,248,255,255,255,8,6,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,6,0,0,134,0,0,0,135,0,0,0,119,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,6,0,0,136,0,0,0,137,0,0,0,119,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,6,0,0,138,0,0,0,139,0,0,0,119,0,0,0,38,0,0,0,39,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,40,0,0,0,29,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,6,0,0,140,0,0,0,141,0,0,0,119,0,0,0,41,0,0,0,42,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,43,0,0,0,35,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176,6,0,0,142,0,0,0,143,0,0,0,119,0,0,0,44,0,0,0,45,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0,46,0,0,0,41,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,6,0,0,144,0,0,0,145,0,0,0,119,0,0,0,47,0,0,0,48,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,49,0,0,0,47,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,6,0,0,146,0,0,0,147,0,0,0,119,0,0,0,3,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,7,0,0,148,0,0,0,149,0,0,0,119,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,7,0,0,150,0,0,0,151,0,0,0,119,0,0,0,1,0,0,0,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,7,0,0,152,0,0,0,153,0,0,0,119,0,0,0,2,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,7,0,0,154,0,0,0,155,0,0,0,119,0,0,0,19,0,0,0,7,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144,7,0,0,156,0,0,0,157,0,0,0,119,0,0,0,20,0,0,0,8,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,4,0,0,158,0,0,0,159,0,0,0,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,5,0,0,160,0,0,0,161,0,0,0,119,0,0,0,27,0,0,0,21,0,0,0,28,0,0,0,22,0,0,0,29,0,0,0,9,0,0,0,23,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,4,0,0,162,0,0,0,163,0,0,0,119,0,0,0,3,0,0,0,4,0,0,0,12,0,0,0,50,0,0,0,51,0,0,0,13,0,0,0,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,5,0,0,164,0,0,0,165,0,0,0,119,0,0,0,53,0,0,0,54,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,0,0,0,0,80,5,0,0,166,0,0,0,167,0,0,0,119,0,0,0,55,0,0,0,56,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,0,0,0,0,32,4,0,0,168,0,0,0,169,0,0,0,119,0,0,0,0,0,0,0,48,4,0,0,168,0,0,0,170,0,0,0,119,0,0,0,24,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,30,0,0,0,25,0,0,0,31,0,0,0,26,0,0,0,32,0,0,0,13,0,0,0,27,0,0,0,14,0,0,0,0,0,0,0,80,4,0,0,168,0,0,0,171,0,0,0,119,0,0,0,5,0,0,0,6,0,0,0,15,0,0,0,57,0,0,0,58,0,0,0,16,0,0,0,59,0,0,0,0,0,0,0,112,4,0,0,168,0,0,0,172,0,0,0,119,0,0,0,7,0,0,0,8,0,0,0,17,0,0,0,60,0,0,0,61,0,0,0,18,0,0,0,62,0,0,0,0,0,0,0,144,4,0,0,168,0,0,0,173,0,0,0,119,0,0,0,9,0,0,0,10,0,0,0,19,0,0,0,63,0,0,0,64,0,0,0,20,0,0,0,65,0,0,0,0,0,0,0,176,4,0,0,168,0,0,0,174,0,0,0,119,0,0,0,9,0,0,0,10,0,0,0,19,0,0,0,63,0,0,0,64,0,0,0,20,0,0,0,65,0,0,0,0,0,0,0,192,4,0,0,168,0,0,0,175,0,0,0,119,0,0,0,9,0,0,0,10,0,0,0,19,0,0,0,63,0,0,0,64,0,0,0,20,0,0,0,65,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,37,0,0,0,89,0,0,0,45,0,0,0,37,0,0,0,109,0,0,0,45,0,0,0,37,0,0,0,100,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,114,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,102,0,0,0,97,0,0,0,108,0,0,0,115,0,0,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,110,0,0,0,101,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,114,0,0,0,115,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,117,0,0,0,114,0,0,0,100,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,83,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,77,0,0,0,111,0,0,0,110,0,0,0,0,0,0,0,84,0,0,0,117,0,0,0,101,0,0,0,0,0,0,0,87,0,0,0,101,0,0,0,100,0,0,0,0,0,0,0,84,0,0,0,104,0,0,0,117,0,0,0,0,0,0,0,70,0,0,0,114,0,0,0,105,0,0,0,0,0,0,0,83,0,0,0,97,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,114,0,0,0,117,0,0,0,97,0,0,0,114,0,0,0,121,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,99,0,0,0,104,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,105,0,0,0,108,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,121,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,101,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,121,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,117,0,0,0,115,0,0,0,116,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,116,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,111,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,101,0,0,0,109,0,0,0,98,0,0,0,101,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,97,0,0,0,110,0,0,0,0,0,0,0,70,0,0,0,101,0,0,0,98,0,0,0,0,0,0,0,77,0,0,0,97,0,0,0,114,0,0,0,0,0,0,0,65,0,0,0,112,0,0,0,114,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,110,0,0,0,0,0,0,0,74,0,0,0,117,0,0,0,108,0,0,0,0,0,0,0,65,0,0,0,117,0,0,0,103,0,0,0,0,0,0,0,83,0,0,0,101,0,0,0,112,0,0,0,0,0,0,0,79,0,0,0,99,0,0,0,116,0,0,0,0,0,0,0,78,0,0,0,111,0,0,0,118,0,0,0,0,0,0,0,68,0,0,0,101,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,0,0,77,0,0,0,0,0,0,0,80,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,109,0,0,0,47,0,0,0,37,0,0,0,100,0,0,0,47,0,0,0,37,0,0,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,97,0,0,0,32,0,0,0,37,0,0,0,98,0,0,0,32,0,0,0,37,0,0,0,100,0,0,0,32,0,0,0,37,0,0,0,72,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,0,0,0,73,0,0,0,58,0,0,0,37,0,0,0,77,0,0,0,58,0,0,0,37,0,0,0,83,0,0,0,32,0,0,0,37,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,3,32,2,32,2,32,2,32,2,32,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,1,96,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,8,216,4,192,4,192,4,192,4,192,4,192,4,192,4,192,8,213,8,213,8,213,8,213,8,213,8,213,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,8,197,4,192,4,192,4,192,4,192,4,192,4,192,8,214,8,214,8,214,8,214,8,214,8,214,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,8,198,4,192,4,192,4,192,4,192,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,97,119,83,116,114,101,97,109,32,111,114,32,114,97,119,68,97,116,97,32,110,101,101,100,115,32,116,111,32,114,101,102,101,114,101,110,99,101,32,116,111,32,115,111,109,101,116,104,105,110,103,0,119,105,100,116,104,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,49,44,32,54,53,53,51,53,93,0,104,101,105,103,104,116,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,49,44,32,54,53,53,51,53,93,0,98,105,116,115,112,101,114,115,97,109,112,108,101,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,50,44,32,49,54,93,0,105,110,116,101,114,108,101,97,118,101,77,111,100,101,32,110,101,101,100,115,32,116,111,32,98,101,32,115,101,116,32,116,111,32,97,32,118,97,108,117,101,32,111,102,32,123,78,111,110,101,44,32,83,97,109,112,108,101,44,32,76,105,110,101,125,0,99,111,109,112,111,110,101,110,116,115,32,110,101,101,100,115,32,116,111,32,98,101,32,105,110,32,116,104,101,32,114,97,110,103,101,32,91,49,44,32,50,53,53,93,0,117,110,99,111,109,112,114,101,115,115,101,100,32,115,105,122,101,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,119,105,116,104,32,116,104,101,32,111,116,104,101,114,32,112,97,114,97,109,101,116,101,114,115,0,105,110,116,101,114,108,101,97,118,101,77,111,100,101,32,99,97,110,110,111,116,32,98,101,32,115,101,116,32,116,111,32,83,97,109,112,108,101,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,99,111,109,112,111,110,101,110,116,115,32,61,32,52,0,105,110,116,101,114,108,101,97,118,101,77,111,100,101,32,99,97,110,32,111,110,108,121,32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,32,105,110,32,99,111,109,98,105,110,97,116,105,111,110,32,119,105,116,104,32,99,111,109,112,111,110,101,110,116,115,32,61,32,49,0,67,111,108,111,114,32,116,114,97,110,115,102,111,114,109,97,116,105,111,110,32,0,78,111,32,109,111,114,101,32,98,121,116,101,115,32,97,118,97,105,108,97,98,108,101,32,105,110,32,105,110,112,117,116,32,98,117,102,102,101,114,44,32,115,116,105,108,108,32,110,101,101,100,101,100,105,110,103,32,0,65,110,32,111,100,100,32,110,117,109,98,101,114,32,111,102,32,98,121,116,101,115,32,40,0,41,32,99,97,110,110,111,116,32,98,101,32,115,119,97,112,112,101,100,46,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,54,84,114,97,110,115,102,111,114,109,83,104,105,102,116,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,51,73,116,69,69,69,0,49,49,80,114,111,99,101,115,115,76,105,110,101,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,54,84,114,97,110,115,102,111,114,109,83,104,105,102,116,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,50,73,116,69,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,54,84,114,97,110,115,102,111,114,109,83,104,105,102,116,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,49,73,116,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,105,110,103,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,57,98,97,115,105,99,95,111,115,116,114,105,110,103,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,78,83,95,57,97,108,108,111,99,97,116,111,114,73,99,69,69,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,51,73,116,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,50,73,116,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,49,73,116,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,51,84,114,97,110,115,102,111,114,109,78,111,110,101,73,116,69,69,0,50,50,80,111,115,116,80,114,111,99,101,115,83,105,110,103,108,101,83,116,114,101,97,109,0,50,53,80,111,115,116,80,114,111,99,101,115,83,105,110,103,108,101,67,111,109,112,111,110,101,110,116,0,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,116,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,55,84,114,105,112,108,101,116,73,116,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,51,73,104,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,50,73,104,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,50,84,114,97,110,115,102,111,114,109,72,112,49,73,104,69,69,0,49,56,80,114,111,99,101,115,115,84,114,97,110,115,102,111,114,109,101,100,73,49,51,84,114,97,110,115,102,111,114,109,78,111,110,101,73,104,69,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,55,84,114,105,112,108,101,116,73,104,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,54,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,50,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,104,76,105,56,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,55,84,114,105,112,108,101,116,73,104,69,76,105,56,69,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,104,69,49,53,69,110,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,116,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,116,55,84,114,105,112,108,101,116,73,116,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,55,84,114,105,112,108,101,116,73,104,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,54,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,116,76,105,49,50,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,104,76,105,56,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,53,76,111,115,115,108,101,115,115,84,114,97,105,116,115,84,73,55,84,114,105,112,108,101,116,73,104,69,76,105,56,69,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,56,74,108,115,67,111,100,101,99,73,49,52,68,101,102,97,117,108,116,84,114,97,105,116,115,84,73,104,104,69,49,53,68,101,99,111,100,101,114,83,116,114,97,116,101,103,121,69,0,67,104,97,114,76,83,32,101,114,114,111,114,0,99,104,97,114,108,115,0,49,53,99,104,97,114,108,115,95,99,97,116,101,103,111,114,121,0,112,97,114,97,109,115,46,88,116,104,117,109,98,110,97,105,108,32,105,115,32,62,32,48,32,98,117,116,32,112,97,114,97,109,115,46,116,104,117,109,98,110,97,105,108,32,61,61,32,110,117,108,108,95,112,116,114,0,49,55,74,112,101,103,77,97,114,107,101,114,83,101,103,109,101,110,116,0,49,49,74,112,101,103,83,101,103,109,101,110,116,0,50,48,74,112,101,103,73,109,97,103,101,68,97,116,97,83,101,103,109,101,110,116,0,69,120,112,101,99,116,101,100,32,74,80,69,71,32,77,97,114,107,101,114,32,115,116,97,114,116,32,98,121,116,101,32,48,120,70,70,32,98,117,116,32,116,104,101,32,98,121,116,101,32,118,97,108,117,101,32,119,97,115,32,48,120,0,74,80,69,71,32,101,110,99,111,100,105,110,103,32,119,105,116,104,32,109,97,114,107,101,114,32,0,32,105,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,46,0,85,110,107,110,111,119,110,32,74,80,69,71,32,109,97,114,107,101,114,32,0,32,101,110,99,111,117,110,116,101,114,101,100,46,0,109,114,102,120,0,83,116,57,98,97,100,95,97,108,108,111,99,0,83,116,57,101,120,99,101,112,116,105,111,110,0,83,116,49,51,114,117,110,116,105,109,101,95,101,114,114,111,114,0,83,116,57,116,121,112,101,95,105,110,102,111,0,83,116,56,98,97,100,95,99,97,115,116,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,49,95,95,118,109,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,33,34,98,97,115,105,99,95,115,116,114,105,110,103,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,99,104,97,102,101,121,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,49,46,51,53,46,48,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,115,116,114,105,110,103,0,95,95,116,104,114,111,119,95,108,101,110,103,116,104,95,101,114,114,111,114,0,33,34,118,101,99,116,111,114,32,108,101,110,103,116,104,95,101,114,114,111,114,34,0,47,85,115,101,114,115,47,99,104,97,102,101,121,47,101,109,115,100,107,95,112,111,114,116,97,98,108,101,47,101,109,115,99,114,105,112,116,101,110,47,49,46,51,53,46,48,47,115,121,115,116,101,109,47,105,110,99,108,117,100,101,47,108,105,98,99,120,120,47,118,101,99,116,111,114,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,116,104,114,101,119,32,97,110,32,101,120,99,101,112,116,105,111,110,0,115,116,100,58,58,98,97,100,95,99,97,115,116,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+42396);allocate([32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,105,110,102,105,110,105,116,121,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,4,7,3,6,5,0,80,79,83,73,88],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+52636);allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,119,69,69,0,117,110,115,117,112,112,111,114,116,101,100,32,108,111,99,97,108,101,32,102,111,114,32,115,116,97,110,100,97,114,100,32,105,110,112,117,116,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,115,116,100,111,117,116,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,48,95,95,115,116,100,105,110,98,117,102,73,99,69,69,0,78,83,116,51,95,95,49,49,52,95,95,115,104,97,114,101,100,95,99,111,117,110,116,69,0,78,83,116,51,95,95,49,49,50,115,121,115,116,101,109,95,101,114,114,111,114,69,0,78,83,116,51,95,95,49,49,52,101,114,114,111,114,95,99,97,116,101,103,111,114,121,69,0,78,83,116,51,95,95,49,49,50,95,95,100,111,95,109,101,115,115,97,103,101,69,0,58,32,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,55,102,97,105,108,117,114,101,69,0,78,83,116,51,95,95,49,56,105,111,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,57,98,97,115,105,99,95,105,111,115,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,53,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,105,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,0,78,83,116,51,95,95,49,49,51,98,97,115,105,99,95,111,115,116,114,101,97,109,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,0,78,83,116,51,95,95,49,49,57,95,95,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,69,0,105,111,115,95,98,97,115,101,58,58,99,108,101,97,114,0,105,111,115,116,114,101,97,109,0,117,110,115,112,101,99,105,102,105,101,100,32,105,111,115,116,114,101,97,109,95,99,97,116,101,103,111,114,121,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102,65,66,67,68,69,70,120,88,43,45,112,80,105,73,110,78,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,102,97,99,101,116,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,119,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,99,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,115,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,68,105,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,49,54,95,95,110,97,114,114,111,119,95,116,111,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,49,55,95,95,119,105,100,101,110,95,102,114,111,109,95,117,116,102,56,73,76,106,51,50,69,69,69,0,78,83,116,51,95,95,49,55,99,111,100,101,99,118,116,73,119,99,49,49,95,95,109,98,115,116,97,116,101,95,116,69,69,0,78,83,116,51,95,95,49,54,108,111,99,97,108,101,53,95,95,105,109,112,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,99,69,69,0,78,83,116,51,95,95,49,55,99,111,108,108,97,116,101,73,119,69,69,0,78,83,116,51,95,95,49,53,99,116,121,112,101,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,99,69,69,0,78,83,116,51,95,95,49,56,110,117,109,112,117,110,99,116,73,119,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,55,110,117,109,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,116,105,109,101,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,99,76,98,49,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,48,69,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,112,117,110,99,116,73,119,76,98,49,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,99,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,103,101,116,73,119,78,83,95,49,57,105,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,99,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,99,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,99,69,69,69,69,69,69,0,78,83,116,51,95,95,49,57,109,111,110,101,121,95,112,117,116,73,119,78,83,95,49,57,111,115,116,114,101,97,109,98,117,102,95,105,116,101,114,97,116,111,114,73,119,78,83,95,49,49,99,104,97,114,95,116,114,97,105,116,115,73,119,69,69,69,69,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,99,69,69,0,78,83,116,51,95,95,49,56,109,101,115,115,97,103,101,115,73,119,69,69,0,37,112,0,67,0,37,0,0,0,0,0,108,0,108,108,0,0,76,0,37,112,0,0,0,0,37,72,58,37,77,58,37,83,37,109,47,37,100,47,37,121,37,89,45,37,109,45,37,100,37,73,58,37,77,58,37,83,32,37,112,37,72,58,37,77,37,72,58,37,77,58,37,83,108,111,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,48,49,50,51,52,53,54,55,56,57,0,37,76,102,0,109,111,110,101,121,95,103,101,116,32,101,114,114,111,114,0,48,49,50,51,52,53,54,55,56,57,0,37,46,48,76,102,0,116,114,117,101,0,102,97,108,115,101,0,83,117,110,100,97,121,0,77,111,110,100,97,121,0,84,117,101,115,100,97,121,0,87,101,100,110,101,115,100,97,121,0,84,104,117,114,115,100,97,121,0,70,114,105,100,97,121,0,83,97,116,117,114,100,97,121,0,83,117,110,0,77,111,110,0,84,117,101,0,87,101,100,0,84,104,117,0,70,114,105,0,83,97,116,0,74,97,110,117,97,114,121,0,70,101,98,114,117,97,114,121,0,77,97,114,99,104,0,65,112,114,105,108,0,77,97,121,0,74,117,110,101,0,74,117,108,121,0,65,117,103,117,115,116,0,83,101,112,116,101,109,98,101,114,0,79,99,116,111,98,101,114,0,78,111,118,101,109,98,101,114,0,68,101,99,101,109,98,101,114,0,74,97,110,0,70,101,98,0,77,97,114,0,65,112,114,0,74,117,110,0,74,117,108,0,65,117,103,0,83,101,112,0,79,99,116,0,78,111,118,0,68,101,99,0,65,77,0,80,77,0,37,109,47,37,100,47,37,121,0,37,72,58,37,77,58,37,83,0,37,97,32,37,98,32,37,100,32,37,72,58,37,77,58,37,83,32,37,89,0,37,73,58,37,77,58,37,83,32,37,112,0,78,83,116,51,95,95,49,49,51,109,101,115,115,97,103,101,115,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,49,95,95,109,111,110,101,121,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,48,109,111,110,101,121,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,95,95,116,105,109,101,95,112,117,116,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,119,69,69,0,78,83,116,51,95,95,49,50,48,95,95,116,105,109,101,95,103,101,116,95,99,95,115,116,111,114,97,103,101,73,99,69,69,0,78,83,116,51,95,95,49,57,116,105,109,101,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,112,117,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,112,117,116,73,99,69,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,119,69,69,0,78,83,116,51,95,95,49,49,52,95,95,110,117,109,95,103,101,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,57,95,95,110,117,109,95,103,101,116,73,99,69,69,0,78,83,116,51,95,95,49,49,50,99,111,100,101,99,118,116,95,98,97,115,101,69,0,78,83,116,51,95,95,49,49,48,99,116,121,112,101,95,98,97,115,101,69,0],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+56215);var tempDoublePtr=Runtime.alignMemory(allocate(12,\"i8\",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function _atexit(func,arg){__ATEXIT__.unshift({func:func,arg:arg})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}Module[\"_i64Subtract\"]=_i64Subtract;function ___assert_fail(condition,filename,line,func){ABORT=true;throw\"Assertion failed: \"+Pointer_stringify(condition)+\", at: \"+[filename?Pointer_stringify(filename):\"unknown filename\",line,func?Pointer_stringify(func):\"unknown function\"]+\" at \"+stackTrace()}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall(\"vi\",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm[\"setTempRet0\"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm[\"setTempRet0\"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module[\"___cxa_is_pointer_type\"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(asm[\"setTempRet0\"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm[\"setTempRet0\"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!(\"uncaught_exception\"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr}Module[\"_memset\"]=_memset;var _BDtoILow=true;var _emscripten_resume=true;function ___gxx_personality_v0(){}var _emscripten_landingpad=true;function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]);return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?Pointer_stringify(tm_zone):\"\"};var pattern=Pointer_stringify(format);var EXPANSION_RULES_1={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_1[rule])}var WEEKDAYS=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];var MONTHS=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function leadingSomething(value,digits,character){var str=typeof value===\"number\"?value.toString():value||\"\";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={\"%a\":(function(date){return WEEKDAYS[date.tm_wday].substring(0,3)}),\"%A\":(function(date){return WEEKDAYS[date.tm_wday]}),\"%b\":(function(date){return MONTHS[date.tm_mon].substring(0,3)}),\"%B\":(function(date){return MONTHS[date.tm_mon]}),\"%C\":(function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)}),\"%d\":(function(date){return leadingNulls(date.tm_mday,2)}),\"%e\":(function(date){return leadingSomething(date.tm_mday,2,\" \")}),\"%g\":(function(date){return getWeekBasedYear(date).toString().substring(2)}),\"%G\":(function(date){return getWeekBasedYear(date)}),\"%H\":(function(date){return leadingNulls(date.tm_hour,2)}),\"%I\":(function(date){return leadingNulls(date.tm_hour<13?date.tm_hour:date.tm_hour-12,2)}),\"%j\":(function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)}),\"%m\":(function(date){return leadingNulls(date.tm_mon+1,2)}),\"%M\":(function(date){return leadingNulls(date.tm_min,2)}),\"%n\":(function(){return\"\\n\"}),\"%p\":(function(date){if(date.tm_hour>0&&date.tm_hour<13){return\"AM\"}else{return\"PM\"}}),\"%S\":(function(date){return leadingNulls(date.tm_sec,2)}),\"%t\":(function(){return\"\\t\"}),\"%u\":(function(date){var day=new Date(date.tm_year+1900,date.tm_mon+1,date.tm_mday,0,0,0,0);return day.getDay()||7}),\"%U\":(function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?\"01\":\"00\"}),\"%V\":(function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return\"53\"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return\"01\"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?\"+\":\"-\")+String(\"0000\"+off).slice(-4)}),\"%Z\":(function(date){return date.tm_zone}),\"%%\":(function(){return\"%\"})};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,\"g\"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}function _abort(){Module[\"abort\"]()}function _free(){}Module[\"_free\"]=_free;function ___cxa_free_exception(ptr){try{return _free(ptr)}catch(e){}}function ___cxa_end_catch(){if(___cxa_end_catch.rethrown){___cxa_end_catch.rethrown=false;return}asm[\"setThrew\"](0);var ptr=EXCEPTIONS.caught.pop();if(ptr){EXCEPTIONS.decRef(EXCEPTIONS.deAdjust(ptr));EXCEPTIONS.last=0}}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Runtime.dynCall(\"v\",func);_pthread_once.seen[ptr]=1}function ___lock(){}function ___unlock(){}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}var _fabs=Math_abs;var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}var PATH=undefined;function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method=\"timeout\"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method=\"rAF\"}else if(mode==2){if(!window[\"setImmediate\"]){var setImmediates=[];var emscriptenMainLoopMessageId=\"__emcc\";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener(\"message\",Browser_setImmediate_messageHandler,true);window[\"setImmediate\"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,\"*\")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window[\"setImmediate\"](Browser.mainLoop.runner)};Browser.mainLoop.method=\"immediate\"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module[\"noExitRuntime\"]=true;assert(!Browser.mainLoop.func,\"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.\");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker \"'+blocker.name+'\" took '+(Date.now()-start)+\" ms\");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method===\"timeout\"&&Module.ctx){Module.printErr(\"Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!\");Browser.mainLoop.method=\"\"}Browser.mainLoop.runIter((function(){if(typeof arg!==\"undefined\"){Runtime.dynCall(\"vi\",func,[arg])}else{Runtime.dynCall(\"v\",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw\"SimulateInfiniteLoop\"}}var Browser={mainLoop:{scheduler:null,method:\"\",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module[\"setStatus\"]){var message=Module[\"statusMessage\"]||\"Please wait...\";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src=\"data:audio/x-\"+name.substr(-3)+\";base64,\"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module[\"preloadPlugins\"].push(audioPlugin);var canvas=Module[\"canvas\"];function pointerLockChange(){Browser.pointerLock=document[\"pointerLockElement\"]===canvas||document[\"mozPointerLockElement\"]===canvas||document[\"webkitPointerLockElement\"]===canvas||document[\"msPointerLockElement\"]===canvas}if(canvas){canvas.requestPointerLock=canvas[\"requestPointerLock\"]||canvas[\"mozRequestPointerLock\"]||canvas[\"webkitRequestPointerLock\"]||canvas[\"msRequestPointerLock\"]||(function(){});canvas.exitPointerLock=document[\"exitPointerLock\"]||document[\"mozExitPointerLock\"]||document[\"webkitExitPointerLock\"]||document[\"msExitPointerLock\"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener(\"pointerlockchange\",pointerLockChange,false);document.addEventListener(\"mozpointerlockchange\",pointerLockChange,false);document.addEventListener(\"webkitpointerlockchange\",pointerLockChange,false);document.addEventListener(\"mspointerlockchange\",pointerLockChange,false);if(Module[\"elementPointerLock\"]){canvas.addEventListener(\"click\",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor=\"black\"}else{ctx=canvas.getContext(\"2d\")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx===\"undefined\",\"cannot set in module if GLctx is used, but we are a non-GL context that would replace it\");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer===\"undefined\")Browser.lockPointer=true;if(typeof Browser.resizeCanvas===\"undefined\")Browser.resizeCanvas=false;if(typeof Browser.vrDevice===\"undefined\")Browser.vrDevice=null;var canvas=Module[\"canvas\"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document[\"webkitFullScreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"mozFullscreenElement\"]||document[\"fullScreenElement\"]||document[\"fullscreenElement\"]||document[\"msFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvasContainer){canvas.cancelFullScreen=document[\"cancelFullScreen\"]||document[\"mozCancelFullScreen\"]||document[\"webkitCancelFullScreen\"]||document[\"msExitFullscreen\"]||document[\"exitFullscreen\"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module[\"onFullScreen\"])Module[\"onFullScreen\"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener(\"fullscreenchange\",fullScreenChange,false);document.addEventListener(\"mozfullscreenchange\",fullScreenChange,false);document.addEventListener(\"webkitfullscreenchange\",fullScreenChange,false);document.addEventListener(\"MSFullscreenChange\",fullScreenChange,false)}var canvasContainer=document.createElement(\"div\");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer[\"requestFullScreen\"]||canvasContainer[\"mozRequestFullScreen\"]||canvasContainer[\"msRequestFullscreen\"]||(canvasContainer[\"webkitRequestFullScreen\"]?(function(){canvasContainer[\"webkitRequestFullScreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window===\"undefined\"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window[\"requestAnimationFrame\"]||window[\"mozRequestAnimationFrame\"]||window[\"webkitRequestAnimationFrame\"]||window[\"msRequestAnimationFrame\"]||window[\"oRequestAnimationFrame\"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module[\"noExitRuntime\"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module[\"noExitRuntime\"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{\"jpg\":\"image/jpeg\",\"jpeg\":\"image/jpeg\",\"png\":\"image/png\",\"bmp\":\"image/bmp\",\"ogg\":\"audio/ogg\",\"wav\":\"audio/wav\",\"mp3\":\"audio/mpeg\"}[name.substr(name.lastIndexOf(\".\")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator[\"getUserMedia\"]||navigator[\"mozGetUserMedia\"]}window.getUserMedia(func)}),getMovementX:(function(event){return event[\"movementX\"]||event[\"mozMovementX\"]||event[\"webkitMovementX\"]||0}),getMovementY:(function(event){return event[\"movementY\"]||event[\"mozMovementY\"]||event[\"webkitMovementY\"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case\"DOMMouseScroll\":delta=event.detail;break;case\"mousewheel\":delta=event.wheelDelta;break;case\"wheel\":delta=event[\"deltaY\"];break;default:throw\"unrecognized mouse wheel event: \"+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!=\"mousemove\"&&\"mozMovementX\"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!=\"undefined\"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module[\"canvas\"].getBoundingClientRect();var cw=Module[\"canvas\"].width;var ch=Module[\"canvas\"].height;var scrollX=typeof window.scrollX!==\"undefined\"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!==\"undefined\"?window.scrollY:window.pageYOffset;if(event.type===\"touchstart\"||event.type===\"touchend\"||event.type===\"touchmove\"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type===\"touchstart\"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type===\"touchend\"||event.type===\"touchmove\"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file \"'+url+'\" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency(\"al \"+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file \"'+url+'\" failed.'}}));if(!noRunDep)addRunDependency(\"al \"+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module[\"canvas\"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module[\"canvas\"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module[\"forcedAspectRatio\"]&&Module[\"forcedAspectRatio\"]>0){if(w/h>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module[\"_i64Add\"]=_i64Add;Module[\"_bitshift64Lshr\"]=_bitshift64Lshr;function ___cxa_pure_virtual(){ABORT=true;throw\"Pure virtual function called!\"}var _BDtoIHigh=true;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall(\"vi\",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cond_broadcast(){return 0}function ___cxa_guard_acquire(variable){if(!HEAP8[variable>>0]){HEAP8[variable>>0]=1;return 1}return 0}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,\"cannot pop if something else added meanwhile!\");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function ___cxa_guard_release(){}function ___cxa_begin_catch(ptr){__ZSt18uncaught_exceptionv.uncaught_exception--;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}function _llvm_eh_typeid_for(type){return type}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module[\"_memcpy\"]=_memcpy;function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _pthread_mutex_lock(){}var _emscripten_postinvoke=true;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort(\"cannot dynamically allocate, sbrk now has control\")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}Module[\"_bitshift64Shl\"]=_bitshift64Shl;function ___cxa_guard_abort(){}Module[\"_memmove\"]=_memmove;var _emscripten_preinvoke=true;var _BItoD=true;function _pthread_cond_wait(){return 0}function ___cxa_rethrow(){___cxa_end_catch.rethrown=true;var ptr=EXCEPTIONS.caught.pop();EXCEPTIONS.last=ptr;throw ptr}function _pthread_mutex_unlock(){}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer)___syscall146.buffer=[];var buffer=___syscall146.buffer;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function $b(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function ac(a){a=a|0;D=a}function bc(){return D|0}function cc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+128|0;p=w+44|0;s=w+8|0;l=w+4|0;n=w;q=e+4|0;r=e+8|0;o=0;Aa(35,c[e>>2]|0,c[q>>2]|0,c[r>>2]|0,f|0);m=o;o=0;if(!(m&1)){j=p;h=j+84|0;do{c[j>>2]=c[f>>2];j=j+4|0;f=f+4|0}while((j|0)<(h|0));f=p+12|0;if((c[f>>2]|0)==0?(k=$(((c[p+8>>2]|0)+7|0)/8|0,c[p>>2]|0)|0,c[f>>2]=k,(c[p+24>>2]|0)!=0):0)c[f>>2]=$(c[p+16>>2]|0,k)|0;o=0;ha(176,s|0);m=o;o=0;if(!(m&1)){f=p+56|0;do if(c[f>>2]|0){o=0;f=ka(66,f|0)|0;m=o;o=0;if(!(m&1)){c[l>>2]=f;h=s+28|0;j=c[h>>2]|0;if(j>>>0<(c[s+32>>2]|0)>>>0){c[j>>2]=f;c[h>>2]=j+4;c[l>>2]=0;t=19;break}o=0;ia(57,s+24|0,l|0);m=o;o=0;if(m&1){h=Na(824,0)|0;f=D;j=c[l>>2]|0;c[l>>2]=0;if(!j)break;Bb[c[(c[j>>2]|0)+4>>2]&255](j);break}else{f=c[l>>2]|0;c[l>>2]=0;if(!f){t=19;break}Bb[c[(c[f>>2]|0)+4>>2]&255](f);t=19;break}}else t=15}else t=19;while(0);a:do if((t|0)==19){j=p+4|0;k=p+8|0;l=p+16|0;o=0;f=va(14,c[p>>2]|0,c[j>>2]|0,c[k>>2]|0,c[l>>2]|0)|0;m=o;o=0;if(!(m&1)){c[n>>2]=f;m=s+28|0;h=c[m>>2]|0;do if(h>>>0>=(c[s+32>>2]|0)>>>0){o=0;ia(57,s+24|0,n|0);h=o;o=0;if(h&1){h=Na(824,0)|0;f=D;j=c[n>>2]|0;c[n>>2]=0;if(!j)break a;Bb[c[(c[j>>2]|0)+4>>2]&255](j);break a}else{f=c[n>>2]|0;c[n>>2]=0;if(!f)break;Bb[c[(c[f>>2]|0)+4>>2]&255](f);break}}else{c[h>>2]=f;c[m>>2]=h+4;c[n>>2]=0}while(0);f=c[p+28>>2]|0;if((f|0)!=0?(o=0,ia(58,s|0,f|0),t=o,o=0,t&1):0){t=15;break}b:do if(!(c[p+24>>2]|0)){f=$(c[j>>2]|0,c[p>>2]|0)|0;f=$(f,((c[k>>2]|0)+7|0)/8|0)|0;if((c[l>>2]|0)>0){j=0;while(1){o=0;wa(4,s|0,e|0,p|0);t=o;o=0;if(t&1)break;h=c[q>>2]|0;if(h){c[q>>2]=h+f;c[r>>2]=(c[r>>2]|0)-f}j=j+1|0;if((j|0)>=(c[l>>2]|0))break b}h=Na(824,0)|0;f=D;t=16;break a}}else{o=0;wa(4,s|0,e|0,p|0);t=o;o=0;if(t&1){t=15;break a}}while(0);o=0;ra(33,s|0,b|0)|0;t=o;o=0;if(!(t&1)){c[d>>2]=c[s+16>>2];if(g)a[g>>0]=0;j=s+24|0;f=c[j>>2]|0;if(f){h=c[m>>2]|0;if((h|0)!=(f|0)){do{g=h+-4|0;c[m>>2]=g;h=c[g>>2]|0;c[g>>2]=0;if(h)Bb[c[(c[h>>2]|0)+4>>2]&255](h);h=c[m>>2]|0}while((h|0)!=(f|0));f=c[j>>2]|0}cj(f)}g=0;i=w;return g|0}else t=15}else t=15}while(0);if((t|0)==15){h=Na(824,0)|0;f=D;t=16}m=s+24|0;j=c[m>>2]|0;if(j){l=s+28|0;k=c[l>>2]|0;if((k|0)!=(j|0)){do{s=k+-4|0;c[l>>2]=s;k=c[s>>2]|0;c[s>>2]=0;if(k)Bb[c[(c[k>>2]|0)+4>>2]&255](k);k=c[l>>2]|0}while((k|0)!=(j|0));j=c[m>>2]|0}cj(j)}}else t=5}else t=5;if((t|0)==5){h=Na(824,0)|0;f=D}s=(f|0)==(Ta(824)|0);k=Va(h|0)|0;f=(g|0)==0;if(!s){if(!f)a[g>>0]=0;Xa();g=14;i=w;return g|0}j=k+12|0;do if(!f){f=c[j>>2]|0;o=0;h=ua(1)|0;s=o;o=0;if(!(s&1))if((f|0)==(h|0)){ml(g,Eb[c[(c[k>>2]|0)+8>>2]&127](k)|0)|0;t=60;break}else{a[g>>0]=0;t=60;break}}else t=60;while(0);if((t|0)==60?(u=c[j>>2]|0,o=0,v=ua(1)|0,g=o,o=0,!(g&1)):0){g=(u|0)==(v|0)?c[k+8>>2]|0:13;Xa();i=w;return g|0}f=Na()|0;o=0;xa(3);w=o;o=0;if(w&1){w=Na(0)|0;ec(w)}else Ya(f|0);return 0}function dc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;l=i;i=i+112|0;g=l+96|0;k=l+84|0;m=l+72|0;n=l+60|0;p=l+48|0;q=l+36|0;r=l+24|0;s=l+12|0;t=l;j=(b|0)==0;if((a|0)==0&j){f=Ma(16)|0;o=0;wa(5,g|0,48504,52);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,g|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(g);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}h=c[e>>2]|0;if((h+-1|0)>>>0>65534){f=Ma(16)|0;o=0;wa(5,k|0,48557,41);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,k|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(k);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}g=c[e+4>>2]|0;if((g+-1|0)>>>0>65534){f=Ma(16)|0;o=0;wa(5,m|0,48599,42);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,m|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(m);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}f=c[e+8>>2]|0;if((f+-2|0)>>>0>14){f=Ma(16)|0;o=0;wa(5,n|0,48642,46);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,n|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(n);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}a=c[e+24>>2]|0;if(a>>>0>=3){f=Ma(16)|0;o=0;wa(5,p|0,48689,65);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,p|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(p);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}b=c[e+16>>2]|0;if((b+-1|0)>>>0>254){f=Ma(16)|0;o=0;wa(5,q|0,48755,44);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,q|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(q);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}if(!j?(q=$(g,h)|0,($($(q,(f|0)>8?2:1)|0,b)|0)>>>0>d>>>0):0){f=Ma(16)|0;o=0;wa(5,r|0,48800,58);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,r|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(r);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}switch(b|0){case 4:{if((a|0)!=2){i=l;return}f=Ma(16)|0;o=0;wa(5,s|0,48859,73);t=o;o=0;if(!(t&1)){o=0;b=ua(1)|0;t=o;o=0;if(!(t&1)?(o=0,Aa(36,f|0,1,b|0,s|0),t=o,o=0,!(t&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(s);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}case 3:{i=l;return}default:{if(!a){i=l;return}f=Ma(16)|0;o=0;wa(5,t|0,48933,73);s=o;o=0;if(!(s&1)){o=0;b=ua(1)|0;s=o;o=0;if(!(s&1)?(o=0,Aa(36,f|0,1,b|0,t|0),s=o,o=0,!(s&1)):0){o=0;wa(6,f|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(t);if(!a){t=b;Ya(t|0)}}else b=Na()|0;La(f|0);t=b;Ya(t|0)}}}function ec(a){a=a|0;Va(a|0)|0;jj()}function fc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;h=n+116|0;j=n;o=0;c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];ia(59,j|0,h|0);g=o;o=0;if(!(g&1)){if(e){g=j+16|0;d=g+84|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(d|0))}o=0;c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];ia(60,j|0,h|0);j=o;o=0;if(!(j&1)){if(f)a[f>>0]=0;m=0;i=n;return m|0}}b=Na(824,0)|0;j=D;j=(j|0)==(Ta(824)|0);b=Va(b|0)|0;d=(f|0)==0;if(!j){if(!d)a[f>>0]=0;Xa();m=14;i=n;return m|0}g=b+12|0;do if(!d){d=c[g>>2]|0;o=0;e=ua(1)|0;j=o;o=0;if(!(j&1))if((d|0)==(e|0)){ml(f,Eb[c[(c[b>>2]|0)+8>>2]&127](b)|0)|0;m=10;break}else{a[f>>0]=0;m=10;break}}else m=10;while(0);if((m|0)==10?(k=c[g>>2]|0,o=0,l=ua(1)|0,m=o,o=0,!(m&1)):0){m=(k|0)==(l|0)?c[b+8>>2]|0:13;Xa();i=n;return m|0}d=Na()|0;o=0;xa(3);n=o;o=0;if(n&1){n=Na(0)|0;ec(n)}else Ya(d|0);return 0}function gc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+128|0;g=l+116|0;f=l;o=0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];ia(59,f|0,g|0);g=o;o=0;if((!(g&1)?(o=0,ha(177,f|0),g=o,o=0,!(g&1)):0)?(o=0,ia(61,f|0,1),g=o,o=0,!(g&1)):0){b=f+16|0;f=d+84|0;do{c[d>>2]=c[b>>2];d=d+4|0;b=b+4|0}while((d|0)<(f|0));if(e)a[e>>0]=0;e=0;i=l;return e|0}g=Na(824,0)|0;d=D;d=(d|0)==(Ta(824)|0);g=Va(g|0)|0;b=(e|0)==0;if(!d){if(!b)a[e>>0]=0;Xa();e=14;i=l;return e|0}d=g+12|0;do if(!b){b=c[d>>2]|0;o=0;f=ua(1)|0;m=o;o=0;if(!(m&1))if((b|0)==(f|0)){ml(e,Eb[c[(c[g>>2]|0)+8>>2]&127](g)|0)|0;k=13;break}else{a[e>>0]=0;k=13;break}}else k=13;while(0);if((k|0)==13?(h=c[d>>2]|0,o=0,j=ua(1)|0,m=o,o=0,!(m&1)):0){m=(h|0)==(j|0)?c[g+8>>2]|0:13;Xa();i=l;return m|0}b=Na()|0;o=0;xa(3);m=o;o=0;if(m&1){m=Na(0)|0;ec(m)}else Ya(b|0);return 0}function hc(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+48|0;k=n+36|0;j=n+24|0;l=n+12|0;m=n;if(!((a|0)!=0&(d|0)!=0&(e|0)!=0&(g|0)!=0)){f=1;i=n;return f|0}c[l>>2]=0;c[l+4>>2]=a;c[l+8>>2]=b;c[m>>2]=0;c[m+4>>2]=e;c[m+8>>2]=f;c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];f=cc(j,d,k,g,h)|0;i=n;return f|0}function ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+32|0;g=f+12|0;h=f;j=h;c[j>>2]=0;c[j+4>>2]=0;c[h+4>>2]=a;c[h+8>>2]=b;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];d=gc(g,d,e)|0;i=f;return d|0}function jc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+48|0;j=h+36|0;k=h+24|0;m=h+12|0;l=h;c[m>>2]=0;c[m+4>>2]=a;c[m+8>>2]=b;c[l>>2]=0;c[l+4>>2]=d;c[l+8>>2]=e;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];e=fc(k,j,f,g)|0;i=h;return e|0}function kc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=a+4|0;d=c[a>>2]|0;f=((c[k>>2]|0)-d>>2)+1|0;if(f>>>0>1073741823){$i(a);d=c[a>>2]|0}l=a+8|0;e=(c[l>>2]|0)-d|0;if(e>>2>>>0<536870911){e=e>>1;e=e>>>0>>0?f:e;d=(c[k>>2]|0)-d>>2;if(!e){g=0;h=0}else i=6}else{e=1073741823;d=(c[k>>2]|0)-d>>2;i=6}if((i|0)==6){g=e;h=bj(e<<2)|0}f=h+(d<<2)|0;e=f;j=h+(g<<2)|0;i=c[b>>2]|0;c[b>>2]=0;c[f>>2]=i;i=h+(d+1<<2)|0;h=c[a>>2]|0;d=c[k>>2]|0;if((d|0)==(h|0)){f=a;g=k}else{do{d=d+-4|0;b=c[d>>2]|0;c[d>>2]=0;c[f+-4>>2]=b;f=e+-4|0;e=f}while((d|0)!=(h|0));d=e;f=a;g=k;e=d;h=c[a>>2]|0;d=c[k>>2]|0}c[f>>2]=e;c[g>>2]=i;c[l>>2]=j;f=h;if((d|0)!=(f|0))do{d=d+-4|0;e=c[d>>2]|0;c[d>>2]=0;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e)}while((d|0)!=(f|0));if(!h)return;cj(h);return}function lc(){if(a[8]|0)return 35648;if(!(Ha(8)|0))return 35648;kb(72,35648,n|0)|0;Pa(8);return 35648}function mc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;l=n;Ei(l,(1<>2]|0;m=h+1|0;e=m<<1;c[b>>2]=0;j=b+4|0;c[j>>2]=0;c[b+8>>2]=0;a:do if(m){if(!((h|0)<-1?(o=0,ha(178,b|0),k=o,o=0,k&1):0))f=4;if((f|0)==4?(o=0,g=ka(67,e|0)|0,k=o,o=0,!(k&1)):0){c[j>>2]=g;c[b>>2]=g;c[b+8>>2]=g+e;d=g;while(1){a[d>>0]=0;d=(c[j>>2]|0)+1|0;c[j>>2]=d;e=e+-1|0;if(!e)break a}}e=Na()|0;d=c[b>>2]|0;if(!d)Ya(e|0);if((c[j>>2]|0)!=(d|0))c[j>>2]=d;cj(d);Ya(e|0)}while(0);d=~h;if((h|0)<(d|0)){i=n;return}j=l+12|0;k=l+8|0;h=l+4|0;g=d;do{d=c[j>>2]|0;if((g|0)>(0-d|0)){e=c[k>>2]|0;if((g|0)>(0-e|0)){f=c[h>>2]|0;if((g|0)>(0-f|0))if((g|0)>=0)if((g|0)>0)if((f|0)<=(g|0))if((e|0)>(g|0))d=2;else d=(d|0)>(g|0)?3:4;else d=1;else d=0;else d=-1;else d=-2}else d=-3}else d=-4;a[(c[b>>2]|0)+(g+m)>>0]=d;g=g+1|0}while((g|0)<(m|0));i=n;return}function nc(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=c[f+16>>2]|0;switch(q|0){case 64:case 0:{o=0;d=ra(34,d|0,e|0)|0;e=o;o=0;if(e&1)r=16;else g=d;break}default:{h=(1<>2])+-1|0;p=c[e+20>>2]|0;n=p<<1;n=((n+h|0)/(n|1|0)|0)+1|0;d=0;while(1)if((1<>2]|0;o=0;g=ka(67,4624)|0;m=o;o=0;if(m&1)r=16;else{i=((j|0)<8?8:j)+j<<1;k=g+4|0;l=e;m=k+84|0;do{c[k>>2]=c[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));k=g+88|0;m=k+40|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));c[g>>2]=35660;c[g+128>>2]=h;c[g+132>>2]=n;c[g+136>>2]=p;c[g+140>>2]=d;c[g+144>>2]=j;c[g+148>>2]=i;c[g+152>>2]=q;d=g+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+172>>2]=c[e>>2];c[g+176>>2]=0;c[g+180>>2]=0;c[g+184>>2]=0;d=g+4568|0;h=g+188|0;do{c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;b[h+10>>1]=1;h=h+12|0}while((h|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1}}}if((r|0)==16){r=Na()|0;Ya(r|0)}if(!g)return g|0;o=0;ia(c[(c[g>>2]|0)+12>>2]|0,g|0,f|0);r=o;o=0;if(!(r&1))return g|0;d=Na()|0;if(!g){r=d;Ya(r|0)}Bb[c[(c[g>>2]|0)+4>>2]&255](g);r=d;Ya(r|0);return 0}function oc(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=(c[e+24>>2]|0)==2;if(f?(c[e+16>>2]|0)!=3:0){e=0;return e|0}n=c[e+20>>2]|0;d=c[e+8>>2]|0;a:do if(!n){if(f){if((d|0)!=8)break;g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35688;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}switch(d|0){case 8:{g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35716;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}case 12:{g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35744;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}case 16:{g=bj(4600)|0;j=g+4|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=g+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[g>>2]=35772;d=g+132|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+148>>2]=c[e>>2];c[g+152>>2]=0;c[g+156>>2]=0;c[g+160>>2]=0;d=g+4544|0;f=g+164|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4556|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4568|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+28>>2]|0))c[g+20>>2]=1;e=g;return e|0}default:break a}}while(0);m=(1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35800;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35660;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}}if((d|0)>=17){e=0;return e|0}i=n<<1;i=((i+m|0)/(i|1|0)|0)+1|0;if(f){d=0;while(1)if((1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35828;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));j=h+88|0;l=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[h>>2]=35856;c[h+128>>2]=m;c[h+132>>2]=i;c[h+136>>2]=n;c[h+140>>2]=d;c[h+144>>2]=f;c[h+148>>2]=g;c[h+152>>2]=64;d=h+156|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+172>>2]=c[e>>2];c[h+176>>2]=0;c[h+180>>2]=0;c[h+184>>2]=0;d=h+4568|0;f=h+188|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4580|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4592|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+28>>2]|0))c[h+20>>2]=1;e=h;return e|0}return 0}function pc(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=c[f+16>>2]|0;switch(q|0){case 64:case 0:{o=0;d=ra(35,d|0,e|0)|0;e=o;o=0;if(e&1)r=16;else g=d;break}default:{h=(1<>2])+-1|0;p=c[e+20>>2]|0;n=p<<1;n=((n+h|0)/(n|1|0)|0)+1|0;d=0;while(1)if((1<>2]|0;o=0;g=ka(67,4632)|0;m=o;o=0;if(m&1)r=16;else{i=((j|0)<8?8:j)+j<<1;c[g+4>>2]=0;k=g+8|0;l=e;m=k+84|0;do{c[k>>2]=c[l>>2];k=k+4|0;l=l+4|0}while((k|0)<(m|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;m=g+116|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[g>>2]=35884;c[g+136>>2]=h;c[g+140>>2]=n;c[g+144>>2]=p;c[g+148>>2]=d;c[g+152>>2]=j;c[g+156>>2]=i;c[g+160>>2]=q;d=g+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+180>>2]=c[e>>2];c[g+184>>2]=0;c[g+188>>2]=0;c[g+192>>2]=0;d=g+4576|0;h=g+196|0;do{c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;b[h+10>>1]=1;h=h+12|0}while((h|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1}}}if((r|0)==16){r=Na()|0;Ya(r|0)}if(!g)return g|0;o=0;ia(c[(c[g>>2]|0)+8>>2]|0,g|0,f|0);r=o;o=0;if(!(r&1))return g|0;d=Na()|0;if(!g){r=d;Ya(r|0)}Bb[c[(c[g>>2]|0)+4>>2]&255](g);r=d;Ya(r|0);return 0}function qc(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=(c[e+24>>2]|0)==2;if(f?(c[e+16>>2]|0)!=3:0){e=0;return e|0}n=c[e+20>>2]|0;d=c[e+8>>2]|0;a:do if(!n){if(f){if((d|0)!=8)break;g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35912;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}switch(d|0){case 8:{g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35940;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}case 12:{g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35968;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}case 16:{g=bj(4608)|0;c[g+4>>2]=0;j=g+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[g+92>>2]=0;c[g+96>>2]=0;c[g+100>>2]=32;c[g+104>>2]=0;c[g+108>>2]=0;a[g+112>>0]=0;d=g+116|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[g>>2]=35996;d=g+140|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[g+156>>2]=c[e>>2];c[g+160>>2]=0;c[g+164>>2]=0;c[g+168>>2]=0;d=g+4552|0;f=g+172|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=g+4564|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=g+4576|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[g+32>>2]|0))c[g+24>>2]=1;e=g;return e|0}default:break a}}while(0);m=(1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=36024;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=35884;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}}if((d|0)>=17){e=0;return e|0}i=n<<1;i=((i+m|0)/(i|1|0)|0)+1|0;if(f){d=0;while(1)if((1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=36052;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}else{d=0;while(1)if((1<>2]=0;j=h+8|0;k=e;l=j+84|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0}while((j|0)<(l|0));c[h+92>>2]=0;c[h+96>>2]=0;c[h+100>>2]=32;c[h+104>>2]=0;c[h+108>>2]=0;a[h+112>>0]=0;l=h+116|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[h>>2]=36080;c[h+136>>2]=m;c[h+140>>2]=i;c[h+144>>2]=n;c[h+148>>2]=d;c[h+152>>2]=f;c[h+156>>2]=g;c[h+160>>2]=64;d=h+164|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[h+180>>2]=c[e>>2];c[h+184>>2]=0;c[h+188>>2]=0;c[h+192>>2]=0;d=h+4576|0;f=h+196|0;do{c[f>>2]=0;c[f+4>>2]=0;b[f+8>>1]=0;b[f+10>>1]=1;f=f+12|0}while((f|0)!=(d|0));c[d>>2]=0;c[d+4>>2]=0;b[d+8>>1]=0;a[d+10>>0]=0;e=h+4588|0;c[e>>2]=0;c[e+4>>2]=0;b[e+8>>1]=0;a[e+10>>0]=0;e=h+4600|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+24>>2]=0;a[e+28>>0]=0;if(!(c[h+32>>2]|0))c[h+24>>2]=1;e=h;return e|0}return 0}function rc(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0;a=2832;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=4880);iw(2832,0,2048)|0;a=0;do{h=2832+(a+128<<3)|0;c[h>>2]=0;c[h+4>>2]=1;a=a+1|0}while((a|0)!=128);a=3088;c[a>>2]=1;c[a+4>>2]=3;a=3096;c[a>>2]=1;c[a+4>>2]=3;a=3104;c[a>>2]=1;c[a+4>>2]=3;a=3112;c[a>>2]=1;c[a+4>>2]=3;a=3120;c[a>>2]=1;c[a+4>>2]=3;a=3128;c[a>>2]=1;c[a+4>>2]=3;a=3136;c[a>>2]=1;c[a+4>>2]=3;a=3144;c[a>>2]=1;c[a+4>>2]=3;a=3152;c[a>>2]=1;c[a+4>>2]=3;a=3160;c[a>>2]=1;c[a+4>>2]=3;a=3168;c[a>>2]=1;c[a+4>>2]=3;a=3176;c[a>>2]=1;c[a+4>>2]=3;a=3184;c[a>>2]=1;c[a+4>>2]=3;a=3192;c[a>>2]=1;c[a+4>>2]=3;a=3200;c[a>>2]=1;c[a+4>>2]=3;a=3208;c[a>>2]=1;c[a+4>>2]=3;a=3216;c[a>>2]=1;c[a+4>>2]=3;a=3224;c[a>>2]=1;c[a+4>>2]=3;a=3232;c[a>>2]=1;c[a+4>>2]=3;a=3240;c[a>>2]=1;c[a+4>>2]=3;a=3248;c[a>>2]=1;c[a+4>>2]=3;a=3256;c[a>>2]=1;c[a+4>>2]=3;a=3264;c[a>>2]=1;c[a+4>>2]=3;a=3272;c[a>>2]=1;c[a+4>>2]=3;a=3280;c[a>>2]=1;c[a+4>>2]=3;a=3288;c[a>>2]=1;c[a+4>>2]=3;a=3296;c[a>>2]=1;c[a+4>>2]=3;a=3304;c[a>>2]=1;c[a+4>>2]=3;a=3312;c[a>>2]=1;c[a+4>>2]=3;a=3320;c[a>>2]=1;c[a+4>>2]=3;a=3328;c[a>>2]=1;c[a+4>>2]=3;a=3336;c[a>>2]=1;c[a+4>>2]=3;a=2896;c[a>>2]=2;c[a+4>>2]=5;a=2904;c[a>>2]=2;c[a+4>>2]=5;a=2912;c[a>>2]=2;c[a+4>>2]=5;a=2920;c[a>>2]=2;c[a+4>>2]=5;a=2928;c[a>>2]=2;c[a+4>>2]=5;a=2936;c[a>>2]=2;c[a+4>>2]=5;a=2944;c[a>>2]=2;c[a+4>>2]=5;a=2952;c[a>>2]=2;c[a+4>>2]=5;a=2848;c[a>>2]=3;c[a+4>>2]=7;a=2856;c[a>>2]=3;c[a+4>>2]=7;a=0;do{h=2832+(a+64<<3)|0;c[h>>2]=-1;c[h+4>>2]=2;a=a+1|0}while((a|0)!=64);a=2960;c[a>>2]=-2;c[a+4>>2]=4;a=2968;c[a>>2]=-2;c[a+4>>2]=4;a=2976;c[a>>2]=-2;c[a+4>>2]=4;a=2984;c[a>>2]=-2;c[a+4>>2]=4;a=2992;c[a>>2]=-2;c[a+4>>2]=4;a=3e3;c[a>>2]=-2;c[a+4>>2]=4;a=3008;c[a>>2]=-2;c[a+4>>2]=4;a=3016;c[a>>2]=-2;c[a+4>>2]=4;a=3024;c[a>>2]=-2;c[a+4>>2]=4;a=3032;c[a>>2]=-2;c[a+4>>2]=4;a=3040;c[a>>2]=-2;c[a+4>>2]=4;a=3048;c[a>>2]=-2;c[a+4>>2]=4;a=3056;c[a>>2]=-2;c[a+4>>2]=4;a=3064;c[a>>2]=-2;c[a+4>>2]=4;a=3072;c[a>>2]=-2;c[a+4>>2]=4;a=3080;c[a>>2]=-2;c[a+4>>2]=4;a=2864;c[a>>2]=-3;c[a+4>>2]=6;a=2872;c[a>>2]=-3;c[a+4>>2]=6;a=2880;c[a>>2]=-3;c[a+4>>2]=6;a=2888;c[a>>2]=-3;c[a+4>>2]=6;a=2840;c[a>>2]=-4;c[a+4>>2]=8;a=4880;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=6928);iw(4880,0,2048)|0;d=2;a=0;f=0;g=0;while(1){d=d<<16>>16;b=8-d|0;e=1<>2]=f;c[h+4>>2]=d;b=b+1|0}while((b|0)<(e|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==7){b=2;f=1;g=-1;h=-1;break}else{d=(a>>1)+2|0;f=b>>16}}while(1){d=b<<16>>16;a=8-d|0;e=1<>2]=g;c[f+4>>2]=d;b=b+1|0}while((b|0)<(e|0))}a=(h<<16)+-65536|0;f=a>>31^a>>15;b=(f>>1)+2|0;if((b|0)>8){a=6928;break}else{g=a>>16;h=h+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=8976);iw(6928,0,2048)|0;f=3;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==12){f=3;b=1;e=-1;g=-1;break}else{f=(a>>2)+3|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>2)+3|0;if((f|0)>8){a=8976;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=11024);iw(8976,0,2048)|0;f=4;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==20){f=4;b=1;e=-1;g=-1;break}else{f=(a>>3)+4|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>3)+4|0;if((f|0)>8){a=11024;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=13072);iw(11024,0,2048)|0;f=5;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==32){f=5;b=1;e=-1;g=-1;break}else{f=(a>>4)+5|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>4)+5|0;if((f|0)>8){a=13072;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=15120);iw(13072,0,2048)|0;f=6;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==48){f=6;b=1;e=-1;g=-1;break}else{f=(a>>5)+6|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>5)+6|0;if((f|0)>8){a=15120;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=17168);iw(15120,0,2048)|0;f=7;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==64){f=7;b=1;e=-1;g=-1;break}else{f=(a>>6)+7|0;e=b>>16}}while(1){a=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}a=(g<<16)+-65536|0;b=a>>31^a>>15;f=(b>>6)+7|0;if((f|0)>8){a=17168;break}else{e=a>>16;g=g+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=19216);iw(17168,0,2048)|0;f=8;a=0;e=0;g=0;while(1){b=8-f|0;d=1<>2]=e;c[h+4>>2]=f;b=b+1|0}while((b|0)<(d|0))}b=(g<<16)+65536|0;a=b>>31^b>>15;g=g+1|0;if((g|0)==64){g=8;e=1;f=-1;h=-1;break}else{f=(a>>7)+8|0;e=b>>16}}while(1){a=8-g|0;d=1<>2]=f;c[e+4>>2]=g;b=b+1|0}while((b|0)<(d|0))}b=(h<<16)+-65536|0;e=b>>31^b>>15;a=e>>7;if((a|0)>0){a=19216;break}else{g=a+8|0;f=b>>16;h=h+-1|0}}do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=21264);iw(19216,0,2048)|0;a=21264;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=23312);iw(21264,0,2048)|0;a=23312;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=25360);iw(23312,0,2048)|0;a=25360;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=27408);iw(25360,0,2048)|0;a=27408;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=29456);iw(27408,0,2048)|0;a=29456;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=31504);iw(29456,0,2048)|0;a=31504;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=33552);iw(31504,0,2048)|0;a=33552;do{c[a>>2]=0;c[a+4>>2]=0;a=a+8|0}while((a|0)!=35600);iw(33552,0,2048)|0;mc(35600,8);kb(179,35600,n|0)|0;mc(35612,10);kb(179,35612,n|0)|0;mc(35624,12);kb(179,35624,n|0)|0;mc(35636,16);kb(179,35636,n|0)|0;return}function sc(a){a=a|0;var b=0;b=c[a>>2]|0;if(!b)return;a=a+4|0;if((c[a>>2]|0)!=(b|0))c[a>>2]=b;cj(b);return}function tc(a){a=a|0;var b=0,d=0;c[a>>2]=36080;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function uc(a){a=a|0;var b=0,d=0;c[a>>2]=36080;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function vc(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;he(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function wc(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35856;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];Yd(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;Yd(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function xc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function yc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36460;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36436;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function Ac(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36412;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function Bc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0;c[b>>2]=36388;c[b+4>>2]=e;n=b+8|0;h=c[e>>2]|0;l=e+16|0;f=c[l>>2]|0;i=$(f,h)|0;c[n>>2]=0;p=b+12|0;c[p>>2]=0;c[b+16>>2]=0;do if(i){if(!((i|0)<0?(o=0,ha(178,n|0),h=o,o=0,h&1):0))m=4;if((m|0)==4?(j=i<<1,o=0,k=ka(67,j|0)|0,h=o,o=0,!(h&1)):0){c[n>>2]=k;h=k+(i<<1)|0;c[b+16>>2]=h;iw(k|0,0,j|0)|0;c[p>>2]=h;h=c[e>>2]|0;f=c[l>>2]|0;break}i=Na()|0;g=c[n>>2]|0;f=g;if(g){h=c[p>>2]|0;if((h|0)!=(g|0))c[p>>2]=h+(~((h+-2-f|0)>>>1)<<1);cj(g)}p=i;Ya(p|0)}while(0);i=b+20|0;f=$(h<<1,f)|0;c[i>>2]=0;j=b+24|0;c[j>>2]=0;c[b+28>>2]=0;if(!f){p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))m=13;if((m|0)==13?(o=0,g=ka(67,f|0)|0,m=o,o=0,!(m&1)):0){c[j>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[j>>2]|0)+1|0;c[j>>2]=g;f=f+-1|0}while((f|0)!=0);p=b+36|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];return}h=Na()|0;g=c[i>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}g=c[n>>2]|0;if(!g){p=h;Ya(p|0)}f=c[p>>2]|0;if((f|0)!=(g|0))c[p>>2]=f+(~((f+-2-g|0)>>>1)<<1);cj(g);p=h;Ya(p|0)}function Cc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=b+32|0;Jm(i,d)|0;h=b+44|0;c[h>>2]=0;j=b+48|0;g=c[j>>2]|0;if(g&8){d=a[i>>0]|0;if(!(d&1)){d=((d&255)>>>1)+(i+1)|0;c[h>>2]=d;e=i+1|0;f=i+1|0}else{d=(c[b+40>>2]|0)+(c[b+36>>2]|0)|0;c[h>>2]=d;f=c[b+40>>2]|0;e=f}c[b+8>>2]=e;c[b+12>>2]=f;c[b+16>>2]=d}if(!(g&16))return;d=a[i>>0]|0;if(!(d&1)){g=(d&255)>>>1;c[h>>2]=i+1+g;d=10;h=g}else{g=c[b+36>>2]|0;c[h>>2]=(c[b+40>>2]|0)+g;d=(c[i>>2]&-2)+-1|0;h=g}Mm(i,d,0);d=a[i>>0]|0;if(!(d&1)){g=i+1|0;f=(d&255)>>>1;e=i+1|0}else{e=c[b+40>>2]|0;g=e;f=c[b+36>>2]|0}d=b+24|0;c[d>>2]=e;c[b+20>>2]=e;c[b+28>>2]=g+f;if(!(c[j>>2]&3))return;c[d>>2]=e+h;return}function Dc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+32|0;j=q+16|0;p=q+8|0;k=q;o=0;ia(65,p|0,b|0);m=o;o=0;a:do if(m&1){e=Na(0)|0;f=b;g=b}else{do if(a[p>>0]|0){f=c[(c[b>>2]|0)+-12>>2]|0;c[k>>2]=c[b+(f+24)>>2];l=b+f|0;m=c[b+(f+4)>>2]|0;g=d+e|0;f=b+(f+76)|0;e=c[f>>2]|0;do if((e|0)==-1){o=0;e=ka(68,l|0)|0;r=o;o=0;if(r&1)n=13;else{c[j>>2]=e;o=0;e=ra(37,j|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,h=ra(c[(c[e>>2]|0)+28>>2]|0,e|0,32)|0,r=o,o=0,!(r&1)):0){Gs(j);e=h<<24>>24;c[f>>2]=e;n=9;break}e=Na(0)|0;Gs(j)}}else n=9;while(0);if((n|0)==9){o=0;c[j>>2]=c[k>>2];e=ja(39,j|0,d|0,((m&176|0)==32?g:d)|0,g|0,l|0,e&255|0)|0;r=o;o=0;if(!(r&1)){if(e)break;r=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+r|0,c[b+(r+16)>>2]|5|0);r=o;o=0;if(!(r&1))break;else n=13}else n=13}if((n|0)==13)e=Na(0)|0;ho(p);f=b;g=b;break a}while(0);ho(p);i=q;return b|0}while(0);Va(e|0)|0;o=0;ha(181,f+(c[(c[g>>2]|0)+-12>>2]|0)|0);r=o;o=0;if(!(r&1)){Xa();i=q;return b|0}e=Na()|0;o=0;xa(3);r=o;o=0;if(r&1){r=Na(0)|0;ec(r)}else Ya(e|0);return 0}function Ec(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[d+48>>2]|0;if(e&16){e=d+44|0;f=c[e>>2]|0;g=c[d+24>>2]|0;if(f>>>0>>0)c[e>>2]=g;else g=f;f=c[d+20>>2]|0;h=g-f|0;if(h>>>0>4294967279)_i(b);if(h>>>0<11){a[b>>0]=h<<1;e=b+1|0}else{d=h+16&-16;e=bj(d)|0;c[b+8>>2]=e;c[b>>2]=d|1;c[b+4>>2]=h}if((f|0)!=(g|0)){d=e;while(1){a[d>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(g|0))break;else d=d+1|0}e=e+h|0}a[e>>0]=0;return}if(!(e&8)){c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}f=c[d+8>>2]|0;d=c[d+16>>2]|0;h=d-f|0;if(h>>>0>4294967279)_i(b);if(h>>>0<11){a[b>>0]=h<<1;e=b+1|0}else{g=h+16&-16;e=bj(g)|0;c[b+8>>2]=e;c[b>>2]=g|1;c[b+4>>2]=h}if((f|0)!=(d|0)){g=e;while(1){a[g>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(d|0))break;else g=g+1|0}e=e+h|0}a[e>>0]=0;return}function Fc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;c[b>>2]=36364;c[b+4>>2]=e;p=b+8|0;i=c[e>>2]|0;m=e+16|0;h=c[m>>2]|0;l=$(h,i)|0;c[p>>2]=0;q=b+12|0;c[q>>2]=0;c[b+16>>2]=0;do if(l){if(!((l|0)<0?(o=0,ha(178,p|0),i=o,o=0,i&1):0))n=4;if((n|0)==4?(j=l<<1,o=0,k=ka(67,j|0)|0,i=o,o=0,!(i&1)):0){c[p>>2]=k;i=k+(l<<1)|0;c[b+16>>2]=i;iw(k|0,0,j|0)|0;c[q>>2]=i;i=c[e>>2]|0;h=c[m>>2]|0;break}j=Na()|0;g=c[p>>2]|0;h=g;if(g){i=c[q>>2]|0;if((i|0)!=(g|0))c[q>>2]=i+(~((i+-2-h|0)>>>1)<<1);cj(g)}q=j;Ya(q|0)}while(0);j=b+20|0;h=$(i<<1,h)|0;c[j>>2]=0;k=b+24|0;c[k>>2]=0;c[b+28>>2]=0;if(!h){q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}if(!((h|0)<0?(o=0,ha(178,j|0),m=o,o=0,m&1):0))n=13;if((n|0)==13?(o=0,g=ka(67,h|0)|0,n=o,o=0,!(n&1)):0){c[k>>2]=g;c[j>>2]=g;c[b+28>>2]=g+h;do{a[g>>0]=0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;h=h+-1|0}while((h|0)!=0);q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}i=Na()|0;g=c[j>>2]|0;if(g){if((c[k>>2]|0)!=(g|0))c[k>>2]=g;cj(g)}g=c[p>>2]|0;if(!g){q=i;Ya(q|0)}h=c[q>>2]|0;if((h|0)!=(g|0))c[q>>2]=h+(~((h+-2-g|0)>>>1)<<1);cj(g);q=i;Ya(q|0)}function Gc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;c[b>>2]=36340;c[b+4>>2]=e;p=b+8|0;i=c[e>>2]|0;m=e+16|0;h=c[m>>2]|0;l=$(h,i)|0;c[p>>2]=0;q=b+12|0;c[q>>2]=0;c[b+16>>2]=0;do if(l){if(!((l|0)<0?(o=0,ha(178,p|0),i=o,o=0,i&1):0))n=4;if((n|0)==4?(j=l<<1,o=0,k=ka(67,j|0)|0,i=o,o=0,!(i&1)):0){c[p>>2]=k;i=k+(l<<1)|0;c[b+16>>2]=i;iw(k|0,0,j|0)|0;c[q>>2]=i;i=c[e>>2]|0;h=c[m>>2]|0;break}j=Na()|0;g=c[p>>2]|0;h=g;if(g){i=c[q>>2]|0;if((i|0)!=(g|0))c[q>>2]=i+(~((i+-2-h|0)>>>1)<<1);cj(g)}q=j;Ya(q|0)}while(0);j=b+20|0;h=$(i<<1,h)|0;c[j>>2]=0;k=b+24|0;c[k>>2]=0;c[b+28>>2]=0;if(!h){q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}if(!((h|0)<0?(o=0,ha(178,j|0),m=o,o=0,m&1):0))n=13;if((n|0)==13?(o=0,g=ka(67,h|0)|0,n=o,o=0,!(n&1)):0){c[k>>2]=g;c[j>>2]=g;c[b+28>>2]=g+h;do{a[g>>0]=0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;h=h+-1|0}while((h|0)!=0);q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}i=Na()|0;g=c[j>>2]|0;if(g){if((c[k>>2]|0)!=(g|0))c[k>>2]=g;cj(g)}g=c[p>>2]|0;if(!g){q=i;Ya(q|0)}h=c[q>>2]|0;if((h|0)!=(g|0))c[q>>2]=h+(~((h+-2-g|0)>>>1)<<1);cj(g);q=i;Ya(q|0)}function Hc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;c[b>>2]=36316;c[b+4>>2]=e;p=b+8|0;i=c[e>>2]|0;m=e+16|0;h=c[m>>2]|0;l=$(h,i)|0;c[p>>2]=0;q=b+12|0;c[q>>2]=0;c[b+16>>2]=0;do if(l){if(!((l|0)<0?(o=0,ha(178,p|0),i=o,o=0,i&1):0))n=4;if((n|0)==4?(j=l<<1,o=0,k=ka(67,j|0)|0,i=o,o=0,!(i&1)):0){c[p>>2]=k;i=k+(l<<1)|0;c[b+16>>2]=i;iw(k|0,0,j|0)|0;c[q>>2]=i;i=c[e>>2]|0;h=c[m>>2]|0;break}j=Na()|0;g=c[p>>2]|0;h=g;if(g){i=c[q>>2]|0;if((i|0)!=(g|0))c[q>>2]=i+(~((i+-2-h|0)>>>1)<<1);cj(g)}q=j;Ya(q|0)}while(0);j=b+20|0;h=$(i<<1,h)|0;c[j>>2]=0;k=b+24|0;c[k>>2]=0;c[b+28>>2]=0;if(!h){q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}if(!((h|0)<0?(o=0,ha(178,j|0),m=o,o=0,m&1):0))n=13;if((n|0)==13?(o=0,g=ka(67,h|0)|0,n=o,o=0,!(n&1)):0){c[k>>2]=g;c[j>>2]=g;c[b+28>>2]=g+h;do{a[g>>0]=0;g=(c[k>>2]|0)+1|0;c[k>>2]=g;h=h+-1|0}while((h|0)!=0);q=b+32|0;p=f;p=c[p>>2]|0;f=f+4|0;f=c[f>>2]|0;n=q;c[n>>2]=p;q=q+4|0;c[q>>2]=f;q=b+40|0;c[q>>2]=p;q=b+48|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];return}i=Na()|0;g=c[j>>2]|0;if(g){if((c[k>>2]|0)!=(g|0))c[k>>2]=g;cj(g)}g=c[p>>2]|0;if(!g){q=i;Ya(q|0)}h=c[q>>2]|0;if((h|0)!=(g|0))c[q>>2]=h+(~((h+-2-g|0)>>>1)<<1);cj(g);q=i;Ya(q|0)}function Ic(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36316;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Jc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36316;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Kc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+48|0;if(!(c[g>>2]|0)){j=b+52|0;Pc(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Pc(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Lc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+48>>2]|0;if(!f){f=a+52|0;Mc(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Nc(a,f,b,d,e);return}}function Mc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=d+4|0;j=c[m>>2]|0;do if(!(a[j+32>>0]|0))n=f;else{k=d+8|0;lw(c[k>>2]|0,f|0,h*6|0)|0;j=c[m>>2]|0;l=c[j+16>>2]|0;if((h|0)<=0){n=c[k>>2]|0;break}f=c[k>>2]|0;j=f;k=0;while(1){n=j+4|0;o=b[j>>1]|0;b[j>>1]=b[n>>1]|0;b[n>>1]=o;k=k+1|0;if((k|0)==(h|0))break;else j=j+(l<<1)|0}n=f;j=c[m>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:if((c[j+24>>2]|0)==2){if((h|0)<=0)return;j=d+32|0;f=0;do{o=c[j>>2]|0;m=e[n+(f*6|0)+2>>1]<>1]<>1]<>1]=(m+49152+((d+i|0)>>>2)&65535)>>>o;b[g+(f*6|0)+2>>1]=d>>>o;b[g+(f*6|0)+4>>1]=i>>>o;f=f+1|0}while((f|0)!=(h|0));return}else{k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;j=c[d+32>>2]|0;f=0;do{h=e[n+(f*6|0)+2>>1]<>1]<>1]<>1]=(h+49152+((d+o|0)>>>2)&65535)>>>j;b[g+(f+i<<1)>>1]=d>>>j;b[g+(f+l<<1)>>1]=o>>>j;f=f+1|0}while((f|0)!=(k|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;m=i*3|0;j=c[d+32>>2]|0;f=0;do{o=b[n+(f<<3)+6>>1]|0;p=e[n+(f<<3)+2>>1]<>1]<>1]<>1]=(p+49152+((h+d|0)>>>2)&65535)>>>j;b[g+(f+i<<1)>>1]=h>>>j;b[g+(f+l<<1)>>1]=d>>>j;b[g+(f+m<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}default:return}}function Nc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Mc(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Mc(b,t,e,f,g);i=q;return}function Oc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;g=i;i=i+176|0;e=g+152|0;l=g+16|0;j=g;if(!(d&1)){e=(d|0)/4|0;if((d|0)>3){f=0;do{l=b+(f<<2)|0;k=c[l>>2]|0;c[l>>2]=k>>>8&16711935|k<<8&-16711936;f=f+1|0}while((f|0)<(e|0))}if(!(d&3)){i=g;return}j=b+(d+-2)|0;l=b+(d+-1)|0;k=a[j>>0]|0;a[j>>0]=a[l>>0]|0;a[l>>0]=k;i=g;return}k=l+56|0;h=l+4|0;c[l>>2]=36160;c[k>>2]=36180;o=0;ia(62,l+56|0,h|0);g=o;o=0;if(g&1){l=Na()|0;fn(k);Ya(l|0)}c[l+128>>2]=0;c[l+132>>2]=-1;c[l>>2]=36200;c[l+56>>2]=36220;o=0;ha(180,h|0);g=o;o=0;do if(g&1)e=Na()|0;else{c[h>>2]=36236;g=l+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[l+52>>2]=16;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;o=0;ia(63,h|0,e|0);b=o;o=0;if(b&1){l=Na()|0;Im(e);Im(g);nn(h);e=l;break}Im(e);o=0;e=ma(28,l|0,49087,24)|0;b=o;o=0;if((!(b&1)?(o=0,f=ra(36,e|0,d|0)|0,d=o,o=0,!(d&1)):0)?(o=0,ma(28,f|0,49112,20)|0,d=o,o=0,!(d&1)):0){b=Ma(16)|0;o=0;ia(64,j|0,h|0);d=o;o=0;if(!(d&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,b|0,1,35648,j|0);d=o;o=0;if(d&1)f=1;else{o=0;wa(6,b|0,824,96);o=0;f=0}e=Na()|0;Im(j);if(!f){j=e;c[l>>2]=36200;c[k>>2]=36220;c[h>>2]=36236;Im(g);nn(h);fn(k);Ya(j|0)}}else e=Na()|0;La(b|0);j=e;c[l>>2]=36200;c[k>>2]=36220;c[h>>2]=36236;Im(g);nn(h);fn(k);Ya(j|0)}j=Na()|0;c[l>>2]=36200;c[k>>2]=36220;c[h>>2]=36236;Im(g);nn(h);fn(k);Ya(j|0)}while(0);l=e;fn(k);Ya(l|0)}function Pc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;n=d+4|0;j=c[n>>2]|0;a:do switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)<=0)break a;j=d+40|0;d=0;do{i=c[j>>2]|0;l=e[f+(d*6|0)+2>>1]<>1]<>1]<>2)+16384|0;b[g+(d*6|0)>>1]=(k+32768+m&65535)>>>i;b[g+(d*6|0)+2>>1]=(m&65535)>>>i;b[g+(d*6|0)+4>>1]=(l+32768+m&65535)>>>i;d=d+1|0}while((d|0)!=(h|0))}else{k=(h|0)<(i|0)?h:i;if((k|0)<=0)break a;l=i<<1;j=d+40|0;d=0;do{m=c[j>>2]|0;p=e[f+(d+i<<1)>>1]<>1]<>1]<>2)+16384|0;b[g+(d*6|0)>>1]=(q+32768+o&65535)>>>m;b[g+(d*6|0)+2>>1]=(o&65535)>>>m;b[g+(d*6|0)+4>>1]=(p+32768+o&65535)>>>m;d=d+1|0}while((d|0)!=(k|0))}break}case 4:{if((c[j+24>>2]|0)==1?(m=(h|0)<(i|0)?h:i,(m|0)>0):0){l=i<<1;j=d+40|0;d=i*3|0;k=0;do{q=c[j>>2]|0;p=e[f+(k+i<<1)>>1]<>1]<>1]<>2)+16384|0;r=b[f+(k+d<<1)>>1]|0;t=mw((o&65535)>>>q&65535|0,0,16)|0;p=(p+32768+o&65535)>>>q|D;r=mw(r&65535|0,0,48)|0;r=t|(s+32768+o&65535)>>>q&65535|r;p=p&65535|D;q=g+(k<<3)|0;o=q;b[o>>1]=r;b[o+2>>1]=r>>>16;q=q+4|0;b[q>>1]=p;b[q+2>>1]=p>>>16;k=k+1|0}while((k|0)!=(m|0))}break}default:{}}while(0);j=c[n>>2]|0;if(!(a[j+32>>0]|0))return;k=c[j+16>>2]|0;if((h|0)<=0)return;j=g;d=0;while(1){t=j+4|0;s=b[j>>1]|0;b[j>>1]=b[t>>1]|0;b[t>>1]=s;d=d+1|0;if((d|0)==(h|0))break;else j=j+(k<<1)|0}return}function Qc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36340;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Rc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36340;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Sc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+48|0;if(!(c[g>>2]|0)){j=b+52|0;Wc(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Wc(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Tc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+48>>2]|0;if(!f){f=a+52|0;Uc(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Vc(a,f,b,d,e);return}}function Uc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=d+4|0;j=c[m>>2]|0;do if(!(a[j+32>>0]|0))n=f;else{k=d+8|0;lw(c[k>>2]|0,f|0,h*6|0)|0;j=c[m>>2]|0;l=c[j+16>>2]|0;if((h|0)<=0){n=c[k>>2]|0;break}f=c[k>>2]|0;j=f;k=0;while(1){n=j+4|0;o=b[j>>1]|0;b[j>>1]=b[n>>1]|0;b[n>>1]=o;k=k+1|0;if((k|0)==(h|0))break;else j=j+(l<<1)|0}n=f;j=c[m>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:if((c[j+24>>2]|0)==2){if((h|0)<=0)return;j=d+32|0;f=0;do{i=c[j>>2]|0;m=e[n+(f*6|0)>>1]<>1]<>1]<>>1)&65535)>>>i&65535;b[g+(f*6|0)>>1]=(m+32768-d&65535)>>>i;b[g+(f*6|0)+2>>1]=(d&65535)>>>i;b[g+(f*6|0)+4>>1]=o;f=f+1|0}while((f|0)!=(h|0));return}else{k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;j=c[d+32>>2]|0;f=0;do{h=e[n+(f*6|0)>>1]<>1]<>1]<>>1)&65535)>>>j&65535;b[g+(f<<1)>>1]=(h+32768-d&65535)>>>j;b[g+(f+i<<1)>>1]=(d&65535)>>>j;b[g+(f+l<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;m=i*3|0;j=c[d+32>>2]|0;f=0;do{o=b[n+(f<<3)+6>>1]|0;p=e[n+(f<<3)>>1]<>1]<>1]<>>1)&65535)>>>j&65535;b[g+(f<<1)>>1]=(p+32768-h&65535)>>>j;b[g+(f+i<<1)>>1]=(h&65535)>>>j;b[g+(f+l<<1)>>1]=d;b[g+(f+m<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}default:return}}function Vc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Uc(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Uc(b,t,e,f,g);i=q;return}function Wc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=d+4|0;j=c[n>>2]|0;a:do switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)<=0)break a;j=d+40|0;d=0;do{m=c[j>>2]|0;l=e[f+(d*6|0)+2>>1]<>1]<>1]<>>1)&65535)>>>m&65535;b[g+(d*6|0)>>1]=k>>>m;b[g+(d*6|0)+2>>1]=l>>>m;b[g+(d*6|0)+4>>1]=i;d=d+1|0}while((d|0)!=(h|0))}else{k=(h|0)<(i|0)?h:i;if((k|0)<=0)break a;l=i<<1;j=d+40|0;d=0;do{o=c[j>>2]|0;p=e[f+(d+i<<1)>>1]<>1]<>1]<>>1)&65535)>>>o&65535;b[g+(d*6|0)>>1]=q>>>o;b[g+(d*6|0)+2>>1]=p>>>o;b[g+(d*6|0)+4>>1]=m;d=d+1|0}while((d|0)!=(k|0))}break}case 4:{if((c[j+24>>2]|0)==1?(m=(h|0)<(i|0)?h:i,(m|0)>0):0){l=i<<1;j=d+40|0;d=i*3|0;k=0;do{o=c[j>>2]|0;q=e[f+(k+i<<1)>>1]<>1]<>1]<>>1)&65535)>>>o;r=b[f+(k+d<<1)>>1]|0;q=mw(q>>>o&65535|0,0,16)|0;p=D|p;r=mw(r&65535|0,0,48)|0;r=s>>>o&65535|q|r;p=p&65535|D;q=g+(k<<3)|0;o=q;b[o>>1]=r;b[o+2>>1]=r>>>16;q=q+4|0;b[q>>1]=p;b[q+2>>1]=p>>>16;k=k+1|0}while((k|0)!=(m|0))}break}default:{}}while(0);j=c[n>>2]|0;if(!(a[j+32>>0]|0))return;k=c[j+16>>2]|0;if((h|0)<=0)return;j=g;d=0;while(1){s=j+4|0;r=b[j>>1]|0;b[j>>1]=b[s>>1]|0;b[s>>1]=r;d=d+1|0;if((d|0)==(h|0))break;else j=j+(k<<1)|0}return}function Xc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36364;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Yc(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36364;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+48|0;if(!(c[g>>2]|0)){j=b+52|0;bd(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;bd(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function _c(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+48>>2]|0;if(!f){f=a+52|0;$c(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{ad(a,f,b,d,e);return}}function $c(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;m=d+4|0;j=c[m>>2]|0;do if(!(a[j+32>>0]|0))n=f;else{k=d+8|0;lw(c[k>>2]|0,f|0,h*6|0)|0;j=c[m>>2]|0;l=c[j+16>>2]|0;if((h|0)<=0){n=c[k>>2]|0;break}f=c[k>>2]|0;j=f;k=0;while(1){n=j+4|0;o=b[j>>1]|0;b[j>>1]=b[n>>1]|0;b[n>>1]=o;k=k+1|0;if((k|0)==(h|0))break;else j=j+(l<<1)|0}n=f;j=c[m>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:if((c[j+24>>2]|0)==2){if((h|0)<=0)return;j=d+32|0;f=0;do{i=c[j>>2]|0;d=e[n+(f*6|0)+2>>1]<>1]<>>i&65535;b[g+(f*6|0)>>1]=((e[n+(f*6|0)>>1]<>>i;b[g+(f*6|0)+2>>1]=(d&65535)>>>i;b[g+(f*6|0)+4>>1]=o;f=f+1|0}while((f|0)!=(h|0));return}else{k=(i|0)<(h|0)?i:h;if((k|0)<=0)return;l=i<<1;j=c[d+32>>2]|0;f=0;do{d=e[n+(f*6|0)+2>>1]<>1]<>>j&65535;b[g+(f<<1)>>1]=((e[n+(f*6|0)>>1]<>>j;b[g+(f+i<<1)>>1]=(d&65535)>>>j;b[g+(f+l<<1)>>1]=o;f=f+1|0}while((f|0)!=(k|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;l=(i|0)<(h|0)?i:h;if((l|0)<=0)return;m=i<<1;k=i*3|0;j=c[d+32>>2]|0;f=0;do{o=b[n+(f<<3)+6>>1]|0;h=e[n+(f<<3)+2>>1]<>1]<>>j&65535;b[g+(f<<1)>>1]=((e[n+(f<<3)>>1]<>>j;b[g+(f+i<<1)>>1]=(h&65535)>>>j;b[g+(f+m<<1)>>1]=d;b[g+(f+k<<1)>>1]=o;f=f+1|0}while((f|0)!=(l|0));return}default:return}}function ad(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;$c(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;$c(b,t,e,f,g);i=q;return}function bd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=d+4|0;j=c[n>>2]|0;a:do switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)<=0)break a;j=d+40|0;d=0;do{m=c[j>>2]|0;l=e[f+(d*6|0)+2>>1]<>1]<>>m&65535;b[g+(d*6|0)>>1]=((e[f+(d*6|0)>>1]<>>m;b[g+(d*6|0)+2>>1]=(l&65535)>>>m;b[g+(d*6|0)+4>>1]=i;d=d+1|0}while((d|0)!=(h|0))}else{k=(h|0)<(i|0)?h:i;if((k|0)<=0)break a;l=i<<1;j=d+40|0;d=0;do{o=c[j>>2]|0;p=e[f+(d+i<<1)>>1]<>1]<>>o&65535;b[g+(d*6|0)>>1]=((e[f+(d<<1)>>1]<>>o;b[g+(d*6|0)+2>>1]=(p&65535)>>>o;b[g+(d*6|0)+4>>1]=m;d=d+1|0}while((d|0)!=(k|0))}break}case 4:{if((c[j+24>>2]|0)==1?(m=(h|0)<(i|0)?h:i,(m|0)>0):0){l=i<<1;j=d+40|0;d=i*3|0;k=0;do{q=c[j>>2]|0;s=e[f+(k+i<<1)>>1]<>1]<>>q;o=(s+32768+(e[f+(k+l<<1)>>1]<>>q;r=b[f+(k+d<<1)>>1]|0;q=mw((s&65535)>>>q&65535|0,0,16)|0;o=o|D;r=mw(r&65535|0,0,48)|0;r=q|p&65535|r;o=o&65535|D;p=g+(k<<3)|0;q=p;b[q>>1]=r;b[q+2>>1]=r>>>16;p=p+4|0;b[p>>1]=o;b[p+2>>1]=o>>>16;k=k+1|0}while((k|0)!=(m|0))}break}default:{}}while(0);j=c[n>>2]|0;if(!(a[j+32>>0]|0))return;k=c[j+16>>2]|0;if((h|0)<=0)return;j=g;d=0;while(1){s=j+4|0;r=b[j>>1]|0;b[j>>1]=b[s>>1]|0;b[s>>1]=r;d=d+1|0;if((d|0)==(h|0))break;else j=j+(k<<1)|0}return}function cd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0;p=i;i=i+16|0;m=p;n=c[b>>2]|0;if(!n){b=0;i=p;return b|0}q=d;k=f-q|0;l=g+12|0;j=c[l>>2]|0;k=(j|0)>(k|0)?j-k|0:0;j=e;g=j-q|0;if((g|0)>0?(Gb[c[(c[n>>2]|0)+48>>2]&63](n,d,g)|0)!=(g|0):0){c[b>>2]=0;q=0;i=p;return q|0}do if((k|0)>0){Hm(m,k,h);o=0;g=ma(c[(c[n>>2]|0)+48>>2]|0,n|0,((a[m>>0]&1)==0?m+1|0:c[m+8>>2]|0)|0,k|0)|0;q=o;o=0;if(q&1){q=Na()|0;Im(m);Ya(q|0)}if((g|0)==(k|0)){Im(m);break}c[b>>2]=0;Im(m);q=0;i=p;return q|0}while(0);f=f-j|0;if((f|0)>0?(Gb[c[(c[n>>2]|0)+48>>2]&63](n,e,f)|0)!=(f|0):0){c[b>>2]=0;q=0;i=p;return q|0}c[l>>2]=0;q=n;i=p;return q|0}function dd(a){a=a|0;c[a>>2]=36236;Im(a+32|0);nn(a);return}function ed(a){a=a|0;c[a>>2]=36236;Im(a+32|0);nn(a);cj(a);return}function fd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;i=d+44|0;j=c[i>>2]|0;l=d+24|0;m=c[l>>2]|0;if(j>>>0>>0){c[i>>2]=m;j=m}k=j;i=h&24;if(!i){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}if((g|0)==1&(i|0)==24){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}a:do switch(g|0){case 0:{i=0;g=0;break}case 1:if(!(h&8)){g=m-(c[d+20>>2]|0)|0;i=g;g=((g|0)<0)<<31>>31;break a}else{g=(c[d+12>>2]|0)-(c[d+8>>2]|0)|0;i=g;g=((g|0)<0)<<31>>31;break a}case 2:{i=d+32|0;if(!(a[i>>0]&1))i=i+1|0;else i=c[d+40>>2]|0;g=j-i|0;i=g;g=((g|0)<0)<<31>>31;break}default:{d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}}while(0);g=jw(i|0,g|0,e|0,f|0)|0;e=D;if((e|0)>=0){i=d+32|0;if(!(a[i>>0]&1))i=i+1|0;else i=c[d+40>>2]|0;f=j-i|0;j=((f|0)<0)<<31>>31;if(!((j|0)<(e|0)|(j|0)==(e|0)&f>>>0>>0)){i=h&8;if(!((g|0)==0&(e|0)==0)){if((i|0)!=0?(c[d+12>>2]|0)==0:0){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}if((h&16|0)!=0&(m|0)==0){d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}}if(i){c[d+12>>2]=(c[d+8>>2]|0)+g;c[d+16>>2]=k}if(h&16)c[l>>2]=(c[d+20>>2]|0)+g;d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=g;c[d+4>>2]=e;return}}d=b;c[d>>2]=0;c[d+4>>2]=0;d=b+8|0;c[d>>2]=-1;c[d+4>>2]=-1;return}function gd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;d=d+8|0;Ib[c[(c[b>>2]|0)+16>>2]&15](a,b,c[d>>2]|0,c[d+4>>2]|0,0,e);return}function hd(a){a=a|0;var b=0,e=0,f=0,g=0;b=a+44|0;e=c[b>>2]|0;f=c[a+24>>2]|0;if(e>>>0>>0){c[b>>2]=f;e=f}if(!(c[a+48>>2]&8)){a=-1;return a|0}g=a+16|0;b=c[g>>2]|0;f=a+12|0;if(b>>>0>>0){f=c[f>>2]|0;c[g>>2]=e;b=e}else f=c[f>>2]|0;if(f>>>0>=b>>>0){a=-1;return a|0}a=d[f>>0]|0;return a|0}function id(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=b+44|0;e=c[f>>2]|0;g=c[b+24>>2]|0;if(e>>>0>>0){c[f>>2]=g;e=g}j=b+8|0;f=c[j>>2]|0;k=b+12|0;h=c[k>>2]|0;i=f;if(f>>>0>=h>>>0){b=-1;return b|0}if((d|0)==-1){c[j>>2]=f;c[k>>2]=h+-1;c[b+16>>2]=e;b=0;return b|0}if(!(c[b+48>>2]&16)){g=d&255;f=h+-1|0;if(g<<24>>24!=(a[f>>0]|0)){b=-1;return b|0}}else{g=d&255;f=h+-1|0}c[j>>2]=i;c[k>>2]=f;c[b+16>>2]=e;a[f>>0]=g;b=d;return b|0}function jd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+16|0;n=t;if((d|0)==-1){b=0;i=t;return b|0}p=b+12|0;q=b+8|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;s=b+24|0;e=c[s>>2]|0;m=b+28|0;f=c[m>>2]|0;do if((e|0)==(f|0)){k=b+48|0;if(!(c[k>>2]&16)){b=-1;i=t;return b|0}l=b+20|0;j=c[l>>2]|0;g=e-j|0;h=b+44|0;j=(c[h>>2]|0)-j|0;f=b+32|0;o=0;ia(67,f|0,0);e=o;o=0;if(!(e&1)){if(!(a[f>>0]&1))e=10;else e=(c[f>>2]&-2)+-1|0;o=0;wa(8,f|0,e|0,0);e=o;o=0;if(!(e&1)){e=a[f>>0]|0;if(!(e&1)){f=f+1|0;e=(e&255)>>>1}else{f=c[b+40>>2]|0;e=c[b+36>>2]|0}u=f+e|0;c[l>>2]=f;c[m>>2]=u;l=f+g|0;c[s>>2]=l;e=f+j|0;c[h>>2]=e;f=u;break}}u=Na(0)|0;Va(u|0)|0;Xa();u=-1;i=t;return u|0}else{u=b+44|0;k=b+48|0;h=u;l=e;e=c[u>>2]|0}while(0);j=l+1|0;c[n>>2]=j;g=c[(j>>>0>>0?h:n)>>2]|0;c[h>>2]=g;if(c[k>>2]&8){e=b+32|0;if(!(a[e>>0]&1))e=e+1|0;else e=c[b+40>>2]|0;c[q>>2]=e;c[p>>2]=e+r;c[b+16>>2]=g}if((l|0)==(f|0)){u=Lb[c[(c[b>>2]|0)+52>>2]&63](b,d&255)|0;i=t;return u|0}else{c[s>>2]=j;a[l>>0]=d;u=d&255;i=t;return u|0}return 0}function kd(a){a=a|0;var b=0,d=0;c[a>>2]=36200;b=a+56|0;c[b>>2]=36220;d=a+4|0;c[d>>2]=36236;Im(a+36|0);nn(d);fn(b);return}function ld(a){a=a|0;var b=0,d=0;c[a>>2]=36200;b=a+56|0;c[b>>2]=36220;d=a+4|0;c[d>>2]=36236;Im(a+36|0);nn(d);fn(b);cj(a);return}function md(a){a=a|0;var b=0,d=0,e=0,f=0;f=c[(c[a>>2]|0)+-12>>2]|0;b=a+f|0;c[b>>2]=36200;d=a+(f+56)|0;c[d>>2]=36220;e=a+(f+4)|0;c[e>>2]=36236;Im(a+(f+36)|0);nn(e);fn(d);cj(b);return}function nd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36388;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function od(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36388;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function pd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;td(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;td(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function qd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;rd(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{sd(a,f,b,d,e);return}}function rd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;l=d+4|0;j=c[l>>2]|0;do if(!(a[j+32>>0]|0))m=f;else{d=d+8|0;lw(c[d>>2]|0,f|0,h*6|0)|0;j=c[l>>2]|0;k=c[j+16>>2]|0;if((h|0)<=0){m=c[d>>2]|0;break}d=c[d>>2]|0;j=d;f=0;while(1){m=j+4|0;n=b[j>>1]|0;b[j>>1]=b[m>>1]|0;b[m>>1]=n;f=f+1|0;if((f|0)==(h|0))break;else j=j+(k<<1)|0}m=d;j=c[l>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)>0)j=0;else return;do{l=e[m+(j*6|0)+2>>1]|0;i=32768-l+(e[m+(j*6|0)+4>>1]|0)|0;n=(e[m+(j*6|0)>>1]|0)-l+32768|0;b[g+(j*6|0)>>1]=l+49152+(((i&65535)+(n&65535)|0)>>>2);b[g+(j*6|0)+2>>1]=i;b[g+(j*6|0)+4>>1]=n;j=j+1|0}while((j|0)!=(h|0));return}j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=0;do{l=e[m+(f*6|0)+2>>1]|0;h=32768-l+(e[m+(f*6|0)+4>>1]|0)|0;n=(e[m+(f*6|0)>>1]|0)-l+32768|0;b[g+(f<<1)>>1]=l+49152+(((h&65535)+(n&65535)|0)>>>2);b[g+(f+i<<1)>>1]=h;b[g+(f+d<<1)>>1]=n;f=f+1|0}while((f|0)!=(j|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=i*3|0;k=0;do{n=b[m+(k<<3)+6>>1]|0;o=e[m+(k<<3)+2>>1]|0;l=32768-o+(e[m+(k<<3)+4>>1]|0)|0;h=(e[m+(k<<3)>>1]|0)-o+32768|0;b[g+(k<<1)>>1]=o+49152+(((l&65535)+(h&65535)|0)>>>2);b[g+(k+i<<1)>>1]=l;b[g+(k+d<<1)>>1]=h;b[g+(k+f<<1)>>1]=n;k=k+1|0}while((k|0)!=(j|0));return}default:return}}function sd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;rd(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;rd(b,t,e,f,g);i=q;return}function td(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=e[f+(d*6|0)+2>>1]|0;k=e[f+(d*6|0)+4>>1]|0;i=(e[f+(d*6|0)>>1]|0)-((k+l|0)>>>2)+16384|0;b[g+(d*6|0)>>1]=k+32768+i;b[g+(d*6|0)+2>>1]=i;b[g+(d*6|0)+4>>1]=l+32768+i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=e[f+(k+i<<1)>>1]|0;o=e[f+(k+j<<1)>>1]|0;l=(e[f+(k<<1)>>1]|0)-((o+n|0)>>>2)+16384|0;b[g+(k*6|0)>>1]=o+32768+l;b[g+(k*6|0)+2>>1]=l;b[g+(k*6|0)+4>>1]=n+32768+l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{n=e[f+(k+i<<1)>>1]|0;p=e[f+(k+d<<1)>>1]|0;o=(e[f+(k<<1)>>1]|0)-((p+n|0)>>>2)+16384|0;q=b[f+(k+j<<1)>>1]|0;r=mw(o&65535|0,0,16)|0;n=n+32768+o|D;q=mw(q&65535|0,0,48)|0;q=r|p+32768+o&65535|q;n=n&65535|D;o=g+(k<<3)|0;p=o;b[p>>1]=q;b[p+2>>1]=q>>>16;o=o+4|0;b[o>>1]=n;b[o+2>>1]=n>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){r=d+4|0;q=b[d>>1]|0;b[d>>1]=b[r>>1]|0;b[r>>1]=q;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function ud(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36412;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function vd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36412;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function wd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;Ad(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Ad(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function xd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;yd(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{zd(a,f,b,d,e);return}}function yd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=d+4|0;j=c[l>>2]|0;do if(!(a[j+32>>0]|0))m=f;else{d=d+8|0;lw(c[d>>2]|0,f|0,h*6|0)|0;j=c[l>>2]|0;k=c[j+16>>2]|0;if((h|0)<=0){m=c[d>>2]|0;break}d=c[d>>2]|0;j=d;f=0;while(1){m=j+4|0;n=b[j>>1]|0;b[j>>1]=b[m>>1]|0;b[m>>1]=n;f=f+1|0;if((f|0)==(h|0))break;else j=j+(k<<1)|0}m=d;j=c[l>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)>0)j=0;else return;do{k=e[m+(j*6|0)>>1]|0;i=b[m+(j*6|0)+2>>1]|0;l=i&65535;n=(e[m+(j*6|0)+4>>1]|0)+32768-((l+k|0)>>>1)&65535;b[g+(j*6|0)>>1]=k+32768-l;b[g+(j*6|0)+2>>1]=i;b[g+(j*6|0)+4>>1]=n;j=j+1|0}while((j|0)!=(h|0));return}j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=0;do{h=b[m+(f*6|0)+2>>1]|0;k=e[m+(f*6|0)>>1]|0;l=h&65535;n=(e[m+(f*6|0)+4>>1]|0)+32768-((l+k|0)>>>1)&65535;b[g+(f<<1)>>1]=k+32768-l;b[g+(f+i<<1)>>1]=h;b[g+(f+d<<1)>>1]=n;f=f+1|0}while((f|0)!=(j|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=i*3|0;k=0;do{l=b[m+(k<<3)+2>>1]|0;n=b[m+(k<<3)+6>>1]|0;p=e[m+(k<<3)>>1]|0;o=l&65535;h=(e[m+(k<<3)+4>>1]|0)+32768-((o+p|0)>>>1)&65535;b[g+(k<<1)>>1]=p+32768-o;b[g+(k+i<<1)>>1]=l;b[g+(k+d<<1)>>1]=h;b[g+(k+f<<1)>>1]=n;k=k+1|0}while((k|0)!=(j|0));return}default:return}}function zd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;yd(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;yd(b,t,e,f,g);i=q;return}function Ad(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=b[f+(d*6|0)+2>>1]|0;i=l&65535;k=(e[f+(d*6|0)>>1]|0)+32768+i|0;i=(e[f+(d*6|0)+4>>1]|0)+32768+(((k&65535)+i|0)>>>1)&65535;b[g+(d*6|0)>>1]=k;b[g+(d*6|0)+2>>1]=l;b[g+(d*6|0)+4>>1]=i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=b[f+(k+i<<1)>>1]|0;l=n&65535;o=(e[f+(k<<1)>>1]|0)+32768+l|0;l=(e[f+(k+j<<1)>>1]|0)+32768+(((o&65535)+l|0)>>>1)&65535;b[g+(k*6|0)>>1]=o;b[g+(k*6|0)+2>>1]=n;b[g+(k*6|0)+4>>1]=l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{o=b[f+(k+i<<1)>>1]|0;n=o&65535;p=(e[f+(k<<1)>>1]|0)+32768+n&65535;n=(e[f+(k+d<<1)>>1]|0)+32768+((p+n|0)>>>1)|0;q=b[f+(k+j<<1)>>1]|0;o=mw(o&65535|0,0,16)|0;n=D|n;q=mw(q&65535|0,0,48)|0;q=p|o|q;n=n&65535|D;o=g+(k<<3)|0;p=o;b[p>>1]=q;b[p+2>>1]=q>>>16;o=o+4|0;b[o>>1]=n;b[o+2>>1]=n>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){q=d+4|0;p=b[d>>1]|0;b[d>>1]=b[q>>1]|0;b[q>>1]=p;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function Bd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36436;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Cd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36436;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Dd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;Hd(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Hd(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Ed(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Fd(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Gd(a,f,b,d,e);return}}function Fd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;l=d+4|0;j=c[l>>2]|0;do if(!(a[j+32>>0]|0))m=f;else{d=d+8|0;lw(c[d>>2]|0,f|0,h*6|0)|0;j=c[l>>2]|0;k=c[j+16>>2]|0;if((h|0)<=0){m=c[d>>2]|0;break}d=c[d>>2]|0;j=d;f=0;while(1){m=j+4|0;n=b[j>>1]|0;b[j>>1]=b[m>>1]|0;b[m>>1]=n;f=f+1|0;if((f|0)==(h|0))break;else j=j+(k<<1)|0}m=d;j=c[l>>2]|0}while(0);switch(c[j+16>>2]|0){case 3:{if((c[j+24>>2]|0)==2){if((h|0)>0)j=0;else return;do{i=b[m+(j*6|0)+2>>1]|0;l=i&65535;n=32768-l+(e[m+(j*6|0)+4>>1]|0)&65535;b[g+(j*6|0)>>1]=(e[m+(j*6|0)>>1]|0)+32768-l;b[g+(j*6|0)+2>>1]=i;b[g+(j*6|0)+4>>1]=n;j=j+1|0}while((j|0)!=(h|0));return}j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=0;do{h=b[m+(f*6|0)+2>>1]|0;l=h&65535;n=32768-l+(e[m+(f*6|0)+4>>1]|0)&65535;b[g+(f<<1)>>1]=(e[m+(f*6|0)>>1]|0)+32768-l;b[g+(f+i<<1)>>1]=h;b[g+(f+d<<1)>>1]=n;f=f+1|0}while((f|0)!=(j|0));return}case 4:{if((c[j+24>>2]|0)!=1)return;j=(i|0)<(h|0)?i:h;if((j|0)<=0)return;d=i<<1;f=i*3|0;k=0;do{l=b[m+(k<<3)+2>>1]|0;n=b[m+(k<<3)+6>>1]|0;o=l&65535;h=32768-o+(e[m+(k<<3)+4>>1]|0)&65535;b[g+(k<<1)>>1]=(e[m+(k<<3)>>1]|0)+32768-o;b[g+(k+i<<1)>>1]=l;b[g+(k+d<<1)>>1]=h;b[g+(k+f<<1)>>1]=n;k=k+1|0}while((k|0)!=(j|0));return}default:return}}function Gd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Fd(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Fd(b,t,e,f,g);i=q;return}function Hd(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=b[f+(d*6|0)+2>>1]|0;k=l&65535;i=k+32768+(e[f+(d*6|0)+4>>1]|0)&65535;b[g+(d*6|0)>>1]=(e[f+(d*6|0)>>1]|0)+32768+k;b[g+(d*6|0)+2>>1]=l;b[g+(d*6|0)+4>>1]=i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=b[f+(k+i<<1)>>1]|0;o=n&65535;l=o+32768+(e[f+(k+j<<1)>>1]|0)&65535;b[g+(k*6|0)>>1]=(e[f+(k<<1)>>1]|0)+32768+o;b[g+(k*6|0)+2>>1]=n;b[g+(k*6|0)+4>>1]=l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{o=b[f+(k+i<<1)>>1]|0;n=o&65535;p=(e[f+(k<<1)>>1]|0)+32768+n|0;n=n+32768+(e[f+(k+d<<1)>>1]|0)|0;q=b[f+(k+j<<1)>>1]|0;o=mw(o&65535|0,0,16)|0;n=D|n;q=mw(q&65535|0,0,48)|0;q=p&65535|o|q;n=n&65535|D;o=g+(k<<3)|0;p=o;b[p>>1]=q;b[p+2>>1]=q>>>16;o=o+4|0;b[o>>1]=n;b[o+2>>1]=n>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){q=d+4|0;p=b[d>>1]|0;b[d>>1]=b[q>>1]|0;b[q>>1]=p;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function Id(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36460;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e)return;b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);return}function Jd(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=36460;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}e=c[a+8>>2]|0;if(!e){cj(a);return}b=a+12|0;d=c[b>>2]|0;if((d|0)!=(e|0))c[b>>2]=d+(~((d+-2-e|0)>>>1)<<1);cj(e);cj(a);return}function Kd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=b+36|0;if(!(c[g>>2]|0)){j=b+40|0;Od(b,d,c[j>>2]|0,e,f);c[j>>2]=(c[j>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}k=b+4|0;h=e<<1;i=$(h,c[(c[k>>2]|0)+16>>2]|0)|0;j=b+20|0;Od(b,d,c[j>>2]|0,e,f);d=c[k>>2]|0;if((c[d+28>>2]|0)==536870912)Oc(c[j>>2]|0,$(h,c[d+16>>2]|0)|0);k=c[g>>2]|0;if((Gb[c[(c[k>>2]|0)+48>>2]&63](k,c[j>>2]|0,i)|0)==(i|0))return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,3,35648);k=o;o=0;if(k&1){k=Na()|0;La(d|0);Ya(k|0)}else lb(d|0,824,96)}function Ld(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Md(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Nd(a,f,b,d,e);return}}function Md(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;k=d+4|0;i=c[k>>2]|0;do if(!(a[i+32>>0]|0))l=e;else{d=d+8|0;lw(c[d>>2]|0,e|0,g*6|0)|0;i=c[k>>2]|0;j=c[i+16>>2]|0;if((g|0)<=0){l=c[d>>2]|0;break}d=c[d>>2]|0;i=d;e=0;while(1){l=i+4|0;m=b[i>>1]|0;b[i>>1]=b[l>>1]|0;b[l>>1]=m;e=e+1|0;if((e|0)==(g|0))break;else i=i+(j<<1)|0}l=d;i=c[k>>2]|0}while(0);switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{h=b[l+(i*6|0)+2>>1]|0;m=b[l+(i*6|0)+4>>1]|0;b[f+(i*6|0)>>1]=b[l+(i*6|0)>>1]|0;b[f+(i*6|0)+2>>1]=h;b[f+(i*6|0)+4>>1]=m;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;d=h<<1;e=0;do{g=b[l+(e*6|0)+2>>1]|0;m=b[l+(e*6|0)+4>>1]|0;b[f+(e<<1)>>1]=b[l+(e*6|0)>>1]|0;b[f+(e+h<<1)>>1]=g;b[f+(e+d<<1)>>1]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;d=h<<1;e=h*3|0;j=0;do{k=b[l+(j<<3)+2>>1]|0;g=b[l+(j<<3)+4>>1]|0;m=b[l+(j<<3)+6>>1]|0;b[f+(j<<1)>>1]=b[l+(j<<3)>>1]|0;b[f+(j+h<<1)>>1]=k;b[f+(j+d<<1)>>1]=g;b[f+(j+e<<1)>>1]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function Nd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;q=i;i=i+176|0;r=q+152|0;t=q+16|0;s=q;l=b+4|0;h=c[l>>2]|0;p=f<<1;j=$(p,c[h+16>>2]|0)|0;do if(j){k=b+20|0;while(1){h=Gb[c[(c[d>>2]|0)+32>>2]&63](d,c[k>>2]|0,j)|0;if(!h)break;if((j|0)==(h|0)){m=26;break}else j=j-h|0}if((m|0)==26){h=c[l>>2]|0;break}m=t+56|0;l=t+4|0;c[t>>2]=36160;c[m>>2]=36180;o=0;ia(62,t+56|0,l|0);q=o;o=0;if(q&1){t=Na()|0;fn(m);Ya(t|0)}c[t+128>>2]=0;c[t+132>>2]=-1;c[t>>2]=36200;c[t+56>>2]=36220;o=0;ha(180,l|0);q=o;o=0;do if(q&1)h=Na()|0;else{c[l>>2]=36236;d=t+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[t+52>>2]=16;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;o=0;ia(63,l|0,r|0);q=o;o=0;if(q&1){h=Na()|0;Im(r);Im(d);nn(l);break}Im(r);o=0;h=ma(28,t|0,49029,57)|0;r=o;o=0;if(!(r&1)?(o=0,ra(36,h|0,0)|0,r=o,o=0,!(r&1)):0){k=Ma(16)|0;o=0;ia(64,s|0,l|0);r=o;o=0;if(!(r&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,s|0);r=o;o=0;if(r&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(s);if(!j){s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}}else h=Na()|0;La(k|0);s=h;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}s=Na()|0;c[t>>2]=36200;c[m>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(m);Ya(s|0)}while(0);t=h;fn(m);Ya(t|0)}while(0);j=b+20|0;if((c[h+28>>2]|0)!=536870912){t=c[j>>2]|0;Md(b,t,e,f,g);i=q;return}Oc(c[j>>2]|0,$(p,c[h+16>>2]|0)|0);t=c[j>>2]|0;Md(b,t,e,f,g);i=q;return}function Od(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=d+4|0;d=c[m>>2]|0;a:do switch(c[d+16>>2]|0){case 3:{if((c[d+24>>2]|0)==2){if((h|0)>0)d=0;else break a;while(1){l=b[f+(d*6|0)+2>>1]|0;i=b[f+(d*6|0)+4>>1]|0;b[g+(d*6|0)>>1]=b[f+(d*6|0)>>1]|0;b[g+(d*6|0)+2>>1]=l;b[g+(d*6|0)+4>>1]=i;d=d+1|0;if((d|0)==(h|0))break a}}d=(h|0)<(i|0)?h:i;if((d|0)>0){j=i<<1;k=0;do{n=b[f+(k+i<<1)>>1]|0;l=b[f+(k+j<<1)>>1]|0;b[g+(k*6|0)>>1]=b[f+(k<<1)>>1]|0;b[g+(k*6|0)+2>>1]=n;b[g+(k*6|0)+4>>1]=l;k=k+1|0}while((k|0)!=(d|0))}break}case 4:{if((c[d+24>>2]|0)==1?(l=(h|0)<(i|0)?h:i,(l|0)>0):0){d=i<<1;j=i*3|0;k=0;do{n=b[f+(k<<1)>>1]|0;q=b[f+(k+j<<1)>>1]|0;o=e[f+(k+d<<1)>>1]|0;p=mw(e[f+(k+i<<1)>>1]|0,0,16)|0;o=D|o;q=mw(q&65535|0,0,48)|0;q=p|n&65535|q;o=o&65535|D;n=g+(k<<3)|0;p=n;b[p>>1]=q;b[p+2>>1]=q>>>16;n=n+4|0;b[n>>1]=o;b[n+2>>1]=o>>>16;k=k+1|0}while((k|0)!=(l|0))}break}default:{}}while(0);d=c[m>>2]|0;if(!(a[d+32>>0]|0))return;k=c[d+16>>2]|0;if((h|0)<=0)return;d=g;j=0;while(1){q=d+4|0;p=b[d>>1]|0;b[d>>1]=b[q>>1]|0;b[q>>1]=p;j=j+1|0;if((j|0)==(h|0))break;else d=d+(k<<1)|0}return}function Pd(a){a=a|0;return}function Qd(a){a=a|0;cj(a);return}function Rd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;e=$(c[b+8>>2]|0,e)|0;b=c[b+4>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,d,e)|0)==(e|0))return;f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,3,35648);b=o;o=0;if(b&1){b=Na()|0;La(f|0);Ya(b|0)}else lb(f|0,824,96)}function Sd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,p=0;p=i;i=i+16|0;m=p;l=b+8|0;g=c[l>>2]|0;f=$(g,e)|0;do if(f){j=b+4|0;h=f;while(1){g=c[j>>2]|0;g=Gb[c[(c[g>>2]|0)+32>>2]&63](g,d,h)|0;if(!g)break;f=h-g|0;if((h|0)==(g|0)){k=11;break}else h=f}if((k|0)==11){g=c[l>>2]|0;h=f;break}f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,3,35648);b=o;o=0;if(b&1){b=Na()|0;La(f|0);Ya(b|0)}else lb(f|0,824,96)}else h=0;while(0);if((g|0)==2){Oc(d,e<<1);g=c[l>>2]|0}f=c[b+12>>2]|0;if((f|0)<=($(g,e)|0)){i=p;return}b=c[b+4>>2]|0;Ib[c[(c[b>>2]|0)+16>>2]&15](m,b,f-h|0,0,1,24);i=p;return}function Td(a){a=a|0;cj(a);return}function Ud(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=a+4|0;lw(c[e>>2]|0,b|0,$(c[a+8>>2]|0,d)|0)|0;c[e>>2]=(c[e>>2]|0)+(c[a+12>>2]|0);return}function Vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;e=a+4|0;lw(b|0,c[e>>2]|0,$(c[a+8>>2]|0,d)|0)|0;c[e>>2]=(c[e>>2]|0)+(c[a+12>>2]|0);return}function Wd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c[b+112>>2]=0;c[b+108>>2]=0;l=c[d>>2]|0;g=l;do if(l){i=b+92|0;l=b+96|0;j=c[l>>2]|0;k=c[i>>2]|0;e=k;f=j-e|0;if(f>>>0>=4e4)if(f>>>0>4e4?(h=k+4e4|0,(j|0)!=(h|0)):0){c[l>>2]=h;h=e}else h=e;else{Xd(i,4e4-f|0);h=c[i>>2]|0;g=c[d>>2]|0}e=b+116|0;c[e>>2]=h;j=b+124|0;c[j>>2]=h;k=b+104|0;c[k>>2]=g;f=g;if(g){if((c[f+12>>2]|0)==(c[f+16>>2]|0)){d=(Eb[c[(c[g>>2]|0)+36>>2]&127](f)|0)==-1;f=c[j>>2]|0;if(d)break;g=c[e>>2]|0}else{f=h;g=h}i=f-g|0;if(i>>>0<=64){h=b+92|0;if((f|0)==(g|0))f=g;else{f=g;g=0;do{a[(c[h>>2]|0)+g>>0]=a[f+g>>0]|0;g=g+1|0;f=c[e>>2]|0}while(g>>>0>>0);g=c[j>>2]|0}h=c[h>>2]|0;d=h;m=d-f|0;c[e>>2]=h;f=g+m|0;c[j>>2]=f;h=b+120|0;c[h>>2]=(c[h>>2]|0)+m;k=c[k>>2]|0;f=Gb[c[(c[k>>2]|0)+32>>2]&63](k,f,(c[l>>2]|0)-(d+i)|0)|0;f=(c[j>>2]|0)+f|0;c[j>>2]=f}}else f=h}else{c[b+104>>2]=0;f=c[d+4>>2]|0;e=b+116|0;c[e>>2]=f;f=f+(c[d+8>>2]|0)|0;c[b+124>>2]=f}while(0);e=c[e>>2]|0;if(e>>>0>=f>>>0){l=e;m=b+120|0;c[m>>2]=l;ge(b);return}while(1){if((a[e>>0]|0)==-1){f=20;break}e=e+1|0;if(e>>>0>=f>>>0){f=20;break}}if((f|0)==20){m=b+120|0;c[m>>2]=e;ge(b);return}}function Xd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=b+8|0;g=c[k>>2]|0;l=b+4|0;e=c[l>>2]|0;f=e;if((g-f|0)>>>0>=d>>>0){do{a[e>>0]=0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;d=d+-1|0}while((d|0)!=0);return}e=c[b>>2]|0;h=f-e+d|0;if((h|0)<0){$i(b);g=c[k>>2]|0;e=c[b>>2]|0}f=g-e|0;if(f>>>0<1073741823){f=f<<1;f=f>>>0>>0?h:f;e=(c[l>>2]|0)-e|0;if(!f){g=0;i=0;h=e}else j=8}else{f=2147483647;e=(c[l>>2]|0)-e|0;j=8}if((j|0)==8){g=f;i=bj(f)|0;h=e}e=i+h|0;g=i+g|0;f=e;do{a[f>>0]=0;f=e+1|0;e=f;d=d+-1|0}while((d|0)!=0);d=c[b>>2]|0;f=(c[l>>2]|0)-d|0;j=i+(h-f)|0;lw(j|0,d|0,f|0)|0;c[b>>2]=j;c[l>>2]=e;c[k>>2]=g;if(!d)return;cj(d);return}function Yd(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+32|0;x=v+12|0;u=v;r=a+180|0;s=(c[r>>2]|0)+4|0;if((c[a+32>>2]|0)==1)t=c[a+24>>2]|0;else t=1;d=$(t<<1,s)|0;c[x>>2]=0;y=x+4|0;c[y>>2]=0;c[x+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,x|0),w=o,o=0,w&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,w=o,o=0,!(w&1)):0){c[x>>2]=f;w=f+(d<<1)|0;c[x+8>>2]=w;iw(f|0,0,e|0)|0;c[y>>2]=w;break}f=Na()|0;d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[u>>2]=0;w=u+4|0;c[w>>2]=0;c[u+8>>2]=0;do if(!t)j=18;else{if(!(t>>>0>1073741823?(o=0,ha(178,u|0),q=o,o=0,q&1):0))j=16;if((j|0)==16?(g=t<<2,o=0,h=ka(67,g|0)|0,q=o,o=0,!(q&1)):0){c[u>>2]=h;j=h+(t<<2)|0;c[u+8>>2]=j;iw(h|0,0,g|0)|0;c[w>>2]=j;j=18;break}f=Na()|0;d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+12|0;a:do if((c[h>>2]|0)>0){j=a+4604|0;k=($(t,s)|0)+1|0;l=a+4608|0;m=a+92|0;n=(t|0)>0;p=a+4600|0;q=0;b:while(1){e=c[x>>2]|0;d=e+2|0;c[j>>2]=d;e=e+(k<<1)|0;c[l>>2]=e;if(!(q&1))d=e;else{c[j>>2]=e;c[l>>2]=d}g=c[m>>2]|0;o=0;Aa(c[(c[g>>2]|0)+12>>2]|0,g|0,d|0,c[r>>2]|0,s|0);g=o;o=0;if(g&1){j=28;break}if(n){d=c[j>>2]|0;e=c[l>>2]|0;f=c[u>>2]|0;g=0;do{c[p>>2]=c[f+(g<<2)>>2];f=c[r>>2]|0;b[d+(f<<1)>>1]=b[d+(f+-1<<1)>>1]|0;b[e+-2>>1]=b[d>>1]|0;o=0;ia(68,a|0,0);f=o;o=0;if(f&1){j=27;break b}f=c[u>>2]|0;c[f+(g<<2)>>2]=c[p>>2];d=(c[j>>2]|0)+(s<<1)|0;c[j>>2]=d;e=(c[l>>2]|0)+(s<<1)|0;c[l>>2]=e;g=g+1|0}while((g|0)<(t|0))}q=q+1|0;if((q|0)>=(c[h>>2]|0)){j=40;break a}}if((j|0)==27){f=Na()|0;break}else if((j|0)==28){f=Na()|0;break}}else j=40;while(0);do if((j|0)==40){o=0;ha(182,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[u>>2]|0;e=d;if(d){f=c[w>>2]|0;if((f|0)!=(d|0))c[w>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[x>>2]|0;if(!d){i=v;return}e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=v;return}while(0);d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function Zd(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4604|0;f=c[p>>2]|0;s=d+180|0;if((c[s>>2]|0)<=0)return;q=d+4608|0;r=d+4612|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(ce(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=be(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function _d(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=b+104|0;if((c[g>>2]|0)>>>0<4)$d(b);h=b+100|0;i=b+112|0;j=b+96|0;k=b+108|0;l=b+116|0;d=c[h>>2]|0;f=0;do{e=a[i>>0]|0;if((d|0)>31)break;d=c[j>>2]|0;if(!(e<<24>>24)){a[c[k>>2]>>0]=d>>>24;c[j>>2]=c[j>>2]<<8;d=(c[h>>2]|0)+8|0}else{a[c[k>>2]>>0]=d>>>25;c[j>>2]=c[j>>2]<<7;d=(c[h>>2]|0)+7|0}c[h>>2]=d;m=c[k>>2]|0;e=(a[m>>0]|0)==-1&1;a[i>>0]=e;c[k>>2]=m+1;c[g>>2]=(c[g>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+1;f=f+1|0}while((f|0)<4);if(!(e<<24>>24))ae(b,0,(d|0)%8|0);else ae(b,0,(d+-1|0)%8|0);if((c[g>>2]|0)>>>0<4)$d(b);d=c[h>>2]|0;e=0;do{if((d|0)>31)break;d=c[j>>2]|0;if(!(a[i>>0]|0)){a[c[k>>2]>>0]=d>>>24;c[j>>2]=c[j>>2]<<8;d=(c[h>>2]|0)+8|0}else{a[c[k>>2]>>0]=d>>>25;c[j>>2]=c[j>>2]<<7;d=(c[h>>2]|0)+7|0}c[h>>2]=d;m=c[k>>2]|0;a[i>>0]=(a[m>>0]|0)==-1&1;c[k>>2]=m+1;c[g>>2]=(c[g>>2]|0)+-1;c[l>>2]=(c[l>>2]|0)+1;e=e+1|0}while((e|0)<4);if(!(c[b+132>>2]|0))return;$d(b);return}function $d(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b+132>>2]|0;if(!d){d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,4,35648);b=o;o=0;if(!(b&1))lb(d|0,824,96);b=Na()|0;La(d|0);Ya(b|0)}e=b+108|0;f=b+120|0;h=c[f>>2]|0;g=(c[e>>2]|0)-h|0;if((Gb[c[(c[d>>2]|0)+48>>2]&63](d,h,g)|0)==(g|0)){h=c[f>>2]|0;c[e>>2]=h;c[b+104>>2]=(c[b+124>>2]|0)-h;return}d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,4,35648);h=o;o=0;if(!(h&1))lb(d|0,824,96);h=Na()|0;La(d|0);Ya(h|0)}function ae(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=b+100|0;e=(c[l>>2]|0)-e|0;c[l>>2]=e;if((e|0)>-1){m=b+96|0;c[m>>2]=c[m>>2]|d<>2]=c[m>>2]|d>>0-e;k=b+104|0;if((c[k>>2]|0)>>>0<4){$d(b);e=c[l>>2]|0}h=b+112|0;i=b+108|0;j=b+116|0;f=0;while(1){if((e|0)>31)break;e=c[m>>2]|0;if(!(a[h>>0]|0)){a[c[i>>2]>>0]=e>>>24;c[m>>2]=c[m>>2]<<8;e=(c[l>>2]|0)+8|0}else{a[c[i>>2]>>0]=e>>>25;c[m>>2]=c[m>>2]<<7;e=(c[l>>2]|0)+7|0}c[l>>2]=e;n=c[i>>2]|0;a[h>>0]=(a[n>>0]|0)==-1&1;c[i>>2]=n+1;c[k>>2]=(c[k>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+1;f=f+1|0;if((f|0)>=4){g=11;break}}a:do if((g|0)==11)if((e|0)<0){c[m>>2]=c[m>>2]|d>>0-e;if((c[k>>2]|0)>>>0<4){$d(b);e=c[l>>2]|0;f=0}else f=0;do{if((e|0)>31)break a;e=c[m>>2]|0;if(!(a[h>>0]|0)){a[c[i>>2]>>0]=e>>>24;c[m>>2]=c[m>>2]<<8;e=(c[l>>2]|0)+8|0}else{a[c[i>>2]>>0]=e>>>25;c[m>>2]=c[m>>2]<<7;e=(c[l>>2]|0)+7|0}c[l>>2]=e;n=c[i>>2]|0;a[h>>0]=(a[n>>0]|0)==-1&1;c[i>>2]=n+1;c[k>>2]=(c[k>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+1;f=f+1|0}while((f|0)<4)}while(0);c[m>>2]=c[m>>2]|d<>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;fe(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&65535;return r|0}r=g&~(d>>31);r=r&65535;return r|0}function ce(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=(c[a+180>>2]|0)-d|0;m=c[a+4608>>2]|0;n=c[a+4604>>2]|0;h=b[m+(d+-1<<1)>>1]|0;k=h&65535;f=c[a+144>>2]|0;i=0;while(1){g=m+(i+d<<1)|0;j=(e[g>>1]|0)-k|0;if((((j|0)>-1?j:0-j|0)|0)>(f|0))break;b[g>>1]=h;i=i+1|0;if((i|0)==(l|0)){i=l;break}}h=(i|0)==(l|0);j=a+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(i|0))f=i;else{f=i;do{ae(a,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]=de(a,e[d>>1]|0,k,e[n+(l<<1)>>1]|0)|0;a=c[j>>2]|0;c[j>>2]=(a|0)<1?0:a+-1|0;a=i+1|0;return a|0}if(!f){a=l;return a|0}ae(a,1,1);a=l;return a|0}function de(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=d-e|0;j=a+136|0;h=a+144|0;f=c[h>>2]|0;if((((i|0)>-1?i:0-i|0)|0)>(f|0)){g=e-d>>31|1;b=$(g,b-e|0)|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;d=((b|0)<0?f:0)+b|0;f=d-((d|0)<((f+1|0)/2|0|0)?0:f)|0;ee(a,a+4576|0,f);f=$(f,g)|0;g=c[h>>2]|0;h=g<<1|1;f=($(f,h)|0)+e|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&65535;return j|0}j=b&~(f>>31);j=j&65535;return j|0}else{b=b-d|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;g=((b|0)<0?f:0)+b|0;f=g-((g|0)<((f+1|0)/2|0|0)?0:f)|0;ee(a,a+4588|0,f);g=c[h>>2]|0;h=g<<1|1;f=($(h,f)|0)+d|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&65535;return j|0}j=b&~(f>>31);j=j&65535;return j|0}return 0}function ee(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;fe(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function fe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>2]|0;l=b+120|0;if(e>>>0<((c[l>>2]|0)+-3|0)>>>0){l=b+112|0;j=c[l>>2]|0;b=b+108|0;c[b>>2]=(d[e+1>>0]<<16|d[e>>0]<<24|d[e+2>>0]<<8|d[e+3>>0])>>>j|c[b>>2];b=32-j>>3;c[k>>2]=e+b;c[l>>2]=(b<<3)+j;return}j=b+104|0;f=c[j>>2]|0;do if(f){if((c[f+12>>2]|0)==(c[f+16>>2]|0)){if((Eb[c[(c[f>>2]|0)+36>>2]&127](f)|0)==-1)break;e=c[k>>2]|0}h=b+124|0;f=c[h>>2]|0;i=f-e|0;if(i>>>0<=64){g=b+92|0;if((f|0)==(e|0))f=e;else{f=0;do{a[(c[g>>2]|0)+f>>0]=a[e+f>>0]|0;f=f+1|0;e=c[k>>2]|0}while(f>>>0>>0);f=e;e=c[h>>2]|0}p=c[g>>2]|0;g=p;m=g-f|0;c[k>>2]=p;f=e+m|0;c[h>>2]=f;c[l>>2]=(c[l>>2]|0)+m;j=c[j>>2]|0;j=Gb[c[(c[j>>2]|0)+32>>2]&63](j,f,(c[b+96>>2]|0)-(g+i)|0)|0;c[h>>2]=(c[h>>2]|0)+j}}while(0);j=b+112|0;i=b+108|0;b=c[b+124>>2]|0;h=b+-1|0;e=c[k>>2]|0;while(1){if(e>>>0>=b>>>0){f=14;break}g=a[e>>0]|0;f=g&255;g=g<<24>>24==-1;if(g){if((e|0)==(h|0)){f=25;break}e=e+1|0;if((a[e>>0]|0)<0){f=25;break}}else e=e+1|0;p=c[j>>2]|0;c[i>>2]=f<<24-p|c[i>>2];c[k>>2]=e;p=p+(g?7:8)|0;c[j>>2]=p;if((p|0)>=24){f=33;break}}if((f|0)==14){if((c[j>>2]|0)>=1)return;e=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,e|0,5,35648);p=o;o=0;if(!(p&1))lb(e|0,824,96);p=Na()|0;La(e|0);Ya(p|0)}else if((f|0)==25){if((c[j>>2]|0)>=1)return;e=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,e|0,5,35648);p=o;o=0;if(!(p&1))lb(e|0,824,96);p=Na()|0;La(e|0);Ya(p|0)}else if((f|0)==33){a:do if(e>>>0>>0)do{if((a[e>>0]|0)==-1)break a;e=e+1|0}while(e>>>0>>0);while(0);c[l>>2]=e;return}}function he(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+144|0;a:do if(!(c[o>>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function ie(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=b+8|0;g=c[k>>2]|0;l=b+4|0;e=c[l>>2]|0;f=e;if((g-f|0)>>>0>=d>>>0){do{a[e>>0]=0;e=(c[l>>2]|0)+1|0;c[l>>2]=e;d=d+-1|0}while((d|0)!=0);return}e=c[b>>2]|0;h=f-e+d|0;if((h|0)<0){$i(b);g=c[k>>2]|0;e=c[b>>2]|0}f=g-e|0;if(f>>>0<1073741823){f=f<<1;f=f>>>0>>0?h:f;e=(c[l>>2]|0)-e|0;if(!f){g=0;i=0;h=e}else j=8}else{f=2147483647;e=(c[l>>2]|0)-e|0;j=8}if((j|0)==8){g=f;i=bj(f)|0;h=e}e=i+h|0;g=i+g|0;f=e;do{a[f>>0]=0;f=e+1|0;e=f;d=d+-1|0}while((d|0)!=0);d=c[b>>2]|0;f=(c[l>>2]|0)-d|0;j=i+(h-f)|0;lw(j|0,d|0,f|0)|0;c[b>>2]=j;c[l>>2]=e;c[k>>2]=g;if(!d)return;cj(d);return}function je(a){a=a|0;var b=0,d=0;c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function ke(a){a=a|0;var b=0,d=0;c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function le(a){a=a|0;var b=0,d=0;c[a>>2]=36052;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function me(a){a=a|0;var b=0,d=0;c[a>>2]=36052;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function ne(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;xe(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function oe(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35828;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];qe(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;qe(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}\n function pe(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function qe(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;w=u+12|0;t=u;q=a+180|0;r=(c[q>>2]|0)+4|0;if((c[a+32>>2]|0)==1)s=c[a+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;do if(d){if(!(d>>>0>715827882?(o=0,ha(178,w|0),v=o,o=0,v&1):0))j=6;if((j|0)==6?(o=0,e=ka(67,d*6|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;f=e+(d*6|0)|0;c[w+8>>2]=f;while(1){b[e>>1]=0;b[e+2>>1]=0;b[e+4>>1]=0;d=d+-1|0;if(!d)break;else e=e+6|0}c[x>>2]=f;break}f=Na()|0;d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)j=20;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))j=18;if((j|0)==18?(g=s<<2,o=0,h=ka(67,g|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=h;j=h+(s<<2)|0;c[t+8>>2]=j;iw(h|0,0,g|0)|0;c[v>>2]=j;j=20;break}f=Na()|0;d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==20){g=a+12|0;a:do if((c[g>>2]|0)>0){h=a+4604|0;j=($(s,r)|0)+1|0;k=a+4608|0;l=a+92|0;m=(s|0)>0;n=a+4600|0;p=0;b:while(1){e=c[w>>2]|0;d=e+6|0;c[h>>2]=d;e=e+(j*6|0)|0;c[k>>2]=e;if(!(p&1))d=e;else{c[h>>2]=e;c[k>>2]=d}f=c[l>>2]|0;o=0;Aa(c[(c[f>>2]|0)+12>>2]|0,f|0,d|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){j=30;break}if(m){d=c[t>>2]|0;e=c[h>>2]|0;f=0;do{c[n>>2]=c[d+(f<<2)>>2];y=c[q>>2]|0;d=e+(y*6|0)|0;e=e+((y+-1|0)*6|0)|0;b[d>>1]=b[e>>1]|0;b[d+2>>1]=b[e+2>>1]|0;b[d+4>>1]=b[e+4>>1]|0;e=(c[k>>2]|0)+-6|0;d=c[h>>2]|0;b[e>>1]=b[d>>1]|0;b[e+2>>1]=b[d+2>>1]|0;b[e+4>>1]=b[d+4>>1]|0;o=0;ia(69,a|0,0);e=o;o=0;if(e&1){j=29;break b}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[n>>2];e=(c[h>>2]|0)+(r*6|0)|0;c[h>>2]=e;c[k>>2]=(c[k>>2]|0)+(r*6|0);f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(182,a|0);y=o;o=0;if(y&1){f=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);i=u;return}while(0);d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}function re(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;B=d+180|0;if((c[B>>2]|0)<=0)return;C=d+4608|0;D=d+4604|0;E=d+4612|0;A=0;while(1){x=A+-1|0;j=c[C>>2]|0;k=c[D>>2]|0;f=A+1|0;i=e[k+(A*6|0)>>1]|0;z=c[E>>2]|0;l=e[k+(x*6|0)>>1]|0;m=i-l|0;n=e[j+(x*6|0)>>1]|0;o=l-n|0;p=((((a[z+((e[k+(f*6|0)>>1]|0)-i)>>0]|0)*9|0)+(a[z+m>>0]|0)|0)*9|0)+(a[z+o>>0]|0)|0;h=e[k+(A*6|0)+2>>1]|0;q=e[k+(x*6|0)+2>>1]|0;r=h-q|0;s=e[j+(x*6|0)+2>>1]|0;t=q-s|0;u=((((a[z+((e[k+(f*6|0)+2>>1]|0)-h)>>0]|0)*9|0)+(a[z+r>>0]|0)|0)*9|0)+(a[z+t>>0]|0)|0;g=e[k+(A*6|0)+4>>1]|0;v=e[k+(x*6|0)+4>>1]|0;w=g-v|0;x=e[j+(x*6|0)+4>>1]|0;y=v-x|0;z=((((a[z+((e[k+(f*6|0)+4>>1]|0)-g)>>0]|0)*9|0)+(a[z+w>>0]|0)|0)*9|0)+(a[z+y>>0]|0)|0;if(!(u|p|z))f=(se(d,A,0)|0)+A|0;else{k=e[j+(A*6|0)>>1]|0;j=i-n>>31;if((j^o|0)>=0)if((j^m|0)<0)i=n;else i=n-l+i|0;k=te(d,p,k,i,0)|0;j=e[(c[C>>2]|0)+(A*6|0)+2>>1]|0;i=h-s>>31;if((i^t|0)>=0)if((i^r|0)<0)h=s;else h=s-q+h|0;i=te(d,u,j,h,0)|0;j=e[(c[C>>2]|0)+(A*6|0)+4>>1]|0;h=g-x>>31;if((h^y|0)>=0)if((h^w|0)<0)g=x;else g=x-v+g|0;y=te(d,z,j,g,0)|0;z=c[C>>2]|0;b[z+(A*6|0)>>1]=k;b[z+(A*6|0)+2>>1]=i;b[z+(A*6|0)+4>>1]=y}if((f|0)<(c[B>>2]|0))A=f;else break}return}function se(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=i;i=i+48|0;r=B+30|0;q=B+24|0;p=B+18|0;s=B+12|0;x=B+6|0;y=B;z=(c[a+180>>2]|0)-d|0;A=c[a+4608>>2]|0;t=c[a+4604>>2]|0;w=d+-1|0;u=b[A+(w*6|0)>>1]|0;v=b[A+(w*6|0)+2>>1]|0;w=b[A+(w*6|0)+4>>1]|0;f=u&65535;g=a+144|0;h=v&65535;j=w&65535;o=0;while(1){m=o+d|0;k=A+(m*6|0)|0;l=A+(m*6|0)+2|0;m=A+(m*6|0)+4|0;C=(e[k>>1]|0)-f|0;n=c[g>>2]|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(e[l>>1]|0)-h|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(e[m>>1]|0)-j|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;b[k>>1]=u;b[l>>1]=v;b[m>>1]=w;o=o+1|0;if((o|0)==(z|0)){o=z;break}}h=(o|0)==(z|0);j=a+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(o|0))f=o;else{f=o;do{ae(a,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]=b[C>>1]|0;b[x+2>>1]=b[C+2>>1]|0;b[x+4>>1]=b[C+4>>1]|0;b[y>>1]=u;b[y+2>>1]=v;b[y+4>>1]=w;d=t+(d*6|0)|0;b[p>>1]=b[x>>1]|0;b[p+2>>1]=b[x+2>>1]|0;b[p+4>>1]=b[x+4>>1]|0;b[q>>1]=b[y>>1]|0;b[q+2>>1]=b[y+2>>1]|0;b[q+4>>1]=b[y+4>>1]|0;b[r>>1]=b[d>>1]|0;b[r+2>>1]=b[d+2>>1]|0;b[r+4>>1]=b[d+4>>1]|0;ve(s,a,p,q,r);b[C>>1]=b[s>>1]|0;b[C+2>>1]=b[s+2>>1]|0;b[C+4>>1]=b[s+4>>1]|0;C=c[j>>2]|0;c[j>>2]=(C|0)<1?0:C+-1|0;C=o+1|0;i=B;return C|0}if(!f){C=z;i=B;return C|0}ae(a,1,1);C=z;i=B;return C|0}function te(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=d>>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;ue(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&65535;return r|0}r=g&~(d>>31);r=r&65535;return r|0}function ue(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>1]|0;p=o-(e[g>>1]|0)>>31|1;i=$(p,(e[f>>1]|0)-o|0)|0;m=d+144|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;w=d+140|0;l=c[w>>2]|0;k=((i|0)<0?l:0)+i|0;l=k-((k|0)<((l+1|0)/2|0|0)?0:l)|0;k=d+4576|0;we(d,k,l);t=e[h+2>>1]|0;u=t-(e[g+2>>1]|0)>>31|1;i=$(u,(e[f+2>>1]|0)-t|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;q=c[w>>2]|0;v=((i|0)<0?q:0)+i|0;q=v-((v|0)<((q+1|0)/2|0|0)?0:q)|0;we(d,k,q);v=e[h+4>>1]|0;s=v-(e[g+4>>1]|0)>>31|1;i=$(s,(e[f+4>>1]|0)-v|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;n=c[w>>2]|0;i=((i|0)<0?n:0)+i|0;n=i-((i|0)<((n+1|0)/2|0|0)?0:n)|0;we(d,k,n);k=c[m>>2]|0;m=k<<1|1;i=($($(m,l)|0,p)|0)+o|0;f=0-k|0;if((i|0)>=(f|0)){j=c[r>>2]|0;if((j+k|0)<(i|0)){i=i-($(c[w>>2]|0,m)|0)|0;g=j}else g=j}else{i=($(c[w>>2]|0,m)|0)+i|0;g=c[r>>2]|0}if((i&g|0)!=(i|0))i=g&~(i>>31);h=i&65535;i=($($(m,q)|0,u)|0)+t|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)!=(i|0))i=g&~(i>>31);j=i&65535;i=($($(m,n)|0,s)|0)+v|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)==(i|0)){w=i;w=w&65535;b[a>>1]=h;v=a+2|0;b[v>>1]=j;a=a+4|0;b[a>>1]=w;return}w=g&~(i>>31);w=w&65535;b[a>>1]=h;v=a+2|0;b[v>>1]=j;a=a+4|0;b[a>>1]=w;return}function we(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;ue(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function xe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+144|0;a:do if(!(c[o>>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function ye(a){a=a|0;var b=0,d=0;c[a>>2]=36024;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function ze(a){a=a|0;var b=0,d=0;c[a>>2]=36024;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Ae(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;pf(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function Be(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35800;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function Ce(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function De(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36712;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function Ee(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36688;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function Fe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36664;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function Ge(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[b>>2]=36640;c[b+4>>2]=e;m=b+8|0;f=c[e>>2]|0;k=e+16|0;i=c[k>>2]|0;h=$(i,f)|0;c[m>>2]=0;n=b+12|0;c[n>>2]=0;c[b+16>>2]=0;do if(!h)h=i;else{if(!((h|0)<0?(o=0,ha(178,m|0),i=o,o=0,i&1):0))l=4;if((l|0)==4?(o=0,j=ka(67,h|0)|0,i=o,o=0,!(i&1)):0){c[n>>2]=j;c[m>>2]=j;c[b+16>>2]=j+h;f=j;do{a[f>>0]=0;f=(c[n>>2]|0)+1|0;c[n>>2]=f;h=h+-1|0}while((h|0)!=0);h=c[k>>2]|0;f=c[e>>2]|0;break}f=Na()|0;g=c[m>>2]|0;if(g){if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g)}n=f;Ya(n|0)}while(0);i=b+20|0;f=$(h,f)|0;c[i>>2]=0;h=b+24|0;c[h>>2]=0;c[b+28>>2]=0;if(!f){n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}if(!((f|0)<0?(o=0,ha(178,i|0),e=o,o=0,e&1):0))l=15;if((l|0)==15?(o=0,g=ka(67,f|0)|0,l=o,o=0,!(l&1)):0){c[h>>2]=g;c[i>>2]=g;c[b+28>>2]=g+f;do{a[g>>0]=0;g=(c[h>>2]|0)+1|0;c[h>>2]=g;f=f+-1|0}while((f|0)!=0);n=b+36|0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];return}f=Na()|0;g=c[i>>2]|0;if(g){if((c[h>>2]|0)!=(g|0))c[h>>2]=g;cj(g)}g=c[m>>2]|0;if(!g){n=f;Ya(n|0)}if((c[n>>2]|0)!=(g|0))c[n>>2]=g;cj(g);n=f;Ya(n|0)}function He(a){a=a|0;var b=0,d=0;c[a>>2]=36640;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function Ie(a){a=a|0;var b=0,d=0;c[a>>2]=36640;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;Ne(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;Ne(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function Ke(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Le(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Me(a,f,b,d,e);return}}function Le(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=b+4|0;i=c[k>>2]|0;if(!(a[i+32>>0]|0))k=e;else{j=b+8|0;lw(c[j>>2]|0,e|0,g*3|0)|0;i=c[k>>2]|0;e=c[i+16>>2]|0;if((g|0)>0){i=c[j>>2]|0;b=0;while(1){l=i+2|0;m=a[i>>0]|0;a[i>>0]=a[l>>0]|0;a[l>>0]=m;b=b+1|0;if((b|0)==(g|0))break;else i=i+e|0}i=c[k>>2]|0}k=c[j>>2]|0}switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{j=d[k+(i*3|0)+1>>0]|0;h=128-j+(d[k+(i*3|0)+2>>0]|0)|0;l=(d[k+(i*3|0)>>0]|0)-j+128|0;m=f+(i*3|0)|0;a[m>>0]=j+192+(((h&255)+(l&255)|0)>>>2);a[m+1>>0]=h;a[m+2>>0]=l;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=0;do{g=d[k+(e*3|0)+1>>0]|0;l=128-g+(d[k+(e*3|0)+2>>0]|0)|0;m=(d[k+(e*3|0)>>0]|0)-g+128|0;a[f+e>>0]=g+192+(((l&255)+(m&255)|0)>>>2);a[f+(e+h)>>0]=l;a[f+(e+b)>>0]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=h*3|0;j=0;do{m=a[k+(j<<2)+3>>0]|0;n=d[k+(j<<2)+1>>0]|0;g=128-n+(d[k+(j<<2)+2>>0]|0)|0;l=(d[k+(j<<2)>>0]|0)-n+128|0;a[f+j>>0]=n+192+(((g&255)+(l&255)|0)>>>2);a[f+(j+h)>>0]=g;a[f+(j+b)>>0]=l;a[f+(j+e)>>0]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function Me(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;Le(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){Le(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function Ne(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=d[e+(b*3|0)+1>>0]|0;i=d[e+(b*3|0)+2>>0]|0;k=(d[e+(b*3|0)>>0]|0)-((i+j|0)>>>2)+64|0;h=f+(b*3|0)|0;a[h>>0]=i+128+k;a[h+1>>0]=k;a[h+2>>0]=j+128+k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=d[e+(j+h)>>0]|0;o=d[e+(j+i)>>0]|0;m=(d[e+j>>0]|0)-((o+n|0)>>>2)+64|0;k=f+(j*3|0)|0;a[k>>0]=o+128+m;a[k+1>>0]=m;a[k+2>>0]=n+128+m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{m=d[e+(j+h)>>0]|0;p=d[e+(j+b)>>0]|0;n=(d[e+j>>0]|0)-((p+m|0)>>>2)+64|0;o=f+(j<<2)|0;n=n<<8&65280|d[e+(j+i)>>0]<<24|p+128+n&255|m+128+n<<16&16711680;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){p=b+2|0;o=a[b>>0]|0;a[b>>0]=a[p>>0]|0;a[p>>0]=o;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function Oe(a){a=a|0;var b=0,d=0;c[a>>2]=36664;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function Pe(a){a=a|0;var b=0,d=0;c[a>>2]=36664;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Qe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;Ue(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;Ue(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function Re(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Se(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{Te(a,f,b,d,e);return}}function Se(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=b+4|0;i=c[k>>2]|0;if(!(a[i+32>>0]|0))k=e;else{j=b+8|0;lw(c[j>>2]|0,e|0,g*3|0)|0;i=c[k>>2]|0;e=c[i+16>>2]|0;if((g|0)>0){i=c[j>>2]|0;b=0;while(1){l=i+2|0;m=a[i>>0]|0;a[i>>0]=a[l>>0]|0;a[l>>0]=m;b=b+1|0;if((b|0)==(g|0))break;else i=i+e|0}i=c[k>>2]|0}k=c[j>>2]|0}switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{e=d[k+(i*3|0)>>0]|0;h=a[k+(i*3|0)+1>>0]|0;j=h&255;l=(d[k+(i*3|0)+2>>0]|0)+128-((j+e|0)>>>1)&255;m=f+(i*3|0)|0;a[m>>0]=e+128-j;a[m+1>>0]=h;a[m+2>>0]=l;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=0;do{l=a[k+(e*3|0)+1>>0]|0;j=d[k+(e*3|0)>>0]|0;g=l&255;m=(d[k+(e*3|0)+2>>0]|0)+128-((g+j|0)>>>1)&255;a[f+e>>0]=j+128-g;a[f+(e+h)>>0]=l;a[f+(e+b)>>0]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=h*3|0;j=0;do{g=a[k+(j<<2)+1>>0]|0;m=a[k+(j<<2)+3>>0]|0;o=d[k+(j<<2)>>0]|0;n=g&255;l=(d[k+(j<<2)+2>>0]|0)+128-((n+o|0)>>>1)&255;a[f+j>>0]=o+128-n;a[f+(j+h)>>0]=g;a[f+(j+b)>>0]=l;a[f+(j+e)>>0]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function Te(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;Se(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){Se(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function Ue(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=a[e+(b*3|0)+1>>0]|0;k=j&255;i=(d[e+(b*3|0)>>0]|0)+128+k|0;k=(d[e+(b*3|0)+2>>0]|0)+128+(((i&255)+k|0)>>>1)&255;h=f+(b*3|0)|0;a[h>>0]=i;a[h+1>>0]=j;a[h+2>>0]=k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=a[e+(j+h)>>0]|0;m=n&255;o=(d[e+j>>0]|0)+128+m|0;m=(d[e+(j+i)>>0]|0)+128+(((o&255)+m|0)>>>1)&255;k=f+(j*3|0)|0;a[k>>0]=o;a[k+1>>0]=n;a[k+2>>0]=m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{n=d[e+(j+h)>>0]|0;m=(d[e+j>>0]|0)+128+n&255;o=f+(j<<2)|0;n=m|n<<8|d[e+(j+i)>>0]<<24|(d[e+(j+b)>>0]|0)+128+((m+n|0)>>>1)<<16&16711680;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){o=b+2|0;n=a[b>>0]|0;a[b>>0]=a[o>>0]|0;a[o>>0]=n;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function Ve(a){a=a|0;var b=0,d=0;c[a>>2]=36688;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function We(a){a=a|0;var b=0,d=0;c[a>>2]=36688;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Xe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;$e(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;$e(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function Ye(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;Ze(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{_e(a,f,b,d,e);return}}function Ze(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=b+4|0;i=c[k>>2]|0;if(!(a[i+32>>0]|0))k=e;else{j=b+8|0;lw(c[j>>2]|0,e|0,g*3|0)|0;i=c[k>>2]|0;e=c[i+16>>2]|0;if((g|0)>0){i=c[j>>2]|0;b=0;while(1){l=i+2|0;m=a[i>>0]|0;a[i>>0]=a[l>>0]|0;a[l>>0]=m;b=b+1|0;if((b|0)==(g|0))break;else i=i+e|0}i=c[k>>2]|0}k=c[j>>2]|0}switch(c[i+16>>2]|0){case 3:{if((c[i+24>>2]|0)==2){if((g|0)>0)i=0;else return;do{h=a[k+(i*3|0)+1>>0]|0;j=h&255;l=128-j+(d[k+(i*3|0)+2>>0]|0)&255;m=f+(i*3|0)|0;a[m>>0]=(d[k+(i*3|0)>>0]|0)+128-j;a[m+1>>0]=h;a[m+2>>0]=l;i=i+1|0}while((i|0)!=(g|0));return}i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=0;do{l=a[k+(e*3|0)+1>>0]|0;g=l&255;m=128-g+(d[k+(e*3|0)+2>>0]|0)&255;a[f+e>>0]=(d[k+(e*3|0)>>0]|0)+128-g;a[f+(e+h)>>0]=l;a[f+(e+b)>>0]=m;e=e+1|0}while((e|0)!=(i|0));return}case 4:{if((c[i+24>>2]|0)!=1)return;i=(h|0)<(g|0)?h:g;if((i|0)<=0)return;b=h<<1;e=h*3|0;j=0;do{g=a[k+(j<<2)+1>>0]|0;m=a[k+(j<<2)+3>>0]|0;n=g&255;l=128-n+(d[k+(j<<2)+2>>0]|0)&255;a[f+j>>0]=(d[k+(j<<2)>>0]|0)+128-n;a[f+(j+h)>>0]=g;a[f+(j+b)>>0]=l;a[f+(j+e)>>0]=m;j=j+1|0}while((j|0)!=(i|0));return}default:return}}function _e(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;Ze(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){Ze(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function $e(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=a[e+(b*3|0)+1>>0]|0;i=j&255;k=i+128+(d[e+(b*3|0)+2>>0]|0)&255;h=f+(b*3|0)|0;a[h>>0]=(d[e+(b*3|0)>>0]|0)+128+i;a[h+1>>0]=j;a[h+2>>0]=k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=a[e+(j+h)>>0]|0;o=n&255;m=o+128+(d[e+(j+i)>>0]|0)&255;k=f+(j*3|0)|0;a[k>>0]=(d[e+j>>0]|0)+128+o;a[k+1>>0]=n;a[k+2>>0]=m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{n=d[e+(j+h)>>0]|0;o=f+(j<<2)|0;n=(d[e+j>>0]|0)+128+n&255|n<<8|d[e+(j+i)>>0]<<24|n+128+(d[e+(j+b)>>0]|0)<<16&16711680;a[o>>0]=n;a[o+1>>0]=n>>8;a[o+2>>0]=n>>16;a[o+3>>0]=n>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){o=b+2|0;n=a[b>>0]|0;a[b>>0]=a[o>>0]|0;a[o>>0]=n;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function af(a){a=a|0;var b=0,d=0;c[a>>2]=36712;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=c[a+8>>2]|0;if(!d)return;b=a+12|0;if((c[b>>2]|0)!=(d|0))c[b>>2]=d;cj(d);return}function bf(a){a=a|0;var b=0,d=0;c[a>>2]=36712;b=c[a+20>>2]|0;if(b){d=a+24|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function cf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=b+36|0;if(!(c[g>>2]|0)){g=b+40|0;gf(b,d,c[g>>2]|0,e,f);c[g>>2]=(c[g>>2]|0)+(c[(c[b+4>>2]|0)+12>>2]|0);return}h=$(c[(c[b+4>>2]|0)+16>>2]|0,e)|0;i=b+20|0;gf(b,d,c[i>>2]|0,e,f);b=c[g>>2]|0;if((Gb[c[(c[b>>2]|0)+48>>2]&63](b,c[i>>2]|0,h)|0)==(h|0))return;g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,3,35648);i=o;o=0;if(i&1){i=Na()|0;La(g|0);Ya(i|0)}else lb(g|0,824,96)}function df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+36>>2]|0;if(!f){f=a+40|0;ef(a,c[f>>2]|0,b,d,e);c[f>>2]=(c[f>>2]|0)+(c[(c[a+4>>2]|0)+12>>2]|0);return}else{ff(a,f,b,d,e);return}}function ef(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=b+4|0;h=c[j>>2]|0;if(!(a[h+32>>0]|0))j=d;else{i=b+8|0;lw(c[i>>2]|0,d|0,f*3|0)|0;h=c[j>>2]|0;d=c[h+16>>2]|0;if((f|0)>0){h=c[i>>2]|0;b=0;while(1){k=h+2|0;l=a[h>>0]|0;a[h>>0]=a[k>>0]|0;a[k>>0]=l;b=b+1|0;if((b|0)==(f|0))break;else h=h+d|0}h=c[j>>2]|0}j=c[i>>2]|0}switch(c[h+16>>2]|0){case 3:{if((c[h+24>>2]|0)==2){if((f|0)>0)h=0;else return;do{g=a[j+(h*3|0)+1>>0]|0;k=a[j+(h*3|0)+2>>0]|0;l=e+(h*3|0)|0;a[l>>0]=a[j+(h*3|0)>>0]|0;a[l+1>>0]=g;a[l+2>>0]=k;h=h+1|0}while((h|0)!=(f|0));return}h=(g|0)<(f|0)?g:f;if((h|0)<=0)return;b=g<<1;d=0;do{k=a[j+(d*3|0)+1>>0]|0;l=a[j+(d*3|0)+2>>0]|0;a[e+d>>0]=a[j+(d*3|0)>>0]|0;a[e+(d+g)>>0]=k;a[e+(d+b)>>0]=l;d=d+1|0}while((d|0)!=(h|0));return}case 4:{if((c[h+24>>2]|0)!=1)return;h=(g|0)<(f|0)?g:f;if((h|0)<=0)return;b=g<<1;d=g*3|0;i=0;do{f=a[j+(i<<2)+1>>0]|0;k=a[j+(i<<2)+2>>0]|0;l=a[j+(i<<2)+3>>0]|0;a[e+i>>0]=a[j+(i<<2)>>0]|0;a[e+(i+g)>>0]=f;a[e+(i+b)>>0]=k;a[e+(i+d)>>0]=l;i=i+1|0}while((i|0)!=(h|0));return}default:return}}function ff(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;p=i;i=i+176|0;q=p+152|0;s=p+16|0;r=p;j=$(c[(c[b+4>>2]|0)+16>>2]|0,f)|0;l=b+20|0;h=c[l>>2]|0;if(!j){s=h;ef(b,s,e,f,g);i=p;return}while(1){k=Gb[c[(c[d>>2]|0)+32>>2]&63](d,h,j)|0;if(!k)break;h=c[l>>2]|0;if((j|0)==(k|0)){m=26;break}else j=j-k|0}if((m|0)==26){ef(b,h,e,f,g);i=p;return}e=s+56|0;l=s+4|0;c[s>>2]=36160;c[e>>2]=36180;o=0;ia(62,s+56|0,l|0);p=o;o=0;if(p&1){s=Na()|0;fn(e);Ya(s|0)}c[s+128>>2]=0;c[s+132>>2]=-1;c[s>>2]=36200;c[s+56>>2]=36220;o=0;ha(180,l|0);p=o;o=0;do if(p&1)h=Na()|0;else{c[l>>2]=36236;d=s+36|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[s+52>>2]=16;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;o=0;ia(63,l|0,q|0);p=o;o=0;if(p&1){h=Na()|0;Im(q);Im(d);nn(l);break}Im(q);o=0;h=ma(28,s|0,49029,57)|0;q=o;o=0;if(!(q&1)?(o=0,ra(36,h|0,0)|0,q=o,o=0,!(q&1)):0){k=Ma(16)|0;o=0;ia(64,r|0,l|0);q=o;o=0;if(!(q&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,k|0,3,35648,r|0);q=o;o=0;if(q&1)j=1;else{o=0;wa(6,k|0,824,96);o=0;j=0}h=Na()|0;Im(r);if(!j){r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}}else h=Na()|0;La(k|0);r=h;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}r=Na()|0;c[s>>2]=36200;c[e>>2]=36220;c[l>>2]=36236;Im(d);nn(l);fn(e);Ya(r|0)}while(0);s=h;fn(e);Ya(s|0)}function gf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;l=b+4|0;b=c[l>>2]|0;a:do switch(c[b+16>>2]|0){case 3:{if((c[b+24>>2]|0)==2){if((g|0)>0)b=0;else break a;while(1){j=a[e+(b*3|0)+1>>0]|0;k=a[e+(b*3|0)+2>>0]|0;h=f+(b*3|0)|0;a[h>>0]=a[e+(b*3|0)>>0]|0;a[h+1>>0]=j;a[h+2>>0]=k;b=b+1|0;if((b|0)==(g|0))break a}}b=(g|0)<(h|0)?g:h;if((b|0)>0){i=h<<1;j=0;do{n=a[e+(j+h)>>0]|0;m=a[e+(j+i)>>0]|0;k=f+(j*3|0)|0;a[k>>0]=a[e+j>>0]|0;a[k+1>>0]=n;a[k+2>>0]=m;j=j+1|0}while((j|0)!=(b|0))}break}case 4:{if((c[b+24>>2]|0)==1?(k=(g|0)<(h|0)?g:h,(k|0)>0):0){b=h<<1;i=h*3|0;j=0;do{n=f+(j<<2)|0;m=d[e+(j+h)>>0]<<8|d[e+j>>0]|d[e+(j+b)>>0]<<16|d[e+(j+i)>>0]<<24;a[n>>0]=m;a[n+1>>0]=m>>8;a[n+2>>0]=m>>16;a[n+3>>0]=m>>24;j=j+1|0}while((j|0)!=(k|0))}break}default:{}}while(0);b=c[l>>2]|0;if(!(a[b+32>>0]|0))return;j=c[b+16>>2]|0;if((g|0)>0){b=f;i=0}else return;while(1){n=b+2|0;m=a[b>>0]|0;a[b>>0]=a[n>>0]|0;a[n>>0]=m;i=i+1|0;if((i|0)==(g|0))break;else b=b+j|0}return}function hf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;w=u+12|0;t=u;q=b+180|0;r=(c[q>>2]|0)+4|0;if((c[b+32>>2]|0)==1)s=c[b+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,w|0),v=o,o=0,v&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[x>>2]|0)+3|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)h=19;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))h=17;if((h|0)==17?(f=s<<2,o=0,g=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=g;h=g+(s<<2)|0;c[t+8>>2]=h;iw(g|0,0,f|0)|0;c[v>>2]=h;h=19;break}f=Na()|0;d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){g=b+12|0;b:do if((c[g>>2]|0)>0){h=b+4604|0;j=($(s,r)|0)+1|0;k=b+4608|0;l=b+92|0;m=(s|0)>0;n=b+4600|0;p=0;c:while(1){f=c[w>>2]|0;d=f+3|0;c[h>>2]=d;e=f+(j*3|0)|0;c[k>>2]=e;if(!(p&1))d=j;else{c[h>>2]=e;c[k>>2]=d;d=1}e=c[l>>2]|0;o=0;Aa(c[(c[e>>2]|0)+12>>2]|0,e|0,f+(d*3|0)|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){h=29;break}if(m){d=c[t>>2]|0;e=c[h>>2]|0;f=0;do{c[n>>2]=c[d+(f<<2)>>2];y=c[q>>2]|0;d=e+(y*3|0)|0;e=e+((y+-1|0)*3|0)|0;a[d>>0]=a[e>>0]|0;a[d+1>>0]=a[e+1>>0]|0;a[d+2>>0]=a[e+2>>0]|0;d=c[h>>2]|0;e=(c[k>>2]|0)+-3|0;a[e>>0]=a[d>>0]|0;a[e+1>>0]=a[d+1>>0]|0;a[e+2>>0]=a[d+2>>0]|0;o=0;ia(70,b|0,0);e=o;o=0;if(e&1){h=28;break c}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[n>>2];e=(c[h>>2]|0)+(r*3|0)|0;c[h>>2]=e;c[k>>2]=(c[k>>2]|0)+(r*3|0);f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){h=41;break b}}if((h|0)==28){f=Na()|0;break}else if((h|0)==29){f=Na()|0;break}}else h=41;while(0);do if((h|0)==41){o=0;ha(182,b|0);y=o;o=0;if(y&1){f=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=u;return}while(0);d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function jf(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=b+180|0;if((c[A>>2]|0)<=0)return;B=b+4608|0;C=b+4604|0;D=b+4612|0;z=0;while(1){w=z+-1|0;i=c[B>>2]|0;j=c[C>>2]|0;e=z+1|0;h=d[j+(z*3|0)>>0]|0;y=c[D>>2]|0;k=d[j+(w*3|0)>>0]|0;l=h-k|0;m=d[i+(w*3|0)>>0]|0;n=k-m|0;o=((((a[y+((d[j+(e*3|0)>>0]|0)-h)>>0]|0)*9|0)+(a[y+l>>0]|0)|0)*9|0)+(a[y+n>>0]|0)|0;g=d[j+(z*3|0)+1>>0]|0;p=d[j+(w*3|0)+1>>0]|0;q=g-p|0;r=d[i+(w*3|0)+1>>0]|0;s=p-r|0;t=((((a[y+((d[j+(e*3|0)+1>>0]|0)-g)>>0]|0)*9|0)+(a[y+q>>0]|0)|0)*9|0)+(a[y+s>>0]|0)|0;f=d[j+(z*3|0)+2>>0]|0;u=d[j+(w*3|0)+2>>0]|0;v=f-u|0;w=d[i+(w*3|0)+2>>0]|0;x=u-w|0;y=((((a[y+((d[j+(e*3|0)+2>>0]|0)-f)>>0]|0)*9|0)+(a[y+v>>0]|0)|0)*9|0)+(a[y+x>>0]|0)|0;if(!(t|o|y))e=(kf(b,z,0)|0)+z|0;else{j=d[i+(z*3|0)>>0]|0;i=h-m>>31;if((i^n|0)>=0)if((i^l|0)<0)h=m;else h=m-k+h|0;j=lf(b,o,j,h,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+1>>0]|0;h=g-r>>31;if((h^s|0)>=0)if((h^q|0)<0)g=r;else g=r-p+g|0;h=lf(b,t,i,g,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+2>>0]|0;g=f-w>>31;if((g^x|0)>=0)if((g^v|0)<0)f=w;else f=w-u+f|0;y=lf(b,y,i,f,0)|0;z=(c[B>>2]|0)+(z*3|0)|0;a[z>>0]=j;a[z+1>>0]=h;a[z+2>>0]=y}if((e|0)<(c[A>>2]|0))z=e;else break}return}function kf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=i;i=i+32|0;A=B+15|0;q=B+12|0;p=B+9|0;r=B+6|0;w=B+3|0;x=B;y=(c[b+180>>2]|0)-e|0;z=c[b+4608>>2]|0;s=c[b+4604>>2]|0;v=z+((e+-1|0)*3|0)|0;t=a[v>>0]|0;u=a[v+1>>0]|0;v=a[v+2>>0]|0;f=t&255;g=b+144|0;h=u&255;j=v&255;o=0;while(1){k=z+((o+e|0)*3|0)|0;l=k+1|0;m=k+2|0;C=(d[k>>0]|0)-f|0;n=c[g>>2]|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(d[l>>0]|0)-h|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;C=(d[m>>0]|0)-j|0;if((((C|0)>-1?C:0-C|0)|0)>(n|0))break;a[k>>0]=t;a[l>>0]=u;a[m>>0]=v;o=o+1|0;if((o|0)==(y|0)){o=y;break}}h=(o|0)==(y|0);j=b+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(o|0))f=o;else{f=o;do{ae(b,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]=a[C>>0]|0;a[w+1>>0]=a[C+1>>0]|0;a[w+2>>0]=a[C+2>>0]|0;a[x>>0]=t;a[x+1>>0]=u;a[x+2>>0]=v;e=s+(e*3|0)|0;a[p>>0]=a[w>>0]|0;a[p+1>>0]=a[w+1>>0]|0;a[p+2>>0]=a[w+2>>0]|0;a[q>>0]=a[x>>0]|0;a[q+1>>0]=a[x+1>>0]|0;a[q+2>>0]=a[x+2>>0]|0;a[A>>0]=a[e>>0]|0;a[A+1>>0]=a[e+1>>0]|0;a[A+2>>0]=a[e+2>>0]|0;nf(r,b,p,q,A);a[C>>0]=a[r>>0]|0;a[C+1>>0]=a[r+1>>0]|0;a[C+2>>0]=a[r+2>>0]|0;C=c[j>>2]|0;c[j>>2]=(C|0)<1?0:C+-1|0;C=o+1|0;i=B;return C|0}if(!f){C=y;i=B;return C|0}ae(b,1,1);C=y;i=B;return C|0}function lf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=d>>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;mf(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&255;return r|0}r=g&~(d>>31);r=r&255;return r|0}function mf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>0]|0;p=o-(d[g>>0]|0)>>31|1;i=$(p,(d[f>>0]|0)-o|0)|0;m=e+144|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;w=e+140|0;l=c[w>>2]|0;k=((i|0)<0?l:0)+i|0;l=k-((k|0)<((l+1|0)/2|0|0)?0:l)|0;k=e+4576|0;of(e,k,l);t=d[h+1>>0]|0;u=t-(d[g+1>>0]|0)>>31|1;i=$(u,(d[f+1>>0]|0)-t|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;q=c[w>>2]|0;v=((i|0)<0?q:0)+i|0;q=v-((v|0)<((q+1|0)/2|0|0)?0:q)|0;of(e,k,q);v=d[h+2>>0]|0;s=v-(d[g+2>>0]|0)>>31|1;i=$(s,(d[f+2>>0]|0)-v|0)|0;j=c[m>>2]|0;if((i|0)>0)i=(i+j|0)/(j<<1|1|0)|0;else i=(i-j|0)/(j<<1|1|0)|0;n=c[w>>2]|0;i=((i|0)<0?n:0)+i|0;n=i-((i|0)<((n+1|0)/2|0|0)?0:n)|0;of(e,k,n);k=c[m>>2]|0;m=k<<1|1;i=($($(m,l)|0,p)|0)+o|0;f=0-k|0;if((i|0)>=(f|0)){j=c[r>>2]|0;if((j+k|0)<(i|0)){i=i-($(c[w>>2]|0,m)|0)|0;g=j}else g=j}else{i=($(c[w>>2]|0,m)|0)+i|0;g=c[r>>2]|0}if((i&g|0)!=(i|0))i=g&~(i>>31);h=i&255;i=($($(m,q)|0,u)|0)+t|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)!=(i|0))i=g&~(i>>31);j=i&255;i=($($(m,n)|0,s)|0)+v|0;if((i|0)>=(f|0)){if((g+k|0)<(i|0))i=i-($(c[w>>2]|0,m)|0)|0}else i=($(c[w>>2]|0,m)|0)+i|0;if((i&g|0)==(i|0)){w=i;w=w&255;a[b>>0]=h;v=b+1|0;a[v>>0]=j;b=b+2|0;a[b>>0]=w;return}w=g&~(i>>31);w=w&255;a[b>>0]=h;v=b+1|0;a[v>>0]=j;b=b+2|0;a[b>>0]=w;return}function of(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;mf(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function pf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+144|0;a:do if(!(c[o>>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function qf(a){a=a|0;var b=0,d=0;c[a>>2]=35996;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function rf(a){a=a|0;var b=0,d=0;c[a>>2]=35996;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function sf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,65535,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;Bf(d);g=0;do{c[d+172+(g*12|0)>>2]=1024;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=1024;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=1024;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function tf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35772;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];vf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;vf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function uf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function vf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+32|0;x=v+12|0;u=v;r=a+156|0;s=(c[r>>2]|0)+4|0;if((c[a+32>>2]|0)==1)t=c[a+24>>2]|0;else t=1;d=$(t<<1,s)|0;c[x>>2]=0;y=x+4|0;c[y>>2]=0;c[x+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,x|0),w=o,o=0,w&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,w=o,o=0,!(w&1)):0){c[x>>2]=f;w=f+(d<<1)|0;c[x+8>>2]=w;iw(f|0,0,e|0)|0;c[y>>2]=w;break}f=Na()|0;d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[u>>2]=0;w=u+4|0;c[w>>2]=0;c[u+8>>2]=0;do if(!t)j=18;else{if(!(t>>>0>1073741823?(o=0,ha(178,u|0),q=o,o=0,q&1):0))j=16;if((j|0)==16?(g=t<<2,o=0,h=ka(67,g|0)|0,q=o,o=0,!(q&1)):0){c[u>>2]=h;j=h+(t<<2)|0;c[u+8>>2]=j;iw(h|0,0,g|0)|0;c[w>>2]=j;j=18;break}f=Na()|0;d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+12|0;a:do if((c[h>>2]|0)>0){j=a+4580|0;k=($(t,s)|0)+1|0;l=a+4584|0;m=a+92|0;n=(t|0)>0;p=a+4576|0;q=0;b:while(1){e=c[x>>2]|0;d=e+2|0;c[j>>2]=d;e=e+(k<<1)|0;c[l>>2]=e;if(!(q&1))d=e;else{c[j>>2]=e;c[l>>2]=d}g=c[m>>2]|0;o=0;Aa(c[(c[g>>2]|0)+12>>2]|0,g|0,d|0,c[r>>2]|0,s|0);g=o;o=0;if(g&1){j=28;break}if(n){d=c[j>>2]|0;e=c[l>>2]|0;f=c[u>>2]|0;g=0;do{c[p>>2]=c[f+(g<<2)>>2];f=c[r>>2]|0;b[d+(f<<1)>>1]=b[d+(f+-1<<1)>>1]|0;b[e+-2>>1]=b[d>>1]|0;o=0;ia(71,a|0,0);f=o;o=0;if(f&1){j=27;break b}f=c[u>>2]|0;c[f+(g<<2)>>2]=c[p>>2];d=(c[j>>2]|0)+(s<<1)|0;c[j>>2]=d;e=(c[l>>2]|0)+(s<<1)|0;c[l>>2]=e;g=g+1|0}while((g|0)<(t|0))}q=q+1|0;if((q|0)>=(c[h>>2]|0)){j=40;break a}}if((j|0)==27){f=Na()|0;break}else if((j|0)==28){f=Na()|0;break}}else j=40;while(0);do if((j|0)==40){o=0;ha(182,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[u>>2]|0;e=d;if(d){f=c[w>>2]|0;if((f|0)!=(d|0))c[w>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[x>>2]|0;if(!d){i=v;return}e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=v;return}while(0);d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function wf(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4580|0;f=c[p>>2]|0;s=d+156|0;if((c[s>>2]|0)<=0)return;q=d+4584|0;r=d+4588|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(yf(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=xf(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function xf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&65535|0)==(g|0))m=g;else m=g>>31&65535^65535;j=(e-m^q)-q<<16;l=j>>16;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;f=g^l;f=f>>30^f<<1;g=f>>h;if((g|0)<47){if((g|0)>30){i=(g|0)/2|0;ae(a,0,i);g=g-i|0}ae(a,1,g+1|0);ae(a,f&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-65536?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&65535;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&65535;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&65535;return d|0}function yf(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=(c[a+156>>2]|0)-d|0;k=c[a+4584>>2]|0;m=c[a+4580>>2]|0;h=b[k+(d+-1<<1)>>1]|0;g=0;while(1){f=k+(g+d<<1)|0;if((b[f>>1]|0)!=h<<16>>16){n=g;break}b[f>>1]=h;g=g+1|0;if((g|0)==(j|0)){n=j;break}}i=h&65535;h=(n|0)==(j|0);l=a+4576|0;g=c[36476+(c[l>>2]<<2)>>2]|0;if((1<(n|0))f=n;else{f=n;do{ae(a,1,1);g=c[l>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[l>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]|0;f=e[m+(f<<1)>>1]|0;m=i-f|0;if((((m|0)>-1?m:0-m|0)|0)<1){f=g-i<<16>>16;zf(a,a+4564|0,f);f=f+i|0}else{m=f-i>>31|1;d=($(g-f<<16,m)|0)>>16;zf(a,a+4552|0,d);f=($(d,m)|0)+f|0}b[h>>1]=f;a=c[l>>2]|0;c[l>>2]=(a|0)<1?0:a+-1|0;a=n+1|0;return a|0}function zf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;Af(b,h,g,63-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function Af(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-16|0;if((e|0)<(d+-17|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-47|0)}else ae(a,1,f);ae(a,c+65535&65535,16);return}function Bf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,65535,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8909]|0;c[b+4588>>2]=l+(((c[8910]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=131072){if(h>>>0>131072?(j=d+131072|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,131072-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+65536;j=b+168|0;g=b+164|0;h=-65536;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==65536)break}i=m;return}function Cf(a){a=a|0;var b=0,d=0;c[a>>2]=35968;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Df(a){a=a|0;var b=0,d=0;c[a>>2]=35968;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Ef(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,4095,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;Nf(d);g=0;do{c[d+172+(g*12|0)>>2]=64;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=64;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=64;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function Ff(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35744;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];Hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;Hf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function Gf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Hf(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;v=i;i=i+32|0;x=v+12|0;u=v;r=a+156|0;s=(c[r>>2]|0)+4|0;if((c[a+32>>2]|0)==1)t=c[a+24>>2]|0;else t=1;d=$(t<<1,s)|0;c[x>>2]=0;y=x+4|0;c[y>>2]=0;c[x+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,x|0),w=o,o=0,w&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,w=o,o=0,!(w&1)):0){c[x>>2]=f;w=f+(d<<1)|0;c[x+8>>2]=w;iw(f|0,0,e|0)|0;c[y>>2]=w;break}f=Na()|0;d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[u>>2]=0;w=u+4|0;c[w>>2]=0;c[u+8>>2]=0;do if(!t)j=18;else{if(!(t>>>0>1073741823?(o=0,ha(178,u|0),q=o,o=0,q&1):0))j=16;if((j|0)==16?(g=t<<2,o=0,h=ka(67,g|0)|0,q=o,o=0,!(q&1)):0){c[u>>2]=h;j=h+(t<<2)|0;c[u+8>>2]=j;iw(h|0,0,g|0)|0;c[w>>2]=j;j=18;break}f=Na()|0;d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+12|0;a:do if((c[h>>2]|0)>0){j=a+4580|0;k=($(t,s)|0)+1|0;l=a+4584|0;m=a+92|0;n=(t|0)>0;p=a+4576|0;q=0;b:while(1){e=c[x>>2]|0;d=e+2|0;c[j>>2]=d;e=e+(k<<1)|0;c[l>>2]=e;if(!(q&1))d=e;else{c[j>>2]=e;c[l>>2]=d}g=c[m>>2]|0;o=0;Aa(c[(c[g>>2]|0)+12>>2]|0,g|0,d|0,c[r>>2]|0,s|0);g=o;o=0;if(g&1){j=28;break}if(n){d=c[j>>2]|0;e=c[l>>2]|0;f=c[u>>2]|0;g=0;do{c[p>>2]=c[f+(g<<2)>>2];f=c[r>>2]|0;b[d+(f<<1)>>1]=b[d+(f+-1<<1)>>1]|0;b[e+-2>>1]=b[d>>1]|0;o=0;ia(72,a|0,0);f=o;o=0;if(f&1){j=27;break b}f=c[u>>2]|0;c[f+(g<<2)>>2]=c[p>>2];d=(c[j>>2]|0)+(s<<1)|0;c[j>>2]=d;e=(c[l>>2]|0)+(s<<1)|0;c[l>>2]=e;g=g+1|0}while((g|0)<(t|0))}q=q+1|0;if((q|0)>=(c[h>>2]|0)){j=40;break a}}if((j|0)==27){f=Na()|0;break}else if((j|0)==28){f=Na()|0;break}}else j=40;while(0);do if((j|0)==40){o=0;ha(182,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[u>>2]|0;e=d;if(d){f=c[w>>2]|0;if((f|0)!=(d|0))c[w>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[x>>2]|0;if(!d){i=v;return}e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=v;return}while(0);d=c[u>>2]|0;e=d;if(d){g=c[w>>2]|0;if((g|0)!=(d|0))c[w>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[x>>2]|0;if(!d)Ya(f|0);e=c[y>>2]|0;if((e|0)!=(d|0))c[y>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function If(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4580|0;f=c[p>>2]|0;s=d+156|0;if((c[s>>2]|0)<=0)return;q=d+4584|0;r=d+4588|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(Kf(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=Jf(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function Jf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&4095|0)==(g|0))m=g;else m=g>>31&4095^4095;j=(e-m^q)-q<<20;l=j>>20;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;f=g^l;f=f>>30^f<<1;g=f>>h;if((g|0)<35){if((g|0)>30){i=(g|0)/2|0;ae(a,0,i);g=g-i|0}ae(a,1,g+1|0);ae(a,f&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-1048576?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&4095;d=d&65535;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&4095;d=d&65535;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&4095;d=d&65535;return d|0}function Kf(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=(c[a+156>>2]|0)-d|0;k=c[a+4584>>2]|0;m=c[a+4580>>2]|0;h=b[k+(d+-1<<1)>>1]|0;g=0;while(1){f=k+(g+d<<1)|0;if((b[f>>1]|0)!=h<<16>>16){n=g;break}b[f>>1]=h;g=g+1|0;if((g|0)==(j|0)){n=j;break}}i=h&65535;h=(n|0)==(j|0);l=a+4576|0;g=c[36476+(c[l>>2]<<2)>>2]|0;if((1<(n|0))f=n;else{f=n;do{ae(a,1,1);g=c[l>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[l>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>1]|0;f=e[m+(f<<1)>>1]|0;m=i-f|0;if((((m|0)>-1?m:0-m|0)|0)<1){f=g-i<<20>>20;Lf(a,a+4564|0,f);f=f+i|0}else{m=f-i>>31|1;d=($(g-f<<20,m)|0)>>20;Lf(a,a+4552|0,d);f=($(d,m)|0)+f|0}b[h>>1]=f&4095;a=c[l>>2]|0;c[l>>2]=(a|0)<1?0:a+-1|0;a=n+1|0;return a|0}function Lf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;Mf(b,h,g,47-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function Mf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-12|0;if((e|0)<(d+-13|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-43|0)}else ae(a,1,f);ae(a,c+4095&4095,12);return}function Nf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,4095,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8906]|0;c[b+4588>>2]=l+(((c[8907]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=8192){if(h>>>0>8192?(j=d+8192|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,8192-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+4096;j=b+168|0;g=b+164|0;h=-4096;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==4096)break}i=m;return}function Of(a){a=a|0;var b=0,d=0;c[a>>2]=35940;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Pf(a){a=a|0;var b=0,d=0;c[a>>2]=35940;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Qf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;Zf(d);g=0;do{c[d+172+(g*12|0)>>2]=4;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=4;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=4;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function Rf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35716;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];Tf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;Tf(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function Sf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Tf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=i;i=i+32|0;w=u+12|0;t=u;q=b+156|0;r=(c[q>>2]|0)+4|0;if((c[b+32>>2]|0)==1)s=c[b+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,w|0),v=o,o=0,v&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[x>>2]|0)+1|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)h=19;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))h=17;if((h|0)==17?(f=s<<2,o=0,g=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=g;h=g+(s<<2)|0;c[t+8>>2]=h;iw(g|0,0,f|0)|0;c[v>>2]=h;h=19;break}e=Na()|0;d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){g=b+12|0;b:do if((c[g>>2]|0)>0){h=b+4580|0;j=($(s,r)|0)+1|0;k=b+4584|0;l=b+92|0;m=(s|0)>0;n=b+4576|0;p=0;c:while(1){e=c[w>>2]|0;d=e+1|0;c[h>>2]=d;e=e+j|0;c[k>>2]=e;if(!(p&1))d=e;else{c[h>>2]=e;c[k>>2]=d}f=c[l>>2]|0;o=0;Aa(c[(c[f>>2]|0)+12>>2]|0,f|0,d|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){h=29;break}if(m){d=c[h>>2]|0;e=c[t>>2]|0;f=0;do{c[n>>2]=c[e+(f<<2)>>2];e=c[q>>2]|0;a[d+e>>0]=a[d+(e+-1)>>0]|0;a[(c[k>>2]|0)+-1>>0]=a[c[h>>2]>>0]|0;o=0;ia(73,b|0,0);e=o;o=0;if(e&1){h=28;break c}e=c[t>>2]|0;c[e+(f<<2)>>2]=c[n>>2];d=(c[h>>2]|0)+r|0;c[h>>2]=d;c[k>>2]=(c[k>>2]|0)+r;f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){h=41;break b}}if((h|0)==28){e=Na()|0;break}else if((h|0)==29){e=Na()|0;break}}else h=41;while(0);do if((h|0)==41){o=0;ha(182,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);i=u;return}while(0);d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}function Uf(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=b+4580|0;e=c[o>>2]|0;r=b+156|0;if((c[r>>2]|0)<=0)return;p=b+4584|0;q=b+4588|0;h=e;i=d[e+-1>>0]|0;e=d[e>>0]|0;n=0;while(1){m=c[p>>2]|0;l=d[m+(n+-1)>>0]|0;g=n+1|0;f=d[h+g>>0]|0;k=c[q>>2]|0;j=e-i|0;h=i-l|0;k=((((a[k+(f-e)>>0]|0)*9|0)+(a[k+j>>0]|0)|0)*9|0)+(a[k+h>>0]|0)|0;if(!k){g=(Wf(b,n,0)|0)+n|0;f=c[o>>2]|0;e=d[f+(g+-1)>>0]|0;f=d[f+g>>0]|0}else{i=e-l>>31;if((i^h|0)<0)h=e;else h=l+((i^j|0)<0?0:j)|0;m=Vf(b,k,d[m+n>>0]|0,h,0)|0;a[(c[p>>2]|0)+n>>0]=m}if((g|0)>=(c[r>>2]|0))break;h=c[o>>2]|0;i=e;e=f;n=g}return}function Vf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&255|0)==(g|0))m=g;else m=g>>31&255^255;j=(e-m^q)-q<<24;l=j>>24;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;g=g^l;g=g>>30^g<<1;f=g>>h;if((f|0)<23){ae(a,1,f+1|0);ae(a,g&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-16777216?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}function Wf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=(c[b+156>>2]|0)-e|0;k=c[b+4584>>2]|0;m=c[b+4580>>2]|0;h=a[k+(e+-1)>>0]|0;g=0;while(1){f=k+(g+e)|0;if((a[f>>0]|0)!=h<<24>>24){n=g;break}a[f>>0]=h;g=g+1|0;if((g|0)==(j|0)){n=j;break}}i=h&255;h=(n|0)==(j|0);l=b+4576|0;g=c[36476+(c[l>>2]<<2)>>2]|0;if((1<(n|0))f=n;else{f=n;do{ae(b,1,1);g=c[l>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[l>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]|0;f=d[m+f>>0]|0;m=i-f|0;if((((m|0)>-1?m:0-m|0)|0)<1){f=g-i<<24>>24;Xf(b,b+4564|0,f);f=f+i|0}else{m=f-i>>31|1;e=($(g-f<<24,m)|0)>>24;Xf(b,b+4552|0,e);f=($(e,m)|0)+f|0}a[h>>0]=f;b=c[l>>2]|0;c[l>>2]=(b|0)<1?0:b+-1|0;b=n+1|0;return b|0}function Xf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;Yf(b,h,g,31-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function Yf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-8|0;if((e|0)<(d+-9|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-39|0)}else ae(a,1,f);ae(a,c+255&255,8);return}function Zf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8900]|0;c[b+4588>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+256;j=b+168|0;g=b+164|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function _f(a){a=a|0;var b=0,d=0;c[a>>2]=35912;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function $f(a){a=a|0;var b=0,d=0;c[a>>2]=35912;b=c[a+4592>>2]|0;if(b){d=a+4596|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function ag(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+160>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+164>>2]=j;c[d+168>>2]=g;jg(d);g=0;do{c[d+172+(g*12|0)>>2]=4;c[d+172+(g*12|0)+4>>2]=0;b[d+172+(g*12|0)+8>>1]=0;b[d+172+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4552>>2]=4;c[d+4556>>2]=0;a[d+4560>>0]=l;a[d+4561>>0]=1;a[d+4562>>0]=0;c[d+4564>>2]=4;c[d+4568>>2]=1;a[d+4572>>0]=l;a[d+4573>>0]=1;a[d+4574>>0]=0;c[d+4576>>2]=0;i=h;return}function bg(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4600)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35688;h=e+132|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+148>>2]=c[g>>2];c[e+152>>2]=0;c[e+156>>2]=0;c[e+160>>2]=0;h=e+4544|0;g=e+164|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4556|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4568|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];dg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;dg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}function cg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function dg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;w=u+12|0;t=u;q=b+156|0;r=(c[q>>2]|0)+4|0;if((c[b+32>>2]|0)==1)s=c[b+24>>2]|0;else s=1;d=$(s<<1,r)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,w|0),v=o,o=0,v&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[x>>2]|0)+3|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!s)h=19;else{if(!(s>>>0>1073741823?(o=0,ha(178,t|0),p=o,o=0,p&1):0))h=17;if((h|0)==17?(f=s<<2,o=0,g=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[t>>2]=g;h=g+(s<<2)|0;c[t+8>>2]=h;iw(g|0,0,f|0)|0;c[v>>2]=h;h=19;break}f=Na()|0;d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){g=b+12|0;b:do if((c[g>>2]|0)>0){h=b+4580|0;j=($(s,r)|0)+1|0;k=b+4584|0;l=b+92|0;m=(s|0)>0;n=b+4576|0;p=0;c:while(1){f=c[w>>2]|0;d=f+3|0;c[h>>2]=d;e=f+(j*3|0)|0;c[k>>2]=e;if(!(p&1))d=j;else{c[h>>2]=e;c[k>>2]=d;d=1}e=c[l>>2]|0;o=0;Aa(c[(c[e>>2]|0)+12>>2]|0,e|0,f+(d*3|0)|0,c[q>>2]|0,r|0);f=o;o=0;if(f&1){h=29;break}if(m){d=c[t>>2]|0;e=c[h>>2]|0;f=0;do{c[n>>2]=c[d+(f<<2)>>2];y=c[q>>2]|0;d=e+(y*3|0)|0;e=e+((y+-1|0)*3|0)|0;a[d>>0]=a[e>>0]|0;a[d+1>>0]=a[e+1>>0]|0;a[d+2>>0]=a[e+2>>0]|0;d=c[h>>2]|0;e=(c[k>>2]|0)+-3|0;a[e>>0]=a[d>>0]|0;a[e+1>>0]=a[d+1>>0]|0;a[e+2>>0]=a[d+2>>0]|0;o=0;ia(74,b|0,0);e=o;o=0;if(e&1){h=28;break c}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[n>>2];e=(c[h>>2]|0)+(r*3|0)|0;c[h>>2]=e;c[k>>2]=(c[k>>2]|0)+(r*3|0);f=f+1|0}while((f|0)<(s|0))}p=p+1|0;if((p|0)>=(c[g>>2]|0)){h=41;break b}}if((h|0)==28){f=Na()|0;break}else if((h|0)==29){f=Na()|0;break}}else h=41;while(0);do if((h|0)==41){o=0;ha(182,b|0);y=o;o=0;if(y&1){f=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=u;return}while(0);d=c[t>>2]|0;e=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(f|0);e=c[x>>2]|0;if((e|0)!=(d|0))c[x>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function eg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=b+156|0;if((c[A>>2]|0)<=0)return;B=b+4584|0;C=b+4580|0;D=b+4588|0;z=0;while(1){w=z+-1|0;i=c[B>>2]|0;j=c[C>>2]|0;e=z+1|0;h=d[j+(z*3|0)>>0]|0;y=c[D>>2]|0;k=d[j+(w*3|0)>>0]|0;l=h-k|0;m=d[i+(w*3|0)>>0]|0;n=k-m|0;o=((((a[y+((d[j+(e*3|0)>>0]|0)-h)>>0]|0)*9|0)+(a[y+l>>0]|0)|0)*9|0)+(a[y+n>>0]|0)|0;g=d[j+(z*3|0)+1>>0]|0;p=d[j+(w*3|0)+1>>0]|0;q=g-p|0;r=d[i+(w*3|0)+1>>0]|0;s=p-r|0;t=((((a[y+((d[j+(e*3|0)+1>>0]|0)-g)>>0]|0)*9|0)+(a[y+q>>0]|0)|0)*9|0)+(a[y+s>>0]|0)|0;f=d[j+(z*3|0)+2>>0]|0;u=d[j+(w*3|0)+2>>0]|0;v=f-u|0;w=d[i+(w*3|0)+2>>0]|0;x=u-w|0;y=((((a[y+((d[j+(e*3|0)+2>>0]|0)-f)>>0]|0)*9|0)+(a[y+v>>0]|0)|0)*9|0)+(a[y+x>>0]|0)|0;if(!(t|o|y))e=(fg(b,z,0)|0)+z|0;else{j=d[i+(z*3|0)>>0]|0;i=h-m>>31;if((i^n|0)>=0)if((i^l|0)<0)h=m;else h=m-k+h|0;j=gg(b,o,j,h,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+1>>0]|0;h=g-r>>31;if((h^s|0)>=0)if((h^q|0)<0)g=r;else g=r-p+g|0;h=gg(b,t,i,g,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+2>>0]|0;g=f-w>>31;if((g^x|0)>=0)if((g^v|0)<0)f=w;else f=w-u+f|0;y=gg(b,y,i,f,0)|0;z=(c[B>>2]|0)+(z*3|0)|0;a[z>>0]=j;a[z+1>>0]=h;a[z+2>>0]=y}if((e|0)<(c[A>>2]|0))z=e;else break}return}function fg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;m=(c[b+156>>2]|0)-e|0;n=c[b+4584>>2]|0;o=c[b+4580>>2]|0;l=n+((e+-1|0)*3|0)|0;p=a[l>>0]|0;k=a[l+1>>0]|0;l=a[l+2>>0]|0;i=0;while(1){f=n+((i+e|0)*3|0)|0;g=f+1|0;h=f+2|0;if(!(((a[f>>0]|0)==p<<24>>24?(a[g>>0]|0)==k<<24>>24:0)&(a[h>>0]|0)==l<<24>>24))break;a[f>>0]=p;a[g>>0]=k;a[h>>0]=l;i=i+1|0;if((i|0)==(m|0)){i=m;break}}h=(i|0)==(m|0);j=b+4576|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(i|0))f=i;else{f=i;do{ae(b,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]|0;e=m+2|0;f=a[e>>0]|0;o=o+(q*3|0)|0;q=a[o+1>>0]|0;t=a[o+2>>0]|0;o=d[o>>0]|0;h=o-(p&255)>>31|1;g=($((d[m>>0]|0)-o<<24,h)|0)>>24;s=b+4552|0;hg(b,s,g);p=q&255;q=p-(k&255)>>31|1;r=($((r&255)-p<<24,q)|0)>>24;hg(b,s,r);k=t&255;l=k-(l&255)>>31|1;f=($((f&255)-k<<24,l)|0)>>24;hg(b,s,f);p=($(r,q)|0)+p&255;b=($(f,l)|0)+k&255;a[m>>0]=($(g,h)|0)+o;a[n>>0]=p;a[e>>0]=b;b=c[j>>2]|0;c[j>>2]=(b|0)<1?0:b+-1|0;b=i+1|0;return b|0}if(!f){t=m;return t|0}ae(b,1,1);t=m;return t|0}function gg(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d>>31;k=(q^d)-q|0;p=a+172+(k*12|0)+10|0;i=b[p>>1]|0;o=a+172+(k*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){h=5;while(1)if((i<>1]^q)-q+f|0;if((g&255|0)==(g|0))m=g;else m=g>>31&255^255;j=(e-m^q)-q<<24;l=j>>24;if(!h)g=(c[a+172+(k*12|0)+4>>2]<<1)+-1+i>>31;else g=0;g=g^l;g=g>>30^g<<1;f=g>>h;if((f|0)<23){ae(a,1,f+1|0);ae(a,g&(1<>1]|0;g=i<<16>>16==64;h=g&1;e=(c[f>>2]|0)+l>>h;i=g?32:i<<16>>16;c[o>>2]=(c[o>>2]|0)+((j|0)>-16777216?l:0-l|0)>>h;h=i+1|0;b[p>>1]=h;g=h+e|0;if((g|0)<1){p=b[n>>1]|0;b[n>>1]=(p&65535)-(p<<16>>16>-128&1);p=(g|0)>(~i|0)?g:0-i|0;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}if((e|0)<=0){p=e;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}p=e-h|0;o=b[n>>1]|0;b[n>>1]=(o<<16>>16<127&1)+(o&65535);p=(p|0)>0?0:p;c[f>>2]=p;q=l^q;d=d>>>31;d=m+d|0;d=d+q|0;d=d&255;return d|0}function hg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;ig(b,h,g,31-(c[36476+(c[b+4576>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function ig(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=c>>b;f=d+-8|0;if((e|0)<(d+-9|0)){if((e|0)>30){d=(e|0)/2|0;ae(a,0,d);e=e-d|0}ae(a,1,e+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,d+-39|0)}else ae(a,1,f);ae(a,c+255&255,8);return}function jg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+160|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+164>>2]|0):0)?(c[k+12>>2]|0)==(c[b+168>>2]|0):0){l=c[8900]|0;c[b+4588>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4592|0;f=b+4596|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4588|0;c[k>>2]=d+256;j=b+168|0;g=b+164|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function kg(a){a=a|0;var b=0,d=0;c[a>>2]=35884;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);a=a+4|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function lg(a){a=a|0;var b=0,d=0;c[a>>2]=35884;b=c[a+4616>>2]|0;if(b){d=a+4620|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36612;b=c[a+120>>2]|0;if(b){d=a+124|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+92|0;b=c[d>>2]|0;c[d>>2]=0;if(b)Bb[c[(c[b>>2]|0)+4>>2]&255](b);d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function mg(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+136>>2]|0,c[d+144>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+184>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+188>>2]=j;c[d+192>>2]=h;wg(d);h=d+140|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+196+(j*12|0)>>2]=e;c[d+196+(j*12|0)+4>>2]=0;b[d+196+(j*12|0)+8>>1]=0;b[d+196+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4576>>2]=l;c[d+4580>>2]=0;a[d+4584>>0]=m;a[d+4585>>0]=1;a[d+4586>>0]=0;c[d+4588>>2]=l;c[d+4592>>2]=1;a[d+4596>>0]=m;a[d+4597>>0]=1;a[d+4598>>0]=0;c[d+4600>>2]=0;i=k;return}function ng(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+16|0;m=o;l=d+92|0;k=c[e>>2]|0;c[e>>2]=0;e=c[l>>2]|0;c[l>>2]=k;if(e)Bb[c[(c[e>>2]|0)+4>>2]&255](e);c[m>>2]=0;c[m+4>>2]=g;l=f+8|0;c[m+8>>2]=c[l>>2];if(g){e=bj(4624)|0;g=d+8|0;h=e+4|0;j=g;k=h+84|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));h=e+88|0;k=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0));c[e>>2]=35660;c[e+128>>2]=c[d+136>>2];c[e+132>>2]=c[d+140>>2];c[e+136>>2]=c[d+144>>2];c[e+140>>2]=c[d+148>>2];c[e+144>>2]=c[d+152>>2];c[e+148>>2]=c[d+156>>2];c[e+152>>2]=c[d+160>>2];h=e+156|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e+172>>2]=c[g>>2];c[e+176>>2]=0;c[e+180>>2]=0;c[e+184>>2]=0;h=e+4568|0;g=e+188|0;do{c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;b[g+10>>1]=1;g=g+12|0}while((g|0)!=(h|0));j=d+4|0;c[h>>2]=0;c[h+4>>2]=0;b[h+8>>1]=0;a[h+10>>0]=0;k=e+4580|0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;k=e+4592|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;a[k+28>>0]=0;if(!(c[e+28>>2]|0))c[e+20>>2]=1;g=c[j>>2]|0;c[j>>2]=e;if(g){Bb[c[(c[g>>2]|0)+4>>2]&255](g);e=c[j>>2]|0}Wd(e,m)}m=d+100|0;c[m>>2]=32;c[d+96>>2]=0;e=c[f>>2]|0;if(!e){c[d+108>>2]=c[f+4>>2];c[d+104>>2]=c[l>>2];pg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}c[d+132>>2]=e;h=d+120|0;l=d+124|0;g=c[l>>2]|0;e=c[h>>2]|0;j=e;k=g-j|0;if(k>>>0>=4e3){if(k>>>0>4e3?(n=e+4e3|0,(g|0)!=(n|0)):0){c[l>>2]=n;g=n}}else{Xd(h,4e3-k|0);e=c[h>>2]|0;j=e;g=c[l>>2]|0}c[d+108>>2]=j;c[d+104>>2]=g-e;pg(d);n=d+116|0;n=c[n>>2]|0;d=c[m>>2]|0;d=d+-32|0;d=(d|0)/8|0;d=n-d|0;i=o;return d|0}\n function og(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+32>>2]|0)!=0?(c[b+24>>2]|0)!=1:0){s=b+8|0;u=b+36|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+16>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+20>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function pg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=i;i=i+32|0;w=u+12|0;t=u;r=b+180|0;s=(c[r>>2]|0)+4|0;if((c[b+32>>2]|0)==1)p=c[b+24>>2]|0;else p=1;d=$(p<<1,s)|0;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,w|0),v=o,o=0,v&1):0))q=6;if((q|0)==6?(o=0,e=ka(67,d|0)|0,v=o,o=0,!(v&1)):0){c[x>>2]=e;c[w>>2]=e;c[w+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[x>>2]|0)+1|0;c[x>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}while(0);c[t>>2]=0;v=t+4|0;c[v>>2]=0;c[t+8>>2]=0;do if(!p)q=19;else{if(!(p>>>0>1073741823?(o=0,ha(178,t|0),n=o,o=0,n&1):0))q=17;if((q|0)==17?(f=p<<2,o=0,g=ka(67,f|0)|0,n=o,o=0,!(n&1)):0){c[t>>2]=g;q=g+(p<<2)|0;c[t+8>>2]=q;iw(g|0,0,f|0)|0;c[v>>2]=q;q=19;break}e=Na()|0;d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((q|0)==19){j=b+12|0;b:do if((c[j>>2]|0)>0){k=b+4604|0;l=($(p,s)|0)+1|0;m=b+4608|0;n=b+92|0;h=b+4600|0;if((p|0)>0)g=0;else{f=0;while(1){e=c[w>>2]|0;d=e+1|0;c[k>>2]=d;e=e+l|0;c[m>>2]=e;if(!(f&1))d=e;else{c[k>>2]=e;c[m>>2]=d}p=c[n>>2]|0;o=0;Aa(c[(c[p>>2]|0)+12>>2]|0,p|0,d|0,c[r>>2]|0,s|0);p=o;o=0;if(p&1)break;f=f+1|0;if((f|0)>=(c[j>>2]|0)){q=45;break b}}e=Na()|0;break}c:while(1){e=c[w>>2]|0;d=e+1|0;c[k>>2]=d;e=e+l|0;c[m>>2]=e;if(!(g&1))d=e;else{c[k>>2]=e;c[m>>2]=d}q=c[n>>2]|0;o=0;Aa(c[(c[q>>2]|0)+12>>2]|0,q|0,d|0,c[r>>2]|0,s|0);q=o;o=0;if(q&1){q=28;break}d=c[t>>2]|0;e=c[k>>2]|0;f=0;do{c[h>>2]=c[d+(f<<2)>>2];q=c[r>>2]|0;a[e+q>>0]=a[e+(q+-1)>>0]|0;a[(c[m>>2]|0)+-1>>0]=a[c[k>>2]>>0]|0;o=0;ia(75,b|0,0);q=o;o=0;if(q&1){q=36;break c}d=c[t>>2]|0;c[d+(f<<2)>>2]=c[h>>2];e=(c[k>>2]|0)+s|0;c[k>>2]=e;c[m>>2]=(c[m>>2]|0)+s;f=f+1|0}while((f|0)<(p|0));g=g+1|0;if((g|0)>=(c[j>>2]|0)){q=45;break b}}if((q|0)==28){e=Na()|0;break}else if((q|0)==36){e=Na()|0;break}}else q=45;while(0);do if((q|0)==45){o=0;ha(182,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[t>>2]|0;e=d;if(d){f=c[v>>2]|0;if((f|0)!=(d|0))c[v>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[w>>2]|0;if(!d){i=u;return}if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);i=u;return}while(0);d=c[t>>2]|0;f=d;if(d){g=c[v>>2]|0;if((g|0)!=(d|0))c[v>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0)}function qg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=b+4604|0;e=c[o>>2]|0;r=b+180|0;if((c[r>>2]|0)<=0)return;p=b+4608|0;q=b+4612|0;h=e;i=d[e+-1>>0]|0;e=d[e>>0]|0;n=0;while(1){m=c[p>>2]|0;l=d[m+(n+-1)>>0]|0;g=n+1|0;f=d[h+g>>0]|0;k=c[q>>2]|0;j=e-i|0;h=i-l|0;k=((((a[k+(f-e)>>0]|0)*9|0)+(a[k+j>>0]|0)|0)*9|0)+(a[k+h>>0]|0)|0;if(!k){g=(sg(b,n,0)|0)+n|0;f=c[o>>2]|0;e=d[f+(g+-1)>>0]|0;f=d[f+g>>0]|0}else{i=e-l>>31;if((i^h|0)<0)h=e;else h=l+((i^j|0)<0?0:j)|0;m=rg(b,k,d[m+n>>0]|0,h,0)|0;a[(c[p>>2]|0)+n>>0]=m}if((g|0)>=(c[r>>2]|0))break;h=c[o>>2]|0;i=e;e=f;n=g}return}function rg(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=d>>31;h=(r^d)-r|0;p=a+196+(h*12|0)+10|0;i=b[p>>1]|0;o=a+196+(h*12|0)|0;g=c[o>>2]|0;if((i|0)<(g|0))if((i<<1|0)<(g|0))if((i<<2|0)<(g|0))if((i<<3|0)<(g|0))if((i<<4|0)<(g|0)){d=5;while(1)if((i<>1]^r)-r+f|0;q=a+136|0;f=c[q>>2]|0;if((g&f|0)==(g|0))l=g;else l=f&~(g>>31);g=(e-l^r)-r|0;k=a+144|0;f=c[k>>2]|0;if((g|0)>0)g=(g+f|0)/(f<<1|1|0)|0;else g=(g-f|0)/(f<<1|1|0)|0;n=a+140|0;j=c[n>>2]|0;e=((g|0)<0?j:0)+g|0;j=e-((e|0)<((j+1|0)/2|0|0)?0:j)|0;h=a+196+(h*12|0)+4|0;if(!(f|d))g=(c[h>>2]<<1)+-1+i>>31;else g=0;f=g^j;vg(a,d,f>>30^f<<1,c[a+156>>2]|0);f=c[a+160>>2]|0;d=(c[o>>2]|0)+((j|0)>-1?j:0-j|0)|0;g=(c[h>>2]|0)+($(c[k>>2]<<1|1,j)|0)|0;e=b[p>>1]|0;if((e|0)==(f|0)){d=d>>1;g=g>>1;e=f>>1}c[o>>2]=d;f=e+1|0;b[p>>1]=f;d=f+g|0;if((d|0)>=1){if((g|0)>0){g=g-f|0;p=b[m>>1]|0;b[m>>1]=(p<<16>>16<127&1)+(p&65535);g=(g|0)>0?0:g}}else{g=b[m>>1]|0;b[m>>1]=(g&65535)-(g<<16>>16>-128&1);g=(d|0)>(~e|0)?d:0-e|0}c[h>>2]=g;f=c[k>>2]|0;e=f<<1|1;d=($(e,(j^r)-r|0)|0)+l|0;if((d|0)>=(0-f|0)){g=c[q>>2]|0;if((g+f|0)<(d|0))d=d-($(c[n>>2]|0,e)|0)|0}else{d=($(c[n>>2]|0,e)|0)+d|0;g=c[q>>2]|0}if((d&g|0)==(d|0)){r=d;r=r&255;return r|0}r=g&~(d>>31);r=r&255;return r|0}function sg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=(c[b+180>>2]|0)-e|0;m=c[b+4608>>2]|0;n=c[b+4604>>2]|0;h=a[m+(e+-1)>>0]|0;k=h&255;f=b+144|0;i=0;while(1){g=m+(i+e)|0;j=(d[g>>0]|0)-k|0;if((((j|0)>-1?j:0-j|0)|0)>(c[f>>2]|0))break;a[g>>0]=h;i=i+1|0;if((i|0)==(l|0)){i=l;break}}h=(i|0)==(l|0);j=b+4600|0;g=c[36476+(c[j>>2]<<2)>>2]|0;if((1<(i|0))f=i;else{f=i;do{ae(b,1,1);g=c[j>>2]|0;f=f-(1<>2])|0;g=(g|0)>30?31:g+1|0;c[j>>2]=g;g=c[36476+(g<<2)>>2]|0}while((f|0)>=(1<>0]=tg(b,d[e>>0]|0,k,d[n+l>>0]|0)|0;b=c[j>>2]|0;c[j>>2]=(b|0)<1?0:b+-1|0;b=i+1|0;return b|0}if(!f){b=l;return b|0}ae(b,1,1);b=l;return b|0}function tg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=d-e|0;j=a+136|0;h=a+144|0;f=c[h>>2]|0;if((((i|0)>-1?i:0-i|0)|0)>(f|0)){g=e-d>>31|1;b=$(g,b-e|0)|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;d=((b|0)<0?f:0)+b|0;f=d-((d|0)<((f+1|0)/2|0|0)?0:f)|0;ug(a,a+4576|0,f);f=$(f,g)|0;g=c[h>>2]|0;h=g<<1|1;f=($(f,h)|0)+e|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&255;return j|0}j=b&~(f>>31);j=j&255;return j|0}else{b=b-d|0;if((b|0)>0)b=(f+b|0)/(f<<1|1|0)|0;else b=(b-f|0)/(f<<1|1|0)|0;i=a+140|0;f=c[i>>2]|0;g=((b|0)<0?f:0)+b|0;f=g-((g|0)<((f+1|0)/2|0|0)?0:f)|0;ug(a,a+4588|0,f);g=c[h>>2]|0;h=g<<1|1;f=($(h,f)|0)+d|0;if((f|0)>=(0-g|0)){b=c[j>>2]|0;if((b+g|0)<(f|0))f=f-($(c[i>>2]|0,h)|0)|0}else{f=($(c[i>>2]|0,h)|0)+f|0;b=c[j>>2]|0}if((f&b|0)==(f|0)){j=f;j=j&255;return j|0}j=b&~(f>>31);j=j&255;return j|0}return 0}function ug(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=e+9|0;j=d[n>>0]|0;m=e+4|0;l=c[m>>2]|0;h=($(j>>>1,l)|0)+(c[e>>2]|0)|0;if((j|0)<(h|0)){i=j;g=0;do{i=i<<1;g=g+1|0}while((i|0)<(h|0));h=g}else h=0;if((f|0)>0&(h|0)==0?d[e+10>>0]<<1>>>0>>0:0)g=1;else k=5;do if((k|0)==5){g=(f|0)<0;if(g?d[e+10>>0]<<1>>>0>=j>>>0:0){g=1;break}g=g&(h|0)!=0}while(0);g=(((f|0)>-1?f:0-f|0)<<1)-l+(g<<31>>31)|0;vg(b,h,g,(c[b+156>>2]|0)+-1-(c[36476+(c[b+4600>>2]<<2)>>2]|0)|0);if((f|0)<0){b=e+10|0;a[b>>0]=(d[b>>0]|0)+1}g=(g+1-(c[m>>2]|0)>>1)+(c[e>>2]|0)|0;c[e>>2]=g;h=a[n>>0]|0;if(h<<24>>24!=(a[e+8>>0]|0)){e=h;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}c[e>>2]=g>>1;b=(h&255)>>>1;a[n>>0]=b;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=b;e=e&255;e=e+1|0;e=e&255;a[n>>0]=e;return}function vg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d>>b;g=a+148|0;h=e-(c[g>>2]|0)|0;if((f|0)<(h+-1|0)){if((f|0)>30){e=(f|0)/2|0;ae(a,0,e);f=f-e|0}ae(a,1,f+1|0);ae(a,(1<31){ae(a,0,31);ae(a,1,e+-31-(c[g>>2]|0)|0)}else ae(a,1,h);b=c[g>>2]|0;ae(a,(1<>2]|0)){e=c[b+136>>2]|0;d=b+152|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+184>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+188>>2]|0):0)?(c[f+12>>2]|0)==(c[b+192>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4612>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4612>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4612>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4612>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+152|0;while(0);n=1<>2];e=b+4616|0;f=n<<1;g=b+4620|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4612|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+192|0;l=b+188|0;j=b+184|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function xg(a){a=a|0;var b=0,d=0;c[a>>2]=35856;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function yg(a){a=a|0;var b=0,d=0;c[a>>2]=35856;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function zg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Ag(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;Lg(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function Bg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Cg(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Cg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+172|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,B=o,o=0,!(B&1)):0){c[C>>2]=f;B=f+(d<<1)|0;c[C+8>>2]=B;iw(f|0,0,e|0)|0;c[D>>2]=B;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=18;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=16;if((j|0)==16?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=18;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4596|0;k=$(y,x)|0;l=k+1|0;m=a+4600|0;n=(y|0)>0;p=a+160|0;q=a+168|0;r=a+164|0;s=a+156|0;t=a+88|0;u=a+4592|0;v=0;b:while(1){f=c[C>>2]|0;e=f+2|0;c[j>>2]=e;f=f+(l<<1)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;b[e+(g<<1)>>1]=b[e+(g+-1<<1)>>1]|0;b[d+-2>>1]=b[e>>1]|0;o=0;ia(76,a|0,0);g=o;o=0;if(g&1){j=29;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x<<1)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x<<1)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k<<1)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=30;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function Dg(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=d+4596|0;g=c[q>>2]|0;u=d+172|0;f=c[u>>2]|0;if((f|0)<=0)return;r=d+4600|0;s=d+4604|0;t=d+4592|0;l=g;j=e[g+-2>>1]|0;g=e[g>>1]|0;p=0;while(1){n=c[r>>2]|0;k=b[n+(p+-1<<1)>>1]|0;o=k&65535;i=p+1|0;h=e[l+(i<<1)>>1]|0;m=c[s>>2]|0;l=g-j|0;j=j-o|0;m=((((a[m+(h-g)>>0]|0)*9|0)+(a[m+l>>0]|0)|0)*9|0)+(a[m+j>>0]|0)|0;n=n+(p<<1)|0;if(!m){f=Gg(d,k,n,f-p|0)|0;g=f+p|0;if((g|0)!=(c[u>>2]|0)){o=Hg(d,o,e[(c[q>>2]|0)+(g<<1)>>1]|0)|0;b[(c[r>>2]|0)+(g<<1)>>1]=o;o=c[t>>2]|0;c[t>>2]=(o|0)<1?0:o+-1|0;f=f+1|0}i=f+p|0;h=c[q>>2]|0;g=e[h+(i+-1<<1)>>1]|0;h=e[h+(i<<1)>>1]|0}else{f=g-o>>31;if((f^j|0)<0)f=g;else f=o+((f^l|0)<0?0:l)|0;o=Fg(d,m,e[n>>1]|0,f,0)|0;b[(c[r>>2]|0)+(p<<1)>>1]=o}f=c[u>>2]|0;if((f|0)<=(i|0))break;l=c[q>>2]|0;j=g;g=h;p=i}return}function Eg(b){b=b|0;var d=0,e=0,f=0,g=0;f=b+116|0;e=c[f>>2]|0;if((a[e>>0]|0)!=-1){g=b+112|0;d=c[g>>2]|0;if((d|0)<1){ge(b);d=c[g>>2]|0;e=c[f>>2]|0}b=b+108|0;f=c[b>>2]|0;c[g>>2]=d+-1;d=f<<1;c[b>>2]=d;if((a[e>>0]|0)!=-1){d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,6,35648);b=o;o=0;if(!(b&1))lb(d|0,824,96);b=Na()|0;La(d|0);Ya(b|0)}}else d=c[b+108>>2]|0;if(!d)return;d=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,d|0,6,35648);b=o;o=0;if(!(b&1))lb(d|0,824,96);b=Na()|0;La(d|0);Ya(b|0)}function Fg(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&65535;return d|0}d=f&~(h>>31);d=d&65535;return d|0}function Gg(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4592|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)>0)i=0;else return h|0;do{b[f+(i<<1)>>1]=e;i=i+1|0}while((i|0)!=(h|0));return h|0}function Hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=b-d|0;h=a+128|0;e=a+136|0;if((((g|0)>-1?g:0-g|0)|0)>(c[e>>2]|0)){b=$(Ig(a,a+4568|0)|0,d-b>>31|1)|0;f=c[e>>2]|0;g=f<<1|1;b=($(b,g)|0)+d|0;if((b|0)>=(0-f|0)){e=c[h>>2]|0;if((e+f|0)<(b|0))b=b-($(c[a+132>>2]|0,g)|0)|0}else{b=($(c[a+132>>2]|0,g)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&65535;return a|0}a=e&~(b>>31);a=a&65535;return a|0}else{d=Ig(a,a+4580|0)|0;g=c[e>>2]|0;f=g<<1|1;b=($(f,d)|0)+b|0;if((b|0)>=(0-g|0)){e=c[h>>2]|0;if((e+g|0)<(b|0))b=b-($(c[a+132>>2]|0,f)|0)|0}else{b=($(c[a+132>>2]|0,f)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&65535;return a|0}a=e&~(b>>31);a=a&65535;return a|0}return 0}function Ig(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function Jg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=a+112|0;if((c[g>>2]|0)<16)ge(a);h=a+108|0;d=c[h>>2]|0;if((d|0)>=0)if(!(d&1073741824))if(!(d&536870912))if(!(d&268435456))if(!(d&134217728))if(!(d&67108864))if(!(d&33554432))if(!(d&16777216))if(!(d&8388608))if(!(d&4194304))if(!(d&2097152))if(!(d&1048576))if(!(d&524288))if(!(d&262144))if(!(d&131072)){f=d>>>12&16;b=f+-1|0;if(!f){b=(c[g>>2]|0)+-15|0;c[g>>2]=b;e=d<<15;c[h>>2]=e;d=b;b=15;while(1){if((d|0)<1){ge(a);f=c[h>>2]|0;d=c[g>>2]|0}else f=e;d=d+-1|0;c[g>>2]=d;e=f<<1;c[h>>2]=e;if((f|0)<0)break;else b=b+1|0}return b|0}}else b=14;else b=13;else b=12;else b=11;else b=10;else b=9;else b=8;else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;a=b+1|0;c[g>>2]=(c[g>>2]|0)-a;c[h>>2]=d<>2]|0;if((e|0)<(d|0)){ge(b);e=c[f>>2]|0;if((e|0)<(d|0)){e=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,e|0,5,35648);b=o;o=0;if(b&1){b=Na()|0;La(e|0);Ya(b|0)}else lb(e|0,824,96)}}g=b+108|0;b=c[g>>2]|0;c[f>>2]=e-d;c[g>>2]=b<>>(32-d|0)|0}function Lg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function Mg(a){a=a|0;var b=0,d=0;c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Ng(a){a=a|0;var b=0,d=0;c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Og(a){a=a|0;var b=0,d=0;c[a>>2]=35828;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Pg(a){a=a|0;var b=0,d=0;c[a>>2]=35828;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Qg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=6;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Rg(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;Zg(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function Sg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Tg(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Tg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+172|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!(d>>>0>715827882?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(o=0,e=ka(67,d*6|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;f=e+(d*6|0)|0;c[C+8>>2]=f;while(1){b[e>>1]=0;b[e+2>>1]=0;b[e+4>>1]=0;d=d+-1|0;if(!d)break;else e=e+6|0}c[D>>2]=f;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=20;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=18;if((j|0)==18?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=20;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==20){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4596|0;k=$(y,x)|0;l=k+1|0;m=a+4600|0;n=(y|0)>0;p=a+160|0;q=a+168|0;r=a+164|0;s=a+156|0;t=a+88|0;u=a+4592|0;v=0;b:while(1){f=c[C>>2]|0;e=f+6|0;c[j>>2]=e;f=f+(l*6|0)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];d=c[w>>2]|0;g=e+(d*6|0)|0;e=e+((d+-1|0)*6|0)|0;b[g>>1]=b[e>>1]|0;b[g+2>>1]=b[e+2>>1]|0;b[g+4>>1]=b[e+4>>1]|0;g=(c[m>>2]|0)+-6|0;e=c[j>>2]|0;b[g>>1]=b[e>>1]|0;b[g+2>>1]=b[e+2>>1]|0;b[g+4>>1]=b[e+4>>1]|0;o=0;ia(77,a|0,0);g=o;o=0;if(g&1){j=31;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x*6|0)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x*6|0)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+(((c[s>>2]|0)-k|0)*6|0)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=32;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=44;break a}}if((j|0)==31){f=Na()|0;break}else if((j|0)==32){f=Na()|0;break}}else j=44;while(0);do if((j|0)==44){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-6-d|0)>>>0)/6|0)*6|0);cj(d);Ya(f|0)}function Ug(d,f){d=d|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;N=i;i=i+32|0;D=N+24|0;M=N+18|0;L=N+12|0;E=N+6|0;F=N;G=d+172|0;f=c[G>>2]|0;if((f|0)<=0){i=N;return}H=d+4600|0;I=d+4596|0;J=d+4604|0;K=d+4592|0;C=0;while(1){h=C+-1|0;j=c[H>>2]|0;O=c[I>>2]|0;g=C+1|0;k=e[O+(C*6|0)>>1]|0;B=c[J>>2]|0;l=e[O+(h*6|0)>>1]|0;m=k-l|0;n=e[j+(h*6|0)>>1]|0;o=l-n|0;p=((((a[B+((e[O+(g*6|0)>>1]|0)-k)>>0]|0)*9|0)+(a[B+m>>0]|0)|0)*9|0)+(a[B+o>>0]|0)|0;q=e[O+(C*6|0)+2>>1]|0;r=e[O+(h*6|0)+2>>1]|0;s=q-r|0;t=e[j+(h*6|0)+2>>1]|0;u=r-t|0;v=((((a[B+((e[O+(g*6|0)+2>>1]|0)-q)>>0]|0)*9|0)+(a[B+s>>0]|0)|0)*9|0)+(a[B+u>>0]|0)|0;w=e[O+(C*6|0)+4>>1]|0;x=e[O+(h*6|0)+4>>1]|0;y=w-x|0;z=e[j+(h*6|0)+4>>1]|0;A=x-z|0;B=((((a[B+((e[O+(g*6|0)+4>>1]|0)-w)>>0]|0)*9|0)+(a[B+y>>0]|0)|0)*9|0)+(a[B+A>>0]|0)|0;if(!(v|p|B)){g=j+(h*6|0)|0;b[L>>1]=b[g>>1]|0;b[L+2>>1]=b[g+2>>1]|0;b[L+4>>1]=b[g+4>>1]|0;b[D>>1]=b[g>>1]|0;b[D+2>>1]=b[g+2>>1]|0;b[D+4>>1]=b[g+4>>1]|0;f=Vg(d,D,j+(C*6|0)|0,f-C|0)|0;g=f+C|0;if((g|0)!=(c[G>>2]|0)){O=(c[I>>2]|0)+(g*6|0)|0;b[F>>1]=b[O>>1]|0;b[F+2>>1]=b[O+2>>1]|0;b[F+4>>1]=b[O+4>>1]|0;O=(c[H>>2]|0)+(g*6|0)|0;b[M>>1]=b[L>>1]|0;b[M+2>>1]=b[L+2>>1]|0;b[M+4>>1]=b[L+4>>1]|0;b[D>>1]=b[F>>1]|0;b[D+2>>1]=b[F+2>>1]|0;b[D+4>>1]=b[F+4>>1]|0;Wg(E,d,M,D);b[O>>1]=b[E>>1]|0;b[O+2>>1]=b[E+2>>1]|0;b[O+4>>1]=b[E+4>>1]|0;O=c[K>>2]|0;c[K>>2]=(O|0)<1?0:O+-1|0;f=f+1|0}g=f+C|0}else{h=e[j+(C*6|0)>>1]|0;f=k-n>>31;if((f^o|0)>=0)if((f^m|0)<0)f=n;else f=n-l+k|0;else f=k;k=Xg(d,p,h,f,0)|0;h=e[(c[H>>2]|0)+(C*6|0)+2>>1]|0;f=q-t>>31;if((f^u|0)>=0)if((f^s|0)<0)f=t;else f=t-r+q|0;else f=q;h=Xg(d,v,h,f,0)|0;j=e[(c[H>>2]|0)+(C*6|0)+4>>1]|0;f=w-z>>31;if((f^A|0)>=0)if((f^y|0)<0)f=z;else f=z-x+w|0;else f=w;B=Xg(d,B,j,f,0)|0;O=c[H>>2]|0;b[O+(C*6|0)>>1]=k;b[O+(C*6|0)+2>>1]=h;b[O+(C*6|0)+4>>1]=B}f=c[G>>2]|0;if((g|0)>=(f|0))break;else C=g}i=N;return}function Vg(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4592|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)<=0)return h|0;i=0;do{r=f+(i*6|0)|0;b[r>>1]=b[e>>1]|0;b[r+2>>1]=b[e+2>>1]|0;b[r+4>>1]=b[e+4>>1]|0;i=i+1|0}while((i|0)!=(h|0));return h|0}function Wg(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=d+4568|0;o=Yg(d,l)|0;j=Yg(d,l)|0;l=Yg(d,l)|0;i=d+128|0;h=e[g>>1]|0;m=c[d+136>>2]|0;n=m<<1|1;h=($($(n,o)|0,h-(e[f>>1]|0)>>31|1)|0)+h|0;o=0-m|0;if((h|0)>=(o|0)){i=c[i>>2]|0;if((i+m|0)<(h|0))h=h-($(c[d+132>>2]|0,n)|0)|0}else{h=($(c[d+132>>2]|0,n)|0)+h|0;i=c[i>>2]|0}if((h&i|0)!=(h|0))h=i&~(h>>31);k=h&65535;h=e[g+2>>1]|0;h=($($(n,j)|0,h-(e[f+2>>1]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[d+132>>2]|0,n)|0)|0}else h=($(c[d+132>>2]|0,n)|0)+h|0;if((h&i|0)!=(h|0))h=i&~(h>>31);j=h&65535;h=e[g+4>>1]|0;h=($($(n,l)|0,h-(e[f+4>>1]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[d+132>>2]|0,n)|0)|0}else h=($(c[d+132>>2]|0,n)|0)+h|0;if((h&i|0)==(h|0)){d=h;d=d&65535;b[a>>1]=k;o=a+2|0;b[o>>1]=j;a=a+4|0;b[a>>1]=d;return}d=i&~(h>>31);d=d&65535;b[a>>1]=k;o=a+2|0;b[o>>1]=j;a=a+4|0;b[a>>1]=d;return}function Xg(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&65535;return d|0}d=f&~(h>>31);d=d&65535;return d|0}function Yg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function Zg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function _g(a){a=a|0;var b=0,d=0;c[a>>2]=35800;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function $g(a){a=a|0;var b=0,d=0;c[a>>2]=35800;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function ah(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function bh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;jh(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function ch(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);dh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function dh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=b+172|0;x=(c[w>>2]|0)+4|0;if((c[b+28>>2]|0)==1)y=c[b+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,C|0),B=o,o=0,B&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[D>>2]|0)+3|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)h=19;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))h=17;if((h|0)==17?(f=y<<2,o=0,g=ka(67,f|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=g;h=g+(y<<2)|0;c[z+8>>2]=h;iw(g|0,0,f|0)|0;c[B>>2]=h;h=19;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){h=b+8|0;b:do if((c[h>>2]|0)>0){j=b+4596|0;k=$(y,x)|0;l=k+1|0;m=b+4600|0;n=(y|0)>0;p=b+160|0;q=b+168|0;r=b+164|0;s=b+156|0;t=b+88|0;u=b+4592|0;v=0;c:while(1){f=c[C>>2]|0;e=f+3|0;c[j>>2]=e;f=f+(l*3|0)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];d=c[w>>2]|0;g=e+(d*3|0)|0;e=e+((d+-1|0)*3|0)|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;e=c[j>>2]|0;g=(c[m>>2]|0)+-3|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;o=0;ia(78,b|0,0);g=o;o=0;if(g&1){h=30;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x*3|0)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x*3|0)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+(((c[s>>2]|0)-k|0)*3|0)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){h=31;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){h=43;break b}}if((h|0)==30){f=Na()|0;break}else if((h|0)==31){f=Na()|0;break}}else h=43;while(0);do if((h|0)==43){o=0;ha(183,b|0);b=o;o=0;if(b&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function eh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;M=i;i=i+16|0;C=M+12|0;L=M+9|0;K=M+6|0;D=M+3|0;E=M;F=b+172|0;e=c[F>>2]|0;if((e|0)<=0){i=M;return}G=b+4600|0;H=b+4596|0;I=b+4604|0;J=b+4592|0;B=0;while(1){y=B+-1|0;g=c[G>>2]|0;h=g+(y*3|0)|0;N=c[H>>2]|0;f=B+1|0;j=d[N+(B*3|0)>>0]|0;A=c[I>>2]|0;k=d[N+(y*3|0)>>0]|0;l=j-k|0;m=d[h>>0]|0;n=k-m|0;o=((((a[A+((d[N+(f*3|0)>>0]|0)-j)>>0]|0)*9|0)+(a[A+l>>0]|0)|0)*9|0)+(a[A+n>>0]|0)|0;p=d[N+(B*3|0)+1>>0]|0;q=d[N+(y*3|0)+1>>0]|0;r=p-q|0;s=d[g+(y*3|0)+1>>0]|0;t=q-s|0;u=((((a[A+((d[N+(f*3|0)+1>>0]|0)-p)>>0]|0)*9|0)+(a[A+r>>0]|0)|0)*9|0)+(a[A+t>>0]|0)|0;v=d[N+(B*3|0)+2>>0]|0;w=d[N+(y*3|0)+2>>0]|0;x=v-w|0;y=d[g+(y*3|0)+2>>0]|0;z=w-y|0;A=((((a[A+((d[N+(f*3|0)+2>>0]|0)-v)>>0]|0)*9|0)+(a[A+x>>0]|0)|0)*9|0)+(a[A+z>>0]|0)|0;if(!(u|o|A)){a[K>>0]=a[h>>0]|0;a[K+1>>0]=a[h+1>>0]|0;a[K+2>>0]=a[h+2>>0]|0;a[C>>0]=a[h>>0]|0;a[C+1>>0]=a[h+1>>0]|0;a[C+2>>0]=a[h+2>>0]|0;e=fh(b,C,g+(B*3|0)|0,e-B|0)|0;f=e+B|0;if((f|0)!=(c[F>>2]|0)){N=(c[H>>2]|0)+(f*3|0)|0;a[E>>0]=a[N>>0]|0;a[E+1>>0]=a[N+1>>0]|0;a[E+2>>0]=a[N+2>>0]|0;N=c[G>>2]|0;a[L>>0]=a[K>>0]|0;a[L+1>>0]=a[K+1>>0]|0;a[L+2>>0]=a[K+2>>0]|0;a[C>>0]=a[E>>0]|0;a[C+1>>0]=a[E+1>>0]|0;a[C+2>>0]=a[E+2>>0]|0;gh(D,b,L,C);N=N+(f*3|0)|0;a[N>>0]=a[D>>0]|0;a[N+1>>0]=a[D+1>>0]|0;a[N+2>>0]=a[D+2>>0]|0;N=c[J>>2]|0;c[J>>2]=(N|0)<1?0:N+-1|0;e=e+1|0}f=e+B|0}else{g=d[g+(B*3|0)>>0]|0;e=j-m>>31;if((e^n|0)>=0)if((e^l|0)<0)e=m;else e=m-k+j|0;else e=j;j=hh(b,o,g,e,0)|0;g=d[(c[G>>2]|0)+(B*3|0)+1>>0]|0;e=p-s>>31;if((e^t|0)>=0)if((e^r|0)<0)e=s;else e=s-q+p|0;else e=p;g=hh(b,u,g,e,0)|0;h=d[(c[G>>2]|0)+(B*3|0)+2>>0]|0;e=v-y>>31;if((e^z|0)>=0)if((e^x|0)<0)e=y;else e=y-w+v|0;else e=v;A=hh(b,A,h,e,0)|0;N=(c[G>>2]|0)+(B*3|0)|0;a[N>>0]=j;a[N+1>>0]=g;a[N+2>>0]=A}e=c[F>>2]|0;if((f|0)>=(e|0))break;else B=f}i=M;return}function fh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4592|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;h=0;do{q=e+(h*3|0)|0;a[q>>0]=a[d>>0]|0;a[q+1>>0]=a[d+1>>0]|0;a[q+2>>0]=a[d+2>>0]|0;h=h+1|0}while((h|0)!=(g|0));return g|0}function gh(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=e+4568|0;o=ih(e,l)|0;j=ih(e,l)|0;l=ih(e,l)|0;i=e+128|0;h=d[g>>0]|0;m=c[e+136>>2]|0;n=m<<1|1;h=($($(n,o)|0,h-(d[f>>0]|0)>>31|1)|0)+h|0;o=0-m|0;if((h|0)>=(o|0)){i=c[i>>2]|0;if((i+m|0)<(h|0))h=h-($(c[e+132>>2]|0,n)|0)|0}else{h=($(c[e+132>>2]|0,n)|0)+h|0;i=c[i>>2]|0}if((h&i|0)!=(h|0))h=i&~(h>>31);k=h&255;h=d[g+1>>0]|0;h=($($(n,j)|0,h-(d[f+1>>0]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[e+132>>2]|0,n)|0)|0}else h=($(c[e+132>>2]|0,n)|0)+h|0;if((h&i|0)!=(h|0))h=i&~(h>>31);j=h&255;h=d[g+2>>0]|0;h=($($(n,l)|0,h-(d[f+2>>0]|0)>>31|1)|0)+h|0;if((h|0)>=(o|0)){if((i+m|0)<(h|0))h=h-($(c[e+132>>2]|0,n)|0)|0}else h=($(c[e+132>>2]|0,n)|0)+h|0;if((h&i|0)==(h|0)){e=h;e=e&255;a[b>>0]=k;o=b+1|0;a[o>>0]=j;b=b+2|0;a[b>>0]=e;return}e=i&~(h>>31);e=e&255;a[b>>0]=k;o=b+1|0;a[o>>0]=j;b=b+2|0;a[b>>0]=e;return}function hh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&255;return d|0}d=f&~(h>>31);d=d&255;return d|0}function ih(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function jh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function kh(a){a=a|0;var b=0,d=0;c[a>>2]=35772;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function lh(a){a=a|0;var b=0,d=0;c[a>>2]=35772;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function mh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function nh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,65535,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;vh(d);g=0;do{c[d+164+(g*12|0)>>2]=1024;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=1024;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=1024;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function oh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);ph(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function ph(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+148|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,B=o,o=0,!(B&1)):0){c[C>>2]=f;B=f+(d<<1)|0;c[C+8>>2]=B;iw(f|0,0,e|0)|0;c[D>>2]=B;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=18;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=16;if((j|0)==16?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=18;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4572|0;k=$(y,x)|0;l=k+1|0;m=a+4576|0;n=(y|0)>0;p=a+136|0;q=a+144|0;r=a+140|0;s=a+132|0;t=a+88|0;u=a+4568|0;v=0;b:while(1){f=c[C>>2]|0;e=f+2|0;c[j>>2]=e;f=f+(l<<1)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;b[e+(g<<1)>>1]=b[e+(g+-1<<1)>>1]|0;b[d+-2>>1]=b[e>>1]|0;o=0;ia(79,a|0,0);g=o;o=0;if(g&1){j=29;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x<<1)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x<<1)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k<<1)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=30;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function qh(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4572|0;f=c[p>>2]|0;s=d+148|0;if((c[s>>2]|0)<=0)return;q=d+4576|0;r=d+4580|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(sh(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=rh(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function rh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&65535|0)!=(f|0))f=f>>31&65535^65535;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<47){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&65535;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&65535;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&65535;return e|0}function sh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;i=a+4576|0;h=c[i>>2]|0;f=b[h+(d+-1<<1)>>1]|0;j=a+148|0;h=th(a,f,h+(d<<1)|0,(c[j>>2]|0)-d|0)|0;g=h+d|0;if((g|0)==(c[j>>2]|0)){j=h;return j|0}f=f&65535;d=e[(c[a+4572>>2]|0)+(g<<1)>>1]|0;j=f-d|0;if((((j|0)>-1?j:0-j|0)|0)<1)f=(uh(a,a+4556|0)|0)+f|0;else f=($(uh(a,a+4544|0)|0,d-f>>31|1)|0)+d|0;b[(c[i>>2]|0)+(g<<1)>>1]=f;j=a+4568|0;a=c[j>>2]|0;c[j>>2]=(a|0)<1?0:a+-1|0;j=h+1|0;return j|0}function th(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4568|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)>0)i=0;else return h|0;do{b[f+(i<<1)>>1]=e;i=i+1|0}while((i|0)!=(h|0));return h|0}function uh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(46-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,16)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}function vh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,65535,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8909]|0;c[b+4580>>2]=l+(((c[8910]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=131072){if(h>>>0>131072?(j=d+131072|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,131072-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+65536;j=b+160|0;g=b+156|0;h=-65536;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==65536)break}i=m;return}function wh(a){a=a|0;var b=0,d=0;c[a>>2]=35744;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function xh(a){a=a|0;var b=0,d=0;c[a>>2]=35744;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function yh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(37,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==16)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(38,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(39,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(40,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=2;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function zh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,4095,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;Hh(d);g=0;do{c[d+164+(g*12|0)>>2]=64;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=64;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=64;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function Ah(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Bh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Bh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=a+148|0;x=(c[w>>2]|0)+4|0;if((c[a+28>>2]|0)==1)y=c[a+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))j=6;if((j|0)==6?(e=d<<1,o=0,f=ka(67,e|0)|0,B=o,o=0,!(B&1)):0){c[C>>2]=f;B=f+(d<<1)|0;c[C+8>>2]=B;iw(f|0,0,e|0)|0;c[D>>2]=B;break}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)j=18;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))j=16;if((j|0)==16?(g=y<<2,o=0,h=ka(67,g|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=h;j=h+(y<<2)|0;c[z+8>>2]=j;iw(h|0,0,g|0)|0;c[B>>2]=j;j=18;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((j|0)==18){h=a+8|0;a:do if((c[h>>2]|0)>0){j=a+4572|0;k=$(y,x)|0;l=k+1|0;m=a+4576|0;n=(y|0)>0;p=a+136|0;q=a+144|0;r=a+140|0;s=a+132|0;t=a+88|0;u=a+4568|0;v=0;b:while(1){f=c[C>>2]|0;e=f+2|0;c[j>>2]=e;f=f+(l<<1)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;b[e+(g<<1)>>1]=b[e+(g+-1<<1)>>1]|0;b[d+-2>>1]=b[e>>1]|0;o=0;ia(80,a|0,0);g=o;o=0;if(g&1){j=29;break b}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x<<1)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x<<1)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k<<1)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){j=30;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){j=42;break a}}if((j|0)==29){f=Na()|0;break}else if((j|0)==30){f=Na()|0;break}}else j=42;while(0);do if((j|0)==42){o=0;ha(183,a|0);a=o;o=0;if(a&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~((e+-2-d|0)>>>1)<<1);cj(d);Ya(f|0)}function Ch(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=d+4572|0;f=c[p>>2]|0;s=d+148|0;if((c[s>>2]|0)<=0)return;q=d+4576|0;r=d+4580|0;i=f;j=e[f+-2>>1]|0;f=e[f>>1]|0;o=0;while(1){n=c[q>>2]|0;m=e[n+(o+-1<<1)>>1]|0;h=o+1|0;g=e[i+(h<<1)>>1]|0;l=c[r>>2]|0;k=f-j|0;i=j-m|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;if(!l){h=(Eh(d,o,0)|0)+o|0;g=c[p>>2]|0;f=e[g+(h+-1<<1)>>1]|0;g=e[g+(h<<1)>>1]|0}else{j=f-m>>31;if((j^i|0)<0)i=f;else i=m+((j^k|0)<0?0:k)|0;n=Dh(d,l,e[n+(o<<1)>>1]|0,i,0)|0;b[(c[q>>2]|0)+(o<<1)>>1]=n}if((h|0)>=(c[s>>2]|0))break;i=c[p>>2]|0;j=f;f=g;o=h}return}function Dh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&4095|0)!=(f|0))f=f>>31&4095^4095;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<35){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&4095;e=e&65535;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&4095;e=e&65535;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&4095;e=e&65535;return e|0}function Eh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;i=a+4576|0;h=c[i>>2]|0;f=b[h+(d+-1<<1)>>1]|0;j=a+148|0;h=Fh(a,f,h+(d<<1)|0,(c[j>>2]|0)-d|0)|0;g=h+d|0;if((g|0)==(c[j>>2]|0)){j=h;return j|0}f=f&65535;d=e[(c[a+4572>>2]|0)+(g<<1)>>1]|0;j=f-d|0;if((((j|0)>-1?j:0-j|0)|0)<1)f=(Gh(a,a+4556|0)|0)+f|0;else f=($(Gh(a,a+4544|0)|0,d-f>>31|1)|0)+d|0;b[(c[i>>2]|0)+(g<<1)>>1]=f&4095;j=a+4568|0;a=c[j>>2]|0;c[j>>2]=(a|0)<1?0:a+-1|0;j=h+1|0;return j|0}function Fh(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0;k=d+112|0;l=d+108|0;m=d+4568|0;h=c[k>>2]|0;i=0;while(1){if((h|0)<1){ge(d);h=c[k>>2]|0}j=c[l>>2]|0;h=h+-1|0;c[k>>2]=h;c[l>>2]=j<<1;if((j|0)>=0){p=8;break}j=c[m>>2]|0;q=1<>2];r=g-i|0;r=(q|0)<(r|0)?q:r;i=r+i|0;if((r|0)==(q|0))c[m>>2]=(j|0)>30?31:j+1|0;if((i|0)==(g|0)){h=g;break}}if((p|0)==8)if((i|0)!=(g|0)){h=c[m>>2]|0;if((h+-4|0)>>>0<28)h=Kg(d,c[36476+(h<<2)>>2]|0)|0;else h=0;h=h+i|0;if((h|0)>(g|0)){h=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,h|0,5,35648);r=o;o=0;if(r&1){r=Na()|0;La(h|0);Ya(r|0)}else lb(h|0,824,96)}}else h=g;if((h|0)>0)i=0;else return h|0;do{b[f+(i<<1)>>1]=e;i=i+1|0}while((i|0)!=(h|0));return h|0}function Gh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(34-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,12)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}function Hh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,4095,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8906]|0;c[b+4580>>2]=l+(((c[8907]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=8192){if(h>>>0>8192?(j=d+8192|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,8192-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+4096;j=b+160|0;g=b+156|0;h=-4096;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==4096)break}i=m;return}function Ih(a){a=a|0;var b=0,d=0;c[a>>2]=35716;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Jh(a){a=a|0;var b=0,d=0;c[a>>2]=35716;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Lh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;Th(d);g=0;do{c[d+164+(g*12|0)>>2]=4;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=4;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=4;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function Mh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Nh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Nh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=b+148|0;x=(c[w>>2]|0)+4|0;if((c[b+28>>2]|0)==1)y=c[b+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[D>>2]|0)+1|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)h=19;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))h=17;if((h|0)==17?(f=y<<2,o=0,g=ka(67,f|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=g;h=g+(y<<2)|0;c[z+8>>2]=h;iw(g|0,0,f|0)|0;c[B>>2]=h;h=19;break}e=Na()|0;d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){h=b+8|0;b:do if((c[h>>2]|0)>0){j=b+4572|0;k=$(y,x)|0;l=k+1|0;m=b+4576|0;n=(y|0)>0;p=b+136|0;q=b+144|0;r=b+140|0;s=b+132|0;t=b+88|0;u=b+4568|0;v=0;c:while(1){f=c[C>>2]|0;e=f+1|0;c[j>>2]=e;f=f+l|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];g=c[w>>2]|0;a[e+g>>0]=a[e+(g+-1)>>0]|0;a[(c[m>>2]|0)+-1>>0]=a[c[j>>2]>>0]|0;o=0;ia(81,b|0,0);g=o;o=0;if(g&1){h=30;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+x|0;c[j>>2]=e;d=(c[m>>2]|0)+x|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+((c[s>>2]|0)-k)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){h=31;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){h=43;break b}}if((h|0)==30){e=Na()|0;break}else if((h|0)==31){e=Na()|0;break}}else h=43;while(0);do if((h|0)==43){o=0;ha(183,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);i=A;return}while(0);d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}function Oh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=b+4572|0;e=c[o>>2]|0;r=b+148|0;if((c[r>>2]|0)<=0)return;p=b+4576|0;q=b+4580|0;h=e;i=d[e+-1>>0]|0;e=d[e>>0]|0;n=0;while(1){m=c[p>>2]|0;l=d[m+(n+-1)>>0]|0;g=n+1|0;f=d[h+g>>0]|0;k=c[q>>2]|0;j=e-i|0;h=i-l|0;k=((((a[k+(f-e)>>0]|0)*9|0)+(a[k+j>>0]|0)|0)*9|0)+(a[k+h>>0]|0)|0;if(!k){g=(Qh(b,n,0)|0)+n|0;f=c[o>>2]|0;e=d[f+(g+-1)>>0]|0;f=d[f+g>>0]|0}else{i=e-l>>31;if((i^h|0)<0)h=e;else h=l+((i^j|0)<0?0:j)|0;m=Ph(b,k,d[m+n>>0]|0,h,0)|0;a[(c[p>>2]|0)+n>>0]=m}if((g|0)>=(c[r>>2]|0))break;h=c[o>>2]|0;i=e;e=f;n=g}return}function Ph(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&255|0)!=(f|0))f=f>>31&255^255;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<23){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}function Qh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=b+4576|0;h=c[i>>2]|0;f=a[h+(e+-1)>>0]|0;j=b+148|0;h=Rh(b,f,h+e|0,(c[j>>2]|0)-e|0)|0;g=h+e|0;if((g|0)==(c[j>>2]|0)){j=h;return j|0}f=f&255;e=d[(c[b+4572>>2]|0)+g>>0]|0;j=f-e|0;if((((j|0)>-1?j:0-j|0)|0)<1)f=(Sh(b,b+4556|0)|0)+f|0;else f=($(Sh(b,b+4544|0)|0,e-f>>31|1)|0)+e|0;a[(c[i>>2]|0)+g>>0]=f;j=b+4568|0;b=c[j>>2]|0;c[j>>2]=(b|0)<1?0:b+-1|0;j=h+1|0;return j|0}function Rh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4568|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;iw(e|0,d|0,g|0)|0;return g|0}function Sh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(22-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,8)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}function Th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8900]|0;c[b+4580>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+256;j=b+160|0;g=b+156|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function Uh(a){a=a|0;var b=0,d=0;c[a>>2]=35688;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function Vh(a){a=a|0;var b=0,d=0;c[a>>2]=35688;b=c[a+4584>>2]|0;if(b){d=a+4588|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function Wh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=3;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function Xh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;h=i;i=i+32|0;l=h;Ei(l,255,0);k=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[l+8>>2]|0:j;g=c[e+12>>2]|0;g=(g|0)==0?c[l+12>>2]|0:g;e=c[e+16>>2]|0;f=c[l+16>>2]|0;c[d+152>>2]=(k|0)==0?c[l+4>>2]|0:k;c[d+156>>2]=j;c[d+160>>2]=g;di(d);g=0;do{c[d+164+(g*12|0)>>2]=4;c[d+164+(g*12|0)+4>>2]=0;b[d+164+(g*12|0)+8>>1]=0;b[d+164+(g*12|0)+10>>1]=1;g=g+1|0}while((g|0)!=365);l=((e|0)==0?f:e)&255;c[d+4544>>2]=4;c[d+4548>>2]=0;a[d+4552>>0]=l;a[d+4553>>0]=1;a[d+4554>>0]=0;c[d+4556>>2]=4;c[d+4560>>2]=1;a[d+4564>>0]=l;a[d+4565>>0]=1;a[d+4566>>0]=0;c[d+4568>>2]=0;i=h;return}function Yh(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4596>>0]=g&1;d=b+132|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);Zh(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function Zh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;w=b+148|0;x=(c[w>>2]|0)+4|0;if((c[b+28>>2]|0)==1)y=c[b+20>>2]|0;else y=1;d=$(y<<1,x)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!(d>>>0>1431655765?(o=0,ha(178,C|0),B=o,o=0,B&1):0))h=6;if((h|0)==6?(o=0,e=ka(67,d*3|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+(d*3|0);while(1){a[e>>0]=0;a[e+1>>0]=0;a[e+2>>0]=0;e=(c[D>>2]|0)+3|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}f=Na()|0;d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!y)h=19;else{if(!(y>>>0>1073741823?(o=0,ha(178,z|0),v=o,o=0,v&1):0))h=17;if((h|0)==17?(f=y<<2,o=0,g=ka(67,f|0)|0,v=o,o=0,!(v&1)):0){c[z>>2]=g;h=g+(y<<2)|0;c[z+8>>2]=h;iw(g|0,0,f|0)|0;c[B>>2]=h;h=19;break}f=Na()|0;d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}while(0);if((h|0)==19){h=b+8|0;b:do if((c[h>>2]|0)>0){j=b+4572|0;k=$(y,x)|0;l=k+1|0;m=b+4576|0;n=(y|0)>0;p=b+136|0;q=b+144|0;r=b+140|0;s=b+132|0;t=b+88|0;u=b+4568|0;v=0;c:while(1){f=c[C>>2]|0;e=f+3|0;c[j>>2]=e;f=f+(l*3|0)|0;c[m>>2]=f;if(!(v&1))d=f;else{c[j>>2]=f;c[m>>2]=e;d=e;e=f}if(n){g=c[z>>2]|0;f=0;do{c[u>>2]=c[g+(f<<2)>>2];d=c[w>>2]|0;g=e+(d*3|0)|0;e=e+((d+-1|0)*3|0)|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;e=c[j>>2]|0;g=(c[m>>2]|0)+-3|0;a[g>>0]=a[e>>0]|0;a[g+1>>0]=a[e+1>>0]|0;a[g+2>>0]=a[e+2>>0]|0;o=0;ia(82,b|0,0);g=o;o=0;if(g&1){h=30;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[u>>2];e=(c[j>>2]|0)+(x*3|0)|0;c[j>>2]=e;d=(c[m>>2]|0)+(x*3|0)|0;c[m>>2]=d;f=f+1|0}while((f|0)<(y|0))}g=c[p>>2]|0;if(((g|0)<=(v|0)?(v|0)<((c[q>>2]|0)+g|0):0)?(g=c[t>>2]|0,o=0,Aa(c[(c[g>>2]|0)+8>>2]|0,g|0,d+(((c[s>>2]|0)-k|0)*3|0)|0,c[r>>2]|0,x|0),g=o,o=0,g&1):0){h=31;break}v=v+1|0;if((v|0)>=(c[h>>2]|0)){h=43;break b}}if((h|0)==30){f=Na()|0;break}else if((h|0)==31){f=Na()|0;break}}else h=43;while(0);do if((h|0)==43){o=0;ha(183,b|0);b=o;o=0;if(b&1){f=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);i=A;return}while(0);d=c[z>>2]|0;e=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-e|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(f|0);e=c[D>>2]|0;if((e|0)!=(d|0))c[D>>2]=e+(~(((e+-3-d|0)>>>0)/3|0)*3|0);cj(d);Ya(f|0)}function _h(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=b+148|0;if((c[A>>2]|0)<=0)return;B=b+4576|0;C=b+4572|0;D=b+4580|0;z=0;while(1){w=z+-1|0;i=c[B>>2]|0;j=c[C>>2]|0;e=z+1|0;h=d[j+(z*3|0)>>0]|0;y=c[D>>2]|0;k=d[j+(w*3|0)>>0]|0;l=h-k|0;m=d[i+(w*3|0)>>0]|0;n=k-m|0;o=((((a[y+((d[j+(e*3|0)>>0]|0)-h)>>0]|0)*9|0)+(a[y+l>>0]|0)|0)*9|0)+(a[y+n>>0]|0)|0;g=d[j+(z*3|0)+1>>0]|0;p=d[j+(w*3|0)+1>>0]|0;q=g-p|0;r=d[i+(w*3|0)+1>>0]|0;s=p-r|0;t=((((a[y+((d[j+(e*3|0)+1>>0]|0)-g)>>0]|0)*9|0)+(a[y+q>>0]|0)|0)*9|0)+(a[y+s>>0]|0)|0;f=d[j+(z*3|0)+2>>0]|0;u=d[j+(w*3|0)+2>>0]|0;v=f-u|0;w=d[i+(w*3|0)+2>>0]|0;x=u-w|0;y=((((a[y+((d[j+(e*3|0)+2>>0]|0)-f)>>0]|0)*9|0)+(a[y+v>>0]|0)|0)*9|0)+(a[y+x>>0]|0)|0;if(!(t|o|y))e=($h(b,z,0)|0)+z|0;else{j=d[i+(z*3|0)>>0]|0;i=h-m>>31;if((i^n|0)>=0)if((i^l|0)<0)h=m;else h=m-k+h|0;j=ai(b,o,j,h,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+1>>0]|0;h=g-r>>31;if((h^s|0)>=0)if((h^q|0)<0)g=r;else g=r-p+g|0;h=ai(b,t,i,g,0)|0;i=d[(c[B>>2]|0)+(z*3|0)+2>>0]|0;g=f-w>>31;if((g^x|0)>=0)if((g^v|0)<0)f=w;else f=w-u+f|0;y=ai(b,y,i,f,0)|0;z=(c[B>>2]|0)+(z*3|0)|0;a[z>>0]=j;a[z+1>>0]=h;a[z+2>>0]=y}if((e|0)<(c[A>>2]|0))z=e;else break}return}function $h(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;l=i;i=i+16|0;n=l+3|0;o=l;h=b+4576|0;e=c[h>>2]|0;f=e+((d+-1|0)*3|0)|0;j=a[f>>0]|0;k=a[f+1>>0]|0;f=a[f+2>>0]|0;a[o>>0]=j;a[o+1>>0]=k;a[o+2>>0]=f;m=b+148|0;g=(c[m>>2]|0)-d|0;a[n>>0]=a[o>>0]|0;a[n+1>>0]=a[o+1>>0]|0;a[n+2>>0]=a[o+2>>0]|0;g=bi(b,n,e+(d*3|0)|0,g)|0;e=g+d|0;if((e|0)==(c[m>>2]|0)){o=g;i=l;return o|0}n=(c[b+4572>>2]|0)+(e*3|0)|0;d=a[n>>0]|0;m=a[n+1>>0]|0;n=a[n+2>>0]|0;o=c[h>>2]|0;p=b+4544|0;h=ci(b,p)|0;q=ci(b,p)|0;d=d&255;m=m&255;m=($(m-(k&255)>>31|1,q)|0)+m&255;n=n&255;n=($(n-(f&255)>>31|1,ci(b,p)|0)|0)+n&255;o=o+(e*3|0)|0;a[o>>0]=($(d-(j&255)>>31|1,h)|0)+d;a[o+1>>0]=m;a[o+2>>0]=n;o=b+4568|0;n=c[o>>2]|0;c[o>>2]=(n|0)<1?0:n+-1|0;o=g+1|0;i=l;return o|0}function ai(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0;s=e>>31;m=(s^e)-s|0;r=d+164+(m*12|0)+10|0;f=b[r>>1]|0;q=d+164+(m*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){i=5;while(1)if((f<>1]^s)-s+g|0;if((f&255|0)!=(f|0))f=f>>31&255^255;h=d+112|0;if((c[h>>2]|0)<8)ge(d);g=d+108|0;j=c[g>>2]|0;k=j>>>24;l=c[2832+(i<<11)+(k<<3)+4>>2]|0;if(!l){h=Jg(d)|0;if((h|0)<23){if(i)h=(Kg(d,i)|0)+(h<>31^h>>1;if((((h|0)>-1?h:0-h|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);e=o;o=0;if(e&1){e=Na()|0;La(f|0);Ya(e|0)}else lb(f|0,824,96)}}else{c[h>>2]=(c[h>>2]|0)-l;c[g>>2]=j<>2]|0}l=d+164+(m*12|0)+4|0;g=c[l>>2]|0;if(!i){d=b[r>>1]|0;i=d;h=(g<<1)+-1+(d<<16>>16)>>31^h}else i=b[r>>1]|0;j=i<<16>>16==64;d=j&1;k=g+h>>d;j=j?32:i<<16>>16;c[q>>2]=((h|0)>-1?h:0-h|0)+(c[q>>2]|0)>>d;g=j+1|0;b[r>>1]=g;i=g+k|0;if((i|0)<1){r=b[p>>1]|0;b[p>>1]=(r&65535)-(r<<16>>16>-128&1);r=(i|0)>(~j|0)?i:0-j|0;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}if((k|0)<=0){r=k;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}r=k-g|0;q=b[p>>1]|0;b[p>>1]=(q<<16>>16<127&1)+(q&65535);r=(r|0)>0?0:r;c[l>>2]=r;s=h^s;e=e>>>31;e=f+e|0;e=e+s|0;e=e&255;return e|0}function bi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4568|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;h=0;do{q=e+(h*3|0)|0;a[q>>0]=a[d>>0]|0;a[q+1>>0]=a[d+1>>0]|0;a[q+2>>0]=a[d+2>>0]|0;h=h+1|0}while((h|0)!=(g|0));return g|0}function ci(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+9|0;f=d[k>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;h=c[36476+(c[b+4568>>2]<<2)>>2]|0;f=Jg(b)|0;do if((f|0)<(22-h|0))if(!g){b=c[i>>2]|0;h=b+f|0;g=h&1;h=(g+h|0)/2|0;j=8;break}else{f=(Kg(b,g)|0)+(f<>2]|0;h=f+b|0;l=h&1;g=l;i=1;h=(l+h|0)/2|0;break}else{f=(Kg(b,8)|0)+1|0;b=c[i>>2]|0;h=f+b|0;i=h&1;h=(i+h|0)/2|0;if(!g){g=i;j=8}else{g=i;i=1}}while(0);if((j|0)==8)i=d[e+10>>0]<<1>>>0>=(d[k>>0]|0)>>>0;h=(g|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(f+1-b>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[k>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){l=g;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[k>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;l=l&255;l=l+1|0;l=l&255;a[k>>0]=l;return h|0}\n function Lp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+128|0;h=n;q=n+116|0;r=n+104|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,0,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(3,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=Uu(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function Mp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+240|0;h=n+8|0;a=n;q=n+204|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,0,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,23,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(3,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=Uu(h,k,r,s,d,e)|0;i=n;return s|0}return 0}function Np(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+352|0;u=z+312|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+316|0;t=z+80|0;k=z+84|0;y=z+76|0;x=z+72|0;v=z+68|0;w=z+64|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58898,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,c[q>>2]=c[d+8>>2],h[q+8>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<3)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(4,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(40,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Op(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;y=i;i=i+16|0;z=y;x=Is(j,44212)|0;v=Is(j,44368)|0;Cb[c[(c[v>>2]|0)+20>>2]&127](z,v);c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,j|0)|0;w=o;o=0;if(w&1)u=8;else{m=c[h>>2]|0;c[h>>2]=m+4;c[m>>2]=j;m=b+1|0;u=10}break}default:{m=b;u=10}}a:do if((u|0)==10){w=e;b:do if((w-m|0)>1?(a[m>>0]|0)==48:0){k=m+1|0;switch(a[k>>0]|0){case 88:case 120:break;default:{u=11;break b}}o=0;j=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,48)|0;t=o;o=0;if(t&1){u=8;break a}t=c[h>>2]|0;c[h>>2]=t+4;c[t>>2]=j;m=m+2|0;o=0;j=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,a[k>>0]|0)|0;t=o;o=0;if(t&1){u=8;break a}t=c[h>>2]|0;c[h>>2]=t+4;c[t>>2]=j;if(m>>>0>>0){j=m;while(1){k=a[j>>0]|0;o=0;l=ua(3)|0;t=o;o=0;if(t&1)break;o=0;k=ra(39,k<<24>>24|0,l|0)|0;t=o;o=0;if(t&1)break;if(!k){t=m;break b}j=j+1|0;if(j>>>0>=e>>>0){t=m;break b}}j=Na()|0;break a}else{t=m;j=m}}else u=11;while(0);c:do if((u|0)==11)if(m>>>0>>0){j=m;while(1){k=a[j>>0]|0;o=0;l=ua(3)|0;t=o;o=0;if(t&1)break;o=0;k=ra(40,k<<24>>24|0,l|0)|0;t=o;o=0;if(t&1)break;if(!k){t=m;break c}j=j+1|0;if(j>>>0>=e>>>0){t=m;break c}}j=Na()|0;break a}else{t=m;j=m}while(0);r=a[z>>0]|0;s=z+4|0;if(((r&1)==0?(r&255)>>>1:c[s>>2]|0)|0){if((t|0)!=(j|0)?(n=j+-1|0,t>>>0>>0):0){l=t;k=n;do{r=a[l>>0]|0;a[l>>0]=a[k>>0]|0;a[k>>0]=r;l=l+1|0;k=k+-1|0}while(l>>>0>>0)}o=0;n=ka(c[(c[v>>2]|0)+16>>2]|0,v|0)|0;r=o;o=0;if(r&1){u=8;break}p=z+8|0;q=z+1|0;d:do if(t>>>0>>0){k=0;l=0;r=t;while(1){m=a[((a[z>>0]&1)==0?q:c[p>>2]|0)+l>>0]|0;if(m<<24>>24>0&(k|0)==(m<<24>>24|0)){k=c[h>>2]|0;c[h>>2]=k+4;c[k>>2]=n;k=a[z>>0]|0;m=0;l=(l>>>0<(((k&1)==0?(k&255)>>>1:c[s>>2]|0)+-1|0)>>>0&1)+l|0}else m=k;o=0;k=ra(c[(c[x>>2]|0)+44>>2]|0,x|0,a[r>>0]|0)|0;A=o;o=0;if(A&1)break;A=c[h>>2]|0;c[h>>2]=A+4;c[A>>2]=k;r=r+1|0;if(r>>>0>=j>>>0)break d;else k=m+1|0}j=Na()|0;break a}while(0);k=f+(t-b<<2)|0;m=c[h>>2]|0;if((k|0)!=(m|0)){l=m+-4|0;if(k>>>0>>0){do{A=c[k>>2]|0;c[k>>2]=c[l>>2];c[l>>2]=A;k=k+4|0;l=l+-4|0}while(k>>>0>>0);n=x;k=m}else{n=x;k=m}}else n=x}else{o=0;va(c[(c[x>>2]|0)+48>>2]|0,x|0,t|0,j|0,c[h>>2]|0)|0;A=o;o=0;if(A&1){u=8;break}k=(c[h>>2]|0)+(j-t<<2)|0;c[h>>2]=k;n=x}e:do if(j>>>0>>0){while(1){k=a[j>>0]|0;if(k<<24>>24==46){l=j;break}o=0;l=ra(c[(c[n>>2]|0)+44>>2]|0,x|0,k|0)|0;A=o;o=0;if(A&1){u=4;break}A=c[h>>2]|0;k=A+4|0;c[h>>2]=k;c[A>>2]=l;j=j+1|0;if(j>>>0>=e>>>0)break e}if((u|0)==4){j=Na()|0;break a}o=0;j=ka(c[(c[v>>2]|0)+12>>2]|0,v|0)|0;A=o;o=0;if(A&1){u=8;break a}A=c[h>>2]|0;k=A+4|0;c[h>>2]=k;c[A>>2]=j;j=l+1|0}while(0);o=0;va(c[(c[x>>2]|0)+48>>2]|0,x|0,j|0,e|0,k|0)|0;A=o;o=0;if(A&1)u=8;else{A=(c[h>>2]|0)+(w-j<<2)|0;c[h>>2]=A;c[g>>2]=(d|0)==(e|0)?A:f+(d-b<<2)|0;Im(z);i=y;return}}while(0);if((u|0)==8)j=Na()|0;Im(z);Ya(j|0)}function Pp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+352|0;u=z+304|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+308|0;t=z+72|0;k=z+76|0;y=z+68|0;x=z+64|0;v=z+60|0;w=z+56|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58899,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,h[q>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<3)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(4,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(40,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Qp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+192|0;l=q;b=q+180|0;n=q+160|0;p=q+12|0;k=q+8|0;m=q+4|0;a[b>>0]=a[58901]|0;a[b+1>>0]=a[58902]|0;a[b+2>>0]=a[58903]|0;a[b+3>>0]=a[58904]|0;a[b+4>>0]=a[58905]|0;a[b+5>>0]=a[58906]|0;h=Xo()|0;c[l>>2]=g;b=Su(n,20,h,b,l)|0;g=n+b|0;h=vp(n,g,e)|0;j=jn(e)|0;c[k>>2]=j;o=0;k=ra(37,k|0,44212)|0;r=o;o=0;if(r&1){r=Na()|0;pm(j)|0;Ya(r|0)}else{pm(j)|0;Pb[c[(c[k>>2]|0)+48>>2]&31](k,n,g,p)|0;r=p+(b<<2)|0;c[m>>2]=c[d>>2];c[l>>2]=c[m>>2];r=Uu(l,p,(h|0)==(g|0)?r:p+(h-n<<2)|0,r,e,f)|0;i=q;return r|0}return 0}function Rp(e,f,g,h,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=i;i=i+32|0;w=C+16|0;v=C+12|0;z=C+8|0;x=C+4|0;y=C;n=jn(h)|0;c[z>>2]=n;o=0;z=ra(37,z|0,44220)|0;u=o;o=0;if(u&1){C=Na()|0;pm(n)|0;Ya(C|0)}pm(n)|0;c[j>>2]=0;u=z+8|0;n=c[f>>2]|0;a:do if((l|0)!=(m|0)){b:while(1){p=n;if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0;p=0}}else n=0;s=(n|0)==0;r=c[g>>2]|0;q=r;do if(r){if((c[r+12>>2]|0)==(c[r+16>>2]|0)?(Eb[c[(c[r>>2]|0)+36>>2]&127](r)|0)==-1:0){c[g>>2]=0;q=0;B=12;break}if(!s){B=13;break b}}else B=12;while(0);if((B|0)==12){B=0;if(s){B=13;break}else r=0}c:do if((Gb[c[(c[z>>2]|0)+36>>2]&63](z,a[l>>0]|0,0)|0)<<24>>24==37){r=l+1|0;if((r|0)==(m|0)){B=17;break b}t=Gb[c[(c[z>>2]|0)+36>>2]&63](z,a[r>>0]|0,0)|0;switch(t<<24>>24){case 48:case 69:{s=l+2|0;if((s|0)==(m|0)){B=20;break b}l=r;r=Gb[c[(c[z>>2]|0)+36>>2]&63](z,a[s>>0]|0,0)|0;n=t;break}default:{r=t;n=0}}t=c[(c[e>>2]|0)+36>>2]|0;c[x>>2]=p;c[y>>2]=q;c[v>>2]=c[x>>2];c[w>>2]=c[y>>2];c[f>>2]=Sb[t&15](e,v,w,h,j,k,r,n)|0;l=l+2|0}else{p=a[l>>0]|0;if(p<<24>>24>-1?(A=c[u>>2]|0,(b[A+(p<<24>>24<<1)>>1]&8192)!=0):0){do{l=l+1|0;if((l|0)==(m|0)){l=m;break}p=a[l>>0]|0;if(p<<24>>24<=-1)break}while((b[A+(p<<24>>24<<1)>>1]&8192)!=0);p=r;while(1){if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0}}else n=0;q=(n|0)==0;do if(r){if((c[r+12>>2]|0)!=(c[r+16>>2]|0))if(q){t=p;break}else break c;if((Eb[c[(c[r>>2]|0)+36>>2]&127](r)|0)!=-1)if(q^(p|0)==0){t=p;r=p;break}else break c;else{c[g>>2]=0;p=0;B=39;break}}else B=39;while(0);if((B|0)==39){B=0;if(q)break c;else{t=p;r=0}}q=n+12|0;p=c[q>>2]|0;s=n+16|0;if((p|0)==(c[s>>2]|0))p=Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0;else p=d[p>>0]|0;if((p&255)<<24>>24<=-1)break c;if(!(b[(c[u>>2]|0)+(p<<24>>24<<1)>>1]&8192))break c;p=c[q>>2]|0;if((p|0)==(c[s>>2]|0)){Eb[c[(c[n>>2]|0)+40>>2]&127](n)|0;p=t;continue}else{c[q>>2]=p+1;p=t;continue}}}q=n+12|0;p=c[q>>2]|0;r=n+16|0;if((p|0)==(c[r>>2]|0))p=Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0;else p=d[p>>0]|0;t=Lb[c[(c[z>>2]|0)+12>>2]&63](z,p&255)|0;if(t<<24>>24!=(Lb[c[(c[z>>2]|0)+12>>2]&63](z,a[l>>0]|0)|0)<<24>>24){B=57;break b}p=c[q>>2]|0;if((p|0)==(c[r>>2]|0))Eb[c[(c[n>>2]|0)+40>>2]&127](n)|0;else c[q>>2]=p+1;l=l+1|0}while(0);n=c[f>>2]|0;if(!((l|0)!=(m|0)&(c[j>>2]|0)==0))break a}if((B|0)==13){c[j>>2]=4;break}else if((B|0)==17){c[j>>2]=4;break}else if((B|0)==20){c[j>>2]=4;break}else if((B|0)==57){c[j>>2]=4;n=c[f>>2]|0;break}}while(0);if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)?(Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0)==-1:0){c[f>>2]=0;n=0}}else n=0;l=(n|0)==0;p=c[g>>2]|0;do if(p){if((c[p+12>>2]|0)==(c[p+16>>2]|0)?(Eb[c[(c[p>>2]|0)+36>>2]&127](p)|0)==-1:0){c[g>>2]=0;B=67;break}if(!l)B=68}else B=67;while(0);if((B|0)==67?l:0)B=68;if((B|0)==68)c[j>>2]=c[j>>2]|2;i=C;return n|0}function Sp(a){a=a|0;return}function Tp(a){a=a|0;cj(a);return}function Up(a){a=a|0;return 2}function Vp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Rp(a,k,j,e,f,g,58907,58915)|0;i=h;return a|0}function Wp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;j=i;i=i+16|0;k=j+12|0;l=j+8|0;n=j+4|0;m=j;o=b+8|0;o=Eb[c[(c[o>>2]|0)+20>>2]&127](o)|0;c[n>>2]=c[d>>2];c[m>>2]=c[e>>2];e=a[o>>0]|0;p=(e&1)==0;d=p?o+1|0:c[o+8>>2]|0;e=d+(p?(e&255)>>>1:c[o+4>>2]|0)|0;c[l>>2]=c[n>>2];c[k>>2]=c[m>>2];b=Rp(b,l,k,f,g,h,d,e)|0;i=j;return b|0}function Xp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44220)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];Yp(a,g+24|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function Yp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[c[a>>2]>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(xu(d,j,a,a+168|0,g,f,0)|0)-a|0;if((d|0)<168)c[b>>2]=((d|0)/12|0|0)%7|0;i=h;return}function Zp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44220)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];_p(a,g+16|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function _p(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[(c[a>>2]|0)+4>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(xu(d,j,a,a+288|0,g,f,0)|0)-a|0;if((d|0)<288)c[b>>2]=((d|0)/12|0|0)%12|0;i=h;return}function $p(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44220)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];aq(a,g+20|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function aq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,4)|0;if(!(c[f>>2]&4)){if((a|0)<69)a=a+2e3|0;else a=(a+-69|0)>>>0<31?a+1900|0:a;c[b>>2]=a+-1900}i=h;return}function bq(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=i;i=i+144|0;l=U+132|0;k=U+116|0;N=U+128|0;x=U+124|0;I=U+120|0;O=U+112|0;P=U+108|0;Q=U+104|0;R=U+100|0;S=U+96|0;T=U+92|0;m=U+88|0;n=U+84|0;p=U+80|0;q=U+76|0;r=U+72|0;s=U+68|0;t=U+64|0;u=U+60|0;v=U+56|0;w=U+52|0;y=U+48|0;z=U+44|0;A=U+40|0;B=U+36|0;C=U+32|0;D=U+28|0;E=U+24|0;F=U+20|0;G=U+16|0;H=U+12|0;J=U+8|0;K=U+4|0;L=U;c[g>>2]=0;M=jn(f)|0;c[N>>2]=M;o=0;N=ra(37,N|0,44220)|0;W=o;o=0;if(W&1){W=Na()|0;pm(M)|0;Ya(W|0)}pm(M)|0;do switch(j<<24>>24|0){case 65:case 97:{c[x>>2]=c[e>>2];c[l>>2]=c[x>>2];Yp(b,h+24|0,d,l,g,N);V=28;break}case 104:case 66:case 98:{c[I>>2]=c[e>>2];c[l>>2]=c[I>>2];_p(b,h+16|0,d,l,g,N);V=28;break}case 99:{V=b+8|0;V=Eb[c[(c[V>>2]|0)+12>>2]&127](V)|0;c[O>>2]=c[d>>2];c[P>>2]=c[e>>2];j=a[V>>0]|0;e=(j&1)==0;W=e?V+1|0:c[V+8>>2]|0;V=W+(e?(j&255)>>>1:c[V+4>>2]|0)|0;c[k>>2]=c[O>>2];c[l>>2]=c[P>>2];c[d>>2]=Rp(b,k,l,f,g,h,W,V)|0;V=28;break}case 101:case 100:{c[Q>>2]=c[e>>2];c[l>>2]=c[Q>>2];cq(b,h+12|0,d,l,g,N);V=28;break}case 68:{c[R>>2]=c[d>>2];c[S>>2]=c[e>>2];c[k>>2]=c[R>>2];c[l>>2]=c[S>>2];c[d>>2]=Rp(b,k,l,f,g,h,58915,58923)|0;V=28;break}case 70:{c[T>>2]=c[d>>2];c[m>>2]=c[e>>2];c[k>>2]=c[T>>2];c[l>>2]=c[m>>2];c[d>>2]=Rp(b,k,l,f,g,h,58923,58931)|0;V=28;break}case 72:{c[n>>2]=c[e>>2];c[l>>2]=c[n>>2];dq(b,h+8|0,d,l,g,N);V=28;break}case 73:{c[p>>2]=c[e>>2];c[l>>2]=c[p>>2];eq(b,h+8|0,d,l,g,N);V=28;break}case 106:{c[q>>2]=c[e>>2];c[l>>2]=c[q>>2];fq(b,h+28|0,d,l,g,N);V=28;break}case 109:{c[r>>2]=c[e>>2];c[l>>2]=c[r>>2];gq(b,h+16|0,d,l,g,N);V=28;break}case 77:{c[s>>2]=c[e>>2];c[l>>2]=c[s>>2];hq(b,h+4|0,d,l,g,N);V=28;break}case 116:case 110:{c[t>>2]=c[e>>2];c[l>>2]=c[t>>2];iq(b,d,l,g,N);V=28;break}case 112:{c[u>>2]=c[e>>2];c[l>>2]=c[u>>2];jq(b,h+8|0,d,l,g,N);V=28;break}case 114:{c[v>>2]=c[d>>2];c[w>>2]=c[e>>2];c[k>>2]=c[v>>2];c[l>>2]=c[w>>2];c[d>>2]=Rp(b,k,l,f,g,h,58931,58942)|0;V=28;break}case 82:{c[y>>2]=c[d>>2];c[z>>2]=c[e>>2];c[k>>2]=c[y>>2];c[l>>2]=c[z>>2];c[d>>2]=Rp(b,k,l,f,g,h,58942,58947)|0;V=28;break}case 83:{c[A>>2]=c[e>>2];c[l>>2]=c[A>>2];kq(b,h,d,l,g,N);V=28;break}case 84:{c[B>>2]=c[d>>2];c[C>>2]=c[e>>2];c[k>>2]=c[B>>2];c[l>>2]=c[C>>2];c[d>>2]=Rp(b,k,l,f,g,h,58947,58955)|0;V=28;break}case 119:{c[D>>2]=c[e>>2];c[l>>2]=c[D>>2];lq(b,h+24|0,d,l,g,N);V=28;break}case 120:{W=c[(c[b>>2]|0)+20>>2]|0;c[E>>2]=c[d>>2];c[F>>2]=c[e>>2];c[k>>2]=c[E>>2];c[l>>2]=c[F>>2];k=Db[W&63](b,k,l,f,g,h)|0;break}case 88:{V=b+8|0;V=Eb[c[(c[V>>2]|0)+24>>2]&127](V)|0;c[G>>2]=c[d>>2];c[H>>2]=c[e>>2];j=a[V>>0]|0;e=(j&1)==0;W=e?V+1|0:c[V+8>>2]|0;V=W+(e?(j&255)>>>1:c[V+4>>2]|0)|0;c[k>>2]=c[G>>2];c[l>>2]=c[H>>2];c[d>>2]=Rp(b,k,l,f,g,h,W,V)|0;V=28;break}case 121:{c[J>>2]=c[e>>2];c[l>>2]=c[J>>2];aq(b,h+20|0,d,l,g,N);V=28;break}case 89:{c[K>>2]=c[e>>2];c[l>>2]=c[K>>2];mq(b,h+20|0,d,l,g,N);V=28;break}case 37:{c[L>>2]=c[e>>2];c[l>>2]=c[L>>2];nq(b,d,l,g,N);V=28;break}default:{c[g>>2]=c[g>>2]|4;V=28}}while(0);if((V|0)==28)k=c[d>>2]|0;i=U;return k|0}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<31&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function dq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<24&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function eq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<12&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function fq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,3)|0;d=c[f>>2]|0;if((a|0)<366&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function gq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<13&(d&4|0)==0)c[b>>2]=a+-1;else c[f>>2]=d|4;i=h;return}function hq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<60&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function iq(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=h+8|0;a:while(1){h=c[e>>2]|0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;h=0;break}else{h=c[e>>2]|0;break}}else h=0;while(0);h=(h|0)==0;a=c[f>>2]|0;do if(a){if((c[a+12>>2]|0)!=(c[a+16>>2]|0))if(h)break;else break a;if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)!=-1)if(h)break;else break a;else{c[f>>2]=0;k=12;break}}else k=12;while(0);if((k|0)==12){k=0;if(h){a=0;break}else a=0}h=c[e>>2]|0;i=c[h+12>>2]|0;if((i|0)==(c[h+16>>2]|0))h=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=d[i>>0]|0;if((h&255)<<24>>24<=-1)break;if(!(b[(c[j>>2]|0)+(h<<24>>24<<1)>>1]&8192))break;h=c[e>>2]|0;a=h+12|0;i=c[a>>2]|0;if((i|0)==(c[h+16>>2]|0)){Eb[c[(c[h>>2]|0)+40>>2]&127](h)|0;continue}else{c[a>>2]=i+1;continue}}h=c[e>>2]|0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;h=0;break}else{h=c[e>>2]|0;break}}else h=0;while(0);h=(h|0)==0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0)?(Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1:0){c[f>>2]=0;k=32;break}if(!h)k=33}else k=32;while(0);if((k|0)==32?h:0)k=33;if((k|0)==33)c[g>>2]=c[g>>2]|2;return}function jq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+4|0;l=n;m=b+8|0;m=Eb[c[(c[m>>2]|0)+8>>2]&127](m)|0;b=a[m>>0]|0;if(!(b&1))j=(b&255)>>>1;else j=c[m+4>>2]|0;b=a[m+12>>0]|0;if(!(b&1))b=(b&255)>>>1;else b=c[m+16>>2]|0;do if((j|0)!=(0-b|0)){c[l>>2]=c[f>>2];c[k>>2]=c[l>>2];b=xu(e,k,m,m+24|0,h,g,0)|0;j=c[d>>2]|0;if((b|0)==(m|0)&(j|0)==12){c[d>>2]=0;break}if((j|0)<12&(b-m|0)==12)c[d>>2]=j+12}else c[g>>2]=c[g>>2]|4;while(0);i=n;return}function kq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<61&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function lq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,1)|0;d=c[f>>2]|0;if((a|0)<7&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function mq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Vu(d,a,f,g,4)|0;if(!(c[f>>2]&4))c[b>>2]=a+-1900;i=h;return}function nq(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;a=c[b>>2]|0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0))if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1){c[b>>2]=0;a=0;break}else{a=c[b>>2]|0;break}}else a=0;while(0);h=(a|0)==0;a=c[e>>2]|0;do if(a){if((c[a+12>>2]|0)==(c[a+16>>2]|0)?(Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1:0){c[e>>2]=0;j=11;break}if(h){i=a;j=13}else j=12}else j=11;while(0);if((j|0)==11)if(h)j=12;else{i=0;j=13}a:do if((j|0)==12)c[f>>2]=c[f>>2]|6;else if((j|0)==13){a=c[b>>2]|0;h=c[a+12>>2]|0;if((h|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=d[h>>0]|0;if((Gb[c[(c[g>>2]|0)+36>>2]&63](g,a&255,0)|0)<<24>>24!=37){c[f>>2]=c[f>>2]|4;break}a=c[b>>2]|0;h=a+12|0;g=c[h>>2]|0;if((g|0)==(c[a+16>>2]|0)){Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;a=c[b>>2]|0;if(!a)a=0;else j=21}else{c[h>>2]=g+1;j=21}do if((j|0)==21)if((c[a+12>>2]|0)==(c[a+16>>2]|0))if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1){c[b>>2]=0;a=0;break}else{a=c[b>>2]|0;break}while(0);a=(a|0)==0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0)?(Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1:0){c[e>>2]=0;j=30;break}if(a)break a}else j=30;while(0);if((j|0)==30?!a:0)break;c[f>>2]=c[f>>2]|2}while(0);return}function oq(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+32|0;s=x+16|0;r=x+12|0;v=x+8|0;t=x+4|0;u=x;k=jn(e)|0;c[v>>2]=k;o=0;v=ra(37,v|0,44212)|0;q=o;o=0;if(q&1){x=Na()|0;pm(k)|0;Ya(x|0)}pm(k)|0;c[f>>2]=0;k=c[b>>2]|0;a:do if((h|0)!=(j|0)){b:while(1){m=k;if(k){l=c[k+12>>2]|0;if((l|0)==(c[k+16>>2]|0))l=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;if((l|0)==-1){c[b>>2]=0;k=0;p=1;q=0}else{p=0;q=m}}else{k=0;p=1;q=m}n=c[d>>2]|0;l=n;do if(n){m=c[n+12>>2]|0;if((m|0)==(c[n+16>>2]|0))m=Eb[c[(c[n>>2]|0)+36>>2]&127](n)|0;else m=c[m>>2]|0;if((m|0)!=-1)if(p)break;else{w=17;break b}else{c[d>>2]=0;l=0;w=15;break}}else w=15;while(0);if((w|0)==15){w=0;if(p){w=17;break}else n=0}c:do if((Gb[c[(c[v>>2]|0)+52>>2]&63](v,c[h>>2]|0,0)|0)<<24>>24==37){m=h+4|0;if((m|0)==(j|0)){w=21;break b}p=Gb[c[(c[v>>2]|0)+52>>2]&63](v,c[m>>2]|0,0)|0;switch(p<<24>>24){case 48:case 69:{n=h+8|0;if((n|0)==(j|0)){w=24;break b}h=m;m=Gb[c[(c[v>>2]|0)+52>>2]&63](v,c[n>>2]|0,0)|0;k=p;break}default:{m=p;k=0}}p=c[(c[a>>2]|0)+36>>2]|0;c[t>>2]=q;c[u>>2]=l;c[r>>2]=c[t>>2];c[s>>2]=c[u>>2];c[b>>2]=Sb[p&15](a,r,s,e,f,g,m,k)|0;h=h+8|0}else{if(!(Gb[c[(c[v>>2]|0)+12>>2]&63](v,8192,c[h>>2]|0)|0)){m=k+12|0;l=c[m>>2]|0;n=k+16|0;if((l|0)==(c[n>>2]|0))l=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;q=Lb[c[(c[v>>2]|0)+28>>2]&63](v,l)|0;if((q|0)!=(Lb[c[(c[v>>2]|0)+28>>2]&63](v,c[h>>2]|0)|0)){w=61;break b}l=c[m>>2]|0;if((l|0)==(c[n>>2]|0))Eb[c[(c[k>>2]|0)+40>>2]&127](k)|0;else c[m>>2]=l+4;h=h+4|0;break}do{h=h+4|0;if((h|0)==(j|0)){h=j;break}}while(Gb[c[(c[v>>2]|0)+12>>2]&63](v,8192,c[h>>2]|0)|0);l=n;p=n;while(1){if(k){m=c[k+12>>2]|0;if((m|0)==(c[k+16>>2]|0))m=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else m=c[m>>2]|0;if((m|0)==-1){c[b>>2]=0;n=1;k=0}else n=0}else{n=1;k=0}do if(p){m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0))m=Eb[c[(c[p>>2]|0)+36>>2]&127](p)|0;else m=c[m>>2]|0;if((m|0)!=-1)if(n^(l|0)==0){q=l;p=l;break}else break c;else{c[d>>2]=0;l=0;w=44;break}}else w=44;while(0);if((w|0)==44){w=0;if(n)break c;else{q=l;p=0}}m=k+12|0;l=c[m>>2]|0;n=k+16|0;if((l|0)==(c[n>>2]|0))l=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else l=c[l>>2]|0;if(!(Gb[c[(c[v>>2]|0)+12>>2]&63](v,8192,l)|0))break c;l=c[m>>2]|0;if((l|0)==(c[n>>2]|0)){Eb[c[(c[k>>2]|0)+40>>2]&127](k)|0;l=q;continue}else{c[m>>2]=l+4;l=q;continue}}}while(0);k=c[b>>2]|0;if(!((h|0)!=(j|0)&(c[f>>2]|0)==0))break a}if((w|0)==17){c[f>>2]=4;break}else if((w|0)==21){c[f>>2]=4;break}else if((w|0)==24){c[f>>2]=4;break}else if((w|0)==61){c[f>>2]=4;k=c[b>>2]|0;break}}while(0);if(k){h=c[k+12>>2]|0;if((h|0)==(c[k+16>>2]|0))h=Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0;else h=c[h>>2]|0;if((h|0)==-1){c[b>>2]=0;k=0;m=1}else m=0}else{k=0;m=1}h=c[d>>2]|0;do if(h){l=c[h+12>>2]|0;if((l|0)==(c[h+16>>2]|0))h=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=c[l>>2]|0;if((h|0)!=-1)if(m)break;else{w=76;break}else{c[d>>2]=0;w=74;break}}else w=74;while(0);if((w|0)==74?m:0)w=76;if((w|0)==76)c[f>>2]=c[f>>2]|2;i=x;return k|0}function pq(a){a=a|0;return}function qq(a){a=a|0;cj(a);return}function rq(a){a=a|0;return 2}function sq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=oq(a,k,j,e,f,g,44788,44820)|0;i=h;return a|0}function tq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;j=i;i=i+16|0;k=j+12|0;l=j+8|0;n=j+4|0;m=j;q=b+8|0;q=Eb[c[(c[q>>2]|0)+20>>2]&127](q)|0;c[n>>2]=c[d>>2];c[m>>2]=c[e>>2];o=a[q>>0]|0;p=(o&1)==0;e=q+4|0;d=p?e:c[q+8>>2]|0;e=d+((p?(o&255)>>>1:c[e>>2]|0)<<2)|0;c[l>>2]=c[n>>2];c[k>>2]=c[m>>2];b=oq(b,l,k,f,g,h,d,e)|0;i=j;return b|0}function uq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44212)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];vq(a,g+24|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function vq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[c[a>>2]>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(Iu(d,j,a,a+168|0,g,f,0)|0)-a|0;if((d|0)<168)c[b>>2]=((d|0)/12|0|0)%7|0;i=h;return}function wq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44212)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];xq(a,g+16|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function xq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;h=i;i=i+16|0;j=h+4|0;k=h;a=a+8|0;a=Eb[c[(c[a>>2]|0)+4>>2]&127](a)|0;c[k>>2]=c[e>>2];c[j>>2]=c[k>>2];d=(Iu(d,j,a,a+288|0,g,f,0)|0)-a|0;if((d|0)<288)c[b>>2]=((d|0)/12|0|0)%12|0;i=h;return}function yq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l+4|0;k=l;e=jn(e)|0;c[h>>2]=e;o=0;h=ra(37,h|0,44212)|0;m=o;o=0;if(m&1){m=Na()|0;pm(e)|0;Ya(m|0)}else{pm(e)|0;c[k>>2]=c[d>>2];c[j>>2]=c[k>>2];zq(a,g+20|0,b,j,f,h);i=l;return c[b>>2]|0}return 0}function zq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,4)|0;if(!(c[f>>2]&4)){if((a|0)<69)a=a+2e3|0;else a=(a+-69|0)>>>0<31?a+1900|0:a;c[b>>2]=a+-1900}i=h;return}function Aq(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=i;i=i+144|0;l=U+132|0;k=U+116|0;N=U+128|0;x=U+124|0;I=U+120|0;O=U+112|0;P=U+108|0;Q=U+104|0;R=U+100|0;S=U+96|0;T=U+92|0;m=U+88|0;n=U+84|0;p=U+80|0;q=U+76|0;r=U+72|0;s=U+68|0;t=U+64|0;u=U+60|0;v=U+56|0;w=U+52|0;y=U+48|0;z=U+44|0;A=U+40|0;B=U+36|0;C=U+32|0;D=U+28|0;E=U+24|0;F=U+20|0;G=U+16|0;H=U+12|0;J=U+8|0;K=U+4|0;L=U;c[g>>2]=0;M=jn(f)|0;c[N>>2]=M;o=0;N=ra(37,N|0,44212)|0;W=o;o=0;if(W&1){W=Na()|0;pm(M)|0;Ya(W|0)}pm(M)|0;do switch(j<<24>>24|0){case 65:case 97:{c[x>>2]=c[e>>2];c[l>>2]=c[x>>2];vq(b,h+24|0,d,l,g,N);V=28;break}case 104:case 66:case 98:{c[I>>2]=c[e>>2];c[l>>2]=c[I>>2];xq(b,h+16|0,d,l,g,N);V=28;break}case 99:{W=b+8|0;W=Eb[c[(c[W>>2]|0)+12>>2]&127](W)|0;c[O>>2]=c[d>>2];c[P>>2]=c[e>>2];j=a[W>>0]|0;e=(j&1)==0;V=W+4|0;W=e?V:c[W+8>>2]|0;V=W+((e?(j&255)>>>1:c[V>>2]|0)<<2)|0;c[k>>2]=c[O>>2];c[l>>2]=c[P>>2];c[d>>2]=oq(b,k,l,f,g,h,W,V)|0;V=28;break}case 101:case 100:{c[Q>>2]=c[e>>2];c[l>>2]=c[Q>>2];Bq(b,h+12|0,d,l,g,N);V=28;break}case 68:{c[R>>2]=c[d>>2];c[S>>2]=c[e>>2];c[k>>2]=c[R>>2];c[l>>2]=c[S>>2];c[d>>2]=oq(b,k,l,f,g,h,44820,44852)|0;V=28;break}case 70:{c[T>>2]=c[d>>2];c[m>>2]=c[e>>2];c[k>>2]=c[T>>2];c[l>>2]=c[m>>2];c[d>>2]=oq(b,k,l,f,g,h,44852,44884)|0;V=28;break}case 72:{c[n>>2]=c[e>>2];c[l>>2]=c[n>>2];Cq(b,h+8|0,d,l,g,N);V=28;break}case 73:{c[p>>2]=c[e>>2];c[l>>2]=c[p>>2];Dq(b,h+8|0,d,l,g,N);V=28;break}case 106:{c[q>>2]=c[e>>2];c[l>>2]=c[q>>2];Eq(b,h+28|0,d,l,g,N);V=28;break}case 109:{c[r>>2]=c[e>>2];c[l>>2]=c[r>>2];Fq(b,h+16|0,d,l,g,N);V=28;break}case 77:{c[s>>2]=c[e>>2];c[l>>2]=c[s>>2];Gq(b,h+4|0,d,l,g,N);V=28;break}case 116:case 110:{c[t>>2]=c[e>>2];c[l>>2]=c[t>>2];Hq(b,d,l,g,N);V=28;break}case 112:{c[u>>2]=c[e>>2];c[l>>2]=c[u>>2];Iq(b,h+8|0,d,l,g,N);V=28;break}case 114:{c[v>>2]=c[d>>2];c[w>>2]=c[e>>2];c[k>>2]=c[v>>2];c[l>>2]=c[w>>2];c[d>>2]=oq(b,k,l,f,g,h,44884,44928)|0;V=28;break}case 82:{c[y>>2]=c[d>>2];c[z>>2]=c[e>>2];c[k>>2]=c[y>>2];c[l>>2]=c[z>>2];c[d>>2]=oq(b,k,l,f,g,h,44928,44948)|0;V=28;break}case 83:{c[A>>2]=c[e>>2];c[l>>2]=c[A>>2];Jq(b,h,d,l,g,N);V=28;break}case 84:{c[B>>2]=c[d>>2];c[C>>2]=c[e>>2];c[k>>2]=c[B>>2];c[l>>2]=c[C>>2];c[d>>2]=oq(b,k,l,f,g,h,44948,44980)|0;V=28;break}case 119:{c[D>>2]=c[e>>2];c[l>>2]=c[D>>2];Kq(b,h+24|0,d,l,g,N);V=28;break}case 120:{W=c[(c[b>>2]|0)+20>>2]|0;c[E>>2]=c[d>>2];c[F>>2]=c[e>>2];c[k>>2]=c[E>>2];c[l>>2]=c[F>>2];k=Db[W&63](b,k,l,f,g,h)|0;break}case 88:{W=b+8|0;W=Eb[c[(c[W>>2]|0)+24>>2]&127](W)|0;c[G>>2]=c[d>>2];c[H>>2]=c[e>>2];j=a[W>>0]|0;e=(j&1)==0;V=W+4|0;W=e?V:c[W+8>>2]|0;V=W+((e?(j&255)>>>1:c[V>>2]|0)<<2)|0;c[k>>2]=c[G>>2];c[l>>2]=c[H>>2];c[d>>2]=oq(b,k,l,f,g,h,W,V)|0;V=28;break}case 121:{c[J>>2]=c[e>>2];c[l>>2]=c[J>>2];zq(b,h+20|0,d,l,g,N);V=28;break}case 89:{c[K>>2]=c[e>>2];c[l>>2]=c[K>>2];Lq(b,h+20|0,d,l,g,N);V=28;break}case 37:{c[L>>2]=c[e>>2];c[l>>2]=c[L>>2];Mq(b,d,l,g,N);V=28;break}default:{c[g>>2]=c[g>>2]|4;V=28}}while(0);if((V|0)==28)k=c[d>>2]|0;i=U;return k|0}function Bq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<31&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<24&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Dq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a+-1|0)>>>0<12&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Eq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,3)|0;d=c[f>>2]|0;if((a|0)<366&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Fq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<13&(d&4|0)==0)c[b>>2]=a+-1;else c[f>>2]=d|4;i=h;return}function Gq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<60&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Hq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:while(1){a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);g=c[d>>2]|0;do if(g){a=c[g+12>>2]|0;if((a|0)==(c[g+16>>2]|0))a=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(h){h=g;break}else{h=g;break a}else{c[d>>2]=0;i=15;break}}else i=15;while(0);if((i|0)==15){i=0;if(h){h=0;break}else h=0}a=c[b>>2]|0;g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if(!(Gb[c[(c[f>>2]|0)+12>>2]&63](f,8192,a)|0))break;a=c[b>>2]|0;g=a+12|0;h=c[g>>2]|0;if((h|0)==(c[a+16>>2]|0)){Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;continue}else{c[g>>2]=h+4;continue}}a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){a=c[h+12>>2]|0;if((a|0)==(c[h+16>>2]|0))a=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(g)break;else{i=39;break}else{c[d>>2]=0;i=37;break}}else i=37;while(0);if((i|0)==37?g:0)i=39;if((i|0)==39)c[e>>2]=c[e>>2]|2;return}function Iq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+4|0;l=n;m=b+8|0;m=Eb[c[(c[m>>2]|0)+8>>2]&127](m)|0;b=a[m>>0]|0;if(!(b&1))j=(b&255)>>>1;else j=c[m+4>>2]|0;b=a[m+12>>0]|0;if(!(b&1))b=(b&255)>>>1;else b=c[m+16>>2]|0;do if((j|0)!=(0-b|0)){c[l>>2]=c[f>>2];c[k>>2]=c[l>>2];b=Iu(e,k,m,m+24|0,h,g,0)|0;j=c[d>>2]|0;if((b|0)==(m|0)&(j|0)==12){c[d>>2]=0;break}if((j|0)<12&(b-m|0)==12)c[d>>2]=j+12}else c[g>>2]=c[g>>2]|4;while(0);i=n;return}function Jq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,2)|0;d=c[f>>2]|0;if((a|0)<61&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Kq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,1)|0;d=c[f>>2]|0;if((a|0)<7&(d&4|0)==0)c[b>>2]=a;else c[f>>2]=d|4;i=h;return}function Lq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;i=i+16|0;a=h+4|0;j=h;c[j>>2]=c[e>>2];c[a>>2]=c[j>>2];a=Wu(d,a,f,g,4)|0;if(!(c[f>>2]&4))c[b>>2]=a+-1900;i=h;return}function Mq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a=c[b>>2]|0;do if(a){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);g=c[d>>2]|0;do if(g){a=c[g+12>>2]|0;if((a|0)==(c[g+16>>2]|0))a=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(h){i=g;j=17;break}else{j=16;break}else{c[d>>2]=0;j=14;break}}else j=14;while(0);if((j|0)==14)if(h)j=16;else{i=0;j=17}a:do if((j|0)==16)c[e>>2]=c[e>>2]|6;else if((j|0)==17){a=c[b>>2]|0;g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((Gb[c[(c[f>>2]|0)+52>>2]&63](f,a,0)|0)<<24>>24!=37){c[e>>2]=c[e>>2]|4;break}a=c[b>>2]|0;g=a+12|0;h=c[g>>2]|0;if((h|0)==(c[a+16>>2]|0)){Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;a=c[b>>2]|0;if(!a)g=1;else j=25}else{c[g>>2]=h+4;j=25}do if((j|0)==25){g=c[a+12>>2]|0;if((g|0)==(c[a+16>>2]|0))a=Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0;else a=c[g>>2]|0;if((a|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}while(0);do if(i){a=c[i+12>>2]|0;if((a|0)==(c[i+16>>2]|0))a=Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0;else a=c[a>>2]|0;if((a|0)!=-1)if(g)break a;else break;else{c[d>>2]=0;j=37;break}}else j=37;while(0);if((j|0)==37?!g:0)break;c[e>>2]=c[e>>2]|2}while(0);return}function Nq(a){a=a|0;Oq(a+8|0);return}function Oq(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;o=0;d=ua(3)|0;e=o;o=0;do if(!(e&1)){if((b|0)!=(d|0)?(o=0,ha(188,c[a>>2]|0),e=o,o=0,e&1):0)break;return}while(0);e=Na(0)|0;ec(e)}function Pq(a){a=a|0;Oq(a+8|0);cj(a);return}function Qq(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0;l=i;i=i+112|0;k=l+4|0;e=l;c[e>>2]=k+100;Rq(b+8|0,k,e,g,h,j);g=c[e>>2]|0;e=c[d>>2]|0;if((k|0)!=(g|0))do{j=a[k>>0]|0;do if(e){f=e+24|0;h=c[f>>2]|0;if((h|0)==(c[e+28>>2]|0)){d=(Lb[c[(c[e>>2]|0)+52>>2]&63](e,j&255)|0)==-1;e=d?0:e;break}else{c[f>>2]=h+1;a[h>>0]=j;break}}else e=0;while(0);k=k+1|0}while((k|0)!=(g|0));i=l;return e|0}function Rq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;a[l>>0]=37;j=l+1|0;a[j>>0]=g;k=l+2|0;a[k>>0]=h;a[l+3>>0]=0;if(h<<24>>24){a[j>>0]=h;a[k>>0]=g}c[e>>2]=d+(Ra(d|0,(c[e>>2]|0)-d|0,l|0,f|0,c[b>>2]|0)|0);i=m;return}function Sq(a){a=a|0;Oq(a+8|0);return}function Tq(a){a=a|0;Oq(a+8|0);cj(a);return}function Uq(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;j=i;i=i+416|0;e=j+8|0;d=j;c[d>>2]=e+400;Vq(a+8|0,e,d,f,g,h);a=c[d>>2]|0;d=c[b>>2]|0;if((e|0)!=(a|0)){f=e;do{e=c[f>>2]|0;if(!d)d=0;else{g=d+24|0;h=c[g>>2]|0;if((h|0)==(c[d+28>>2]|0))e=Lb[c[(c[d>>2]|0)+52>>2]&63](d,e)|0;else{c[g>>2]=h+4;c[h>>2]=e}d=(e|0)==-1?0:d}f=f+4|0}while((f|0)!=(a|0))}i=j;return d|0}function Vq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+128|0;l=h+16|0;m=h+12|0;j=h;k=h+8|0;c[m>>2]=l+100;Rq(a,l,m,e,f,g);f=j;c[f>>2]=0;c[f+4>>2]=0;c[k>>2]=l;f=(c[d>>2]|0)-b>>2;g=qk(c[a>>2]|0)|0;o=0;f=va(18,b|0,k|0,f|0,j|0)|0;a=o;o=0;if(a&1){f=Na()|0;if((g|0)!=0?(o=0,ka(75,g|0)|0,m=o,o=0,m&1):0){m=Na(0)|0;ec(m)}Ya(f|0)}if((g|0)!=0?(o=0,ka(75,g|0)|0,m=o,o=0,m&1):0){m=Na(0)|0;ec(m)}if((f|0)==-1)Rr(58955);else{c[d>>2]=b+(f<<2);i=h;return}}function Wq(a){a=a|0;return}function Xq(a){a=a|0;cj(a);return}function Yq(a){a=a|0;return 127}function Zq(a){a=a|0;return 127}function _q(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function $q(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function ar(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function br(a,b){a=a|0;b=b|0;Hm(a,1,45);return}function cr(a){a=a|0;return 0}function dr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function er(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function fr(a){a=a|0;return}function gr(a){a=a|0;cj(a);return}function hr(a){a=a|0;return 127}function ir(a){a=a|0;return 127}function jr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function kr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function lr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function mr(a,b){a=a|0;b=b|0;Hm(a,1,45);return}function nr(a){a=a|0;return 0}function or(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function pr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function qr(a){a=a|0;return}function rr(a){a=a|0;cj(a);return}function sr(a){a=a|0;return 2147483647}function tr(a){a=a|0;return 2147483647}function ur(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function vr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function wr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function xr(a,b){a=a|0;b=b|0;Vm(a,1,45);return}function yr(a){a=a|0;return 0}function zr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Ar(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Br(a){a=a|0;return}function Cr(a){a=a|0;cj(a);return}function Dr(a){a=a|0;return 2147483647}function Er(a){a=a|0;return 2147483647}function Fr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Gr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Hr(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Ir(a,b){a=a|0;b=b|0;Vm(a,1,45);return}function Jr(a){a=a|0;return 0}function Kr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Lr(b,c){b=b|0;c=c|0;a[b>>0]=2;a[b+1>>0]=3;a[b+2>>0]=0;a[b+3>>0]=4;return}function Mr(a){a=a|0;return}function Nr(a){a=a|0;cj(a);return}function Or(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;B=i;i=i+240|0;z=B+24|0;A=B;b=B+136|0;D=B+16|0;y=B+12|0;C=B+8|0;p=B+134|0;l=B+4|0;x=B+124|0;c[D>>2]=b;E=D+4|0;c[E>>2]=189;m=b+100|0;o=0;k=ka(68,g|0)|0;w=o;o=0;if(!(w&1)){c[C>>2]=k;o=0;b=ra(37,C|0,44220)|0;w=o;o=0;a:do if(!(w&1)?(a[p>>0]=0,c[l>>2]=c[e>>2],n=c[g+4>>2]|0,o=0,c[z>>2]=c[l>>2],n=la(1,d|0,z|0,f|0,C|0,n|0,h|0,p|0,b|0,D|0,y|0,m|0)|0,w=o,o=0,!(w&1)):0){b:do if(n){o=0;va(c[(c[b>>2]|0)+32>>2]|0,b|0,58976,58986,x|0)|0;w=o;o=0;if(w&1){G=10;break a}l=c[y>>2]|0;m=c[D>>2]|0;b=l-m|0;if((b|0)>98){b=Fl(b+2|0)|0;k=b;if(!b){o=0;xa(6);w=o;o=0;if(!(w&1)){b=0;G=13}}else G=13}else{k=0;b=z;G=13}do if((G|0)==13){if(a[p>>0]|0){a[b>>0]=45;b=b+1|0}v=x+10|0;w=x;if(m>>>0>>0){n=x+1|0;f=n+1|0;g=f+1|0;p=g+1|0;q=p+1|0;r=q+1|0;s=r+1|0;t=s+1|0;u=t+1|0;do{l=a[m>>0]|0;do if((a[x>>0]|0)!=l<<24>>24)if((a[n>>0]|0)!=l<<24>>24)if((a[f>>0]|0)!=l<<24>>24)if((a[g>>0]|0)!=l<<24>>24)if((a[p>>0]|0)==l<<24>>24)l=p;else{if((a[q>>0]|0)==l<<24>>24){l=q;break}if((a[r>>0]|0)==l<<24>>24){l=r;break}if((a[s>>0]|0)==l<<24>>24){l=s;break}if((a[t>>0]|0)==l<<24>>24){l=t;break}l=(a[u>>0]|0)==l<<24>>24?u:v}else l=g;else l=f;else l=n;else l=x;while(0);a[b>>0]=a[58976+(l-w)>>0]|0;m=m+1|0;b=b+1|0}while(m>>>0<(c[y>>2]|0)>>>0)}a[b>>0]=0;c[A>>2]=j;if(($k(z,58987,A)|0)!=1?(o=0,ha(190,58991),j=o,o=0,j&1):0)break;if(k)Gl(k);break b}while(0);b=Na()|0;if(!k){l=b;k=D;break a}Gl(k);l=b;k=D;break a}while(0);b=c[d>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}if((b|0)==-1){c[d>>2]=0;b=0;break}else{b=c[d>>2]|0;break}}}else b=0;while(0);k=(b|0)==0;b=c[e>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}if((b|0)==-1){c[e>>2]=0;G=37;break}}if(!k)G=38}else G=37;while(0);if((G|0)==37?k:0)G=38;if((G|0)==38)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(c[C>>2]|0)|0;b=c[D>>2]|0;c[D>>2]=0;if((b|0)!=0?(o=0,ha(c[E>>2]|0,b|0),G=o,o=0,G&1):0){G=Na(0)|0;ec(G)}i=B;return k|0}else G=10;while(0);if((G|0)==10){l=Na()|0;k=D}pm(c[C>>2]|0)|0;b=c[k>>2]|0;c[k>>2]=0;if(!b)F=l;else{k=c[E>>2]|0;G=45}}else{l=Na()|0;c[D>>2]=0;k=189;G=45}if((G|0)==45){o=0;ha(k|0,b|0);G=o;o=0;if(G&1){G=Na(0)|0;ec(G)}else F=l}Ya(F|0);return 0}function Pr(a){a=a|0;return}function Qr(e,f,g,h,j,k,l,m,n,p,q){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;ba=i;i=i+512|0;P=ba+88|0;u=ba+96|0;da=ba+80|0;T=ba+72|0;S=ba+68|0;U=ba+500|0;Q=ba+497|0;V=ba+496|0;Y=ba+56|0;aa=ba+44|0;_=ba+32|0;Z=ba+20|0;$=ba+8|0;R=ba+4|0;X=ba;c[P>>2]=q;c[da>>2]=u;ca=da+4|0;c[ca>>2]=189;c[T>>2]=u;c[S>>2]=u+400;c[Y>>2]=0;c[Y+4>>2]=0;c[Y+8>>2]=0;c[aa>>2]=0;c[aa+4>>2]=0;c[aa+8>>2]=0;c[_>>2]=0;c[_+4>>2]=0;c[_+8>>2]=0;c[Z>>2]=0;c[Z+4>>2]=0;c[Z+8>>2]=0;c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;o=0;qa(1,g|0,h|0,U|0,Q|0,V|0,Y|0,aa|0,_|0,Z|0,R|0);O=o;o=0;a:do if(O&1)m=Na()|0;else{c[p>>2]=c[n>>2];I=m+8|0;J=_+4|0;K=Z+4|0;L=Z+8|0;M=Z+1|0;N=_+8|0;O=_+1|0;z=(j&512|0)!=0;A=aa+8|0;B=aa+1|0;C=aa+4|0;D=$+4|0;E=$+8|0;F=$+1|0;G=U+3|0;H=Y+4|0;y=0;t=0;b:while(1){q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);q=(q|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(q){x=m;break}else{W=235;break b}o=0;g=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=24;break b}if((g|0)!=-1)if(q){x=m;break}else{W=235;break b}else{c[f>>2]=0;W=15;break}}else W=15;while(0);if((W|0)==15){W=0;if(q){W=235;break}else x=0}c:do switch(a[U+y>>0]|0){case 1:{if((y|0)!=3){q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;W=o;o=0;if(W&1){W=24;break b}}else q=d[m>>0]|0;if((q&255)<<24>>24<=-1){W=40;break b}if(!(b[(c[I>>2]|0)+(q<<24>>24<<1)>>1]&8192)){W=40;break b}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;W=o;o=0;if(W&1){W=24;break b}}else{c[m>>2]=g+1;q=d[g>>0]|0}o=0;ia(67,$|0,q&255|0);W=o;o=0;if(W&1){W=24;break b}else{q=x;h=x;W=42}}break}case 0:{if((y|0)!=3){q=x;h=x;W=42}break}case 3:{m=a[_>>0]|0;q=(m&1)==0?(m&255)>>>1:c[J>>2]|0;g=a[Z>>0]|0;h=(g&1)==0?(g&255)>>>1:c[K>>2]|0;if((q|0)!=(0-h|0)){if(!q){q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}m=a[Z>>0]|0}else{q=d[m>>0]|0;m=g}if((q&255)<<24>>24!=(a[((m&1)==0?M:c[L>>2]|0)>>0]|0))break c;q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;a[l>>0]=1;x=a[Z>>0]|0;t=((x&1)==0?(x&255)>>>1:c[K>>2]|0)>>>0>1?Z:t;break c}j=c[e>>2]|0;r=c[j+12>>2]|0;g=c[j+16>>2]|0;q=(r|0)==(g|0);if(!h){if(q){o=0;q=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}m=a[_>>0]|0}else q=d[r>>0]|0;if((q&255)<<24>>24!=(a[((m&1)==0?O:c[N>>2]|0)>>0]|0)){a[l>>0]=1;break c}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;x=a[_>>0]|0;t=((x&1)==0?(x&255)>>>1:c[J>>2]|0)>>>0>1?_:t;break c}if(q){o=0;q=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}g=c[e>>2]|0;m=a[_>>0]|0;j=g;r=c[g+12>>2]|0;g=c[g+16>>2]|0}else q=d[r>>0]|0;h=j+12|0;g=(r|0)==(g|0);if((q&255)<<24>>24==(a[((m&1)==0?O:c[N>>2]|0)>>0]|0)){if(g){o=0;ka(c[(c[j>>2]|0)+40>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[h>>2]=r+1;x=a[_>>0]|0;t=((x&1)==0?(x&255)>>>1:c[J>>2]|0)>>>0>1?_:t;break c}if(g){o=0;q=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=24;break b}}else q=d[r>>0]|0;if((q&255)<<24>>24!=(a[((a[Z>>0]&1)==0?M:c[L>>2]|0)>>0]|0)){W=104;break b}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;a[l>>0]=1;x=a[Z>>0]|0;t=((x&1)==0?(x&255)>>>1:c[K>>2]|0)>>>0>1?Z:t}break}case 2:{if(!(y>>>0<2|(t|0)!=0)?!(z|(y|0)==2&(a[G>>0]|0)!=0):0){t=0;break c}v=a[aa>>0]|0;q=(v&1)==0;w=c[A>>2]|0;g=q?B:w;s=g;d:do if((y|0)!=0?(d[U+(y+-1)>>0]|0)<2:0){r=q?(v&255)>>>1:c[C>>2]|0;h=g+r|0;j=c[I>>2]|0;e:do if(!r)m=s;else{r=g;m=s;do{q=a[r>>0]|0;if(q<<24>>24<=-1)break e;if(!(b[j+(q<<24>>24<<1)>>1]&8192))break e;r=r+1|0;m=r}while((r|0)!=(h|0))}while(0);h=m-s|0;j=a[$>>0]|0;q=(j&1)==0;j=q?(j&255)>>>1:c[D>>2]|0;if(j>>>0>=h>>>0){q=q?F:c[E>>2]|0;r=q+j|0;if((m|0)!=(s|0)){q=q+(j-h)|0;while(1){if((a[q>>0]|0)!=(a[g>>0]|0)){m=s;break d}q=q+1|0;if((q|0)==(r|0))break;else g=g+1|0}}}else m=s}else m=s;while(0);q=(v&1)==0;q=(q?B:w)+(q?(v&255)>>>1:c[C>>2]|0)|0;f:do if((m|0)!=(q|0)){j=x;h=x;q=m;while(1){m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=21;break b}if((m|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}}else m=0;while(0);g=(m|0)==0;do if(h){if((c[h+12>>2]|0)!=(c[h+16>>2]|0))if(g){m=j;r=h;break}else break f;o=0;m=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){W=21;break b}if((m|0)!=-1)if(g^(j|0)==0){m=j;r=j;break}else break f;else{c[f>>2]=0;m=0;W=131;break}}else{m=j;W=131}while(0);if((W|0)==131){W=0;if(g)break f;else r=0}g=c[e>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=21;break b}}else g=d[h>>0]|0;if((g&255)<<24>>24!=(a[q>>0]|0))break f;g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=21;break b}}else c[h>>2]=j+1;q=q+1|0;g=a[aa>>0]|0;x=(g&1)==0;g=(x?B:c[A>>2]|0)+(x?(g&255)>>>1:c[C>>2]|0)|0;if((q|0)==(g|0)){q=g;break}else{j=m;h=r}}}while(0);if(z?(x=a[aa>>0]|0,w=(x&1)==0,(q|0)!=((w?B:c[A>>2]|0)+(w?(x&255)>>>1:c[C>>2]|0)|0)):0){W=143;break b}break}case 4:{s=a[V>>0]|0;m=x;j=x;q=0;g:while(1){g=c[e>>2]|0;do if(g){if((c[g+12>>2]|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=23;break b}if((g|0)==-1){c[e>>2]=0;g=0;break}else{g=c[e>>2]|0;break}}}else g=0;while(0);h=(g|0)==0;do if(j){if((c[j+12>>2]|0)!=(c[j+16>>2]|0))if(h){r=m;break}else{h=m;break g}o=0;g=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;x=o;o=0;if(x&1){W=23;break b}if((g|0)!=-1)if(h^(m|0)==0){r=m;j=m;break}else{h=m;break g}else{c[f>>2]=0;m=0;W=156;break}}else W=156;while(0);if((W|0)==156){W=0;if(h){h=m;break}else{r=m;j=0}}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=23;break b}}else m=d[g>>0]|0;g=m&255;if(g<<24>>24>-1?(b[(c[I>>2]|0)+(m<<24>>24<<1)>>1]&2048)!=0:0){m=c[p>>2]|0;if((m|0)==(c[P>>2]|0)){o=0;wa(12,n|0,p|0,P|0);x=o;o=0;if(x&1){W=23;break b}m=c[p>>2]|0}c[p>>2]=m+1;a[m>>0]=g;q=q+1|0}else{x=a[Y>>0]|0;if(!(g<<24>>24==s<<24>>24&((q|0)!=0?(((x&1)==0?(x&255)>>>1:c[H>>2]|0)|0)!=0:0))){h=r;break}if((u|0)==(c[S>>2]|0)){o=0;wa(13,da|0,T|0,S|0);x=o;o=0;if(x&1){W=23;break b}u=c[T>>2]|0}x=u+4|0;c[T>>2]=x;c[u>>2]=q;u=x;q=0}m=c[e>>2]|0;g=m+12|0;h=c[g>>2]|0;if((h|0)==(c[m+16>>2]|0)){o=0;ka(c[(c[m>>2]|0)+40>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=23;break b}else{m=r;continue}}else{c[g>>2]=h+1;m=r;continue}}if((q|0)!=0?(c[da>>2]|0)!=(u|0):0){if((u|0)==(c[S>>2]|0)){o=0;wa(13,da|0,T|0,S|0);x=o;o=0;if(x&1){W=24;break b}u=c[T>>2]|0}x=u+4|0;c[T>>2]=x;c[u>>2]=q;u=x}r=c[R>>2]|0;if((r|0)>0){q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);q=(q|0)==0;do if(h){if((c[h+12>>2]|0)==(c[h+16>>2]|0)){o=0;m=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){W=24;break b}if((m|0)==-1){c[f>>2]=0;W=193;break}}if(!q){W=198;break b}}else W=193;while(0);if((W|0)==193){W=0;if(q){W=198;break b}else h=0}q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else q=d[m>>0]|0;if((q&255)<<24>>24!=(a[Q>>0]|0)){W=198;break b}q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=24;break b}}else c[m>>2]=g+1;if((r|0)>0){j=h;g=h;s=r;while(1){q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=22;break b}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);m=(q|0)==0;do if(g){if((c[g+12>>2]|0)!=(c[g+16>>2]|0))if(m){q=j;r=g;break}else{W=222;break b}o=0;q=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=22;break b}if((q|0)!=-1)if(m^(j|0)==0){q=j;r=j;break}else{W=222;break b}else{c[f>>2]=0;q=0;W=215;break}}else{q=j;W=215}while(0);if((W|0)==215){W=0;if(m){W=222;break b}else r=0}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=22;break b}}else m=d[g>>0]|0;if((m&255)<<24>>24<=-1){W=222;break b}if(!(b[(c[I>>2]|0)+(m<<24>>24<<1)>>1]&2048)){W=222;break b}if((c[p>>2]|0)==(c[P>>2]|0)?(o=0,wa(12,n|0,p|0,P|0),x=o,o=0,x&1):0){W=22;break b}m=c[e>>2]|0;g=c[m+12>>2]|0;if((g|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=22;break b}}else m=d[g>>0]|0;g=c[p>>2]|0;c[p>>2]=g+1;a[g>>0]=m;m=s;s=s+-1|0;c[R>>2]=s;g=c[e>>2]|0;h=g+12|0;j=c[h>>2]|0;if((j|0)==(c[g+16>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;x=o;o=0;if(x&1){W=22;break b}}else c[h>>2]=j+1;if((m|0)<=1)break;else{j=q;g=r}}}}if((c[p>>2]|0)==(c[n>>2]|0)){W=233;break b}break}default:{}}while(0);h:do if((W|0)==42)while(1){W=0;m=c[e>>2]|0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;m=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;x=o;o=0;if(x&1){W=20;break b}if((m|0)==-1){c[e>>2]=0;m=0;break}else{m=c[e>>2]|0;break}}}else m=0;while(0);g=(m|0)==0;do if(h){if((c[h+12>>2]|0)!=(c[h+16>>2]|0))if(g){j=q;break}else break h;o=0;m=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){W=20;break b}if((m|0)!=-1)if(g^(q|0)==0){j=q;h=q;break}else break h;else{c[f>>2]=0;q=0;W=54;break}}else W=54;while(0);if((W|0)==54){W=0;if(g)break h;else{j=q;h=0}}q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){W=20;break b}}else q=d[m>>0]|0;if((q&255)<<24>>24<=-1)break h;if(!(b[(c[I>>2]|0)+(q<<24>>24<<1)>>1]&8192))break h;q=c[e>>2]|0;m=q+12|0;g=c[m>>2]|0;if((g|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+40>>2]|0,q|0)|0;W=o;o=0;if(W&1){W=20;break b}}else{c[m>>2]=g+1;q=d[g>>0]|0}o=0;ia(67,$|0,q&255|0);W=o;o=0;if(W&1){W=20;break b}else{q=j;W=42}}while(0);y=y+1|0;if(y>>>0>=4){W=235;break}}i:switch(W|0){case 20:{m=Na()|0;break a}case 21:{m=Na()|0;break a}case 22:{m=Na()|0;break a}case 23:{m=Na()|0;break a}case 24:{m=Na()|0;break a}case 40:{c[k>>2]=c[k>>2]|4;m=0;break}case 104:{c[k>>2]=c[k>>2]|4;m=0;break}case 143:{c[k>>2]=c[k>>2]|4;m=0;break}case 198:{c[k>>2]=c[k>>2]|4;m=0;break}case 222:{c[k>>2]=c[k>>2]|4;m=0;break}case 233:{c[k>>2]=c[k>>2]|4;m=0;break}case 235:{j:do if(t){j=t+1|0;r=t+8|0;s=t+4|0;g=1;k:while(1){q=a[t>>0]|0;if(!(q&1))q=(q&255)>>>1;else q=c[s>>2]|0;if(g>>>0>=q>>>0)break j;q=c[e>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;p=o;o=0;if(p&1){W=19;break k}if((q|0)==-1){c[e>>2]=0;q=0;break}else{q=c[e>>2]|0;break}}}else q=0;while(0);m=(q|0)==0;q=c[f>>2]|0;do if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;p=o;o=0;if(p&1){W=19;break k}if((q|0)==-1){c[f>>2]=0;W=253;break}}if(!m){W=260;break k}}else W=253;while(0);if((W|0)==253?(W=0,m):0){W=260;break}q=c[e>>2]|0;m=c[q+12>>2]|0;if((m|0)==(c[q+16>>2]|0)){o=0;q=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;p=o;o=0;if(p&1){W=19;break}}else q=d[m>>0]|0;if(!(a[t>>0]&1))m=j;else m=c[r>>2]|0;if((q&255)<<24>>24!=(a[m+g>>0]|0)){W=260;break}q=g+1|0;m=c[e>>2]|0;g=m+12|0;h=c[g>>2]|0;if((h|0)==(c[m+16>>2]|0)){o=0;ka(c[(c[m>>2]|0)+40>>2]|0,m|0)|0;p=o;o=0;if(p&1){W=19;break}else{g=q;continue}}else{c[g>>2]=h+1;g=q;continue}}if((W|0)==19){m=Na()|0;break a}else if((W|0)==260){c[k>>2]=c[k>>2]|4;m=0;break i}}while(0);q=c[da>>2]|0;if((q|0)!=(u|0)?(c[X>>2]=0,Ur(Y,q,u,X),(c[X>>2]|0)!=0):0){c[k>>2]=c[k>>2]|4;m=0}else m=1;break}}Im($);Im(Z);Im(_);Im(aa);Im(Y);q=c[da>>2]|0;c[da>>2]=0;if((q|0)!=0?(o=0,ha(c[ca>>2]|0,q|0),da=o,o=0,da&1):0){da=Na(0)|0;ec(da)}i=ba;return m|0}while(0);Im($);Im(Z);Im(_);Im(aa);Im(Y);q=c[da>>2]|0;c[da>>2]=0;if((q|0)!=0?(o=0,ha(c[ca>>2]|0,q|0),da=o,o=0,da&1):0){da=Na(0)|0;ec(da)}Ya(m|0);return 0}function Rr(a){a=a|0;var b=0;b=Ma(8)|0;o=0;ia(90,b|0,a|0);a=o;o=0;if(a&1){a=Na()|0;La(b|0);Ya(a|0)}else lb(b|0,616,80)}function Sr(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;w=i;i=i+144|0;k=w+24|0;b=w+32|0;x=w+16|0;s=w+8|0;p=w+4|0;q=w+28|0;l=w;c[x>>2]=b;A=x+4|0;c[A>>2]=189;m=b+100|0;o=0;v=ka(68,g|0)|0;n=o;o=0;if(!(n&1)){c[p>>2]=v;o=0;n=ra(37,p|0,44220)|0;b=o;o=0;a:do if(!(b&1)?(a[q>>0]=0,t=c[e>>2]|0,c[l>>2]=t,r=c[g+4>>2]|0,u=t,o=0,c[k>>2]=c[l>>2],r=la(1,d|0,k|0,f|0,p|0,r|0,h|0,q|0,n|0,x|0,s|0,m|0)|0,g=o,o=0,!(g&1)):0){if(r){if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}if(a[q>>0]|0){o=0;b=ra(c[(c[n>>2]|0)+28>>2]|0,n|0,45)|0;g=o;o=0;if(g&1)break;o=0;ia(67,j|0,b|0);g=o;o=0;if(g&1)break}o=0;l=ra(c[(c[n>>2]|0)+28>>2]|0,n|0,48)|0;g=o;o=0;if(g&1)break;b=c[x>>2]|0;m=c[s>>2]|0;k=m+-1|0;b:do if(b>>>0>>0)do{if((a[b>>0]|0)!=l<<24>>24)break b;b=b+1|0}while(b>>>0>>0);while(0);o=0;ma(32,j|0,b|0,m|0)|0;j=o;o=0;if(j&1)break}b=c[d>>2]|0;do if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1)break a;if((b|0)==-1){c[d>>2]=0;b=0;break}else{b=c[d>>2]|0;break}}}else b=0;while(0);k=(b|0)==0;do if(t){if((c[u+12>>2]|0)==(c[u+16>>2]|0)){o=0;b=ka(c[(c[t>>2]|0)+36>>2]|0,u|0)|0;u=o;o=0;if(u&1)break a;if((b|0)==-1){c[e>>2]=0;z=29;break}}if(!k)z=30}else z=29;while(0);if((z|0)==29?k:0)z=30;if((z|0)==30)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(v)|0;b=c[x>>2]|0;c[x>>2]=0;if((b|0)!=0?(o=0,ha(c[A>>2]|0,b|0),A=o,o=0,A&1):0){A=Na(0)|0;ec(A)}i=w;return k|0}while(0);k=Na()|0;pm(v)|0;b=c[x>>2]|0;c[x>>2]=0;if(!b)y=k;else z=36}else{k=Na()|0;c[x>>2]=0;z=36}if((z|0)==36){o=0;ha(c[A>>2]|0,b|0);A=o;o=0;if(A&1){A=Na(0)|0;ec(A)}else y=k}Ya(y|0);return 0}function Tr(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;n=z+100|0;p=z+88|0;q=z+76|0;r=z+64|0;s=z+52|0;t=z+48|0;u=z+36|0;v=z+24|0;w=z+12|0;x=z;do if(b){b=Is(d,43828)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](n,b);x=c[n>>2]|0;a[e>>0]=x;a[e+1>>0]=x>>8;a[e+2>>0]=x>>16;a[e+3>>0]=x>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](p,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[p>>2];c[l+4>>2]=c[p+4>>2];c[l+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Im(p);Cb[c[(c[b>>2]|0)+28>>2]&127](q,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;Im(q);a[f>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[g>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](r,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[r>>2];c[h+4>>2]=c[r+4>>2];c[h+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Im(r);Cb[c[(c[b>>2]|0)+24>>2]&127](s,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;Im(s);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(d,43764)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](t,b);t=c[t>>2]|0;a[e>>0]=t;a[e+1>>0]=t>>8;a[e+2>>0]=t>>16;a[e+3>>0]=t>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](u,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[u>>2];c[l+4>>2]=c[u+4>>2];c[l+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;Im(u);Cb[c[(c[b>>2]|0)+28>>2]&127](v,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[v>>2];c[k+4>>2]=c[v+4>>2];c[k+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Im(v);a[f>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[g>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](w,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[w>>2];c[h+4>>2]=c[w+4>>2];c[h+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;Im(w);Cb[c[(c[b>>2]|0)+24>>2]&127](x,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[x>>2];c[j+4>>2]=c[x+4>>2];c[j+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Im(x);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=y;i=z;return}function Ur(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=a[b>>0]|0;i=b+4|0;h=c[i>>2]|0;a:do if(((g&1)==0?(g&255)>>>1:h)|0){if((d|0)!=(e|0)){g=e+-4|0;if(g>>>0>d>>>0){h=d;do{j=c[h>>2]|0;c[h>>2]=c[g>>2];c[g>>2]=j;h=h+4|0;g=g+-4|0}while(h>>>0>>0)}g=a[b>>0]|0;h=c[i>>2]|0}j=(g&1)==0;i=j?b+1|0:c[b+8>>2]|0;e=e+-4|0;b=i+(j?(g&255)>>>1:h)|0;h=a[i>>0]|0;g=h<<24>>24<1|h<<24>>24==127;b:do if(e>>>0>d>>>0){while(1){if(!g?(h<<24>>24|0)!=(c[d>>2]|0):0)break;i=(b-i|0)>1?i+1|0:i;d=d+4|0;h=a[i>>0]|0;g=h<<24>>24<1|h<<24>>24==127;if(d>>>0>=e>>>0)break b}c[f>>2]=4;break a}while(0);if(!g?((c[e>>2]|0)+-1|0)>>>0>=h<<24>>24>>>0:0)c[f>>2]=4}while(0);return}function Vr(a){a=a|0;return}function Wr(a){a=a|0;cj(a);return}function Xr(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;B=i;i=i+576|0;x=B+424|0;A=B;b=B+24|0;D=B+16|0;y=B+12|0;C=B+8|0;p=B+464|0;l=B+4|0;z=B+468|0;c[D>>2]=b;F=D+4|0;c[F>>2]=189;m=b+400|0;o=0;k=ka(68,g|0)|0;w=o;o=0;if(!(w&1)){c[C>>2]=k;o=0;b=ra(37,C|0,44212)|0;w=o;o=0;a:do if(!(w&1)?(a[p>>0]=0,c[l>>2]=c[e>>2],n=c[g+4>>2]|0,o=0,c[x>>2]=c[l>>2],n=la(2,d|0,x|0,f|0,C|0,n|0,h|0,p|0,b|0,D|0,y|0,m|0)|0,w=o,o=0,!(w&1)):0){b:do if(n){o=0;va(c[(c[b>>2]|0)+48>>2]|0,b|0,59007,59017,x|0)|0;w=o;o=0;if(w&1){G=10;break a}l=c[y>>2]|0;m=c[D>>2]|0;b=l-m|0;if((b|0)>392){b=Fl((b>>2)+2|0)|0;k=b;if(!b){o=0;xa(6);w=o;o=0;if(!(w&1)){b=0;G=13}}else G=13}else{k=0;b=z;G=13}do if((G|0)==13){if(a[p>>0]|0){a[b>>0]=45;b=b+1|0}v=x+40|0;w=x;if(m>>>0>>0){n=x+4|0;f=n+4|0;g=f+4|0;p=g+4|0;q=p+4|0;r=q+4|0;s=r+4|0;t=s+4|0;u=t+4|0;do{l=c[m>>2]|0;do if((c[x>>2]|0)!=(l|0))if((c[n>>2]|0)!=(l|0))if((c[f>>2]|0)!=(l|0))if((c[g>>2]|0)!=(l|0))if((c[p>>2]|0)==(l|0))l=p;else{if((c[q>>2]|0)==(l|0)){l=q;break}if((c[r>>2]|0)==(l|0)){l=r;break}if((c[s>>2]|0)==(l|0)){l=s;break}if((c[t>>2]|0)==(l|0)){l=t;break}l=(c[u>>2]|0)==(l|0)?u:v}else l=g;else l=f;else l=n;else l=x;while(0);a[b>>0]=a[59007+(l-w>>2)>>0]|0;m=m+4|0;b=b+1|0}while(m>>>0<(c[y>>2]|0)>>>0)}a[b>>0]=0;c[A>>2]=j;if(($k(z,58987,A)|0)!=1?(o=0,ha(190,58991),j=o,o=0,j&1):0)break;if(k)Gl(k);break b}while(0);b=Na()|0;if(!k){l=b;k=D;break a}Gl(k);l=b;k=D;break a}while(0);b=c[d>>2]|0;do if(b){k=c[b+12>>2]|0;if((k|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}}else b=c[k>>2]|0;if((b|0)==-1){c[d>>2]=0;l=1;break}else{l=(c[d>>2]|0)==0;break}}else l=1;while(0);b=c[e>>2]|0;do if(b){k=c[b+12>>2]|0;if((k|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1){G=10;break a}}else b=c[k>>2]|0;if((b|0)!=-1)if(l)break;else{G=40;break}else{c[e>>2]=0;G=38;break}}else G=38;while(0);if((G|0)==38?l:0)G=40;if((G|0)==40)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(c[C>>2]|0)|0;b=c[D>>2]|0;c[D>>2]=0;if((b|0)!=0?(o=0,ha(c[F>>2]|0,b|0),G=o,o=0,G&1):0){G=Na(0)|0;ec(G)}i=B;return k|0}else G=10;while(0);if((G|0)==10){l=Na()|0;k=D}pm(c[C>>2]|0)|0;b=c[k>>2]|0;c[k>>2]=0;if(!b)E=l;else{k=c[F>>2]|0;G=47}}else{l=Na()|0;c[D>>2]=0;k=189;G=47}if((G|0)==47){o=0;ha(k|0,b|0);G=o;o=0;if(G&1){G=Na(0)|0;ec(G)}else E=l}Ya(E|0);return 0}function Yr(b,e,f,g,h,j,k,l,m,n,p){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;Y=i;i=i+512|0;K=Y+96|0;q=Y+104|0;_=Y+88|0;O=Y+80|0;N=Y+76|0;P=Y+504|0;L=Y+72|0;Q=Y+68|0;T=Y+56|0;X=Y+44|0;V=Y+32|0;U=Y+20|0;W=Y+8|0;M=Y+4|0;S=Y;c[K>>2]=p;c[_>>2]=q;Z=_+4|0;c[Z>>2]=189;c[O>>2]=q;c[N>>2]=q+400;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;o=0;qa(2,f|0,g|0,P|0,L|0,Q|0,T|0,X|0,V|0,U|0,M|0);J=o;o=0;a:do if(J&1)f=Na()|0;else{c[n>>2]=c[m>>2];G=V+4|0;H=U+4|0;I=U+8|0;J=V+8|0;z=(h&512|0)!=0;A=X+8|0;B=X+4|0;C=W+4|0;D=W+8|0;E=P+3|0;F=T+4|0;y=0;s=0;b:while(1){p=c[b>>2]|0;do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else p=c[f>>2]|0;if((p|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);f=c[e>>2]|0;do if(f){p=c[f+12>>2]|0;if((p|0)==(c[f+16>>2]|0)){o=0;p=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else p=c[p>>2]|0;if((p|0)!=-1)if(g){x=f;break}else{t=q;R=244;break b}else{c[e>>2]=0;R=16;break}}else R=16;while(0);if((R|0)==16){R=0;if(g){t=q;R=244;break}else x=0}c:do switch(a[P+y>>0]|0){case 1:{if((y|0)!=3){p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;R=o;o=0;if(R&1){R=26;break b}}else p=c[f>>2]|0;o=0;p=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,8192,p|0)|0;R=o;o=0;if(R&1){R=26;break b}if(!p){R=42;break b}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;R=o;o=0;if(R&1){R=26;break b}}else{c[f>>2]=g+4;p=c[g>>2]|0}o=0;ia(92,W|0,p|0);R=o;o=0;if(R&1){R=26;break b}else{p=x;h=x;R=44}}else p=q;break}case 0:{if((y|0)==3)p=q;else{p=x;h=x;R=44}break}case 3:{f=a[V>>0]|0;p=(f&1)==0?(f&255)>>>1:c[G>>2]|0;g=a[U>>0]|0;h=(g&1)==0?(g&255)>>>1:c[H>>2]|0;if((p|0)==(0-h|0))p=q;else{if(!p){p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}f=a[U>>0]|0}else{p=c[f>>2]|0;f=g}if((p|0)!=(c[((f&1)==0?H:c[I>>2]|0)>>2]|0)){p=q;break c}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[f>>2]=g+4;a[k>>0]=1;x=a[U>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[H>>2]|0)>>>0>1?U:s;break c}r=c[b>>2]|0;t=c[r+12>>2]|0;g=c[r+16>>2]|0;p=(t|0)==(g|0);if(!h){if(p){o=0;p=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}f=a[V>>0]|0}else p=c[t>>2]|0;if((p|0)!=(c[((f&1)==0?G:c[J>>2]|0)>>2]|0)){a[k>>0]=1;p=q;break c}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[f>>2]=g+4;x=a[V>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[G>>2]|0)>>>0>1?V:s;break c}if(p){o=0;p=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}g=c[b>>2]|0;f=a[V>>0]|0;r=g;t=c[g+12>>2]|0;g=c[g+16>>2]|0}else p=c[t>>2]|0;h=r+12|0;g=(t|0)==(g|0);if((p|0)==(c[((f&1)==0?G:c[J>>2]|0)>>2]|0)){if(g){o=0;ka(c[(c[r>>2]|0)+40>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[h>>2]=t+4;x=a[V>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[G>>2]|0)>>>0>1?V:s;break c}if(g){o=0;p=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=26;break b}}else p=c[t>>2]|0;if((p|0)!=(c[((a[U>>0]&1)==0?H:c[I>>2]|0)>>2]|0)){R=107;break b}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[f>>2]=g+4;a[k>>0]=1;x=a[U>>0]|0;p=q;s=((x&1)==0?(x&255)>>>1:c[H>>2]|0)>>>0>1?U:s}break}case 2:{if(!(y>>>0<2|(s|0)!=0)?!(z|(y|0)==2&(a[E>>0]|0)!=0):0){p=q;s=0;break c}h=a[X>>0]|0;g=c[A>>2]|0;f=(h&1)==0?B:g;p=f;d:do if((y|0)!=0?(d[P+(y+-1)>>0]|0)<2:0){w=(h&1)==0;e:do if((f|0)!=((w?B:g)+((w?(h&255)>>>1:c[B>>2]|0)<<2)|0)){h=f;while(1){o=0;f=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,8192,c[h>>2]|0)|0;w=o;o=0;if(w&1){R=23;break b}if(!f)break;h=h+4|0;p=h;f=a[X>>0]|0;g=c[A>>2]|0;w=(f&1)==0;if((h|0)==((w?B:g)+((w?(f&255)>>>1:c[B>>2]|0)<<2)|0)){h=f;break e}}h=a[X>>0]|0;g=c[A>>2]|0}while(0);t=(h&1)==0?B:g;f=t;u=p-f>>2;v=a[W>>0]|0;r=(v&1)==0;v=r?(v&255)>>>1:c[C>>2]|0;if(v>>>0>=u>>>0){r=r?C:c[D>>2]|0;w=r+(v<<2)|0;if(!u)f=p;else{r=r+(v-u<<2)|0;while(1){if((c[r>>2]|0)!=(c[t>>2]|0))break d;r=r+4|0;if((r|0)==(w|0)){f=p;break}else t=t+4|0}}}}else f=p;while(0);p=(h&1)==0;p=(p?B:g)+((p?(h&255)>>>1:c[B>>2]|0)<<2)|0;f:do if((f|0)!=(p|0)){r=x;h=x;p=f;while(1){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=22;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0)){o=0;f=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=22;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g^(r|0)==0){f=r;t=r;break}else break f;else{c[e>>2]=0;f=0;R=136;break}}else{f=r;R=136}while(0);if((R|0)==136){R=0;if(g)break f;else t=0}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=22;break b}}else g=c[h>>2]|0;if((g|0)!=(c[p>>2]|0))break f;g=c[b>>2]|0;h=g+12|0;r=c[h>>2]|0;if((r|0)==(c[g+16>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=22;break b}}else c[h>>2]=r+4;p=p+4|0;g=a[X>>0]|0;x=(g&1)==0;g=(x?B:c[A>>2]|0)+((x?(g&255)>>>1:c[B>>2]|0)<<2)|0;if((p|0)==(g|0)){p=g;break}else{r=f;h=t}}}while(0);if(z?(x=a[X>>0]|0,w=(x&1)==0,(p|0)!=((w?B:c[A>>2]|0)+((w?(x&255)>>>1:c[B>>2]|0)<<2)|0)):0){R=148;break b}else p=q;break}case 4:{v=c[Q>>2]|0;u=x;r=x;p=q;f=0;g:while(1){g=c[b>>2]|0;do if(g){h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=25;break b}}else g=c[h>>2]|0;if((g|0)==-1){c[b>>2]=0;h=1;break}else{h=(c[b>>2]|0)==0;break}}else h=1;while(0);do if(r){g=c[r+12>>2]|0;if((g|0)==(c[r+16>>2]|0)){o=0;g=ka(c[(c[r>>2]|0)+36>>2]|0,r|0)|0;x=o;o=0;if(x&1){R=25;break b}}else g=c[g>>2]|0;if((g|0)!=-1)if(h^(u|0)==0){g=u;t=u;break}else{q=u;break g}else{c[e>>2]=0;g=0;R=162;break}}else{g=u;R=162}while(0);if((R|0)==162){R=0;if(h){q=g;break}else t=0}h=c[b>>2]|0;q=c[h+12>>2]|0;if((q|0)==(c[h+16>>2]|0)){o=0;h=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=25;break b}}else h=c[q>>2]|0;o=0;q=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,2048,h|0)|0;x=o;o=0;if(x&1){R=25;break b}if(q){q=c[n>>2]|0;if((q|0)==(c[K>>2]|0)){o=0;wa(14,m|0,n|0,K|0);x=o;o=0;if(x&1){R=25;break b}q=c[n>>2]|0}c[n>>2]=q+4;c[q>>2]=h;f=f+1|0}else{x=a[T>>0]|0;if(!((h|0)==(v|0)&((f|0)!=0?(((x&1)==0?(x&255)>>>1:c[F>>2]|0)|0)!=0:0))){q=g;break}if((p|0)==(c[N>>2]|0)){o=0;wa(13,_|0,O|0,N|0);x=o;o=0;if(x&1){R=25;break b}p=c[O>>2]|0}x=p+4|0;c[O>>2]=x;c[p>>2]=f;p=x;f=0}h=c[b>>2]|0;q=h+12|0;r=c[q>>2]|0;if((r|0)==(c[h+16>>2]|0)){o=0;ka(c[(c[h>>2]|0)+40>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=25;break b}else{u=g;r=t;continue}}else{c[q>>2]=r+4;u=g;r=t;continue}}if((f|0)!=0?(c[_>>2]|0)!=(p|0):0){if((p|0)==(c[N>>2]|0)){o=0;wa(13,_|0,O|0,N|0);x=o;o=0;if(x&1){R=26;break b}p=c[O>>2]|0}x=p+4|0;c[O>>2]=x;c[p>>2]=f;p=x}t=c[M>>2]|0;if((t|0)>0){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(q){f=c[q+12>>2]|0;if((f|0)==(c[q+16>>2]|0)){o=0;f=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;x=o;o=0;if(x&1){R=26;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g)break;else{R=206;break b}else{c[e>>2]=0;R=200;break}}else R=200;while(0);if((R|0)==200){R=0;if(g){R=206;break b}else q=0}f=c[b>>2]|0;g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else f=c[g>>2]|0;if((f|0)!=(c[L>>2]|0)){R=206;break b}f=c[b>>2]|0;g=f+12|0;h=c[g>>2]|0;if((h|0)==(c[f+16>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=26;break b}}else c[g>>2]=h+4;if((t|0)>0){r=q;h=q;u=t;while(1){f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=24;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0)){o=0;f=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=24;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g^(r|0)==0){f=r;t=r;break}else{R=231;break b}else{c[e>>2]=0;f=0;R=224;break}}else{f=r;R=224}while(0);if((R|0)==224){R=0;if(g){R=231;break b}else t=0}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=24;break b}}else g=c[h>>2]|0;o=0;g=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,2048,g|0)|0;x=o;o=0;if(x&1){R=24;break b}if(!g){R=231;break b}if((c[n>>2]|0)==(c[K>>2]|0)?(o=0,wa(14,m|0,n|0,K|0),x=o,o=0,x&1):0){R=24;break b}g=c[b>>2]|0;h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0)){o=0;g=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;x=o;o=0;if(x&1){R=24;break b}}else g=c[h>>2]|0;h=c[n>>2]|0;c[n>>2]=h+4;c[h>>2]=g;g=u;u=u+-1|0;c[M>>2]=u;h=c[b>>2]|0;q=h+12|0;r=c[q>>2]|0;if((r|0)==(c[h+16>>2]|0)){o=0;ka(c[(c[h>>2]|0)+40>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=24;break b}}else c[q>>2]=r+4;if((g|0)<=1)break;else{r=f;h=t}}}}if((c[n>>2]|0)==(c[m>>2]|0)){R=242;break b}break}default:p=q}while(0);h:do if((R|0)==44)while(1){R=0;f=c[b>>2]|0;do if(f){g=c[f+12>>2]|0;if((g|0)==(c[f+16>>2]|0)){o=0;f=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;x=o;o=0;if(x&1){R=21;break b}}else f=c[g>>2]|0;if((f|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);do if(h){f=c[h+12>>2]|0;if((f|0)==(c[h+16>>2]|0)){o=0;f=ka(c[(c[h>>2]|0)+36>>2]|0,h|0)|0;x=o;o=0;if(x&1){R=21;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(g^(p|0)==0){r=p;h=p;break}else{p=q;break h}else{c[e>>2]=0;p=0;R=57;break}}else R=57;while(0);if((R|0)==57){R=0;if(g){p=q;break h}else{r=p;h=0}}p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;x=o;o=0;if(x&1){R=21;break b}}else p=c[f>>2]|0;o=0;p=ma(c[(c[l>>2]|0)+12>>2]|0,l|0,8192,p|0)|0;x=o;o=0;if(x&1){R=21;break b}if(!p){p=q;break h}p=c[b>>2]|0;f=p+12|0;g=c[f>>2]|0;if((g|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+40>>2]|0,p|0)|0;R=o;o=0;if(R&1){R=21;break b}}else{c[f>>2]=g+4;p=c[g>>2]|0}o=0;ia(92,W|0,p|0);R=o;o=0;if(R&1){R=21;break b}else{p=r;R=44}}while(0);y=y+1|0;if(y>>>0>=4){t=p;R=244;break}else q=p}i:switch(R|0){case 21:{f=Na()|0;break a}case 22:{f=Na()|0;break a}case 23:{f=Na()|0;break a}case 24:{f=Na()|0;break a}case 25:{f=Na()|0;break a}case 26:{f=Na()|0;break a}case 42:{c[j>>2]=c[j>>2]|4;f=0;break}case 107:{c[j>>2]=c[j>>2]|4;f=0;break}case 148:{c[j>>2]=c[j>>2]|4;f=0;break}case 206:{c[j>>2]=c[j>>2]|4;f=0;break}case 231:{c[j>>2]=c[j>>2]|4;f=0;break}case 242:{c[j>>2]=c[j>>2]|4;f=0;break}case 244:{j:do if(s){q=s+4|0;r=s+8|0;h=1;k:while(1){p=a[s>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[q>>2]|0;if(h>>>0>=p>>>0)break j;p=c[b>>2]|0;do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;n=o;o=0;if(n&1){R=20;break k}}else p=c[f>>2]|0;if((p|0)==-1){c[b>>2]=0;g=1;break}else{g=(c[b>>2]|0)==0;break}}else g=1;while(0);p=c[e>>2]|0;do if(p){f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;n=o;o=0;if(n&1){R=20;break k}}else p=c[f>>2]|0;if((p|0)!=-1)if(g)break;else{R=271;break k}else{c[e>>2]=0;R=263;break}}else R=263;while(0);if((R|0)==263?(R=0,g):0){R=271;break}p=c[b>>2]|0;f=c[p+12>>2]|0;if((f|0)==(c[p+16>>2]|0)){o=0;p=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;n=o;o=0;if(n&1){R=20;break}}else p=c[f>>2]|0;if(!(a[s>>0]&1))f=q;else f=c[r>>2]|0;if((p|0)!=(c[f+(h<<2)>>2]|0)){R=271;break}p=h+1|0;f=c[b>>2]|0;g=f+12|0;h=c[g>>2]|0;if((h|0)==(c[f+16>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;n=o;o=0;if(n&1){R=20;break}else{h=p;continue}}else{c[g>>2]=h+4;h=p;continue}}if((R|0)==20){f=Na()|0;break a}else if((R|0)==271){c[j>>2]=c[j>>2]|4;f=0;break i}}while(0);p=c[_>>2]|0;if((p|0)!=(t|0)?(c[S>>2]=0,Ur(T,p,t,S),(c[S>>2]|0)!=0):0){c[j>>2]=c[j>>2]|4;f=0}else f=1;break}}Wm(W);Wm(U);Wm(V);Wm(X);Im(T);p=c[_>>2]|0;c[_>>2]=0;if((p|0)!=0?(o=0,ha(c[Z>>2]|0,p|0),_=o,o=0,_&1):0){_=Na(0)|0;ec(_)}i=Y;return f|0}while(0);Wm(W);Wm(U);Wm(V);Wm(X);Im(T);p=c[_>>2]|0;c[_>>2]=0;if((p|0)!=0?(o=0,ha(c[Z>>2]|0,p|0),_=o,o=0,_&1):0){_=Na(0)|0;ec(_)}Ya(f|0);return 0}function Zr(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;w=i;i=i+432|0;k=w+424|0;b=w+24|0;y=w+16|0;s=w+8|0;p=w+4|0;q=w+428|0;l=w;c[y>>2]=b;A=y+4|0;c[A>>2]=189;m=b+400|0;o=0;v=ka(68,g|0)|0;n=o;o=0;if(!(n&1)){c[p>>2]=v;o=0;n=ra(37,p|0,44212)|0;b=o;o=0;a:do if(!(b&1)?(a[q>>0]=0,t=c[e>>2]|0,c[l>>2]=t,r=c[g+4>>2]|0,u=t,o=0,c[k>>2]=c[l>>2],r=la(2,d|0,k|0,f|0,p|0,r|0,h|0,q|0,n|0,y|0,s|0,m|0)|0,g=o,o=0,!(g&1)):0){if(r){if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;if(a[q>>0]|0){o=0;b=ra(c[(c[n>>2]|0)+44>>2]|0,n|0,45)|0;g=o;o=0;if(g&1)break;o=0;ia(92,j|0,b|0);g=o;o=0;if(g&1)break}o=0;l=ra(c[(c[n>>2]|0)+44>>2]|0,n|0,48)|0;g=o;o=0;if(g&1)break;b=c[y>>2]|0;m=c[s>>2]|0;k=m+-4|0;b:do if(b>>>0>>0)do{if((c[b>>2]|0)!=(l|0))break b;b=b+4|0}while(b>>>0>>0);while(0);o=0;ma(33,j|0,b|0,m|0)|0;j=o;o=0;if(j&1)break}b=c[d>>2]|0;do if(b){k=c[b+12>>2]|0;if((k|0)==(c[b+16>>2]|0)){o=0;b=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;j=o;o=0;if(j&1)break a}else b=c[k>>2]|0;if((b|0)==-1){c[d>>2]=0;k=1;break}else{k=(c[d>>2]|0)==0;break}}else k=1;while(0);do if(t){b=c[u+12>>2]|0;if((b|0)==(c[u+16>>2]|0)){o=0;b=ka(c[(c[t>>2]|0)+36>>2]|0,u|0)|0;u=o;o=0;if(u&1)break a}else b=c[b>>2]|0;if((b|0)!=-1)if(k)break;else{z=32;break}else{c[e>>2]=0;z=30;break}}else z=30;while(0);if((z|0)==30?k:0)z=32;if((z|0)==32)c[h>>2]=c[h>>2]|2;k=c[d>>2]|0;pm(v)|0;b=c[y>>2]|0;c[y>>2]=0;if((b|0)!=0?(o=0,ha(c[A>>2]|0,b|0),A=o,o=0,A&1):0){A=Na(0)|0;ec(A)}i=w;return k|0}while(0);k=Na()|0;pm(v)|0;b=c[y>>2]|0;c[y>>2]=0;if(!b)x=k;else z=38}else{k=Na()|0;c[y>>2]=0;z=38}if((z|0)==38){o=0;ha(c[A>>2]|0,b|0);A=o;o=0;if(A&1){A=Na(0)|0;ec(A)}else x=k}Ya(x|0);return 0}function _r(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;n=z+100|0;p=z+88|0;q=z+76|0;r=z+64|0;s=z+52|0;t=z+48|0;u=z+36|0;v=z+24|0;w=z+12|0;x=z;do if(b){b=Is(d,43956)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](n,b);x=c[n>>2]|0;a[e>>0]=x;a[e+1>>0]=x>>8;a[e+2>>0]=x>>16;a[e+3>>0]=x>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](p,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[p>>2];c[l+4>>2]=c[p+4>>2];c[l+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Wm(p);Cb[c[(c[b>>2]|0)+28>>2]&127](q,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;Wm(q);c[f>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[g>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](r,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[r>>2];c[h+4>>2]=c[r+4>>2];c[h+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Im(r);Cb[c[(c[b>>2]|0)+24>>2]&127](s,b);if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;o=0;ia(93,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;Wm(s);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(d,43892)|0;Cb[c[(c[b>>2]|0)+44>>2]&127](t,b);t=c[t>>2]|0;a[e>>0]=t;a[e+1>>0]=t>>8;a[e+2>>0]=t>>16;a[e+3>>0]=t>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](u,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[l>>2]=c[u>>2];c[l+4>>2]=c[u+4>>2];c[l+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;Wm(u);Cb[c[(c[b>>2]|0)+28>>2]&127](v,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)};c[k>>2]=c[v>>2];c[k+4>>2]=c[v+4>>2];c[k+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Wm(v);c[f>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[g>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](w,b);if(!(a[h>>0]&1)){a[h+1>>0]=0;a[h>>0]=0}else{a[c[h+8>>2]>>0]=0;c[h+4>>2]=0}o=0;ia(91,h|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)};c[h>>2]=c[w>>2];c[h+4>>2]=c[w+4>>2];c[h+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;Im(w);Cb[c[(c[b>>2]|0)+24>>2]&127](x,b);if(!(a[j>>0]&1))a[j>>0]=0;else c[c[j+8>>2]>>2]=0;c[j+4>>2]=0;o=0;ia(93,j|0,0);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else{c[j>>2]=c[x>>2];c[j+4>>2]=c[x+4>>2];c[j+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Wm(x);y=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=y;i=z;return}function $r(a){a=a|0;return}function as(a){a=a|0;cj(a);return}function bs(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=+j;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;D=i;i=i+384|0;v=D+8|0;k=D;m=D+284|0;n=D+72|0;l=D+184|0;F=D+68|0;A=D+80|0;x=D+77|0;B=D+76|0;G=D+56|0;I=D+44|0;H=D+32|0;p=D+28|0;u=D+84|0;z=D+24|0;y=D+20|0;w=D+16|0;c[n>>2]=m;h[v>>3]=j;m=_k(m,100,59018,v)|0;do if(m>>>0>99){o=0;b=ua(3)|0;C=o;o=0;if(!(C&1)?(o=0,h[k>>3]=j,s=va(17,n|0,b|0,59018,k|0)|0,C=o,o=0,!(C&1)):0){b=c[n>>2]|0;if(!b){o=0;xa(6);C=o;o=0;if(C&1){b=0;k=0;C=7;break}b=c[n>>2]|0}l=Fl(s)|0;k=l;if(!l){o=0;xa(6);C=o;o=0;if(C&1)C=7;else{t=0;C=10}}else{t=l;C=10}}else{b=0;k=0;C=7}}else{k=0;b=0;t=l;s=m;C=10}while(0);if((C|0)==10){o=0;l=ka(68,f|0)|0;r=o;o=0;if(r&1)C=7;else{c[F>>2]=l;o=0;r=ra(37,F|0,44220)|0;q=o;o=0;if(!(q&1)?(q=c[n>>2]|0,o=0,va(c[(c[r>>2]|0)+32>>2]|0,r|0,q|0,q+s|0,t|0)|0,q=o,o=0,!(q&1)):0){if(!s)q=0;else q=(a[c[n>>2]>>0]|0)==45;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;o=0;qa(3,e|0,q|0,F|0,A|0,x|0,B|0,G|0,I|0,H|0,p|0);e=o;o=0;if(!(e&1)){p=c[p>>2]|0;if((s|0)>(p|0)){e=a[H>>0]|0;m=a[I>>0]|0;m=(s-p<<1|1)+p+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}else{e=a[H>>0]|0;m=a[I>>0]|0;m=p+2+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}if(m>>>0>100){m=Fl(m)|0;n=m;if(!m){o=0;xa(6);u=o;o=0;if(!(u&1)){m=0;C=26}}else C=26}else{n=0;m=u;C=26}if((C|0)==26){o=0;na(1,m|0,z|0,y|0,c[f+4>>2]|0,t|0,t+s|0,r|0,q|0,A|0,a[x>>0]|0,a[B>>0]|0,G|0,I|0,H|0,p|0);B=o;o=0;if(!(B&1)?(c[w>>2]=c[d>>2],d=c[z>>2]|0,E=c[y>>2]|0,o=0,c[v>>2]=c[w>>2],E=ja(39,v|0,m|0,d|0,E|0,f|0,g|0)|0,d=o,o=0,!(d&1)):0){if(n){Gl(n);l=c[F>>2]|0}Im(H);Im(I);Im(G);pm(l)|0;if(k)Gl(k);if(b)Gl(b);i=D;return E|0}}m=Na()|0;if(n){Gl(n);l=c[F>>2]|0}}else m=Na()|0;Im(H);Im(I);Im(G)}else m=Na()|0;pm(l)|0}}if((C|0)==7)m=Na()|0;if(k)Gl(k);if(b)Gl(b);Ya(m|0);return 0}function cs(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+112|0;q=D+108|0;r=D+96|0;u=D+92|0;v=D+80|0;w=D+68|0;x=D+56|0;y=D+52|0;z=D+40|0;A=D+36|0;B=D+24|0;s=D+12|0;t=D;do if(b){b=Is(e,43828)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](q,b);d=c[q>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](r,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[r>>2];c[l+4>>2]=c[r+4>>2];c[l+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Im(r);p=b;break}}else{Cb[c[e+40>>2]&127](u,b);d=c[u>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](v,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[v>>2];c[l+4>>2]=c[v+4>>2];c[l+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Im(v);p=b;break}}while(0);a[g>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[h>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[p>>2]|0)+20>>2]&127](w,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[w>>2];c[j+4>>2]=c[w+4>>2];c[j+8>>2]=c[w+8>>2];c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;Im(w);Cb[c[(c[p>>2]|0)+24>>2]&127](x,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[x>>2];c[k+4>>2]=c[x+4>>2];c[k+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Im(x);C=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(e,43764)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](y,b);d=c[y>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](z,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[z>>2];c[l+4>>2]=c[z+4>>2];c[l+8>>2]=c[z+8>>2];c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;Im(z);n=b;break}}else{Cb[c[e+40>>2]&127](A,b);d=c[A>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](B,b);if(!(a[l>>0]&1)){a[l+1>>0]=0;a[l>>0]=0}else{a[c[l+8>>2]>>0]=0;c[l+4>>2]=0}o=0;ia(91,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[B>>2];c[l+4>>2]=c[B+4>>2];c[l+8>>2]=c[B+8>>2];c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;Im(B);n=b;break}}while(0);a[g>>0]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;a[h>>0]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[n>>2]|0)+20>>2]&127](s,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[s>>2];c[j+4>>2]=c[s+4>>2];c[j+8>>2]=c[s+8>>2];c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;Im(s);Cb[c[(c[n>>2]|0)+24>>2]&127](t,b);if(!(a[k>>0]&1)){a[k+1>>0]=0;a[k>>0]=0}else{a[c[k+8>>2]>>0]=0;c[k+4>>2]=0}o=0;ia(91,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[t>>2];c[k+4>>2]=c[t+4>>2];c[k+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;Im(t);C=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=C;i=D;return}function ds(d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;c[f>>2]=d;N=q+4|0;O=q+8|0;P=q+1|0;H=p+4|0;I=(g&512|0)==0;J=p+8|0;K=p+1|0;L=j+8|0;M=(r|0)>0;A=o+4|0;B=o+8|0;C=o+1|0;D=r+1|0;F=-2-r-((r|0)<0?~r:-1)|0;G=(r|0)>0;z=0;do{switch(a[l+z>>0]|0){case 0:{c[e>>2]=c[f>>2];break}case 1:{c[e>>2]=c[f>>2];x=Lb[c[(c[j>>2]|0)+28>>2]&63](j,32)|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x;break}case 3:{y=a[q>>0]|0;s=(y&1)==0;if((s?(y&255)>>>1:c[N>>2]|0)|0){x=a[(s?P:c[O>>2]|0)>>0]|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x}break}case 2:{u=a[p>>0]|0;s=(u&1)==0;u=s?(u&255)>>>1:c[H>>2]|0;if(!(I|(u|0)==0)){t=s?K:c[J>>2]|0;v=t+u|0;s=c[f>>2]|0;if(u)do{a[s>>0]=a[t>>0]|0;t=t+1|0;s=s+1|0}while((t|0)!=(v|0));c[f>>2]=s}break}case 4:{s=c[f>>2]|0;h=k?h+1|0:h;w=h;v=c[L>>2]|0;a:do if(h>>>0>>0){t=h;do{u=a[t>>0]|0;if(u<<24>>24<=-1)break a;if(!(b[v+(u<<24>>24<<1)>>1]&2048))break a;t=t+1|0}while(t>>>0>>0)}else t=h;while(0);u=t;if(M){x=-2-u-~(u>>>0>w>>>0?w:u)|0;x=F>>>0>x>>>0?F:x;if(t>>>0>h>>>0&G){u=t;w=r;while(1){u=u+-1|0;y=a[u>>0]|0;v=c[f>>2]|0;c[f>>2]=v+1;a[v>>0]=y;v=(w|0)>1;if(!(u>>>0>h>>>0&v))break;else w=w+-1|0}}else v=G;y=D+x|0;u=t+(x+1)|0;if(v)w=Lb[c[(c[j>>2]|0)+28>>2]&63](j,48)|0;else w=0;t=c[f>>2]|0;c[f>>2]=t+1;if((y|0)>0){v=y;while(1){a[t>>0]=w;t=c[f>>2]|0;c[f>>2]=t+1;if((v|0)>1)v=v+-1|0;else break}}a[t>>0]=m}else u=t;if((u|0)!=(h|0)){y=a[o>>0]|0;t=(y&1)==0;if(!((t?(y&255)>>>1:c[A>>2]|0)|0))t=-1;else t=a[(t?C:c[B>>2]|0)>>0]|0;if((u|0)!=(h|0)){v=0;w=0;while(1){if((w|0)==(t|0)){y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=n;v=v+1|0;y=a[o>>0]|0;t=(y&1)==0;if(v>>>0<(t?(y&255)>>>1:c[A>>2]|0)>>>0){t=a[(t?C:c[B>>2]|0)+v>>0]|0;t=t<<24>>24==127?-1:t<<24>>24;w=0}else{t=w;w=0}}u=u+-1|0;x=a[u>>0]|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x;if((u|0)==(h|0))break;else w=w+1|0}}}else{x=Lb[c[(c[j>>2]|0)+28>>2]&63](j,48)|0;y=c[f>>2]|0;c[f>>2]=y+1;a[y>>0]=x}t=c[f>>2]|0;if((s|0)!=(t|0)?(E=t+-1|0,s>>>0>>0):0){t=E;do{y=a[s>>0]|0;a[s>>0]=a[t>>0]|0;a[t>>0]=y;s=s+1|0;t=t+-1|0}while(s>>>0>>0)}break}default:{}}z=z+1|0}while((z|0)!=4);t=a[q>>0]|0;h=(t&1)==0;t=h?(t&255)>>>1:c[N>>2]|0;if(t>>>0>1){s=h?P:c[O>>2]|0;u=s+t|0;h=c[f>>2]|0;if((t|0)!=1){s=s+1|0;do{a[h>>0]=a[s>>0]|0;h=h+1|0;s=s+1|0}while((s|0)!=(u|0))}c[f>>2]=h}switch(g&176|0){case 32:{c[e>>2]=c[f>>2];break}case 16:break;default:c[e>>2]=d}return}function es(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;z=i;i=i+176|0;r=z+56|0;B=z+52|0;x=z+64|0;u=z+61|0;y=z+60|0;C=z+40|0;E=z+28|0;D=z+16|0;m=z+12|0;q=z+68|0;w=z+8|0;v=z+4|0;s=z;b=jn(f)|0;c[B>>2]=b;o=0;t=ra(37,B|0,44220)|0;p=o;o=0;do if(p&1)F=13;else{n=a[h>>0]|0;j=(n&1)==0;p=h+4|0;if(!((j?(n&255)>>>1:c[p>>2]|0)|0))n=0;else{j=a[(j?h+1|0:c[h+8>>2]|0)>>0]|0;o=0;k=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,45)|0;n=o;o=0;if(n&1){F=13;break}n=j<<24>>24==k<<24>>24}c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;o=0;qa(3,e|0,n|0,B|0,x|0,u|0,y|0,C|0,E|0,D|0,m|0);l=o;o=0;if(!(l&1)){l=a[h>>0]|0;e=c[p>>2]|0;j=(l&1)==0?(l&255)>>>1:e;m=c[m>>2]|0;if((j|0)>(m|0)){G=a[D>>0]|0;k=a[E>>0]|0;j=(j-m<<1|1)+m+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}else{G=a[D>>0]|0;j=a[E>>0]|0;j=m+2+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((j&1)==0?(j&255)>>>1:c[E+4>>2]|0)|0}if(j>>>0>100){j=Fl(j)|0;k=j;if(!j){o=0;xa(6);G=o;o=0;if(!(G&1)){l=a[h>>0]|0;e=c[p>>2]|0;j=0;F=17}}else F=17}else{k=0;j=q;F=17}if((F|0)==17){G=(l&1)==0;h=G?h+1|0:c[h+8>>2]|0;o=0;na(1,j|0,w|0,v|0,c[f+4>>2]|0,h|0,h+(G?(l&255)>>>1:e)|0,t|0,n|0,x|0,a[u>>0]|0,a[y>>0]|0,C|0,E|0,D|0,m|0);G=o;o=0;if(!(G&1)?(c[s>>2]=c[d>>2],G=c[w>>2]|0,A=c[v>>2]|0,o=0,c[r>>2]=c[s>>2],A=ja(39,r|0,j|0,G|0,A|0,f|0,g|0)|0,G=o,o=0,!(G&1)):0){if(k){Gl(k);b=c[B>>2]|0}Im(D);Im(E);Im(C);pm(b)|0;i=z;return A|0}}j=Na()|0;if(k){Gl(k);b=c[B>>2]|0}}else j=Na()|0;Im(D);Im(E);Im(C)}while(0);if((F|0)==13)j=Na()|0;pm(b)|0;Ya(j|0);return 0}function fs(a){a=a|0;return}function gs(a){a=a|0;cj(a);return}function hs(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=+j;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;D=i;i=i+992|0;v=D+8|0;k=D;m=D+888|0;n=D+880|0;l=D+480|0;F=D+76|0;A=D+884|0;x=D+72|0;B=D+68|0;G=D+56|0;I=D+44|0;H=D+32|0;p=D+28|0;u=D+80|0;z=D+24|0;y=D+20|0;w=D+16|0;c[n>>2]=m;h[v>>3]=j;m=_k(m,100,59018,v)|0;do if(m>>>0>99){o=0;b=ua(3)|0;C=o;o=0;if(!(C&1)?(o=0,h[k>>3]=j,s=va(17,n|0,b|0,59018,k|0)|0,C=o,o=0,!(C&1)):0){b=c[n>>2]|0;if(!b){o=0;xa(6);C=o;o=0;if(C&1){b=0;k=0;C=7;break}b=c[n>>2]|0}l=Fl(s<<2)|0;k=l;if(!l){o=0;xa(6);C=o;o=0;if(C&1)C=7;else{t=0;C=10}}else{t=l;C=10}}else{b=0;k=0;C=7}}else{k=0;b=0;t=l;s=m;C=10}while(0);if((C|0)==10){o=0;l=ka(68,f|0)|0;r=o;o=0;if(r&1)C=7;else{c[F>>2]=l;o=0;r=ra(37,F|0,44212)|0;q=o;o=0;if(!(q&1)?(q=c[n>>2]|0,o=0,va(c[(c[r>>2]|0)+48>>2]|0,r|0,q|0,q+s|0,t|0)|0,q=o,o=0,!(q&1)):0){if(!s)q=0;else q=(a[c[n>>2]>>0]|0)==45;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;o=0;qa(4,e|0,q|0,F|0,A|0,x|0,B|0,G|0,I|0,H|0,p|0);e=o;o=0;if(!(e&1)){p=c[p>>2]|0;if((s|0)>(p|0)){e=a[H>>0]|0;m=a[I>>0]|0;m=(s-p<<1|1)+p+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}else{e=a[H>>0]|0;m=a[I>>0]|0;m=p+2+((e&1)==0?(e&255)>>>1:c[H+4>>2]|0)+((m&1)==0?(m&255)>>>1:c[I+4>>2]|0)|0}if(m>>>0>100){m=Fl(m<<2)|0;n=m;if(!m){o=0;xa(6);u=o;o=0;if(!(u&1)){m=0;C=26}}else C=26}else{n=0;m=u;C=26}if((C|0)==26){o=0;na(2,m|0,z|0,y|0,c[f+4>>2]|0,t|0,t+(s<<2)|0,r|0,q|0,A|0,c[x>>2]|0,c[B>>2]|0,G|0,I|0,H|0,p|0);B=o;o=0;if(!(B&1)?(c[w>>2]=c[d>>2],d=c[z>>2]|0,E=c[y>>2]|0,o=0,c[v>>2]=c[w>>2],E=ja(40,v|0,m|0,d|0,E|0,f|0,g|0)|0,d=o,o=0,!(d&1)):0){if(n){Gl(n);l=c[F>>2]|0}Wm(H);Wm(I);Im(G);pm(l)|0;if(k)Gl(k);if(b)Gl(b);i=D;return E|0}}m=Na()|0;if(n){Gl(n);l=c[F>>2]|0}}else m=Na()|0;Wm(H);Wm(I);Im(G)}else m=Na()|0;pm(l)|0}}if((C|0)==7)m=Na()|0;if(k)Gl(k);if(b)Gl(b);Ya(m|0);return 0}function is(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+112|0;n=B+108|0;p=B+96|0;s=B+92|0;t=B+80|0;u=B+68|0;v=B+56|0;w=B+52|0;x=B+40|0;y=B+36|0;z=B+24|0;q=B+12|0;r=B;do if(b){b=Is(e,43956)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](n,b);d=c[n>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](p,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[p>>2];c[l+4>>2]=c[p+4>>2];c[l+8>>2]=c[p+8>>2];c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Wm(p);break}}else{Cb[c[e+40>>2]&127](s,b);d=c[s>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](t,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[t>>2];c[l+4>>2]=c[t+4>>2];c[l+8>>2]=c[t+8>>2];c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;Wm(t);break}}while(0);c[g>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[h>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](u,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[u>>2];c[j+4>>2]=c[u+4>>2];c[j+8>>2]=c[u+8>>2];c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;Im(u);Cb[c[(c[b>>2]|0)+24>>2]&127](v,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[v>>2];c[k+4>>2]=c[v+4>>2];c[k+8>>2]=c[v+8>>2];c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;Wm(v);A=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}else{b=Is(e,43892)|0;e=c[b>>2]|0;do if(d){Cb[c[e+44>>2]&127](w,b);d=c[w>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+32>>2]&127](x,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[x>>2];c[l+4>>2]=c[x+4>>2];c[l+8>>2]=c[x+8>>2];c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;Wm(x);break}}else{Cb[c[e+40>>2]&127](y,b);d=c[y>>2]|0;a[f>>0]=d;a[f+1>>0]=d>>8;a[f+2>>0]=d>>16;a[f+3>>0]=d>>24;Cb[c[(c[b>>2]|0)+28>>2]&127](z,b);if(!(a[l>>0]&1))a[l>>0]=0;else c[c[l+8>>2]>>2]=0;c[l+4>>2]=0;o=0;ia(93,l|0,0);f=o;o=0;if(f&1){l=Na(0)|0;ec(l)}else{c[l>>2]=c[z>>2];c[l+4>>2]=c[z+4>>2];c[l+8>>2]=c[z+8>>2];c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;Wm(z);break}}while(0);c[g>>2]=Eb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[h>>2]=Eb[c[(c[b>>2]|0)+16>>2]&127](b)|0;Cb[c[(c[b>>2]|0)+20>>2]&127](q,b);if(!(a[j>>0]&1)){a[j+1>>0]=0;a[j>>0]=0}else{a[c[j+8>>2]>>0]=0;c[j+4>>2]=0}o=0;ia(91,j|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)};c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;Im(q);Cb[c[(c[b>>2]|0)+24>>2]&127](r,b);if(!(a[k>>0]&1))a[k>>0]=0;else c[c[k+8>>2]>>2]=0;c[k+4>>2]=0;o=0;ia(93,k|0,0);h=o;o=0;if(h&1){h=Na(0)|0;ec(h)}else{c[k>>2]=c[r>>2];c[k+4>>2]=c[r+4>>2];c[k+8>>2]=c[r+8>>2];c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;Wm(r);A=Eb[c[(c[b>>2]|0)+36>>2]&127](b)|0;break}}while(0);c[m>>2]=A;i=B;return}function js(b,d,e,f,g,h,i,j,k,l,m,n,o,p,q){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;c[e>>2]=b;J=p+4|0;K=p+8|0;C=o+4|0;D=(f&512|0)==0;E=o+8|0;F=(q|0)>0;G=n+4|0;H=n+8|0;I=n+1|0;A=(q|0)>0;z=0;do{switch(a[k+z>>0]|0){case 0:{c[d>>2]=c[e>>2];break}case 1:{c[d>>2]=c[e>>2];x=Lb[c[(c[i>>2]|0)+44>>2]&63](i,32)|0;y=c[e>>2]|0;c[e>>2]=y+4;c[y>>2]=x;break}case 3:{y=a[p>>0]|0;r=(y&1)==0;if((r?(y&255)>>>1:c[J>>2]|0)|0){x=c[(r?J:c[K>>2]|0)>>2]|0;y=c[e>>2]|0;c[e>>2]=y+4;c[y>>2]=x}break}case 2:{v=a[o>>0]|0;r=(v&1)==0;v=r?(v&255)>>>1:c[C>>2]|0;if(!(D|(v|0)==0)){r=r?C:c[E>>2]|0;t=r+(v<<2)|0;u=c[e>>2]|0;if(v){s=u;while(1){c[s>>2]=c[r>>2];r=r+4|0;if((r|0)==(t|0))break;else s=s+4|0}}c[e>>2]=u+(v<<2)}break}case 4:{r=c[e>>2]|0;g=j?g+4|0:g;a:do if(g>>>0>>0){s=g;do{if(!(Gb[c[(c[i>>2]|0)+12>>2]&63](i,2048,c[s>>2]|0)|0))break a;s=s+4|0}while(s>>>0>>0)}else s=g;while(0);if(F){if(s>>>0>g>>>0&A){v=c[e>>2]|0;u=q;while(1){s=s+-4|0;t=v+4|0;c[v>>2]=c[s>>2];w=u+-1|0;u=(u|0)>1;if(s>>>0>g>>>0&u){v=t;u=w}else{v=w;break}}c[e>>2]=t;t=v}else{u=A;t=q}if(u)w=Lb[c[(c[i>>2]|0)+44>>2]&63](i,48)|0;else w=0;x=c[e>>2]|0;u=t+((t|0)<0?~t:-1)|0;if((t|0)>0){v=x;while(1){c[v>>2]=w;if((t|0)>1){v=v+4|0;t=t+-1|0}else break}}c[e>>2]=x+(u+2<<2);c[x+(u+1<<2)>>2]=l}if((s|0)==(g|0)){x=Lb[c[(c[i>>2]|0)+44>>2]&63](i,48)|0;y=c[e>>2]|0;s=y+4|0;c[e>>2]=s;c[y>>2]=x}else{x=a[n>>0]|0;t=(x&1)==0;y=c[G>>2]|0;if(!((t?(x&255)>>>1:y)|0))t=-1;else t=a[(t?I:c[H>>2]|0)>>0]|0;if((s|0)!=(g|0)){w=0;x=0;while(1){u=c[e>>2]|0;if((x|0)==(t|0)){v=u+4|0;c[e>>2]=v;c[u>>2]=m;w=w+1|0;u=a[n>>0]|0;t=(u&1)==0;if(w>>>0<(t?(u&255)>>>1:y)>>>0){t=a[(t?I:c[H>>2]|0)+w>>0]|0;u=v;t=t<<24>>24==127?-1:t<<24>>24;v=0}else{u=v;t=x;v=0}}else v=x;s=s+-4|0;x=c[s>>2]|0;c[e>>2]=u+4;c[u>>2]=x;if((s|0)==(g|0))break;else x=v+1|0}}s=c[e>>2]|0}if((r|0)!=(s|0)?(B=s+-4|0,r>>>0>>0):0){s=B;do{y=c[r>>2]|0;c[r>>2]=c[s>>2];c[s>>2]=y;r=r+4|0;s=s+-4|0}while(r>>>0>>0)}break}default:{}}z=z+1|0}while((z|0)!=4);r=a[p>>0]|0;g=(r&1)==0;r=g?(r&255)>>>1:c[J>>2]|0;if(r>>>0>1){s=g?J:c[K>>2]|0;g=s+4|0;s=s+(r<<2)|0;t=c[e>>2]|0;u=s-g|0;if((r|0)!=1){r=t;while(1){c[r>>2]=c[g>>2];g=g+4|0;if((g|0)==(s|0))break;else r=r+4|0}}c[e>>2]=t+(u>>>2<<2)}switch(f&176|0){case 32:{c[d>>2]=c[e>>2];break}case 16:break;default:c[d>>2]=b}return}function ks(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;z=i;i=i+480|0;q=z+468|0;B=z+464|0;x=z+472|0;u=z+56|0;y=z+52|0;C=z+40|0;E=z+28|0;D=z+16|0;m=z+12|0;p=z+64|0;w=z+8|0;v=z+4|0;r=z;b=jn(f)|0;c[B>>2]=b;o=0;s=ra(37,B|0,44212)|0;t=o;o=0;do if(t&1)F=13;else{n=a[h>>0]|0;j=(n&1)==0;t=h+4|0;if(!((j?(n&255)>>>1:c[t>>2]|0)|0))n=0;else{j=c[(j?t:c[h+8>>2]|0)>>2]|0;o=0;k=ra(c[(c[s>>2]|0)+44>>2]|0,s|0,45)|0;n=o;o=0;if(n&1){F=13;break}n=(j|0)==(k|0)}c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;o=0;qa(4,e|0,n|0,B|0,x|0,u|0,y|0,C|0,E|0,D|0,m|0);l=o;o=0;if(!(l&1)){l=a[h>>0]|0;e=c[t>>2]|0;j=(l&1)==0?(l&255)>>>1:e;m=c[m>>2]|0;if((j|0)>(m|0)){G=a[D>>0]|0;k=a[E>>0]|0;j=(j-m<<1|1)+m+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((k&1)==0?(k&255)>>>1:c[E+4>>2]|0)|0}else{G=a[D>>0]|0;j=a[E>>0]|0;j=m+2+((G&1)==0?(G&255)>>>1:c[D+4>>2]|0)+((j&1)==0?(j&255)>>>1:c[E+4>>2]|0)|0}if(j>>>0>100){j=Fl(j<<2)|0;k=j;if(!j){o=0;xa(6);G=o;o=0;if(!(G&1)){l=a[h>>0]|0;e=c[t>>2]|0;j=0;F=17}}else F=17}else{k=0;j=p;F=17}if((F|0)==17){G=(l&1)==0;h=G?t:c[h+8>>2]|0;o=0;na(2,j|0,w|0,v|0,c[f+4>>2]|0,h|0,h+((G?(l&255)>>>1:e)<<2)|0,s|0,n|0,x|0,c[u>>2]|0,c[y>>2]|0,C|0,E|0,D|0,m|0);G=o;o=0;if(!(G&1)?(c[r>>2]=c[d>>2],G=c[w>>2]|0,A=c[v>>2]|0,o=0,c[q>>2]=c[r>>2],A=ja(40,q|0,j|0,G|0,A|0,f|0,g|0)|0,G=o,o=0,!(G&1)):0){if(k){Gl(k);b=c[B>>2]|0}Wm(D);Wm(E);Im(C);pm(b)|0;i=z;return A|0}}j=Na()|0;if(k){Gl(k);b=c[B>>2]|0}}else j=Na()|0;Wm(D);Wm(E);Im(C)}while(0);if((F|0)==13)j=Na()|0;pm(b)|0;Ya(j|0);return 0}function ls(a){a=a|0;return}function ms(a){a=a|0;cj(a);return}function ns(b,d,e){b=b|0;d=d|0;e=e|0;b=lk((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,1)|0;return b>>>((b|0)!=(-1|0)&1)|0}function os(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;k=i;i=i+16|0;l=k;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;j=a[h>>0]|0;m=(j&1)==0;d=m?h+1|0:c[h+8>>2]|0;j=m?(j&255)>>>1:c[h+4>>2]|0;h=d+j|0;a:do if((j|0)>0){while(1){o=0;ia(67,l|0,a[d>>0]|0);m=o;o=0;if(m&1)break;d=d+1|0;if(d>>>0>=h>>>0){j=4;break a}}d=Na()|0;j=7}else j=4;while(0);b:do if((j|0)==4){o=0;d=va(19,((e|0)==-1?-1:e<<1)|0,f|0,g|0,((a[l>>0]&1)==0?l+1|0:c[l+8>>2]|0)|0)|0;m=o;o=0;if(m&1){d=Na()|0;j=7;break}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;m=nl(d)|0;h=d+m|0;c:do if((m|0)>0){while(1){o=0;ia(67,b|0,a[d>>0]|0);m=o;o=0;if(m&1)break;d=d+1|0;if(d>>>0>=h>>>0)break c}d=Na()|0;Im(b);break b}while(0);Im(l);i=k;return}while(0);Im(l);Ya(d|0)}function ps(a,b){a=a|0;b=b|0;return}function qs(a){a=a|0;return}function rs(a){a=a|0;cj(a);return}function ss(b,d,e){b=b|0;d=d|0;e=e|0;b=lk((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0,1)|0;return b>>>((b|0)!=(-1|0)&1)|0}function ts(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=i;i=i+224|0;p=w+184|0;n=w+192|0;m=w+180|0;q=w+176|0;u=w+168|0;t=w+40|0;s=w+32|0;v=w+28|0;x=w+16|0;l=w+8|0;r=w;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[l+4>>2]=0;c[l>>2]=44696;k=a[h>>0]|0;y=(k&1)==0;j=h+4|0;d=y?j:c[h+8>>2]|0;h=y?(k&255)>>>1:c[j>>2]|0;j=d+(h<<2)|0;k=n+32|0;a:do if((h|0)>0){b:while(1){c[q>>2]=d;o=0;h=ya(c[(c[l>>2]|0)+12>>2]|0,l|0,p|0,d|0,j|0,q|0,n|0,k|0,m|0)|0;y=o;o=0;if(y&1){h=12;break}if((h|0)==2?1:(c[q>>2]|0)==(d|0)){h=5;break}if(n>>>0<(c[m>>2]|0)>>>0){d=n;do{o=0;ia(67,x|0,a[d>>0]|0);y=o;o=0;if(y&1){h=11;break b}d=d+1|0}while(d>>>0<(c[m>>2]|0)>>>0)}d=c[q>>2]|0;if(!((h|0)!=2&d>>>0>>0)){h=9;break a}}if((h|0)==5){o=0;ha(190,58955);o=0;d=Na()|0}else if((h|0)==11)d=Na()|0;else if((h|0)==12)d=Na()|0}else h=9;while(0);c:do if((h|0)==9){o=0;d=va(19,((e|0)==-1?-1:e<<1)|0,f|0,g|0,((a[x>>0]&1)==0?x+1|0:c[x+8>>2]|0)|0)|0;y=o;o=0;if(y&1){d=Na()|0;break}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[r+4>>2]=0;c[r>>2]=44744;y=nl(d)|0;j=d+y|0;k=j;l=t+128|0;d:do if((y|0)>0){e:while(1){c[v>>2]=d;o=0;h=ya(c[(c[r>>2]|0)+16>>2]|0,r|0,u|0,d|0,((k-d|0)>32?d+32|0:j)|0,v|0,t|0,l|0,s|0)|0;y=o;o=0;if(y&1){h=24;break}if((h|0)==2?1:(c[v>>2]|0)==(d|0)){h=18;break}if(t>>>0<(c[s>>2]|0)>>>0){d=t;do{o=0;ia(92,b|0,c[d>>2]|0);y=o;o=0;if(y&1){h=23;break e}d=d+4|0}while(d>>>0<(c[s>>2]|0)>>>0)}d=c[v>>2]|0;if(!((h|0)!=2&d>>>0>>0))break d}if((h|0)==18){o=0;ha(190,58955);o=0;d=Na()|0}else if((h|0)==23)d=Na()|0;else if((h|0)==24)d=Na()|0;Wm(b);break c}while(0);Im(x);i=w;return}while(0);Im(x);Ya(d|0)}function us(a,b){a=a|0;b=b|0;return}function vs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;c[b+4>>2]=d+-1;c[b>>2]=44196;h=b+8|0;o=0;ia(94,h|0,28);g=o;o=0;if(g&1)d=Na()|0;else{g=b+144|0;o=0;wa(5,g|0,58885,1);f=o;o=0;if(f&1)d=Na()|0;else{e=c[h>>2]|0;f=b+12|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}c[495]=0;c[494]=43124;o=0;ia(95,b|0,1976);f=o;o=0;do if(((((((((((((!(f&1)?(c[497]=0,c[496]=43164,o=0,ia(96,b|0,1984),f=o,o=0,!(f&1)):0)?(c[499]=0,c[498]=44236,c[500]=0,a[2004]=0,c[500]=Os()|0,o=0,ia(97,b|0,1992),f=o,o=0,!(f&1)):0)?(c[503]=0,c[502]=44484,o=0,ia(98,b|0,2008),f=o,o=0,!(f&1)):0)?(c[505]=0,c[504]=44552,o=0,ia(99,b|0,2016),f=o,o=0,!(f&1)):0)?(o=0,ia(100,2024,1),f=o,o=0,!(f&1)):0)?(o=0,ia(101,b|0,2024),f=o,o=0,!(f&1)):0)?(c[511]=0,c[510]=44600,o=0,ia(102,b|0,2040),f=o,o=0,!(f&1)):0)?(c[513]=0,c[512]=44648,o=0,ia(103,b|0,2048),f=o,o=0,!(f&1)):0)?(Tt(2056,1),o=0,ia(104,b|0,2056),f=o,o=0,!(f&1)):0)?(Ut(2080,1),o=0,ia(105,b|0,2080),f=o,o=0,!(f&1)):0)?(c[529]=0,c[528]=43204,o=0,ia(106,b|0,2112),f=o,o=0,!(f&1)):0)?(c[531]=0,c[530]=43276,o=0,ia(107,b|0,2120),f=o,o=0,!(f&1)):0)?(c[533]=0,c[532]=43348,o=0,ia(108,b|0,2128),f=o,o=0,!(f&1)):0){c[535]=0;c[534]=43408;o=0;ia(109,b|0,2136);f=o;o=0;if(f&1){i=42;break}c[537]=0;c[536]=43716;o=0;ia(110,b|0,2144);f=o;o=0;if(f&1){i=42;break}c[539]=0;c[538]=43780;o=0;ia(111,b|0,2152);f=o;o=0;if(f&1){i=42;break}c[541]=0;c[540]=43844;o=0;ia(112,b|0,2160);f=o;o=0;if(f&1){i=42;break}c[543]=0;c[542]=43908;o=0;ia(113,b|0,2168);f=o;o=0;if(f&1){i=42;break}c[545]=0;c[544]=43972;o=0;ia(114,b|0,2176);f=o;o=0;if(f&1){i=42;break}c[547]=0;c[546]=44008;o=0;ia(115,b|0,2184);f=o;o=0;if(f&1){i=42;break}c[549]=0;c[548]=44044;o=0;ia(116,b|0,2192);f=o;o=0;if(f&1){i=42;break}c[551]=0;c[550]=44080;o=0;ia(117,b|0,2200);f=o;o=0;if(f&1){i=42;break}c[553]=0;c[552]=43468;c[554]=43516;o=0;ia(118,b|0,2208);f=o;o=0;if(f&1){i=42;break}c[557]=0;c[556]=43560;c[558]=43608;o=0;ia(119,b|0,2224);f=o;o=0;if(f&1){i=42;break}c[561]=0;c[560]=44464;o=0;d=ua(3)|0;f=o;o=0;if(f&1){d=Na()|0;break}c[562]=d;c[560]=43652;o=0;ia(120,b|0,2240);f=o;o=0;if(f&1){i=42;break}c[565]=0;c[564]=44464;o=0;d=ua(3)|0;f=o;o=0;if(f&1){d=Na()|0;break}c[566]=d;c[564]=43684;o=0;ia(121,b|0,2256);i=o;o=0;if(i&1){i=42;break}c[569]=0;c[568]=44116;o=0;ia(122,b|0,2272);i=o;o=0;if(i&1){i=42;break}c[571]=0;c[570]=44156;o=0;ia(123,b|0,2280);i=o;o=0;if(i&1){i=42;break}return}else i=42;while(0);if((i|0)==42)d=Na()|0;Im(g)}Dv(h)}Ya(d|0)}function ws(){var b=0;do if((a[2288]|0)==0?(Ha(2288)|0)!=0:0){o=0;ua(4)|0;b=o;o=0;if(b&1){b=Na()|0;sb(2288);Ya(b|0)}else{c[11246]=44980;Pa(2288);break}}while(0);return c[11246]|0}function xs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;om(b);f=a+8|0;e=c[f>>2]|0;do if((c[a+12>>2]|0)-e>>2>>>0<=d>>>0){o=0;ia(124,f|0,d+1|0);a=o;o=0;if(!(a&1)){e=c[f>>2]|0;break}e=Na()|0;if(b)pm(b)|0;Ya(e|0)}while(0);a=c[e+(d<<2)>>2]|0;if(a){pm(a)|0;e=c[f>>2]|0}c[e+(d<<2)>>2]=b;return}function ys(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=44196;e=a+8|0;f=a+12|0;b=c[e>>2]|0;if((c[f>>2]|0)!=(b|0)){d=0;do{b=c[b+(d<<2)>>2]|0;if(b)pm(b)|0;d=d+1|0;b=c[e>>2]|0}while(d>>>0<(c[f>>2]|0)-b>>2>>>0)}Im(a+144|0);Dv(e);return}function zs(a){a=a|0;ys(a);cj(a);return}function As(a,b){a=a|0;b=b|0;if(Fv(a,b)|0)return c[(c[a+8>>2]|0)+(b<<2)>>2]|0;else{a=Ma(4)|0;qj(a);lb(a|0,640,82)}return 0}function Bs(){vs(2296,1);c[11245]=2296;return 44980}function Cs(){var a=0;a=c[(ws()|0)>>2]|0;c[11247]=a;om(a);return 44988}function Ds(){var b=0;do if((a[2456]|0)==0?(Ha(2456)|0)!=0:0){o=0;ua(5)|0;b=o;o=0;if(b&1){b=Na()|0;sb(2456);Ya(b|0)}else{c[11248]=44988;Pa(2456);break}}while(0);return c[11248]|0}function Es(a){a=a|0;var b=0,d=0;o=0;b=ua(6)|0;d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}else{d=c[b>>2]|0;c[a>>2]=d;om(d);return}}function Fs(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;om(b);return}function Gs(a){a=a|0;pm(c[a>>2]|0)|0;return}function Hs(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;if((c[a>>2]|0)!=-1){c[b>>2]=a;c[b+4>>2]=191;c[b+8>>2]=0;Em(a,b,192)}i=d;return (c[a+4>>2]|0)+-1|0}function Is(a,b){a=a|0;b=b|0;a=c[a>>2]|0;return As(a,Hs(b)|0)|0}function Js(a){a=a|0;cj(a);return}function Ks(a){a=a|0;if(a)Bb[c[(c[a>>2]|0)+4>>2]&255](a);return}function Ls(a){a=a|0;var b=0;b=c[11052]|0;c[11052]=b+1;c[a+4>>2]=b+1;return}function Ms(a){a=a|0;cj(a);return}function Ns(a,c,d){a=a|0;c=c|0;d=d|0;if(d>>>0<128)d=(b[(Os()|0)+(d<<1)>>1]&c)<<16>>16!=0;else d=0;return d|0}function Os(){var a=0,b=0;o=0;a=ua(7)|0;b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else return c[a>>2]|0;return 0}function Ps(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;i=(f-d|0)>>>2;if((d|0)!=(f|0)){h=d;while(1){a=c[h>>2]|0;if(a>>>0<128)a=e[(Os()|0)+(a<<1)>>1]|0;else a=0;b[g>>1]=a;h=h+4|0;if((h|0)==(f|0))break;else g=g+2|0}}return d+(i<<2)|0}function Qs(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;a:do if((e|0)==(f|0))e=f;else while(1){a=c[e>>2]|0;if(a>>>0<128?(b[(Os()|0)+(a<<1)>>1]&d)<<16>>16!=0:0)break a;e=e+4|0;if((e|0)==(f|0)){e=f;break}}while(0);return e|0}function Rs(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;a:do if((e|0)==(f|0))e=f;else while(1){a=c[e>>2]|0;if(a>>>0>=128)break a;if(!((b[(Os()|0)+(a<<1)>>1]&d)<<16>>16))break a;e=e+4|0;if((e|0)==(f|0)){e=f;break}}while(0);return e|0}function Ss(a,b){a=a|0;b=b|0;if(b>>>0<128)b=c[(Ts()|0)+(b<<2)>>2]|0;return b|0}function Ts(){var a=0,b=0;o=0;a=ua(8)|0;b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else return c[a>>2]|0;return 0}function Us(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(d-b|0)>>>2;if((b|0)!=(d|0)){e=b;do{a=c[e>>2]|0;if(a>>>0<128)a=c[(Ts()|0)+(a<<2)>>2]|0;c[e>>2]=a;e=e+4|0}while((e|0)!=(d|0))}return b+(f<<2)|0}function Vs(a,b){a=a|0;b=b|0;if(b>>>0<128)b=c[(Ws()|0)+(b<<2)>>2]|0;return b|0}function Ws(){var a=0,b=0;o=0;a=ua(9)|0;b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else return c[a>>2]|0;return 0}function Xs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(d-b|0)>>>2;if((b|0)!=(d|0)){e=b;do{a=c[e>>2]|0;if(a>>>0<128)a=c[(Ws()|0)+(a<<2)>>2]|0;c[e>>2]=a;e=e+4|0}while((e|0)!=(d|0))}return b+(f<<2)|0}function Ys(a,b){a=a|0;b=b|0;return b<<24>>24|0}function Zs(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;if((d|0)!=(e|0))while(1){c[f>>2]=a[d>>0];d=d+1|0;if((d|0)==(e|0))break;else f=f+4|0}return e|0}function _s(a,b,c){a=a|0;b=b|0;c=c|0;return (b>>>0<128?b&255:c)|0}function $s(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=(e-d|0)>>>2;if((d|0)!=(e|0)){h=d;b=g;while(1){g=c[h>>2]|0;a[b>>0]=g>>>0<128?g&255:f;h=h+4|0;if((h|0)==(e|0))break;else b=b+1|0}}return d+(i<<2)|0}function at(b){b=b|0;var d=0;c[b>>2]=44236;d=c[b+8>>2]|0;if((d|0)!=0?(a[b+12>>0]|0)!=0:0)dj(d);return}function bt(a){a=a|0;at(a);cj(a);return}function ct(a,b){a=a|0;b=b|0;if(b<<24>>24>-1)b=c[(Ts()|0)+((b&255)<<2)>>2]&255;return b|0}function dt(b,d,e){b=b|0;d=d|0;e=e|0;if((d|0)!=(e|0)){b=d;do{d=a[b>>0]|0;if(d<<24>>24>-1)d=c[(Ts()|0)+(d<<24>>24<<2)>>2]&255;a[b>>0]=d;b=b+1|0}while((b|0)!=(e|0))}return e|0}function et(a,b){a=a|0;b=b|0;if(b<<24>>24>-1)b=c[(Ws()|0)+(b<<24>>24<<2)>>2]&255;return b|0}function ft(b,d,e){b=b|0;d=d|0;e=e|0;if((d|0)!=(e|0)){b=d;do{d=a[b>>0]|0;if(d<<24>>24>-1)d=c[(Ws()|0)+(d<<24>>24<<2)>>2]&255;a[b>>0]=d;b=b+1|0}while((b|0)!=(e|0))}return e|0}function gt(a,b){a=a|0;b=b|0;return b|0}function ht(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if((c|0)!=(d|0))while(1){a[e>>0]=a[c>>0]|0;c=c+1|0;if((c|0)==(d|0))break;else e=e+1|0}return d|0}function it(a,b,c){a=a|0;b=b|0;c=c|0;return (b<<24>>24>-1?b:c)|0}function jt(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if((c|0)!=(d|0))while(1){b=a[c>>0]|0;a[f>>0]=b<<24>>24>-1?b:e;c=c+1|0;if((c|0)==(d|0))break;else f=f+1|0}return d|0}function kt(a){a=a|0;cj(a);return}function lt(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;c[f>>2]=d;c[i>>2]=g;return 3}function mt(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;c[f>>2]=d;c[i>>2]=g;return 3}function nt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function ot(a){a=a|0;return 1}function pt(a){a=a|0;return 1}function qt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=d-c|0;return (a>>>0>>0?a:e)|0}function rt(a){a=a|0;return 1}function st(a,b){a=a|0;b=b|0;var d=0;c[a+4>>2]=b+-1;c[a>>2]=44304;o=0;b=ua(3)|0;d=o;o=0;if(d&1){d=Na()|0;Ya(d|0)}else{c[a+8>>2]=b;return}}function tt(a){a=a|0;wu(a);cj(a);return}\n function xl(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+624|0;ca=ha+24|0;ea=ha+16|0;da=ha+588|0;Y=ha+576|0;ba=ha;V=ha+536|0;ga=ha+8|0;fa=ha+528|0;M=(e|0)!=0;N=V+40|0;U=N;V=V+39|0;W=ga+4|0;X=Y+12|0;Y=Y+11|0;Z=da;_=X;aa=_-Z|0;O=-2-Z|0;P=_+2|0;Q=ca+288|0;R=da+9|0;S=R;T=da+8|0;m=0;w=f;n=0;f=0;a:while(1){do if((m|0)>-1)if((n|0)>(2147483647-m|0)){c[(ck()|0)>>2]=75;m=-1;break}else{m=n+m|0;break}while(0);n=a[w>>0]|0;if(!(n<<24>>24)){L=245;break}else o=w;b:while(1){switch(n<<24>>24){case 37:{n=o;L=9;break b}case 0:{n=o;break b}default:{}}K=o+1|0;n=a[K>>0]|0;o=K}c:do if((L|0)==9)while(1){L=0;if((a[n+1>>0]|0)!=37)break c;o=o+1|0;n=n+2|0;if((a[n>>0]|0)==37)L=9;else break}while(0);y=o-w|0;if(M?(c[e>>2]&32|0)==0:0)Xk(w,y,e)|0;if((o|0)!=(w|0)){w=n;n=y;continue}r=n+1|0;o=a[r>>0]|0;p=(o<<24>>24)+-48|0;if(p>>>0<10){K=(a[n+2>>0]|0)==36;r=K?n+3|0:r;o=a[r>>0]|0;u=K?p:-1;f=K?1:f}else u=-1;n=o<<24>>24;d:do if((n&-32|0)==32){p=0;while(1){if(!(1<>24)+-32|p;r=r+1|0;o=a[r>>0]|0;n=o<<24>>24;if((n&-32|0)!=32){s=p;n=r;break}}}else{s=0;n=r}while(0);do if(o<<24>>24==42){p=n+1|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[l+(o<<2)>>2]=10;f=1;n=n+3|0;o=c[j+((a[p>>0]|0)+-48<<3)>>2]|0}else{if(f){m=-1;break a}if(!M){x=s;n=p;f=0;K=0;break}f=(c[g>>2]|0)+(4-1)&~(4-1);o=c[f>>2]|0;c[g>>2]=f+4;f=0;n=p}if((o|0)<0){x=s|8192;K=0-o|0}else{x=s;K=o}}else{p=(o<<24>>24)+-48|0;if(p>>>0<10){o=0;do{o=(o*10|0)+p|0;n=n+1|0;p=(a[n>>0]|0)+-48|0}while(p>>>0<10);if((o|0)<0){m=-1;break a}else{x=s;K=o}}else{x=s;K=0}}while(0);e:do if((a[n>>0]|0)==46){p=n+1|0;o=a[p>>0]|0;if(o<<24>>24!=42){r=(o<<24>>24)+-48|0;if(r>>>0<10){n=p;o=0}else{n=p;r=0;break}while(1){o=(o*10|0)+r|0;n=n+1|0;r=(a[n>>0]|0)+-48|0;if(r>>>0>=10){r=o;break e}}}p=n+2|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+3>>0]|0)==36:0){c[l+(o<<2)>>2]=10;n=n+4|0;r=c[j+((a[p>>0]|0)+-48<<3)>>2]|0;break}if(f){m=-1;break a}if(M){n=(c[g>>2]|0)+(4-1)&~(4-1);r=c[n>>2]|0;c[g>>2]=n+4;n=p}else{n=p;r=0}}else r=-1;while(0);t=0;while(1){o=(a[n>>0]|0)+-65|0;if(o>>>0>57){m=-1;break a}p=n+1|0;o=a[56223+(t*58|0)+o>>0]|0;s=o&255;if((s+-1|0)>>>0<8){n=p;t=s}else{J=p;break}}if(!(o<<24>>24)){m=-1;break}p=(u|0)>-1;do if(o<<24>>24==19)if(p){m=-1;break a}else L=52;else{if(p){c[l+(u<<2)>>2]=s;H=j+(u<<3)|0;I=c[H+4>>2]|0;L=ba;c[L>>2]=c[H>>2];c[L+4>>2]=I;L=52;break}if(!M){m=0;break a}Cl(ba,s,g)}while(0);if((L|0)==52?(L=0,!M):0){w=J;n=y;continue}u=a[n>>0]|0;u=(t|0)!=0&(u&15|0)==3?u&-33:u;p=x&-65537;I=(x&8192|0)==0?x:p;f:do switch(u|0){case 110:switch(t|0){case 0:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 1:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 2:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}case 3:{b[c[ba>>2]>>1]=m;w=J;n=y;continue a}case 4:{a[c[ba>>2]>>0]=m;w=J;n=y;continue a}case 6:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 7:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}default:{w=J;n=y;continue a}}case 112:{t=I|8;r=r>>>0>8?r:8;u=120;L=64;break}case 88:case 120:{t=I;L=64;break}case 111:{p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;if((o|0)==0&(p|0)==0)n=N;else{n=N;do{n=n+-1|0;a[n>>0]=o&7|48;o=kw(o|0,p|0,3)|0;p=D}while(!((o|0)==0&(p|0)==0))}if(!(I&8)){o=I;t=0;s=56703;L=77}else{t=U-n+1|0;o=I;r=(r|0)<(t|0)?t:r;t=0;s=56703;L=77}break}case 105:case 100:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)<0){n=hw(0,0,n|0,o|0)|0;o=D;p=ba;c[p>>2]=n;c[p+4>>2]=o;p=1;s=56703;L=76;break f}if(!(I&2048)){s=I&1;p=s;s=(s|0)==0?56703:56705;L=76}else{p=1;s=56704;L=76}break}case 117:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;p=0;s=56703;L=76;break}case 99:{a[V>>0]=c[ba>>2];w=V;o=1;t=0;u=56703;n=N;break}case 109:{n=dk(c[(ck()|0)>>2]|0)|0;L=82;break}case 115:{n=c[ba>>2]|0;n=(n|0)!=0?n:56713;L=82;break}case 67:{c[ga>>2]=c[ba>>2];c[W>>2]=0;c[ba>>2]=ga;r=-1;L=86;break}case 83:{if(!r){El(e,32,K,0,I);n=0;L=98}else L=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=+h[ba>>3];c[ea>>2]=0;h[k>>3]=q;if((c[k+4>>2]|0)>=0)if(!(I&2048)){H=I&1;G=H;H=(H|0)==0?56721:56726}else{G=1;H=56723}else{q=-q;G=1;H=56720}h[k>>3]=q;F=c[k+4>>2]&2146435072;do if(F>>>0<2146435072|(F|0)==2146435072&0<0){v=+wk(q,ea)*2.0;o=v!=0.0;if(o)c[ea>>2]=(c[ea>>2]|0)+-1;C=u|32;if((C|0)==97){w=u&32;y=(w|0)==0?H:H+9|0;x=G|2;n=12-r|0;do if(!(r>>>0>11|(n|0)==0)){q=8.0;do{n=n+-1|0;q=q*16.0}while((n|0)!=0);if((a[y>>0]|0)==45){q=-(q+(-v-q));break}else{q=v+q-q;break}}else q=v;while(0);o=c[ea>>2]|0;n=(o|0)<0?0-o|0:o;n=Dl(n,((n|0)<0)<<31>>31,X)|0;if((n|0)==(X|0)){a[Y>>0]=48;n=Y}a[n+-1>>0]=(o>>31&2)+43;t=n+-2|0;a[t>>0]=u+15;s=(r|0)<1;p=(I&8|0)==0;o=da;while(1){H=~~q;n=o+1|0;a[o>>0]=d[56687+H>>0]|w;q=(q-+(H|0))*16.0;do if((n-Z|0)==1){if(p&(s&q==0.0))break;a[n>>0]=46;n=o+2|0}while(0);if(!(q!=0.0))break;else o=n}r=(r|0)!=0&(O+n|0)<(r|0)?P+r-t|0:aa-t+n|0;p=r+x|0;El(e,32,K,p,I);if(!(c[e>>2]&32))Xk(y,x,e)|0;El(e,48,K,p,I^65536);n=n-Z|0;if(!(c[e>>2]&32))Xk(da,n,e)|0;o=_-t|0;El(e,48,r-(n+o)|0,0,0);if(!(c[e>>2]&32))Xk(t,o,e)|0;El(e,32,K,p,I^8192);n=(p|0)<(K|0)?K:p;break}n=(r|0)<0?6:r;if(o){o=(c[ea>>2]|0)+-28|0;c[ea>>2]=o;q=v*268435456.0}else{q=v;o=c[ea>>2]|0}F=(o|0)<0?ca:Q;E=F;o=F;do{B=~~q>>>0;c[o>>2]=B;o=o+4|0;q=(q-+(B>>>0))*1.0e9}while(q!=0.0);p=o;o=c[ea>>2]|0;if((o|0)>0){s=F;while(1){t=(o|0)>29?29:o;r=p+-4|0;do if(r>>>0>>0)r=s;else{o=0;do{B=mw(c[r>>2]|0,0,t|0)|0;B=jw(B|0,D|0,o|0,0)|0;o=D;A=vw(B|0,o|0,1e9,0)|0;c[r>>2]=A;o=uw(B|0,o|0,1e9,0)|0;r=r+-4|0}while(r>>>0>=s>>>0);if(!o){r=s;break}r=s+-4|0;c[r>>2]=o}while(0);while(1){if(p>>>0<=r>>>0)break;o=p+-4|0;if(!(c[o>>2]|0))p=o;else break}o=(c[ea>>2]|0)-t|0;c[ea>>2]=o;if((o|0)>0)s=r;else break}}else r=F;if((o|0)<0){y=((n+25|0)/9|0)+1|0;z=(C|0)==102;w=r;while(1){x=0-o|0;x=(x|0)>9?9:x;do if(w>>>0

>>0){o=(1<>>x;r=0;t=w;do{B=c[t>>2]|0;c[t>>2]=(B>>>x)+r;r=$(B&o,s)|0;t=t+4|0}while(t>>>0

>>0);o=(c[w>>2]|0)==0?w+4|0:w;if(!r){r=o;break}c[p>>2]=r;r=o;p=p+4|0}else r=(c[w>>2]|0)==0?w+4|0:w;while(0);o=z?F:r;p=(p-o>>2|0)>(y|0)?o+(y<<2)|0:p;o=(c[ea>>2]|0)+x|0;c[ea>>2]=o;if((o|0)>=0){w=r;break}else w=r}}else w=r;do if(w>>>0

>>0){o=(E-w>>2)*9|0;s=c[w>>2]|0;if(s>>>0<10)break;else r=10;do{r=r*10|0;o=o+1|0}while(s>>>0>=r>>>0)}else o=0;while(0);A=(C|0)==103;B=(n|0)!=0;r=n-((C|0)!=102?o:0)+((B&A)<<31>>31)|0;if((r|0)<(((p-E>>2)*9|0)+-9|0)){t=r+9216|0;z=(t|0)/9|0;r=F+(z+-1023<<2)|0;t=((t|0)%9|0)+1|0;if((t|0)<9){s=10;do{s=s*10|0;t=t+1|0}while((t|0)!=9)}else s=10;x=c[r>>2]|0;y=(x>>>0)%(s>>>0)|0;if((y|0)==0?(F+(z+-1022<<2)|0)==(p|0):0)s=w;else L=163;do if((L|0)==163){L=0;v=(((x>>>0)/(s>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;t=(s|0)/2|0;do if(y>>>0>>0)q=.5;else{if((y|0)==(t|0)?(F+(z+-1022<<2)|0)==(p|0):0){q=1.0;break}q=1.5}while(0);do if(G){if((a[H>>0]|0)!=45)break;v=-v;q=-q}while(0);t=x-y|0;c[r>>2]=t;if(!(v+q!=v)){s=w;break}C=t+s|0;c[r>>2]=C;if(C>>>0>999999999){o=w;while(1){s=r+-4|0;c[r>>2]=0;if(s>>>0>>0){o=o+-4|0;c[o>>2]=0}C=(c[s>>2]|0)+1|0;c[s>>2]=C;if(C>>>0>999999999)r=s;else{w=o;r=s;break}}}o=(E-w>>2)*9|0;t=c[w>>2]|0;if(t>>>0<10){s=w;break}else s=10;do{s=s*10|0;o=o+1|0}while(t>>>0>=s>>>0);s=w}while(0);C=r+4|0;w=s;p=p>>>0>C>>>0?C:p}y=0-o|0;while(1){if(p>>>0<=w>>>0){z=0;C=p;break}r=p+-4|0;if(!(c[r>>2]|0))p=r;else{z=1;C=p;break}}do if(A){n=(B&1^1)+n|0;if((n|0)>(o|0)&(o|0)>-5){u=u+-1|0;n=n+-1-o|0}else{u=u+-2|0;n=n+-1|0}p=I&8;if(p)break;do if(z){p=c[C+-4>>2]|0;if(!p){r=9;break}if(!((p>>>0)%10|0)){s=10;r=0}else{r=0;break}do{s=s*10|0;r=r+1|0}while(((p>>>0)%(s>>>0)|0|0)==0)}else r=9;while(0);p=((C-E>>2)*9|0)+-9|0;if((u|32|0)==102){p=p-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}else{p=p+o-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}}else p=I&8;while(0);x=n|p;s=(x|0)!=0&1;t=(u|32|0)==102;if(t){o=(o|0)>0?o:0;u=0}else{r=(o|0)<0?y:o;r=Dl(r,((r|0)<0)<<31>>31,X)|0;if((_-r|0)<2)do{r=r+-1|0;a[r>>0]=48}while((_-r|0)<2);a[r+-1>>0]=(o>>31&2)+43;E=r+-2|0;a[E>>0]=u;o=_-E|0;u=E}y=G+1+n+s+o|0;El(e,32,K,y,I);if(!(c[e>>2]&32))Xk(H,G,e)|0;El(e,48,K,y,I^65536);do if(t){r=w>>>0>F>>>0?F:w;o=r;do{p=Dl(c[o>>2]|0,0,R)|0;do if((o|0)==(r|0)){if((p|0)!=(R|0))break;a[T>>0]=48;p=T}else{if(p>>>0<=da>>>0)break;do{p=p+-1|0;a[p>>0]=48}while(p>>>0>da>>>0)}while(0);if(!(c[e>>2]&32))Xk(p,S-p|0,e)|0;o=o+4|0}while(o>>>0<=F>>>0);do if(x){if(c[e>>2]&32)break;Xk(56755,1,e)|0}while(0);if((n|0)>0&o>>>0>>0){p=o;while(1){o=Dl(c[p>>2]|0,0,R)|0;if(o>>>0>da>>>0)do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0);if(!(c[e>>2]&32))Xk(o,(n|0)>9?9:n,e)|0;p=p+4|0;o=n+-9|0;if(!((n|0)>9&p>>>0>>0)){n=o;break}else n=o}}El(e,48,n+9|0,9,0)}else{t=z?C:w+4|0;if((n|0)>-1){s=(p|0)==0;r=w;do{o=Dl(c[r>>2]|0,0,R)|0;if((o|0)==(R|0)){a[T>>0]=48;o=T}do if((r|0)==(w|0)){p=o+1|0;if(!(c[e>>2]&32))Xk(o,1,e)|0;if(s&(n|0)<1){o=p;break}if(c[e>>2]&32){o=p;break}Xk(56755,1,e)|0;o=p}else{if(o>>>0<=da>>>0)break;do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0)}while(0);p=S-o|0;if(!(c[e>>2]&32))Xk(o,(n|0)>(p|0)?p:n,e)|0;n=n-p|0;r=r+4|0}while(r>>>0>>0&(n|0)>-1)}El(e,48,n+18|0,18,0);if(c[e>>2]&32)break;Xk(u,_-u|0,e)|0}while(0);El(e,32,K,y,I^8192);n=(y|0)<(K|0)?K:y}else{t=(u&32|0)!=0;s=q!=q|0.0!=0.0;o=s?0:G;r=o+3|0;El(e,32,K,r,p);n=c[e>>2]|0;if(!(n&32)){Xk(H,o,e)|0;n=c[e>>2]|0}if(!(n&32))Xk(s?(t?56747:56751):t?56739:56743,3,e)|0;El(e,32,K,r,I^8192);n=(r|0)<(K|0)?K:r}while(0);w=J;continue a}default:{p=I;o=r;t=0;u=56703;n=N}}while(0);g:do if((L|0)==64){p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;s=u&32;if(!((o|0)==0&(p|0)==0)){n=N;do{n=n+-1|0;a[n>>0]=d[56687+(o&15)>>0]|s;o=kw(o|0,p|0,4)|0;p=D}while(!((o|0)==0&(p|0)==0));L=ba;if((t&8|0)==0|(c[L>>2]|0)==0&(c[L+4>>2]|0)==0){o=t;t=0;s=56703;L=77}else{o=t;t=2;s=56703+(u>>4)|0;L=77}}else{n=N;o=t;t=0;s=56703;L=77}}else if((L|0)==76){n=Dl(n,o,N)|0;o=I;t=p;L=77}else if((L|0)==82){L=0;I=jl(n,0,r)|0;H=(I|0)==0;w=n;o=H?r:I-n|0;t=0;u=56703;n=H?n+r|0:I}else if((L|0)==86){L=0;o=0;n=0;s=c[ba>>2]|0;while(1){p=c[s>>2]|0;if(!p)break;n=Ik(fa,p)|0;if((n|0)<0|n>>>0>(r-o|0)>>>0)break;o=n+o|0;if(r>>>0>o>>>0)s=s+4|0;else break}if((n|0)<0){m=-1;break a}El(e,32,K,o,I);if(!o){n=0;L=98}else{p=0;r=c[ba>>2]|0;while(1){n=c[r>>2]|0;if(!n){n=o;L=98;break g}n=Ik(fa,n)|0;p=n+p|0;if((p|0)>(o|0)){n=o;L=98;break g}if(!(c[e>>2]&32))Xk(fa,n,e)|0;if(p>>>0>=o>>>0){n=o;L=98;break}else r=r+4|0}}}while(0);if((L|0)==98){L=0;El(e,32,K,n,I^8192);w=J;n=(K|0)>(n|0)?K:n;continue}if((L|0)==77){L=0;p=(r|0)>-1?o&-65537:o;o=ba;o=(c[o>>2]|0)!=0|(c[o+4>>2]|0)!=0;if((r|0)!=0|o){o=(o&1^1)+(U-n)|0;w=n;o=(r|0)>(o|0)?r:o;u=s;n=N}else{w=N;o=0;u=s;n=N}}s=n-w|0;o=(o|0)<(s|0)?s:o;r=t+o|0;n=(K|0)<(r|0)?r:K;El(e,32,n,r,p);if(!(c[e>>2]&32))Xk(u,t,e)|0;El(e,48,n,r,p^65536);El(e,48,o,s,0);if(!(c[e>>2]&32))Xk(w,s,e)|0;El(e,32,n,r,p^8192);w=J}h:do if((L|0)==245)if(!e)if(f){m=1;while(1){f=c[l+(m<<2)>>2]|0;if(!f)break;Cl(j+(m<<3)|0,f,g);m=m+1|0;if((m|0)>=10){m=1;break h}}if((m|0)<10)while(1){if(c[l+(m<<2)>>2]|0){m=-1;break h}m=m+1|0;if((m|0)>=10){m=1;break}}else m=1}else m=0;while(0);i=ha;return m|0}function yl(a,b,c){a=a|0;b=b|0;c=c|0;return Rk(a,b,c)|0}function zl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+112|0;h=j;f=h;g=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;gk(h,0);e=+ek(h,d,1);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b)c[b>>2]=(d|0)!=0?a+d|0:a;i=j;return +e}function Al(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+112|0;j=k;c[j>>2]=0;g=j+4|0;c[g>>2]=a;c[j+44>>2]=a;h=j+8|0;c[h>>2]=(a|0)<0?-1:a+2147483647|0;c[j+76>>2]=-1;gk(j,0);e=fk(j,d,1,e,f)|0;if(b)c[b>>2]=a+((c[g>>2]|0)+(c[j+108>>2]|0)-(c[h>>2]|0));i=k;return e|0}function Bl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;lw(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function Cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Dl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=vw(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=uw(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=D}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function El(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+256|0;h=j;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;iw(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){Xk(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;Xk(h,f,a)|0}while(0);i=j;return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[10218]|0;d=i>>>a;if(d&3){a=(d&1^1)+a|0;e=a<<1;d=40912+(e<<2)|0;e=40912+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[10222]|0)>>>0)Ga();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else Ga()}else c[10218]=i&~(1<>2]=M|3;M=f+(M|4)|0;c[M>>2]=c[M>>2]|1;M=g;return M|0}h=c[10220]|0;if(o>>>0>h>>>0){if(d){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;a=e>>>1&1;a=(f|j|g|d|a)+(e>>>a)|0;e=a<<1;d=40912+(e<<2)|0;e=40912+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[10222]|0)>>>0)Ga();b=f+12|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;c[e>>2]=f;k=c[10220]|0;break}else Ga()}else{c[10218]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+M>>2]=h;if(k){f=c[10223]|0;d=k>>>3;b=d<<1;e=40912+(b<<2)|0;a=c[10218]|0;d=1<>2]|0;if(b>>>0<(c[10222]|0)>>>0)Ga();else{l=a;m=b}}else{c[10218]=a|d;l=40912+(b+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[10220]=h;c[10223]=i;M=j;return M|0}a=c[10219]|0;if(a){d=(a&0-a)+-1|0;L=d>>>12&16;d=d>>>L;K=d>>>5&8;d=d>>>K;M=d>>>2&4;d=d>>>M;a=d>>>1&2;d=d>>>a;e=d>>>1&1;e=c[41176+((K|L|M|a|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;a=e;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b){j=d;break}}a=(c[b+4>>2]&-8)-o|0;M=a>>>0>>0;d=M?a:d;a=b;e=M?b:e}g=c[10222]|0;if(e>>>0>>0)Ga();i=e+o|0;if(e>>>0>=i>>>0)Ga();h=c[e+24>>2]|0;d=c[e+12>>2]|0;do if((d|0)==(e|0)){a=e+20|0;b=c[a>>2]|0;if(!b){a=e+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;f=c[d>>2]|0;if(f){b=f;a=d;continue}d=b+16|0;f=c[d>>2]|0;if(!f)break;else{b=f;a=d}}if(a>>>0>>0)Ga();else{c[a>>2]=0;n=b;break}}else{f=c[e+8>>2]|0;if(f>>>0>>0)Ga();b=f+12|0;if((c[b>>2]|0)!=(e|0))Ga();a=d+8|0;if((c[a>>2]|0)==(e|0)){c[b>>2]=d;c[a>>2]=f;n=d;break}else Ga()}while(0);do if(h){b=c[e+28>>2]|0;a=41176+(b<<2)|0;if((e|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=h+16|0;if((c[b>>2]|0)==(e|0))c[b>>2]=n;else c[h+20>>2]=n;if(!n)break}a=c[10222]|0;if(n>>>0>>0)Ga();c[n+24>>2]=h;b=c[e+16>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[e+20>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){M=j+o|0;c[e+4>>2]=M|3;M=e+(M+4)|0;c[M>>2]=c[M>>2]|1}else{c[e+4>>2]=o|3;c[e+(o|4)>>2]=j|1;c[e+(j+o)>>2]=j;b=c[10220]|0;if(b){g=c[10223]|0;d=b>>>3;b=d<<1;f=40912+(b<<2)|0;a=c[10218]|0;d=1<>2]|0;if(a>>>0<(c[10222]|0)>>>0)Ga();else{p=b;q=a}}else{c[10218]=a|d;p=40912+(b+2<<2)|0;q=f}c[p>>2]=g;c[q+12>>2]=g;c[g+8>>2]=q;c[g+12>>2]=f}c[10220]=j;c[10223]=i}M=e+8|0;return M|0}else q=o}else q=o}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;l=c[10219]|0;if(l){d=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)k=31;else{q=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;k=14-(p|q|k)+(v<>>15)|0;k=m>>>(k+7|0)&1|k<<1}else k=0;a=c[41176+(k<<2)>>2]|0;a:do if(!a){f=0;a=0;v=86}else{h=d;f=0;i=m<<((k|0)==31?0:25-(k>>>1)|0);j=a;a=0;while(1){g=c[j+4>>2]&-8;d=g-m|0;if(d>>>0>>0)if((g|0)==(m|0)){g=j;a=j;v=90;break a}else a=j;else d=h;v=c[j+20>>2]|0;j=c[j+16+(i>>>31<<2)>>2]|0;f=(v|0)==0|(v|0)==(j|0)?f:v;if(!j){v=86;break}else{h=d;i=i<<1}}}while(0);if((v|0)==86){if((f|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;l=a>>>5&8;a=a>>>l;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;f=a>>>1&1;f=c[41176+((l|n|p|q|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;j=a}else{g=f;v=90}}if((v|0)==90)while(1){v=0;q=(c[g+4>>2]&-8)-m|0;f=q>>>0>>0;d=f?q:d;a=f?g:a;f=c[g+16>>2]|0;if(f){g=f;v=90;continue}g=c[g+20>>2]|0;if(!g){i=d;j=a;break}else v=90}if((j|0)!=0?i>>>0<((c[10220]|0)-m|0)>>>0:0){f=c[10222]|0;if(j>>>0>>0)Ga();h=j+m|0;if(j>>>0>=h>>>0)Ga();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){o=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)Ga();else{c[a>>2]=0;o=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)Ga();b=e+12|0;if((c[b>>2]|0)!=(j|0))Ga();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;o=d;break}else Ga()}while(0);do if(g){b=c[j+28>>2]|0;a=41176+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=o;if(!o){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=g+16|0;if((c[b>>2]|0)==(j|0))c[b>>2]=o;else c[g+20>>2]=o;if(!o)break}a=c[10222]|0;if(o>>>0>>0)Ga();c[o+24>>2]=g;b=c[j+16>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[o+16>>2]=b;c[b+24>>2]=o;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[o+20>>2]=b;c[b+24>>2]=o;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=m|3;c[j+(m|4)>>2]=i|1;c[j+(i+m)>>2]=i;b=i>>>3;if(i>>>0<256){a=b<<1;e=40912+(a<<2)|0;d=c[10218]|0;b=1<>2]|0;if(a>>>0<(c[10222]|0)>>>0)Ga();else{s=b;t=a}}else{c[10218]=d|b;s=40912+(a+2<<2)|0;t=e}c[s>>2]=h;c[t+12>>2]=h;c[j+(m+8)>>2]=t;c[j+(m+12)>>2]=e;break}b=i>>>8;if(b)if(i>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;b=41176+(e<<2)|0;c[j+(m+28)>>2]=e;c[j+(m+20)>>2]=0;c[j+(m+16)>>2]=0;a=c[10219]|0;d=1<>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(i|0)){y=d;break c}else{e=e<<1;b=d}}if(a>>>0<(c[10222]|0)>>>0)Ga();else{c[a>>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break b}}else y=b;while(0);b=y+8|0;a=c[b>>2]|0;M=c[10222]|0;if(a>>>0>=M>>>0&y>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[j+(m+8)>>2]=a;c[j+(m+12)>>2]=y;c[j+(m+24)>>2]=0;break}else Ga()}else{M=i+m|0;c[j+4>>2]=M|3;M=j+(M+4)|0;c[M>>2]=c[M>>2]|1}while(0);M=j+8|0;return M|0}else q=m}else q=m}else q=-1;while(0);d=c[10220]|0;if(d>>>0>=q>>>0){b=d-q|0;a=c[10223]|0;if(b>>>0>15){c[10223]=a+q;c[10220]=b;c[a+(q+4)>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=q|3}else{c[10220]=0;c[10223]=0;c[a+4>>2]=d|3;M=a+(d+4)|0;c[M>>2]=c[M>>2]|1}M=a+8|0;return M|0}a=c[10221]|0;if(a>>>0>q>>>0){L=a-q|0;c[10221]=L;M=c[10224]|0;c[10224]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}do if(!(c[10336]|0)){a=_a(30)|0;if(!(a+-1&a)){c[10338]=a;c[10337]=a;c[10339]=-1;c[10340]=-1;c[10341]=0;c[10329]=0;c[10336]=(qb(0)|0)&-16^1431655768;break}else Ga()}while(0);j=q+48|0;i=c[10338]|0;k=q+47|0;h=i+k|0;i=0-i|0;l=h&i;if(l>>>0<=q>>>0){M=0;return M|0}a=c[10328]|0;if((a|0)!=0?(t=c[10326]|0,y=t+l|0,y>>>0<=t>>>0|y>>>0>a>>>0):0){M=0;return M|0}d:do if(!(c[10329]&4)){a=c[10224]|0;e:do if(a){f=41320;while(1){d=c[f>>2]|0;if(d>>>0<=a>>>0?(r=f+4|0,(d+(c[r>>2]|0)|0)>>>0>a>>>0):0){g=f;a=r;break}f=c[f+8>>2]|0;if(!f){v=174;break e}}d=h-(c[10221]|0)&i;if(d>>>0<2147483647){f=Ua(d|0)|0;y=(f|0)==((c[g>>2]|0)+(c[a>>2]|0)|0);a=y?d:0;if(y){if((f|0)!=(-1|0)){w=f;p=a;v=194;break d}}else v=184}else a=0}else v=174;while(0);do if((v|0)==174){g=Ua(0)|0;if((g|0)!=(-1|0)){a=g;d=c[10337]|0;f=d+-1|0;if(!(f&a))d=l;else d=l-a+(f+a&0-d)|0;a=c[10326]|0;f=a+d|0;if(d>>>0>q>>>0&d>>>0<2147483647){y=c[10328]|0;if((y|0)!=0?f>>>0<=a>>>0|f>>>0>y>>>0:0){a=0;break}f=Ua(d|0)|0;y=(f|0)==(g|0);a=y?d:0;if(y){w=g;p=a;v=194;break d}else v=184}else a=0}else a=0}while(0);f:do if((v|0)==184){g=0-d|0;do if(j>>>0>d>>>0&(d>>>0<2147483647&(f|0)!=(-1|0))?(u=c[10338]|0,u=k-d+u&0-u,u>>>0<2147483647):0)if((Ua(u|0)|0)==(-1|0)){Ua(g|0)|0;break f}else{d=u+d|0;break}while(0);if((f|0)!=(-1|0)){w=f;p=d;v=194;break d}}while(0);c[10329]=c[10329]|4;v=191}else{a=0;v=191}while(0);if((((v|0)==191?l>>>0<2147483647:0)?(w=Ua(l|0)|0,x=Ua(0)|0,w>>>0>>0&((w|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(z=x-w|0,A=z>>>0>(q+40|0)>>>0,A):0){p=A?z:a;v=194}if((v|0)==194){a=(c[10326]|0)+p|0;c[10326]=a;if(a>>>0>(c[10327]|0)>>>0)c[10327]=a;h=c[10224]|0;g:do if(h){g=41320;do{a=c[g>>2]|0;d=g+4|0;f=c[d>>2]|0;if((w|0)==(a+f|0)){B=a;C=d;D=f;E=g;v=204;break}g=c[g+8>>2]|0}while((g|0)!=0);if(((v|0)==204?(c[E+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=B>>>0:0){c[C>>2]=D+p;M=(c[10221]|0)+p|0;L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=M-L|0;c[10224]=h+L;c[10221]=K;c[h+(L+4)>>2]=K|1;c[h+(M+4)>>2]=40;c[10225]=c[10340];break}a=c[10222]|0;if(w>>>0>>0){c[10222]=w;a=w}d=w+p|0;g=41320;while(1){if((c[g>>2]|0)==(d|0)){f=g;d=g;v=212;break}g=c[g+8>>2]|0;if(!g){d=41320;break}}if((v|0)==212)if(!(c[d+12>>2]&8)){c[f>>2]=w;n=d+4|0;c[n>>2]=(c[n>>2]|0)+p;n=w+8|0;n=(n&7|0)==0?0:0-n&7;k=w+(p+8)|0;k=(k&7|0)==0?0:0-k&7;b=w+(k+p)|0;m=n+q|0;o=w+m|0;l=b-(w+n)-q|0;c[w+(n+4)>>2]=q|3;h:do if((b|0)!=(h|0)){if((b|0)==(c[10223]|0)){M=(c[10220]|0)+l|0;c[10220]=M;c[10223]=o;c[w+(m+4)>>2]=M|1;c[w+(M+m)>>2]=M;break}i=p+4|0;d=c[w+(i+k)>>2]|0;if((d&3|0)==1){j=d&-8;g=d>>>3;i:do if(d>>>0>=256){h=c[w+((k|24)+p)>>2]|0;e=c[w+(p+12+k)>>2]|0;do if((e|0)==(b|0)){f=k|16;e=w+(i+f)|0;d=c[e>>2]|0;if(!d){e=w+(f+p)|0;d=c[e>>2]|0;if(!d){J=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;J=d;break}}else{f=c[w+((k|8)+p)>>2]|0;if(f>>>0>>0)Ga();a=f+12|0;if((c[a>>2]|0)!=(b|0))Ga();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;J=e;break}else Ga()}while(0);if(!h)break;a=c[w+(p+28+k)>>2]|0;d=41176+(a<<2)|0;do if((b|0)!=(c[d>>2]|0)){if(h>>>0<(c[10222]|0)>>>0)Ga();a=h+16|0;if((c[a>>2]|0)==(b|0))c[a>>2]=J;else c[h+20>>2]=J;if(!J)break i}else{c[d>>2]=J;if(J)break;c[10219]=c[10219]&~(1<>>0>>0)Ga();c[J+24>>2]=h;b=k|16;a=c[w+(b+p)>>2]|0;do if(a)if(a>>>0>>0)Ga();else{c[J+16>>2]=a;c[a+24>>2]=J;break}while(0);b=c[w+(i+b)>>2]|0;if(!b)break;if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{e=c[w+((k|8)+p)>>2]|0;f=c[w+(p+12+k)>>2]|0;d=40912+(g<<1<<2)|0;do if((e|0)!=(d|0)){if(e>>>0>>0)Ga();if((c[e+12>>2]|0)==(b|0))break;Ga()}while(0);if((f|0)==(e|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();a=f+8|0;if((c[a>>2]|0)==(b|0)){F=a;break}Ga()}while(0);c[e+12>>2]=f;c[F>>2]=e}while(0);b=w+((j|k)+p)|0;f=j+l|0}else f=l;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[w+(m+4)>>2]=f|1;c[w+(f+m)>>2]=f;b=f>>>3;if(f>>>0<256){a=b<<1;e=40912+(a<<2)|0;d=c[10218]|0;b=1<>2]|0;if(a>>>0>=(c[10222]|0)>>>0){K=b;L=a;break}Ga()}while(0);c[K>>2]=o;c[L+12>>2]=o;c[w+(m+8)>>2]=L;c[w+(m+12)>>2]=e;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}K=(b+1048320|0)>>>16&8;L=b<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=41176+(e<<2)|0;c[w+(m+28)>>2]=e;c[w+(m+20)>>2]=0;c[w+(m+16)>>2]=0;a=c[10219]|0;d=1<>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break}b=c[b>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(f|0)){M=d;break j}else{e=e<<1;b=d}}if(a>>>0<(c[10222]|0)>>>0)Ga();else{c[a>>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break h}}else M=b;while(0);b=M+8|0;a=c[b>>2]|0;L=c[10222]|0;if(a>>>0>=L>>>0&M>>>0>=L>>>0){c[a+12>>2]=o;c[b>>2]=o;c[w+(m+8)>>2]=a;c[w+(m+12)>>2]=M;c[w+(m+24)>>2]=0;break}else Ga()}else{M=(c[10221]|0)+l|0;c[10221]=M;c[10224]=o;c[w+(m+4)>>2]=M|1}while(0);M=w+(n|8)|0;return M|0}else d=41320;while(1){a=c[d>>2]|0;if(a>>>0<=h>>>0?(b=c[d+4>>2]|0,e=a+b|0,e>>>0>h>>>0):0)break;d=c[d+8>>2]|0}f=a+(b+-39)|0;a=a+(b+-47+((f&7|0)==0?0:0-f&7))|0;f=h+16|0;a=a>>>0>>0?h:a;b=a+8|0;d=w+8|0;d=(d&7|0)==0?0:0-d&7;M=p+-40-d|0;c[10224]=w+d;c[10221]=M;c[w+(d+4)>>2]=M|1;c[w+(p+-36)>>2]=40;c[10225]=c[10340];d=a+4|0;c[d>>2]=27;c[b>>2]=c[10330];c[b+4>>2]=c[10331];c[b+8>>2]=c[10332];c[b+12>>2]=c[10333];c[10330]=w;c[10331]=p;c[10333]=0;c[10332]=b;b=a+28|0;c[b>>2]=7;if((a+32|0)>>>0>>0)do{M=b;b=b+4|0;c[b>>2]=7}while((M+8|0)>>>0>>0);if((a|0)!=(h|0)){g=a-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){a=b<<1;e=40912+(a<<2)|0;d=c[10218]|0;b=1<>2]|0;if(a>>>0<(c[10222]|0)>>>0)Ga();else{G=b;H=a}}else{c[10218]=d|b;G=40912+(a+2<<2)|0;H=e}c[G>>2]=h;c[H+12>>2]=h;c[h+8>>2]=H;c[h+12>>2]=e;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=41176+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;b=c[10219]|0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=c[d>>2]|0;k:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){I=d;break k}else{e=e<<1;b=d}}if(a>>>0<(c[10222]|0)>>>0)Ga();else{c[a>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else I=b;while(0);b=I+8|0;a=c[b>>2]|0;M=c[10222]|0;if(a>>>0>=M>>>0&I>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=I;c[h+24>>2]=0;break}else Ga()}}else{M=c[10222]|0;if((M|0)==0|w>>>0>>0)c[10222]=w;c[10330]=w;c[10331]=p;c[10333]=0;c[10227]=c[10336];c[10226]=-1;b=0;do{M=b<<1;L=40912+(M<<2)|0;c[40912+(M+3<<2)>>2]=L;c[40912+(M+2<<2)>>2]=L;b=b+1|0}while((b|0)!=32);M=w+8|0;M=(M&7|0)==0?0:0-M&7;L=p+-40-M|0;c[10224]=w+M;c[10221]=L;c[w+(M+4)>>2]=L|1;c[w+(p+-36)>>2]=40;c[10225]=c[10340]}while(0);b=c[10221]|0;if(b>>>0>q>>>0){L=b-q|0;c[10221]=L;M=c[10224]|0;c[10224]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}}c[(ck()|0)>>2]=12;M=0;return M|0}function Gl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[10222]|0;if(b>>>0>>0)Ga();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)Ga();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)Ga();if((l|0)==(c[10223]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[10220]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=40912+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)Ga();if((c[e+12>>2]|0)!=(l|0))Ga()}if((d|0)==(e|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else Ga()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)Ga();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ga();b=f+12|0;if((c[b>>2]|0)!=(l|0))Ga();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else Ga()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=41176+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[10222]|0;if(k>>>0>>0)Ga();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)Ga();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))Ga();if(!(d&2)){if((q|0)==(c[10224]|0)){t=(c[10221]|0)+g|0;c[10221]=t;c[10224]=u;c[u+4>>2]=t|1;if((u|0)!=(c[10223]|0))return;c[10223]=0;c[10220]=0;return}if((q|0)==(c[10223]|0)){t=(c[10220]|0)+g|0;c[10220]=t;c[10223]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[10222]|0)>>>0)Ga();e=d+12|0;if((c[e>>2]|0)!=(q|0))Ga();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else Ga()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=41176+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[10222]|0;if(p>>>0>>0)Ga();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)Ga();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[10222]|0)>>>0)Ga();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=40912+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[10222]|0)>>>0)Ga();if((c[e+12>>2]|0)!=(q|0))Ga()}if((d|0)==(e|0)){c[10218]=c[10218]&~(1<>>0<(c[10222]|0)>>>0)Ga();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else Ga()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[10223]|0)){c[10220]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=40912+(d<<2)|0;e=c[10218]|0;b=1<>2]|0;if(d>>>0<(c[10222]|0)>>>0)Ga();else{r=b;s=d}}else{c[10218]=e|b;r=40912+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=41176+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[10219]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){d=b+16+(f>>>31<<2)|0;e=c[d>>2]|0;if(!e)break;if((c[e+4>>2]&-8|0)==(g|0)){t=e;break b}else{f=f<<1;b=e}}if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[d>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[10222]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else Ga()}else{c[10219]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[10226]|0)+-1|0;c[10226]=u;if(!u)b=41328;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[10226]=-1;return}function Hl(a,b){a=a|0;b=b|0;var d=0;if(a){d=$(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=Fl(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;iw(b|0,0,d|0)|0;return b|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=Fl(b)|0;return a|0}if(b>>>0>4294967231){c[(ck()|0)>>2]=12;a=0;return a|0}d=Jl(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){a=d+8|0;return a|0}d=Fl(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;lw(d|0,a|0,(e>>>0>>0?e:b)|0)|0;Gl(a);a=d;return a|0}function Jl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=a+4|0;p=c[o>>2]|0;j=p&-8;l=a+j|0;i=c[10222]|0;d=p&3;if(!((d|0)!=1&a>>>0>=i>>>0&a>>>0>>0))Ga();e=a+(j|4)|0;f=c[e>>2]|0;if(!(f&1))Ga();if(!d){if(b>>>0<256){a=0;return a|0}if(j>>>0>=(b+4|0)>>>0?(j-b|0)>>>0<=c[10338]<<1>>>0:0)return a|0;a=0;return a|0}if(j>>>0>=b>>>0){d=j-b|0;if(d>>>0<=15)return a|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|3;c[e>>2]=c[e>>2]|1;Kl(a+b|0,d);return a|0}if((l|0)==(c[10224]|0)){d=(c[10221]|0)+j|0;if(d>>>0<=b>>>0){a=0;return a|0}n=d-b|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|1;c[10224]=a+b;c[10221]=n;return a|0}if((l|0)==(c[10223]|0)){e=(c[10220]|0)+j|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|1;c[a+e>>2]=d;e=a+(e+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[o>>2]=p&1|e|2;e=a+(e+4)|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[10220]=d;c[10223]=e;return a|0}if(f&2){a=0;return a|0}m=(f&-8)+j|0;if(m>>>0>>0){a=0;return a|0}n=m-b|0;g=f>>>3;do if(f>>>0>=256){h=c[a+(j+24)>>2]|0;g=c[a+(j+12)>>2]|0;do if((g|0)==(l|0)){e=a+(j+20)|0;d=c[e>>2]|0;if(!d){e=a+(j+16)|0;d=c[e>>2]|0;if(!d){k=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;k=d;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)Ga();d=f+12|0;if((c[d>>2]|0)!=(l|0))Ga();e=g+8|0;if((c[e>>2]|0)==(l|0)){c[d>>2]=g;c[e>>2]=f;k=g;break}else Ga()}while(0);if(h){d=c[a+(j+28)>>2]|0;e=41176+(d<<2)|0;if((l|0)==(c[e>>2]|0)){c[e>>2]=k;if(!k){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();d=h+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=k;else c[h+20>>2]=k;if(!k)break}e=c[10222]|0;if(k>>>0>>0)Ga();c[k+24>>2]=h;d=c[a+(j+16)>>2]|0;do if(d)if(d>>>0>>0)Ga();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(j+20)>>2]|0;if(d)if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[k+20>>2]=d;c[d+24>>2]=k;break}}}else{f=c[a+(j+8)>>2]|0;e=c[a+(j+12)>>2]|0;d=40912+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ga();if((c[f+12>>2]|0)!=(l|0))Ga()}if((e|0)==(f|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();d=e+8|0;if((c[d>>2]|0)==(l|0))h=d;else Ga()}else h=e+8|0;c[f+12>>2]=e;c[h>>2]=f}while(0);if(n>>>0<16){c[o>>2]=m|p&1|2;b=a+(m|4)|0;c[b>>2]=c[b>>2]|1;return a|0}else{c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|3;p=a+(m|4)|0;c[p>>2]=c[p>>2]|1;Kl(a+b|0,n);return a|0}return 0}function Kl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){k=c[a>>2]|0;if(!(d&3))return;n=a+(0-k)|0;m=k+b|0;j=c[10222]|0;if(n>>>0>>0)Ga();if((n|0)==(c[10223]|0)){e=a+(b+4)|0;d=c[e>>2]|0;if((d&3|0)!=3){t=n;h=m;break}c[10220]=m;c[e>>2]=d&-2;c[a+(4-k)>>2]=m|1;c[q>>2]=m;return}g=k>>>3;if(k>>>0<256){f=c[a+(8-k)>>2]|0;e=c[a+(12-k)>>2]|0;d=40912+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ga();if((c[f+12>>2]|0)!=(n|0))Ga()}if((e|0)==(f|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();d=e+8|0;if((c[d>>2]|0)==(n|0))i=d;else Ga()}else i=e+8|0;c[f+12>>2]=e;c[i>>2]=f;t=n;h=m;break}i=c[a+(24-k)>>2]|0;f=c[a+(12-k)>>2]|0;do if((f|0)==(n|0)){f=16-k|0;e=a+(f+4)|0;d=c[e>>2]|0;if(!d){e=a+f|0;d=c[e>>2]|0;if(!d){l=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;l=d;break}}else{g=c[a+(8-k)>>2]|0;if(g>>>0>>0)Ga();d=g+12|0;if((c[d>>2]|0)!=(n|0))Ga();e=f+8|0;if((c[e>>2]|0)==(n|0)){c[d>>2]=f;c[e>>2]=g;l=f;break}else Ga()}while(0);if(i){d=c[a+(28-k)>>2]|0;e=41176+(d<<2)|0;if((n|0)==(c[e>>2]|0)){c[e>>2]=l;if(!l){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();d=i+16|0;if((c[d>>2]|0)==(n|0))c[d>>2]=l;else c[i+20>>2]=l;if(!l){t=n;h=m;break}}f=c[10222]|0;if(l>>>0>>0)Ga();c[l+24>>2]=i;d=16-k|0;e=c[a+d>>2]|0;do if(e)if(e>>>0>>0)Ga();else{c[l+16>>2]=e;c[e+24>>2]=l;break}while(0);d=c[a+(d+4)>>2]|0;if(d)if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[l+20>>2]=d;c[d+24>>2]=l;t=n;h=m;break}else{t=n;h=m}}else{t=n;h=m}}else{t=a;h=b}while(0);j=c[10222]|0;if(q>>>0>>0)Ga();d=a+(b+4)|0;e=c[d>>2]|0;if(!(e&2)){if((q|0)==(c[10224]|0)){s=(c[10221]|0)+h|0;c[10221]=s;c[10224]=t;c[t+4>>2]=s|1;if((t|0)!=(c[10223]|0))return;c[10223]=0;c[10220]=0;return}if((q|0)==(c[10223]|0)){s=(c[10220]|0)+h|0;c[10220]=s;c[10223]=t;c[t+4>>2]=s|1;c[t+s>>2]=s;return}h=(e&-8)+h|0;g=e>>>3;do if(e>>>0>=256){i=c[a+(b+24)>>2]|0;f=c[a+(b+12)>>2]|0;do if((f|0)==(q|0)){e=a+(b+20)|0;d=c[e>>2]|0;if(!d){e=a+(b+16)|0;d=c[e>>2]|0;if(!d){p=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)Ga();else{c[e>>2]=0;p=d;break}}else{g=c[a+(b+8)>>2]|0;if(g>>>0>>0)Ga();d=g+12|0;if((c[d>>2]|0)!=(q|0))Ga();e=f+8|0;if((c[e>>2]|0)==(q|0)){c[d>>2]=f;c[e>>2]=g;p=f;break}else Ga()}while(0);if(i){d=c[a+(b+28)>>2]|0;e=41176+(d<<2)|0;if((q|0)==(c[e>>2]|0)){c[e>>2]=p;if(!p){c[10219]=c[10219]&~(1<>>0<(c[10222]|0)>>>0)Ga();d=i+16|0;if((c[d>>2]|0)==(q|0))c[d>>2]=p;else c[i+20>>2]=p;if(!p)break}e=c[10222]|0;if(p>>>0>>0)Ga();c[p+24>>2]=i;d=c[a+(b+16)>>2]|0;do if(d)if(d>>>0>>0)Ga();else{c[p+16>>2]=d;c[d+24>>2]=p;break}while(0);d=c[a+(b+20)>>2]|0;if(d)if(d>>>0<(c[10222]|0)>>>0)Ga();else{c[p+20>>2]=d;c[d+24>>2]=p;break}}}else{f=c[a+(b+8)>>2]|0;e=c[a+(b+12)>>2]|0;d=40912+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)Ga();if((c[f+12>>2]|0)!=(q|0))Ga()}if((e|0)==(f|0)){c[10218]=c[10218]&~(1<>>0>>0)Ga();d=e+8|0;if((c[d>>2]|0)==(q|0))o=d;else Ga()}else o=e+8|0;c[f+12>>2]=e;c[o>>2]=f}while(0);c[t+4>>2]=h|1;c[t+h>>2]=h;if((t|0)==(c[10223]|0)){c[10220]=h;return}}else{c[d>>2]=e&-2;c[t+4>>2]=h|1;c[t+h>>2]=h}d=h>>>3;if(h>>>0<256){e=d<<1;g=40912+(e<<2)|0;f=c[10218]|0;d=1<>2]|0;if(e>>>0<(c[10222]|0)>>>0)Ga();else{r=d;s=e}}else{c[10218]=f|d;r=40912+(e+2<<2)|0;s=g}c[r>>2]=t;c[s+12>>2]=t;c[t+8>>2]=s;c[t+12>>2]=g;return}d=h>>>8;if(d)if(h>>>0>16777215)g=31;else{r=(d+1048320|0)>>>16&8;s=d<>>16&4;s=s<>>16&2;g=14-(q|r|g)+(s<>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;d=41176+(g<<2)|0;c[t+28>>2]=g;c[t+20>>2]=0;c[t+16>>2]=0;e=c[10219]|0;f=1<>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}d=c[d>>2]|0;a:do if((c[d+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=d+16+(g>>>31<<2)|0;f=c[e>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(h|0)){d=f;break a}else{g=g<<1;d=f}}if(e>>>0<(c[10222]|0)>>>0)Ga();c[e>>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}while(0);e=d+8|0;f=c[e>>2]|0;s=c[10222]|0;if(!(f>>>0>=s>>>0&d>>>0>=s>>>0))Ga();c[f+12>>2]=t;c[e>>2]=t;c[t+8>>2]=f;c[t+12>>2]=d;c[t+24>>2]=0;return}function Ll(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;e=c[9321]|0;Pl(42048,e,42104);c[10342]=42892;c[10344]=42912;c[10343]=0;a=c[10720]|0;o=0;ia(62,41368+a|0,42048);g=o;o=0;if(g&1){g=Na()|0;fn(41376);Ya(g|0)}c[41368+(a+72)>>2]=0;c[41368+(a+76)>>2]=-1;f=c[9322]|0;Ql(42152,f,42112);c[10364]=42972;c[10365]=42992;d=c[10740]|0;o=0;ia(62,41456+d|0,42152);g=o;o=0;if(g&1){g=Na()|0;fn(41460);Ya(g|0)}a=d+72|0;c[41456+a>>2]=0;b=d+76|0;c[41456+b>>2]=-1;g=c[9320]|0;Ql(42200,g,42120);c[10385]=42972;c[10386]=42992;o=0;ia(62,41540+d|0,42200);h=o;o=0;if(h&1){h=Na()|0;fn(41544);Ya(h|0)}c[41540+a>>2]=0;c[41540+b>>2]=-1;h=c[41540+((c[(c[10385]|0)+-12>>2]|0)+24)>>2]|0;c[10406]=42972;c[10407]=42992;o=0;ia(62,41624+d|0,h|0);h=o;o=0;if(h&1){h=Na()|0;fn(41628);Ya(h|0)}c[41624+a>>2]=0;c[41624+b>>2]=-1;c[41368+((c[(c[10342]|0)+-12>>2]|0)+72)>>2]=41456;a=41540+((c[(c[10385]|0)+-12>>2]|0)+4)|0;c[a>>2]=c[a>>2]|8192;c[41540+((c[(c[10385]|0)+-12>>2]|0)+72)>>2]=41456;Rl(42248,e,42128);c[10427]=42932;c[10429]=42952;c[10428]=0;a=c[10730]|0;o=0;ia(62,41708+a|0,42248);h=o;o=0;if(h&1){h=Na()|0;ln(41716);Ya(h|0)}c[41708+(a+72)>>2]=0;c[41708+(a+76)>>2]=-1;Sl(42304,f,42136);c[10449]=43012;c[10450]=43032;d=c[10750]|0;o=0;ia(62,41796+d|0,42304);h=o;o=0;if(h&1){h=Na()|0;ln(41800);Ya(h|0)}a=d+72|0;c[41796+a>>2]=0;b=d+76|0;c[41796+b>>2]=-1;Sl(42352,g,42144);c[10470]=43012;c[10471]=43032;o=0;ia(62,41880+d|0,42352);h=o;o=0;if(h&1){h=Na()|0;ln(41884);Ya(h|0)}c[41880+a>>2]=0;c[41880+b>>2]=-1;h=c[41880+((c[(c[10470]|0)+-12>>2]|0)+24)>>2]|0;c[10491]=43012;c[10492]=43032;o=0;ia(62,41964+d|0,h|0);h=o;o=0;if(h&1){h=Na()|0;ln(41968);Ya(h|0)}else{c[41964+a>>2]=0;c[41964+b>>2]=-1;c[41708+((c[(c[10427]|0)+-12>>2]|0)+72)>>2]=41796;h=41880+((c[(c[10470]|0)+-12>>2]|0)+4)|0;c[h>>2]=c[h>>2]|8192;c[41880+((c[(c[10470]|0)+-12>>2]|0)+72)>>2]=41796;return}}function Ml(a){a=a|0;o=0;ka(70,41456)|0;a=o;o=0;if(((!(a&1)?(o=0,ka(70,41624)|0,a=o,o=0,!(a&1)):0)?(o=0,ka(71,41796)|0,a=o,o=0,!(a&1)):0)?(o=0,ka(71,41964)|0,a=o,o=0,!(a&1)):0)return;a=Na(0)|0;ec(a)}function Nl(){Ll(0);kb(187,56757,n|0)|0;return}function Ol(){return}function Pl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;pn(b);c[b>>2]=42600;c[b+32>>2]=d;c[b+40>>2]=e;c[b+48>>2]=-1;a[b+52>>0]=0;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;ia(23,b|0,f|0);e=o;o=0;if(e&1){h=Na()|0;Gs(f);nn(b);Ya(h|0)}else{Gs(f);i=g;return}}function Ql(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;pn(b);c[b>>2]=42536;c[b+32>>2]=d;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;d=ra(37,f|0,44280)|0;h=o;o=0;if(h&1){h=Na()|0;Gs(f);nn(b);Ya(h|0)}else{Gs(f);c[b+36>>2]=d;c[b+40>>2]=e;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;i=g;return}}function Rl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;En(b);c[b>>2]=42472;c[b+32>>2]=d;c[b+40>>2]=e;c[b+48>>2]=-1;a[b+52>>0]=0;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;ia(21,b|0,f|0);e=o;o=0;if(e&1){h=Na()|0;Gs(f);Cn(b);Ya(h|0)}else{Gs(f);i=g;return}}function Sl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=i;i=i+16|0;h=g+4|0;f=g;En(b);c[b>>2]=42408;c[b+32>>2]=d;Fs(h,b+4|0);c[f>>2]=c[h>>2];o=0;d=ra(37,f|0,44288)|0;h=o;o=0;if(h&1){h=Na()|0;Gs(f);Cn(b);Ya(h|0)}else{Gs(f);c[b+36>>2]=d;c[b+40>>2]=e;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;i=g;return}}function Tl(a){a=a|0;Cn(a);cj(a);return}function Ul(b,d){b=b|0;d=d|0;Eb[c[(c[b>>2]|0)+24>>2]&127](b)|0;d=Is(d,44288)|0;c[b+36>>2]=d;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;return}function Vl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l;d=a+36|0;e=a+40|0;f=j+8|0;g=j;b=a+32|0;a:while(1){a=c[d>>2]|0;a=Mb[c[(c[a>>2]|0)+20>>2]&31](a,c[e>>2]|0,j,f,h)|0;m=(c[h>>2]|0)-g|0;if((Yk(j,1,m,c[b>>2]|0)|0)!=(m|0)){a=-1;break}switch(a|0){case 1:break;case 2:{a=-1;break a}default:{k=4;break a}}}if((k|0)==4)a=((Vk(c[b>>2]|0)|0)!=0)<<31>>31;i=l;return a|0}function Wl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;a:do if(!(a[b+44>>0]|0))if((e|0)>0){f=d;d=0;while(1){if((Lb[c[(c[b>>2]|0)+52>>2]&63](b,c[f>>2]|0)|0)==-1)break a;d=d+1|0;if((d|0)<(e|0))f=f+4|0;else break}}else d=0;else d=Yk(d,4,e,c[b+32>>2]|0)|0;while(0);return d|0}function Xl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;p=s+16|0;e=s+8|0;o=s+4|0;n=s;q=(d|0)==-1;a:do if(!q){c[e>>2]=d;if(a[b+44>>0]|0)if((Yk(e,4,1,c[b+32>>2]|0)|0)==1){r=11;break}else{e=-1;break}c[o>>2]=p;l=e+4|0;m=b+36|0;g=b+40|0;h=p+8|0;j=p;k=b+32|0;while(1){b=c[m>>2]|0;b=Sb[c[(c[b>>2]|0)+12>>2]&15](b,c[g>>2]|0,e,l,n,p,h,o)|0;if((c[n>>2]|0)==(e|0)){e=-1;break a}if((b|0)==3)break;f=(b|0)==1;if(b>>>0>=2){e=-1;break a}b=(c[o>>2]|0)-j|0;if((Yk(p,1,b,c[k>>2]|0)|0)!=(b|0)){e=-1;break a}if(f)e=f?c[n>>2]|0:e;else{r=11;break a}}if((Yk(e,1,1,c[k>>2]|0)|0)!=1)e=-1;else r=11}else r=11;while(0);if((r|0)==11)e=q?0:d;i=s;return e|0}function Yl(b,d){b=b|0;d=d|0;var e=0,f=0;f=Is(d,44288)|0;e=b+36|0;c[e>>2]=f;d=b+44|0;c[d>>2]=Eb[c[(c[f>>2]|0)+24>>2]&127](f)|0;e=c[e>>2]|0;a[b+53>>0]=(Eb[c[(c[e>>2]|0)+28>>2]&127](e)|0)&1;if((c[d>>2]|0)>8)Rr(56783);return}function Zl(a){a=a|0;Cn(a);cj(a);return}function _l(a){a=a|0;return bm(a,0)|0}function $l(a){a=a|0;return bm(a,1)|0}function am(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+16|0;k=m+8|0;f=m+4|0;g=m;h=b+52|0;e=(a[h>>0]|0)!=0;a:do if((d|0)==-1)if(e)d=-1;else{d=c[b+48>>2]|0;a[h>>0]=(d|0)!=-1&1}else{j=b+48|0;b:do if(e){c[f>>2]=c[j>>2];e=c[b+36>>2]|0;switch(Sb[c[(c[e>>2]|0)+12>>2]&15](e,c[b+40>>2]|0,f,f+4|0,g,l,l+8|0,k)|0){case 1:case 2:{d=-1;break a}case 3:{a[l>>0]=c[j>>2];c[k>>2]=l+1;break}default:{}}e=b+32|0;while(1){f=c[k>>2]|0;if(f>>>0<=l>>>0)break b;b=f+-1|0;c[k>>2]=b;if((al(a[b>>0]|0,c[e>>2]|0)|0)==-1){d=-1;break a}}}while(0);c[j>>2]=d;a[h>>0]=1}while(0);i=m;return d|0}function bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=i;i=i+32|0;q=r+16|0;p=r+8|0;m=r+4|0;n=r;g=b+52|0;a:do if(a[g>>0]|0){f=b+48|0;e=c[f>>2]|0;if(d){c[f>>2]=-1;a[g>>0]=0}}else{e=c[b+44>>2]|0;e=(e|0)>1?e:1;o=b+32|0;if((e|0)>0){g=0;do{f=Zk(c[o>>2]|0)|0;if((f|0)==-1){e=-1;break a}a[q+g>>0]=f;g=g+1|0}while((g|0)<(e|0))}b:do if(!(a[b+53>>0]|0)){j=b+40|0;k=b+36|0;l=p+4|0;c:while(1){s=c[j>>2]|0;g=s;f=c[g>>2]|0;g=c[g+4>>2]|0;t=c[k>>2]|0;h=q+e|0;switch(Sb[c[(c[t>>2]|0)+16>>2]&15](t,s,q,h,m,p,l,n)|0){case 2:{e=-1;break a}case 3:break c;case 1:break;default:break b}t=c[j>>2]|0;c[t>>2]=f;c[t+4>>2]=g;if((e|0)==8){e=-1;break a}f=Zk(c[o>>2]|0)|0;if((f|0)==-1){e=-1;break a}a[h>>0]=f;e=e+1|0}c[p>>2]=a[q>>0]}else c[p>>2]=a[q>>0];while(0);if(d){e=c[p>>2]|0;c[b+48>>2]=e;break}while(1){if((e|0)<=0)break;e=e+-1|0;if((al(a[q+e>>0]|0,c[o>>2]|0)|0)==-1){e=-1;break a}}e=c[p>>2]|0}while(0);i=r;return e|0}function cm(a){a=a|0;nn(a);cj(a);return}function dm(b,d){b=b|0;d=d|0;Eb[c[(c[b>>2]|0)+24>>2]&127](b)|0;d=Is(d,44280)|0;c[b+36>>2]=d;a[b+44>>0]=(Eb[c[(c[d>>2]|0)+28>>2]&127](d)|0)&1;return}function em(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;j=l+8|0;h=l;d=a+36|0;e=a+40|0;f=j+8|0;g=j;b=a+32|0;a:while(1){a=c[d>>2]|0;a=Mb[c[(c[a>>2]|0)+20>>2]&31](a,c[e>>2]|0,j,f,h)|0;m=(c[h>>2]|0)-g|0;if((Yk(j,1,m,c[b>>2]|0)|0)!=(m|0)){a=-1;break}switch(a|0){case 1:break;case 2:{a=-1;break a}default:{k=4;break a}}}if((k|0)==4)a=((Vk(c[b>>2]|0)|0)!=0)<<31>>31;i=l;return a|0}function fm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0;a:do if(!(a[b+44>>0]|0))if((f|0)>0){g=e;e=0;while(1){if((Lb[c[(c[b>>2]|0)+52>>2]&63](b,d[g>>0]|0)|0)==-1)break a;e=e+1|0;if((e|0)<(f|0))g=g+1|0;else break}}else e=0;else e=Yk(e,1,f,c[b+32>>2]|0)|0;while(0);return e|0}function gm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;p=s+16|0;e=s+8|0;o=s+4|0;n=s;q=(d|0)==-1;a:do if(!q){a[e>>0]=d;if(a[b+44>>0]|0)if((Yk(e,1,1,c[b+32>>2]|0)|0)==1){r=11;break}else{e=-1;break}c[o>>2]=p;m=e+1|0;g=b+36|0;h=b+40|0;j=p+8|0;k=p;l=b+32|0;while(1){b=c[g>>2]|0;b=Sb[c[(c[b>>2]|0)+12>>2]&15](b,c[h>>2]|0,e,m,n,p,j,o)|0;if((c[n>>2]|0)==(e|0)){e=-1;break a}if((b|0)==3)break;f=(b|0)==1;if(b>>>0>=2){e=-1;break a}b=(c[o>>2]|0)-k|0;if((Yk(p,1,b,c[l>>2]|0)|0)!=(b|0)){e=-1;break a}if(f)e=f?c[n>>2]|0:e;else{r=11;break a}}if((Yk(e,1,1,c[l>>2]|0)|0)!=1)e=-1;else r=11}else r=11;while(0);if((r|0)==11)e=q?0:d;i=s;return e|0}function hm(b,d){b=b|0;d=d|0;var e=0,f=0;f=Is(d,44280)|0;e=b+36|0;c[e>>2]=f;d=b+44|0;c[d>>2]=Eb[c[(c[f>>2]|0)+24>>2]&127](f)|0;e=c[e>>2]|0;a[b+53>>0]=(Eb[c[(c[e>>2]|0)+28>>2]&127](e)|0)&1;if((c[d>>2]|0)>8)Rr(56783);return}function im(a){a=a|0;nn(a);cj(a);return}function jm(a){a=a|0;return mm(a,0)|0}function km(a){a=a|0;return mm(a,1)|0}function lm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;l=m+16|0;k=m+4|0;f=m+8|0;g=m;h=b+52|0;e=(a[h>>0]|0)!=0;a:do if((d|0)==-1)if(e)d=-1;else{d=c[b+48>>2]|0;a[h>>0]=(d|0)!=-1&1}else{j=b+48|0;b:do if(e){a[f>>0]=c[j>>2];e=c[b+36>>2]|0;switch(Sb[c[(c[e>>2]|0)+12>>2]&15](e,c[b+40>>2]|0,f,f+1|0,g,l,l+8|0,k)|0){case 1:case 2:{d=-1;break a}case 3:{a[l>>0]=c[j>>2];c[k>>2]=l+1;break}default:{}}e=b+32|0;while(1){f=c[k>>2]|0;if(f>>>0<=l>>>0)break b;b=f+-1|0;c[k>>2]=b;if((al(a[b>>0]|0,c[e>>2]|0)|0)==-1){d=-1;break a}}}while(0);c[j>>2]=d;a[h>>0]=1}while(0);i=m;return d|0}function mm(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+32|0;r=s+16|0;q=s+8|0;n=s+4|0;o=s;h=b+52|0;a:do if(a[h>>0]|0){g=b+48|0;f=c[g>>2]|0;if(e){c[g>>2]=-1;a[h>>0]=0}}else{f=c[b+44>>2]|0;f=(f|0)>1?f:1;p=b+32|0;if((f|0)>0){h=0;do{g=Zk(c[p>>2]|0)|0;if((g|0)==-1){f=-1;break a}a[r+h>>0]=g;h=h+1|0}while((h|0)<(f|0))}b:do if(!(a[b+53>>0]|0)){k=b+40|0;l=b+36|0;m=q+1|0;c:while(1){t=c[k>>2]|0;h=t;g=c[h>>2]|0;h=c[h+4>>2]|0;u=c[l>>2]|0;j=r+f|0;switch(Sb[c[(c[u>>2]|0)+16>>2]&15](u,t,r,j,n,q,m,o)|0){case 2:{f=-1;break a}case 3:break c;case 1:break;default:break b}u=c[k>>2]|0;c[u>>2]=g;c[u+4>>2]=h;if((f|0)==8){f=-1;break a}g=Zk(c[p>>2]|0)|0;if((g|0)==-1){f=-1;break a}a[j>>0]=g;f=f+1|0}a[q>>0]=a[r>>0]|0}else a[q>>0]=a[r>>0]|0;while(0);if(e){f=a[q>>0]|0;c[b+48>>2]=f&255}else{while(1){if((f|0)<=0)break;f=f+-1|0;if((al(d[r+f>>0]|0,c[p>>2]|0)|0)==-1){f=-1;break a}}f=a[q>>0]|0}f=f&255}while(0);i=s;return f|0}function nm(a){a=a|0;return}function om(a){a=a|0;a=a+4|0;c[a>>2]=(c[a>>2]|0)+1;return}function pm(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;c[d>>2]=b+-1;if(!b){Bb[c[(c[a>>2]|0)+8>>2]&255](a);a=1}else a=0;return a|0}function qm(b,d){b=b|0;d=d|0;c[b>>2]=36868;o=0;ia(86,b+4|0,((a[d>>0]&1)==0?d+1|0:c[d+8>>2]|0)|0);b=o;o=0;if(b&1){b=Na()|0;Ya(b|0)}else return}function rm(a,b){a=a|0;b=b|0;c[a>>2]=36868;o=0;ia(86,a+4|0,b|0);a=o;o=0;if(a&1){a=Na()|0;Ya(a|0)}else return}function sm(a,b){a=a|0;b=b|0;var d=0,e=0;e=nl(b)|0;d=bj(e+13|0)|0;c[d>>2]=e;c[d+4>>2]=e;c[d+8>>2]=0;d=d+12|0;lw(d|0,b|0,e+1|0)|0;c[a>>2]=d;return}function tm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=d;c[a+4>>2]=b;return}function um(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;Qb[c[(c[a>>2]|0)+12>>2]&15](e,a,b);if((c[e+4>>2]|0)==(c[d+4>>2]|0))e=(c[e>>2]|0)==(c[d>>2]|0);else e=0;i=f;return e|0}function vm(a,b,d){a=a|0;b=b|0;d=d|0;return ((c[b>>2]|0)==(d|0)?(c[b+4>>2]|0)==(a|0):0)|0}function wm(a,b,c){a=a|0;b=b|0;c=c|0;b=dk(c)|0;Gm(a,b,nl(b)|0);return}function xm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;f=c[d>>2]|0;do if(f){g=a[e>>0]|0;if(!(g&1))g=(g&255)>>>1;else g=c[e+4>>2]|0;if(g){Pm(e,56990)|0;f=c[d>>2]|0}d=c[d+4>>2]|0;Qb[c[(c[d>>2]|0)+24>>2]&15](h,d,f);d=a[h>>0]|0;g=(d&1)==0;o=0;ma(30,e|0,(g?h+1|0:c[h+8>>2]|0)|0,(g?(d&255)>>>1:c[h+4>>2]|0)|0)|0;d=o;o=0;if(d&1){j=Na()|0;Im(h);Ya(j|0)}else{Im(h);break}}while(0);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;i=j;return}function ym(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;e=f+12|0;g=f;Gm(g,d,nl(d)|0);o=0;wa(10,e|0,b|0,g|0);d=o;o=0;do if(!(d&1)){o=0;ia(87,a|0,e|0);d=o;o=0;if(d&1){f=Na()|0;Im(e);e=f;break}else{Im(e);Im(g);c[a>>2]=42664;d=c[b+4>>2]|0;g=a+8|0;c[g>>2]=c[b>>2];c[g+4>>2]=d;i=f;return}}else e=Na()|0;while(0);Im(g);Ya(e|0)}function zm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;g=i;i=i+48|0;f=g+24|0;j=g+16|0;h=g;c[j>>2]=b;c[j+4>>2]=d;Fm(h,e);o=0;wa(10,f|0,j|0,h|0);e=o;o=0;do if(!(e&1)){o=0;ia(87,a|0,f|0);j=o;o=0;if(j&1){j=Na()|0;Im(f);f=j;break}else{Im(f);Im(h);c[a>>2]=42664;c[a+8>>2]=b;c[a+12>>2]=d;i=g;return}}else f=Na()|0;while(0);Im(h);Ya(f|0)}function Am(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=i;i=i+48|0;e=f+24|0;h=f+16|0;g=f;c[h>>2]=b;c[h+4>>2]=d;Gm(g,58898,0);o=0;wa(10,e|0,h|0,g|0);h=o;o=0;do if(!(h&1)){o=0;ia(87,a|0,e|0);h=o;o=0;if(h&1){h=Na()|0;Im(e);e=h;break}else{Im(e);Im(g);c[a>>2]=42664;c[a+8>>2]=b;c[a+12>>2]=d;i=f;return}}else e=Na()|0;while(0);Im(g);Ya(e|0)}function Bm(a){a=a|0;mj(a);return}function Cm(a){a=a|0;mj(a);cj(a);return}function Dm(a){a=a|0;return}function Em(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;rb(42676)|0;if((c[a>>2]|0)==1)do Da(42704,42676)|0;while((c[a>>2]|0)==1);do if(!(c[a>>2]|0)){c[a>>2]=1;o=0;ka(72,42676)|0;e=o;o=0;if((((!(e&1)?(o=0,ha(d|0,b|0),e=o,o=0,!(e&1)):0)?(o=0,ka(73,42676)|0,e=o,o=0,!(e&1)):0)?(c[a>>2]=-1,o=0,ka(72,42676)|0,e=o,o=0,!(e&1)):0)?(o=0,ka(74,42704)|0,e=o,o=0,!(e&1)):0)break;e=Na(0)|0;Va(e|0)|0;o=0;ka(73,42676)|0;e=o;o=0;if((!(e&1)?(c[a>>2]=0,o=0,ka(72,42676)|0,e=o,o=0,!(e&1)):0)?(o=0,ka(74,42704)|0,e=o,o=0,!(e&1)):0){o=0;xa(5);o=0}b=Na()|0;o=0;xa(3);e=o;o=0;if(e&1){e=Na(0)|0;ec(e)}else Ya(b|0)}else cb(42676)|0;while(0);return}function Fm(b,d){b=b|0;d=d|0;if(!(a[d>>0]&1)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2]}else Gm(b,c[d+8>>2]|0,c[d+4>>2]|0);return}function Gm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>4294967279)_i(b);if(e>>>0<11){a[b>>0]=e<<1;b=b+1|0}else{g=e+16&-16;f=bj(g)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=e;b=f}lw(b|0,d|0,e|0)|0;a[b+e>>0]=0;return}function Hm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(d>>>0>4294967279)_i(b);if(d>>>0<11){a[b>>0]=d<<1;b=b+1|0}else{g=d+16&-16;f=bj(g)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=d;b=f}iw(b|0,e|0,d|0)|0;a[b+d>>0]=0;return}function Im(b){b=b|0;if(a[b>>0]&1)cj(c[b+8>>2]|0);return}function Jm(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d>>0]|0;f=(e&1)==0;Lm(b,f?d+1|0:c[d+8>>2]|0,f?(e&255)>>>1:c[d+4>>2]|0)|0}return b|0}function Km(a,b){a=a|0;b=b|0;return Lm(a,b,nl(b)|0)|0}function Lm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))h=10;else{f=c[b>>2]|0;h=(f&-2)+-1|0;f=f&255}g=(f&1)==0;do if(h>>>0>=e>>>0){if(g)f=b+1|0;else f=c[b+8>>2]|0;nw(f|0,d|0,e|0)|0;a[f+e>>0]=0;if(!(a[b>>0]&1)){a[b>>0]=e<<1;break}else{c[b+4>>2]=e;break}}else{if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;Sm(b,h,e-h|0,f,0,f,e,d)}while(0);return b|0}function Mm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a[b>>0]|0;g=(f&1)==0;if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;do if(f>>>0>=d>>>0)if(g){a[b+1+d>>0]=0;a[b>>0]=d<<1;break}else{a[(c[b+8>>2]|0)+d>>0]=0;c[b+4>>2]=d;break}else Nm(b,d-f|0,e)|0;while(0);return}function Nm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(d){f=a[b>>0]|0;if(!(f&1))g=10;else{f=c[b>>2]|0;g=(f&-2)+-1|0;f=f&255}if(!(f&1))h=(f&255)>>>1;else h=c[b+4>>2]|0;if((g-h|0)>>>0>>0){Tm(b,g,d-g+h|0,h,h,0,0);f=a[b>>0]|0}if(!(f&1))g=b+1|0;else g=c[b+8>>2]|0;iw(g+h|0,e|0,d|0)|0;f=h+d|0;if(!(a[b>>0]&1))a[b>>0]=f<<1;else c[b+4>>2]=f;a[g+f>>0]=0}return b|0}function Om(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(d>>>0>4294967279)_i(b);e=a[b>>0]|0;if(!(e&1))f=10;else{e=c[b>>2]|0;f=(e&-2)+-1|0;e=e&255}if(!(e&1))j=(e&255)>>>1;else j=c[b+4>>2]|0;d=j>>>0>d>>>0?j:d;if(d>>>0<11)i=10;else i=(d+16&-16)+-1|0;a:do if((i|0)!=(f|0)){do if((i|0)!=10){d=i+1|0;if(i>>>0<=f>>>0){o=0;d=ka(67,d|0)|0;h=o;o=0;if(h&1){b=Na(0)|0;Va(b|0)|0;Xa();break a}}else d=bj(d)|0;if(!(e&1)){f=1;g=b+1|0;h=0;break}else{f=1;g=c[b+8>>2]|0;h=1;break}}else{d=b+1|0;f=0;g=c[b+8>>2]|0;h=1}while(0);if(!(e&1))e=(e&255)>>>1;else e=c[b+4>>2]|0;lw(d|0,g|0,e+1|0)|0;if(h)cj(g);if(f){c[b>>2]=i+1|1;c[b+4>>2]=j;c[b+8>>2]=d;break}else{a[b>>0]=j<<1;break}}while(0);return}function Pm(a,b){a=a|0;b=b|0;return Rm(a,b,nl(b)|0)|0}function Qm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;f=(e&1)!=0;if(f){g=(c[b>>2]&-2)+-1|0;h=c[b+4>>2]|0}else{g=10;h=(e&255)>>>1}if((h|0)==(g|0)){Tm(b,g,1,g,g,0,0);if(!(a[b>>0]&1))g=7;else g=8}else if(f)g=8;else g=7;if((g|0)==7){a[b>>0]=(h<<1)+2;e=b+1|0;f=h+1|0}else if((g|0)==8){e=c[b+8>>2]|0;f=h+1|0;c[b+4>>2]=f}a[e+h>>0]=d;a[e+f>>0]=0;return}function Rm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))g=10;else{f=c[b>>2]|0;g=(f&-2)+-1|0;f=f&255}if(!(f&1))h=(f&255)>>>1;else h=c[b+4>>2]|0;if((g-h|0)>>>0>=e>>>0){if(e){if(!(f&1))g=b+1|0;else g=c[b+8>>2]|0;lw(g+h|0,d|0,e|0)|0;f=h+e|0;if(!(a[b>>0]&1))a[b>>0]=f<<1;else c[b+4>>2]=f;a[g+f>>0]=0}}else Sm(b,g,e-g+h|0,h,h,0,e,d);return b|0}function Sm(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((-18-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))m=b+1|0;else m=c[b+8>>2]|0;if(d>>>0<2147483623){k=e+d|0;l=d<<1;k=k>>>0>>0?l:k;k=k>>>0<11?11:k+16&-16}else k=-17;l=bj(k)|0;if(g)lw(l|0,m|0,g|0)|0;if(i)lw(l+g|0,j|0,i|0)|0;e=f-h|0;if((e|0)!=(g|0))lw(l+(i+g)|0,m+(h+g)|0,e-g|0)|0;if((d|0)!=10)cj(m);c[b+8>>2]=l;c[b>>2]=k|1;d=e+i|0;c[b+4>>2]=d;a[l+d>>0]=0;return}function Tm(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;if((-17-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))l=b+1|0;else l=c[b+8>>2]|0;if(d>>>0<2147483623){j=e+d|0;k=d<<1;j=j>>>0>>0?k:j;j=j>>>0<11?11:j+16&-16}else j=-17;k=bj(j)|0;if(g)lw(k|0,l|0,g|0)|0;e=f-h|0;if((e|0)!=(g|0))lw(k+(i+g)|0,l+(h+g)|0,e-g|0)|0;if((d|0)!=10)cj(l);c[b+8>>2]=k;c[b>>2]=j|1;return}function Um(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>1073741807)_i(b);if(e>>>0<2){a[b>>0]=e<<1;b=b+4|0}else{g=e+4&-4;f=bj(g<<2)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=e;b=f}ql(b,d,e)|0;c[b+(e<<2)>>2]=0;return}function Vm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(d>>>0>1073741807)_i(b);if(d>>>0<2){a[b>>0]=d<<1;b=b+4|0}else{g=d+4&-4;f=bj(g<<2)|0;c[b+8>>2]=f;c[b>>2]=g|1;c[b+4>>2]=d;b=f}sl(b,e,d)|0;c[b+(d<<2)>>2]=0;return}function Wm(b){b=b|0;if(a[b>>0]&1)cj(c[b+8>>2]|0);return}function Xm(a,b){a=a|0;b=b|0;return Ym(a,b,pl(b)|0)|0}function Ym(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a[b>>0]|0;if(!(f&1))h=1;else{f=c[b>>2]|0;h=(f&-2)+-1|0;f=f&255}g=(f&1)==0;do if(h>>>0>=e>>>0){if(g)f=b+4|0;else f=c[b+8>>2]|0;rl(f,d,e)|0;c[f+(e<<2)>>2]=0;if(!(a[b>>0]&1)){a[b>>0]=e<<1;break}else{c[b+4>>2]=e;break}}else{if(g)f=(f&255)>>>1;else f=c[b+4>>2]|0;$m(b,h,e-h|0,f,0,f,e,d)}while(0);return b|0}function Zm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(d>>>0>1073741807)_i(b);e=a[b>>0]|0;if(!(e&1))f=1;else{e=c[b>>2]|0;f=(e&-2)+-1|0;e=e&255}if(!(e&1))j=(e&255)>>>1;else j=c[b+4>>2]|0;d=j>>>0>d>>>0?j:d;if(d>>>0<2)i=1;else i=(d+4&-4)+-1|0;a:do if((i|0)!=(f|0)){do if((i|0)!=1){d=(i<<2)+4|0;if(i>>>0<=f>>>0){o=0;d=ka(67,d|0)|0;h=o;o=0;if(h&1){b=Na(0)|0;Va(b|0)|0;Xa();break a}}else d=bj(d)|0;if(!(e&1)){f=1;g=b+4|0;h=0;break}else{f=1;g=c[b+8>>2]|0;h=1;break}}else{d=b+4|0;f=0;g=c[b+8>>2]|0;h=1}while(0);if(!(e&1))e=(e&255)>>>1;else e=c[b+4>>2]|0;ql(d,g,e+1|0)|0;if(h)cj(g);if(f){c[b>>2]=i+1|1;c[b+4>>2]=j;c[b+8>>2]=d;break}else{a[b>>0]=j<<1;break}}while(0);return}function _m(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;f=(e&1)!=0;if(f){g=(c[b>>2]&-2)+-1|0;h=c[b+4>>2]|0}else{g=1;h=(e&255)>>>1}if((h|0)==(g|0)){an(b,g,1,g,g,0,0);if(!(a[b>>0]&1))g=7;else g=8}else if(f)g=8;else g=7;if((g|0)==7){a[b>>0]=(h<<1)+2;e=b+4|0;f=h+1|0}else if((g|0)==8){e=c[b+8>>2]|0;f=h+1|0;c[b+4>>2]=f}c[e+(h<<2)>>2]=d;c[e+(f<<2)>>2]=0;return}function $m(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((1073741806-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))m=b+4|0;else m=c[b+8>>2]|0;if(d>>>0<536870887){k=e+d|0;l=d<<1;k=k>>>0>>0?l:k;k=k>>>0<2?2:k+4&-4}else k=1073741807;l=bj(k<<2)|0;if(g)ql(l,m,g)|0;if(i)ql(l+(g<<2)|0,j,i)|0;e=f-h|0;if((e|0)!=(g|0))ql(l+(i+g<<2)|0,m+(h+g<<2)|0,e-g|0)|0;if((d|0)!=1)cj(m);c[b+8>>2]=l;c[b>>2]=k|1;d=e+i|0;c[b+4>>2]=d;c[l+(d<<2)>>2]=0;return}function an(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;if((1073741807-d|0)>>>0>>0)_i(b);if(!(a[b>>0]&1))l=b+4|0;else l=c[b+8>>2]|0;if(d>>>0<536870887){j=e+d|0;k=d<<1;j=j>>>0>>0?k:j;j=j>>>0<2?2:j+4&-4}else j=1073741807;k=bj(j<<2)|0;if(g)ql(k,l,g)|0;e=f-h|0;if((e|0)!=(g|0))ql(k+(i+g<<2)|0,l+(h+g<<2)|0,e-g|0)|0;if((d|0)!=1)cj(l);c[b+8>>2]=k;c[b>>2]=j|1;return}function bn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=d;f=e-g|0;if(f>>>0>4294967279)_i(b);if(f>>>0<11){a[b>>0]=f<<1;h=b+1|0}else{i=f+16&-16;h=bj(i)|0;c[b+8>>2]=h;c[b>>2]=i|1;c[b+4>>2]=f}b=e-g|0;if((d|0)!=(e|0)){f=h;while(1){a[f>>0]=a[d>>0]|0;d=d+1|0;if((d|0)==(e|0))break;else f=f+1|0}}a[h+b>>0]=0;return}function cn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d;f=e-h|0;g=f>>2;if(g>>>0>1073741807)_i(b);if(g>>>0<2){a[b>>0]=f>>>1;b=b+4|0}else{i=g+4&-4;f=bj(i<<2)|0;c[b+8>>2]=f;c[b>>2]=i|1;c[b+4>>2]=g;b=f}g=(e-h|0)>>>2;if((d|0)!=(e|0)){f=b;while(1){c[f>>2]=c[d>>2];d=d+4|0;if((d|0)==(e|0))break;else f=f+4|0}}c[b+(g<<2)>>2]=0;return}function dn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d;f=(c[a+24>>2]|0)==0;c[a+16>>2]=f&1|b;if(!((f&1|b)&c[a+20>>2])){i=d;return}b=Ma(16)|0;so()|0;c[e>>2]=1;c[e+4>>2]=43112;o=0;wa(11,b|0,57437,e|0);f=o;o=0;if(f&1){f=Na()|0;La(b|0);Ya(f|0)}else lb(b|0,864,112)}function en(a){a=a|0;var b=0;c[a>>2]=43068;o=0;ia(88,a|0,0);b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else{Gs(a+28|0);Gl(c[a+32>>2]|0);Gl(c[a+36>>2]|0);Gl(c[a+48>>2]|0);Gl(c[a+60>>2]|0);return}}function fn(a){a=a|0;en(a);return}function gn(a){a=a|0;en(a);cj(a);return}function hn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+40>>2]|0;e=a+32|0;f=a+36|0;if(d)do{d=d+-1|0;Qb[c[(c[e>>2]|0)+(d<<2)>>2]&15](b,a,c[(c[f>>2]|0)+(d<<2)>>2]|0)}while((d|0)!=0);return}function jn(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;Fs(b,a+28|0);i=d;return c[b>>2]|0}function kn(a,b){a=a|0;b=b|0;var d=0;c[a+24>>2]=b;c[a+16>>2]=(b|0)==0&1;c[a+20>>2]=0;c[a+4>>2]=4098;c[a+12>>2]=0;c[a+8>>2]=6;d=a+28|0;b=a+32|0;a=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));Es(d);return}function ln(a){a=a|0;en(a);return}function mn(a){a=a|0;en(a);cj(a);return}function nn(a){a=a|0;c[a>>2]=42760;Gs(a+4|0);return}function on(a){a=a|0;c[a>>2]=42760;Gs(a+4|0);cj(a);return}function pn(a){a=a|0;c[a>>2]=42760;Es(a+4|0);a=a+8|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;return}function qn(a,b){a=a|0;b=b|0;return}function rn(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function sn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function tn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function un(a){a=a|0;return 0}function vn(a){a=a|0;return 0}function wn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+12|0;i=b+16|0;a:do if((e|0)>0){g=d;d=0;while(1){f=c[h>>2]|0;if(f>>>0<(c[i>>2]|0)>>>0){c[h>>2]=f+1;f=a[f>>0]|0}else{f=Eb[c[(c[b>>2]|0)+40>>2]&127](b)|0;if((f|0)==-1)break a;f=f&255}a[g>>0]=f;d=d+1|0;if((d|0)<(e|0))g=g+1|0;else break}}else d=0;while(0);return d|0}function xn(a){a=a|0;return -1}function yn(a){a=a|0;var b=0;if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1)a=-1;else{b=a+12|0;a=c[b>>2]|0;c[b>>2]=a+1;a=d[a>>0]|0}return a|0}function zn(a,b){a=a|0;b=b|0;return -1}function An(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=b+24|0;j=b+28|0;a:do if((f|0)>0){h=e;e=0;while(1){g=c[i>>2]|0;if(g>>>0>=(c[j>>2]|0)>>>0){if((Lb[c[(c[b>>2]|0)+52>>2]&63](b,d[h>>0]|0)|0)==-1)break a}else{k=a[h>>0]|0;c[i>>2]=g+1;a[g>>0]=k}e=e+1|0;if((e|0)<(f|0))h=h+1|0;else break}}else e=0;while(0);return e|0}function Bn(a,b){a=a|0;b=b|0;return -1}function Cn(a){a=a|0;c[a>>2]=42824;Gs(a+4|0);return}function Dn(a){a=a|0;c[a>>2]=42824;Gs(a+4|0);cj(a);return}function En(a){a=a|0;c[a>>2]=42824;Es(a+4|0);a=a+8|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;return}function Fn(a,b){a=a|0;b=b|0;return}function Gn(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function Hn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function In(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=a;c[b>>2]=0;c[b+4>>2]=0;b=a+8|0;c[b>>2]=-1;c[b+4>>2]=-1;return}function Jn(a){a=a|0;return 0}function Kn(a){a=a|0;return 0}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=a+12|0;h=a+16|0;a:do if((d|0)>0){f=b;b=0;while(1){e=c[g>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){e=Eb[c[(c[a>>2]|0)+40>>2]&127](a)|0;if((e|0)==-1)break a}else{c[g>>2]=e+4;e=c[e>>2]|0}c[f>>2]=e;b=b+1|0;if((b|0)<(d|0))f=f+4|0;else break}}else b=0;while(0);return b|0}function Mn(a){a=a|0;return -1}function Nn(a){a=a|0;var b=0;if((Eb[c[(c[a>>2]|0)+36>>2]&127](a)|0)==-1)a=-1;else{b=a+12|0;a=c[b>>2]|0;c[b>>2]=a+4;a=c[a>>2]|0}return a|0}function On(a,b){a=a|0;b=b|0;return -1}function Pn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=a+24|0;h=a+28|0;a:do if((d|0)>0){f=b;b=0;while(1){e=c[g>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){if((Lb[c[(c[a>>2]|0)+52>>2]&63](a,c[f>>2]|0)|0)==-1)break a}else{i=c[f>>2]|0;c[g>>2]=e+4;c[e>>2]=i}b=b+1|0;if((b|0)<(d|0))f=f+4|0;else break}}else b=0;while(0);return b|0}function Qn(a,b){a=a|0;b=b|0;return -1}function Rn(a){a=a|0;en(a+8|0);return}function Sn(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+8)|0);return}function Tn(a){a=a|0;en(a+8|0);cj(a);return}function Un(a){a=a|0;Tn(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function Vn(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f;a:do if(c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0){o=0;ia(65,e|0,b|0);d=o;o=0;b:do if(d&1)d=Na(0)|0;else{do if(a[e>>0]|0){d=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;d=ka(c[(c[d>>2]|0)+24>>2]|0,d|0)|0;g=o;o=0;if(!(g&1)){if((d|0)!=-1)break;g=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+g|0,c[b+(g+16)>>2]|1|0);g=o;o=0;if(!(g&1))break}d=Na(0)|0;ho(e);break b}while(0);ho(e);break a}while(0);Va(d|0)|0;o=0;ha(181,b+(c[(c[b>>2]|0)+-12>>2]|0)|0);g=o;o=0;if(!(g&1)){Xa();break}d=Na()|0;o=0;xa(3);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else Ya(d|0)}while(0);i=f;return b|0}function Wn(a){a=a|0;var b=0;b=a+16|0;c[b>>2]=c[b>>2]|1;if(!(c[a+20>>2]&1))return;else mb()}function Xn(a){a=a|0;en(a+8|0);return}function Yn(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+8)|0);return}function Zn(a){a=a|0;en(a+8|0);cj(a);return}function _n(a){a=a|0;Zn(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function $n(b){b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;e=f;a:do if(c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0){o=0;ia(89,e|0,b|0);d=o;o=0;b:do if(d&1)d=Na(0)|0;else{do if(a[e>>0]|0){d=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;d=ka(c[(c[d>>2]|0)+24>>2]|0,d|0)|0;g=o;o=0;if(!(g&1)){if((d|0)!=-1)break;g=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+g|0,c[b+(g+16)>>2]|1|0);g=o;o=0;if(!(g&1))break}d=Na(0)|0;po(e);break b}while(0);po(e);break a}while(0);Va(d|0)|0;o=0;ha(181,b+(c[(c[b>>2]|0)+-12>>2]|0)|0);g=o;o=0;if(!(g&1)){Xa();break}d=Na()|0;o=0;xa(3);g=o;o=0;if(g&1){g=Na(0)|0;ec(g)}else Ya(d|0)}while(0);i=f;return b|0}function ao(a,b){a=a|0;b=b|0;return}function bo(a){a=a|0;en(a+4|0);return}function co(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0);return}function eo(a){a=a|0;en(a+4|0);cj(a);return}function fo(a){a=a|0;eo(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function go(b,d){b=b|0;d=d|0;var e=0;a[b>>0]=0;c[b+4>>2]=d;e=c[(c[d>>2]|0)+-12>>2]|0;if(!(c[d+(e+16)>>2]|0)){e=c[d+(e+72)>>2]|0;if(e)Vn(e)|0;a[b>>0]=1}return}function ho(a){a=a|0;var b=0,d=0;a=a+4|0;d=c[a>>2]|0;b=c[(c[d>>2]|0)+-12>>2]|0;do if((((c[d+(b+24)>>2]|0)!=0?(c[d+(b+16)>>2]|0)==0:0)?(c[d+(b+4)>>2]&8192|0)!=0:0)?!(Za()|0):0){b=c[a>>2]|0;b=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;b=ka(c[(c[b>>2]|0)+24>>2]|0,b|0)|0;d=o;o=0;if(!(d&1)){if((b|0)!=-1)break;b=c[a>>2]|0;d=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+d|0,c[b+(d+16)>>2]|1|0);d=o;o=0;if(!(d&1))break}d=Na(0)|0;Va(d|0)|0;o=0;xa(3);d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}}while(0);return}function io(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+32|0;k=q+20|0;l=q+16|0;n=q+8|0;e=q;o=0;ia(65,n|0,b|0);m=o;o=0;a:do if(m&1){e=Na(0)|0;f=b;g=b;p=19}else{do if(a[n>>0]|0){c[e>>2]=jn(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;o=0;m=ra(37,e|0,43392)|0;j=o;o=0;if(j&1){p=Na(0)|0;Gs(e);e=p}else{Gs(e);g=c[(c[b>>2]|0)+-12>>2]|0;j=c[b+(g+24)>>2]|0;f=b+g|0;g=b+(g+76)|0;e=c[g>>2]|0;do if((e|0)==-1){c[k>>2]=jn(f)|0;o=0;e=ra(37,k|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,h=ra(c[(c[e>>2]|0)+28>>2]|0,e|0,32)|0,r=o,o=0,!(r&1)):0){Gs(k);e=h<<24>>24;c[g>>2]=e;p=10;break}e=Na(0)|0;Gs(k)}else p=10;while(0);if((p|0)==10){r=c[(c[m>>2]|0)+16>>2]|0;c[l>>2]=j;o=0;c[k>>2]=c[l>>2];e=sa(r|0,m|0,k|0,f|0,e&255|0,d|0)|0;r=o;o=0;if(!(r&1)){if(e)break;r=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+r|0,c[b+(r+16)>>2]|5|0);r=o;o=0;if(!(r&1))break}e=Na(0)|0}}ho(n);f=b;g=b;p=19;break a}while(0);ho(n)}while(0);do if((p|0)==19){Va(e|0)|0;o=0;ha(181,f+(c[(c[g>>2]|0)+-12>>2]|0)|0);r=o;o=0;if(!(r&1)){Xa();break}e=Na()|0;o=0;xa(3);r=o;o=0;if(r&1){r=Na(0)|0;ec(r)}else Ya(e|0)}while(0);i=q;return b|0}function jo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+32|0;k=q+20|0;l=q+16|0;n=q+8|0;e=q;o=0;ia(65,n|0,b|0);m=o;o=0;a:do if(m&1){e=Na(0)|0;f=b;g=b;p=19}else{do if(a[n>>0]|0){c[e>>2]=jn(b+(c[(c[b>>2]|0)+-12>>2]|0)|0)|0;o=0;m=ra(37,e|0,43392)|0;j=o;o=0;if(j&1){p=Na(0)|0;Gs(e);e=p}else{Gs(e);g=c[(c[b>>2]|0)+-12>>2]|0;j=c[b+(g+24)>>2]|0;f=b+g|0;g=b+(g+76)|0;e=c[g>>2]|0;do if((e|0)==-1){c[k>>2]=jn(f)|0;o=0;e=ra(37,k|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,h=ra(c[(c[e>>2]|0)+28>>2]|0,e|0,32)|0,r=o,o=0,!(r&1)):0){Gs(k);e=h<<24>>24;c[g>>2]=e;p=10;break}e=Na(0)|0;Gs(k)}else p=10;while(0);if((p|0)==10){r=c[(c[m>>2]|0)+24>>2]|0;c[l>>2]=j;o=0;c[k>>2]=c[l>>2];e=sa(r|0,m|0,k|0,f|0,e&255|0,d|0)|0;r=o;o=0;if(!(r&1)){if(e)break;r=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+r|0,c[b+(r+16)>>2]|5|0);r=o;o=0;if(!(r&1))break}e=Na(0)|0}}ho(n);f=b;g=b;p=19;break a}while(0);ho(n)}while(0);do if((p|0)==19){Va(e|0)|0;o=0;ha(181,f+(c[(c[g>>2]|0)+-12>>2]|0)|0);r=o;o=0;if(!(r&1)){Xa();break}e=Na()|0;o=0;xa(3);r=o;o=0;if(r&1){r=Na(0)|0;ec(r)}else Ya(e|0)}while(0);i=q;return b|0}function ko(a){a=a|0;en(a+4|0);return}function lo(a){a=a|0;en(a+((c[(c[a>>2]|0)+-12>>2]|0)+4)|0);return}function mo(a){a=a|0;en(a+4|0);cj(a);return}function no(a){a=a|0;mo(a+(c[(c[a>>2]|0)+-12>>2]|0)|0);return}function oo(b,d){b=b|0;d=d|0;var e=0;a[b>>0]=0;c[b+4>>2]=d;e=c[(c[d>>2]|0)+-12>>2]|0;if(!(c[d+(e+16)>>2]|0)){e=c[d+(e+72)>>2]|0;if(e)$n(e)|0;a[b>>0]=1}return}function po(a){a=a|0;var b=0,d=0;a=a+4|0;d=c[a>>2]|0;b=c[(c[d>>2]|0)+-12>>2]|0;do if((((c[d+(b+24)>>2]|0)!=0?(c[d+(b+16)>>2]|0)==0:0)?(c[d+(b+4)>>2]&8192|0)!=0:0)?!(Za()|0):0){b=c[a>>2]|0;b=c[b+((c[(c[b>>2]|0)+-12>>2]|0)+24)>>2]|0;o=0;b=ka(c[(c[b>>2]|0)+24>>2]|0,b|0)|0;d=o;o=0;if(!(d&1)){if((b|0)!=-1)break;b=c[a>>2]|0;d=c[(c[b>>2]|0)+-12>>2]|0;o=0;ia(66,b+d|0,c[b+(d+16)>>2]|1|0);d=o;o=0;if(!(d&1))break}d=Na(0)|0;Va(d|0)|0;o=0;xa(3);d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}}while(0);return}function qo(a){a=a|0;return 57453}function ro(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)!=1&(c|0)<257)wm(a,b,c);else Gm(a,57462,35);return}function so(){if((a[1048]|0)==0?(Ha(1048)|0)!=0:0){c[10778]=43084;kb(72,43112,n|0)|0;Pa(1048)}return 43112}function to(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+16|0;f=e+8|0;g=e;j=d;h=c[j+4>>2]|0;d=g;c[d>>2]=c[j>>2];c[d+4>>2]=h;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];ym(a,f,b);c[a>>2]=43048;i=e;return}function uo(a){a=a|0;Bm(a);return}function vo(a){a=a|0;Bm(a);cj(a);return}function wo(a){a=a|0;en(a);cj(a);return}function xo(a){a=a|0;cj(a);return}function yo(a){a=a|0;return}function zo(a){a=a|0;return}function Ao(a){a=a|0;cj(a);return}function Bo(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((e|0)==(f|0))h=6;else while(1){if((c|0)==(d|0)){c=-1;break a}b=a[c>>0]|0;g=a[e>>0]|0;if(b<<24>>24>24){c=-1;break a}if(g<<24>>24>24){c=1;break a}c=c+1|0;e=e+1|0;if((e|0)==(f|0)){h=6;break}}while(0);if((h|0)==6)c=(c|0)!=(d|0)&1;return c|0}function Co(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;bn(a,c,d);return}function Do(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)==(d|0))b=0;else{b=0;do{b=(a[c>>0]|0)+(b<<4)|0;e=b&-268435456;b=(e>>>24|e)^b;c=c+1|0}while((c|0)!=(d|0))}return b|0}function Eo(a){a=a|0;return}function Fo(a){a=a|0;cj(a);return}function Go(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((e|0)==(f|0))h=6;else while(1){if((b|0)==(d|0)){b=-1;break a}a=c[b>>2]|0;g=c[e>>2]|0;if((a|0)<(g|0)){b=-1;break a}if((g|0)<(a|0)){b=1;break a}b=b+4|0;e=e+4|0;if((e|0)==(f|0)){h=6;break}}while(0);if((h|0)==6)b=(b|0)!=(d|0)&1;return b|0}function Ho(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cn(a,c,d);return}function Io(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((b|0)==(d|0))a=0;else{a=0;do{a=(c[b>>2]|0)+(a<<4)|0;e=a&-268435456;a=(e>>>24|e)^a;b=b+4|0}while((b|0)!=(d|0))}return a|0}function Jo(a){a=a|0;return}function Ko(a){a=a|0;cj(a);return}function Lo(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;q=s+56|0;j=s+52|0;n=s+48|0;k=s+44|0;l=s+40|0;m=s+36|0;p=s+32|0;t=s+8|0;r=s;a:do if(!(c[f+4>>2]&1)){c[n>>2]=-1;t=c[(c[b>>2]|0)+16>>2]|0;c[k>>2]=c[d>>2];c[l>>2]=c[e>>2];c[j>>2]=c[k>>2];c[q>>2]=c[l>>2];j=Db[t&63](b,j,q,f,g,n)|0;c[d>>2]=j;switch(c[n>>2]|0){case 0:{a[h>>0]=0;break a}case 1:{a[h>>0]=1;break a}default:{a[h>>0]=1;c[g>>2]=4;break a}}}else{j=jn(f)|0;c[m>>2]=j;o=0;b=ra(37,m|0,44220)|0;n=o;o=0;do if(!(n&1)){pm(j)|0;j=jn(f)|0;c[p>>2]=j;o=0;l=ra(37,p|0,44360)|0;p=o;o=0;if(p&1){t=Na()|0;pm(j)|0;j=t;break}pm(j)|0;o=0;ia(c[(c[l>>2]|0)+24>>2]|0,t|0,l|0);p=o;o=0;if(!(p&1)){k=t+12|0;o=0;ia(c[(c[l>>2]|0)+28>>2]|0,k|0,l|0);p=o;o=0;if(!(p&1)){c[r>>2]=c[e>>2];o=0;c[q>>2]=c[r>>2];j=ea(7,d|0,q|0,t|0,t+24|0,b|0,g|0,1)|0;g=o;o=0;if(g&1){j=Na()|0;Im(t+12|0);Im(t);break}else{a[h>>0]=(j|0)==(t|0)&1;j=c[d>>2]|0;Im(t+12|0);Im(t);break a}}}else k=t;j=Na()|0;l=D;if((t|0)!=(k|0))do{k=k+-12|0;Im(k)}while((k|0)!=(t|0))}else{t=Na()|0;pm(j)|0;j=t}while(0);Ya(j|0)}while(0);i=s;return j|0}function Mo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=yu(a,k,j,e,f,g)|0;i=h;return a|0}function No(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=zu(a,k,j,e,f,g)|0;i=h;return a|0}function Oo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Au(a,k,j,e,f,g)|0;i=h;return a|0}function Po(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Bu(a,k,j,e,f,g)|0;i=h;return a|0}function Qo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Cu(a,k,j,e,f,g)|0;i=h;return a|0}function Ro(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Du(a,k,j,e,f,g)|0;i=h;return a|0}function So(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Eu(a,k,j,e,f,g)|0;i=h;return a|0}function To(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Fu(a,k,j,e,f,g)|0;i=h;return a|0}function Uo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Gu(a,k,j,e,f,g)|0;i=h;return a|0}function Vo(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;C=i;i=i+240|0;x=C;s=C+208|0;E=C+32|0;b=C+28|0;D=C+16|0;w=C+12|0;u=C+48|0;v=C+8|0;t=C+4|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;o=0;g=ka(68,g|0)|0;r=o;o=0;do if(r&1)b=Na()|0;else{c[b>>2]=g;o=0;b=ra(37,b|0,44220)|0;r=o;o=0;if(!(r&1)?(o=0,va(c[(c[b>>2]|0)+32>>2]|0,b|0,57498,57524,s|0)|0,r=o,o=0,!(r&1)):0){pm(g)|0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;if(!(a[D>>0]&1))b=10;else b=(c[D>>2]&-2)+-1|0;o=0;wa(8,D|0,b|0,0);r=o;o=0;a:do if(!(r&1)){q=D+8|0;r=D+1|0;g=(a[D>>0]&1)==0?r:c[q>>2]|0;c[w>>2]=g;c[v>>2]=u;c[t>>2]=0;p=D+4|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){F=29;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){F=29;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;F=19;break}}else F=19;while(0);if((F|0)==19){F=0;if(l){k=0;break}else k=0}l=a[D>>0]|0;l=(l&1)==0?(l&255)>>>1:c[p>>2]|0;if((c[w>>2]|0)==(g+l|0)){o=0;wa(8,D|0,l<<1|0,0);n=o;o=0;if(n&1){F=29;break}if(!(a[D>>0]&1))g=10;else g=(c[D>>2]&-2)+-1|0;o=0;wa(8,D|0,g|0,0);n=o;o=0;if(n&1){F=29;break}g=(a[D>>0]&1)==0?r:c[q>>2]|0;c[w>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;G=o;o=0;if(G&1){F=29;break}}else l=d[l>>0]|0;if(Wo(l&255,16,g,w,t,0,E,u,v,s)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;G=o;o=0;if(G&1){F=29;break}else continue}else{c[m>>2]=k+1;continue}}if((F|0)==29){b=Na()|0;break}o=0;wa(8,D|0,(c[w>>2]|0)-g|0,0);G=o;o=0;if((!(G&1)?(y=a[D>>0]|0,z=c[q>>2]|0,o=0,A=ua(3)|0,G=o,o=0,!(G&1)):0)?(o=0,c[x>>2]=j,B=va(16,((y&1)==0?r:z)|0,A|0,58882,x|0)|0,G=o,o=0,!(G&1)):0){if((B|0)!=1)c[h>>2]=4;if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;G=o;o=0;if(G&1){F=30;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;G=o;o=0;if(G&1){F=30;break a}if((b|0)==-1){c[f>>2]=0;F=55;break}}if(!g)F=56}else F=55;while(0);if((F|0)==55?g:0)F=56;if((F|0)==56)c[h>>2]=c[h>>2]|2;G=c[e>>2]|0;Im(D);Im(E);i=C;return G|0}else F=30}else F=30;while(0);if((F|0)==30)b=Na()|0;Im(D);break}b=Na()|0;pm(g)|0}while(0);Im(E);Ya(b|0);return 0}function Wo(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;o=c[f>>2]|0;p=(o|0)==(e|0);do if(p){m=(a[l+24>>0]|0)==b<<24>>24;if(!m?(a[l+25>>0]|0)!=b<<24>>24:0){n=5;break}c[f>>2]=e+1;a[e>>0]=m?43:45;c[g>>2]=0;m=0}else n=5;while(0);a:do if((n|0)==5){n=a[i>>0]|0;if(b<<24>>24==h<<24>>24?(((n&1)==0?(n&255)>>>1:c[i+4>>2]|0)|0)!=0:0){m=c[k>>2]|0;if((m-j|0)>=160){m=0;break}d=c[g>>2]|0;c[k>>2]=m+4;c[m>>2]=d;c[g>>2]=0;m=0;break}i=l+26|0;m=l;while(1){if((a[m>>0]|0)==b<<24>>24)break;m=m+1|0;if((m|0)==(i|0)){m=i;break}}m=m-l|0;if((m|0)>23)m=-1;else{switch(d|0){case 10:case 8:{if((m|0)>=(d|0)){m=-1;break a}break}case 16:{if((m|0)>=22){if(p){m=-1;break a}if((o-e|0)>=3){m=-1;break a}if((a[o+-1>>0]|0)!=48){m=-1;break a}c[g>>2]=0;m=a[57498+m>>0]|0;c[f>>2]=o+1;a[o>>0]=m;m=0;break a}break}default:{}}m=a[57498+m>>0]|0;c[f>>2]=o+1;a[o>>0]=m;c[g>>2]=(c[g>>2]|0)+1;m=0}}while(0);return m|0}function Xo(){var b=0,d=0;do if((a[1968]|0)==0?(Ha(1968)|0)!=0:0){o=0;b=ma(31,2147483647,58885,0)|0;d=o;o=0;if(d&1){d=Na()|0;sb(1968);Ya(d|0)}else{c[11196]=b;Pa(1968);break}}while(0);return c[11196]|0}function Yo(a){a=a|0;return}function Zo(a){a=a|0;cj(a);return}function _o(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;s=i;i=i+64|0;q=s+56|0;j=s+52|0;n=s+48|0;k=s+44|0;l=s+40|0;m=s+36|0;p=s+32|0;t=s+8|0;r=s;a:do if(!(c[f+4>>2]&1)){c[n>>2]=-1;t=c[(c[b>>2]|0)+16>>2]|0;c[k>>2]=c[d>>2];c[l>>2]=c[e>>2];c[j>>2]=c[k>>2];c[q>>2]=c[l>>2];j=Db[t&63](b,j,q,f,g,n)|0;c[d>>2]=j;switch(c[n>>2]|0){case 0:{a[h>>0]=0;break a}case 1:{a[h>>0]=1;break a}default:{a[h>>0]=1;c[g>>2]=4;break a}}}else{j=jn(f)|0;c[m>>2]=j;o=0;b=ra(37,m|0,44212)|0;n=o;o=0;do if(!(n&1)){pm(j)|0;j=jn(f)|0;c[p>>2]=j;o=0;l=ra(37,p|0,44368)|0;p=o;o=0;if(p&1){t=Na()|0;pm(j)|0;j=t;break}pm(j)|0;o=0;ia(c[(c[l>>2]|0)+24>>2]|0,t|0,l|0);p=o;o=0;if(!(p&1)){k=t+12|0;o=0;ia(c[(c[l>>2]|0)+28>>2]|0,k|0,l|0);p=o;o=0;if(!(p&1)){c[r>>2]=c[e>>2];o=0;c[q>>2]=c[r>>2];j=ea(8,d|0,q|0,t|0,t+24|0,b|0,g|0,1)|0;g=o;o=0;if(g&1){j=Na()|0;Wm(t+12|0);Wm(t);break}else{a[h>>0]=(j|0)==(t|0)&1;j=c[d>>2]|0;Wm(t+12|0);Wm(t);break a}}}else k=t;j=Na()|0;l=D;if((t|0)!=(k|0))do{k=k+-12|0;Wm(k)}while((k|0)!=(t|0))}else{t=Na()|0;pm(j)|0;j=t}while(0);Ya(j|0)}while(0);i=s;return j|0}function $o(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ju(a,k,j,e,f,g)|0;i=h;return a|0}function ap(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ku(a,k,j,e,f,g)|0;i=h;return a|0}function bp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Lu(a,k,j,e,f,g)|0;i=h;return a|0}function cp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Mu(a,k,j,e,f,g)|0;i=h;return a|0}function dp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Nu(a,k,j,e,f,g)|0;i=h;return a|0}function ep(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ou(a,k,j,e,f,g)|0;i=h;return a|0}function fp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Pu(a,k,j,e,f,g)|0;i=h;return a|0}function gp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Qu(a,k,j,e,f,g)|0;i=h;return a|0}function hp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+16|0;j=h+12|0;k=h+8|0;m=h+4|0;l=h;c[m>>2]=c[b>>2];c[l>>2]=c[d>>2];c[k>>2]=c[m>>2];c[j>>2]=c[l>>2];a=Ru(a,k,j,e,f,g)|0;i=h;return a|0}function ip(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;B=i;i=i+320|0;w=B;r=B+208|0;D=B+32|0;b=B+28|0;C=B+16|0;v=B+12|0;t=B+48|0;u=B+8|0;s=B+4|0;c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;o=0;f=ka(68,f|0)|0;q=o;o=0;do if(q&1)b=Na()|0;else{c[b>>2]=f;o=0;b=ra(37,b|0,44212)|0;q=o;o=0;if(!(q&1)?(o=0,va(c[(c[b>>2]|0)+48>>2]|0,b|0,57498,57524,r|0)|0,q=o,o=0,!(q&1)):0){pm(f)|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;if(!(a[C>>0]&1))b=10;else b=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,b|0,0);q=o;o=0;a:do if(!(q&1)){p=C+8|0;q=C+1|0;b=(a[C>>0]&1)==0?q:c[p>>2]|0;c[v>>2]=b;c[u>>2]=t;c[s>>2]=0;n=C+4|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){E=30;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){E=30;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k){j=l;break}else{j=l;break b}else{c[e>>2]=0;E=20;break}}else E=20;while(0);if((E|0)==20){E=0;if(k){j=0;break}else j=0}k=a[C>>0]|0;k=(k&1)==0?(k&255)>>>1:c[n>>2]|0;if((c[v>>2]|0)==(b+k|0)){o=0;wa(8,C|0,k<<1|0,0);m=o;o=0;if(m&1){E=30;break}if(!(a[C>>0]&1))b=10;else b=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,b|0,0);m=o;o=0;if(m&1){E=30;break}b=(a[C>>0]&1)==0?q:c[p>>2]|0;c[v>>2]=b+k}l=f+12|0;k=c[l>>2]|0;m=f+16|0;if((k|0)==(c[m>>2]|0)){o=0;k=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;F=o;o=0;if(F&1){E=30;break}}else k=c[k>>2]|0;if(jp(k,16,b,v,s,0,D,t,u,r)|0)break;j=c[l>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;F=o;o=0;if(F&1){E=30;break}else{j=f;continue}}else{c[l>>2]=j+4;j=f;continue}}if((E|0)==30){b=Na()|0;break}o=0;wa(8,C|0,(c[v>>2]|0)-b|0,0);F=o;o=0;if((!(F&1)?(x=a[C>>0]|0,y=c[p>>2]|0,o=0,z=ua(3)|0,F=o,o=0,!(F&1)):0)?(o=0,c[w>>2]=h,A=va(16,((x&1)==0?q:y)|0,z|0,58882,w|0)|0,F=o,o=0,!(F&1)):0){if((A|0)!=1)c[g>>2]=4;if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;F=o;o=0;if(F&1){E=31;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;F=o;o=0;if(F&1){E=31;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{E=59;break}else{c[e>>2]=0;E=57;break}}else E=57;while(0);if((E|0)==57?f:0)E=59;if((E|0)==59)c[g>>2]=c[g>>2]|2;F=c[d>>2]|0;Im(C);Im(D);i=B;return F|0}else E=31}else E=31;while(0);if((E|0)==31)b=Na()|0;Im(C);break}b=Na()|0;pm(f)|0}while(0);Im(D);Ya(b|0);return 0}function jp(b,d,e,f,g,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0;o=c[f>>2]|0;p=(o|0)==(e|0);do if(p){m=(c[l+96>>2]|0)==(b|0);if(!m?(c[l+100>>2]|0)!=(b|0):0){n=5;break}c[f>>2]=e+1;a[e>>0]=m?43:45;c[g>>2]=0;m=0}else n=5;while(0);a:do if((n|0)==5){n=a[i>>0]|0;if((b|0)==(h|0)?(((n&1)==0?(n&255)>>>1:c[i+4>>2]|0)|0)!=0:0){m=c[k>>2]|0;if((m-j|0)>=160){m=0;break}d=c[g>>2]|0;c[k>>2]=m+4;c[m>>2]=d;c[g>>2]=0;m=0;break}i=l+104|0;m=l;while(1){if((c[m>>2]|0)==(b|0))break;m=m+4|0;if((m|0)==(i|0)){m=i;break}}m=m-l|0;i=m>>2;if((m|0)>92)m=-1;else{switch(d|0){case 10:case 8:{if((i|0)>=(d|0)){m=-1;break a}break}case 16:{if((m|0)>=88){if(p){m=-1;break a}if((o-e|0)>=3){m=-1;break a}if((a[o+-1>>0]|0)!=48){m=-1;break a}c[g>>2]=0;m=a[57498+i>>0]|0;c[f>>2]=o+1;a[o>>0]=m;m=0;break a}break}default:{}}m=a[57498+i>>0]|0;c[f>>2]=o+1;a[o>>0]=m;c[g>>2]=(c[g>>2]|0)+1;m=0}}while(0);return m|0}function kp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;k=l;d=jn(d)|0;c[k>>2]=d;o=0;g=ra(37,k|0,44220)|0;m=o;o=0;if((((!(m&1)?(o=0,va(c[(c[g>>2]|0)+32>>2]|0,g|0,57498,57524,e|0)|0,m=o,o=0,!(m&1)):0)?(o=0,j=ra(37,k|0,44360)|0,m=o,o=0,!(m&1)):0)?(o=0,h=ka(c[(c[j>>2]|0)+16>>2]|0,j|0)|0,m=o,o=0,!(m&1)):0)?(a[f>>0]=h,o=0,ia(c[(c[j>>2]|0)+20>>2]|0,b|0,j|0),m=o,o=0,!(m&1)):0){pm(d)|0;i=l;return}m=Na()|0;pm(d)|0;Ya(m|0)}function lp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0;n=i;i=i+16|0;m=n;d=jn(d)|0;c[m>>2]=d;o=0;h=ra(37,m|0,44220)|0;p=o;o=0;if(((((!(p&1)?(o=0,va(c[(c[h>>2]|0)+32>>2]|0,h|0,57498,57530,e|0)|0,p=o,o=0,!(p&1)):0)?(o=0,l=ra(37,m|0,44360)|0,p=o,o=0,!(p&1)):0)?(o=0,j=ka(c[(c[l>>2]|0)+12>>2]|0,l|0)|0,p=o,o=0,!(p&1)):0)?(a[f>>0]=j,o=0,k=ka(c[(c[l>>2]|0)+16>>2]|0,l|0)|0,p=o,o=0,!(p&1)):0)?(a[g>>0]=k,o=0,ia(c[(c[l>>2]|0)+20>>2]|0,b|0,l|0),p=o,o=0,!(p&1)):0){pm(d)|0;i=n;return}p=Na()|0;pm(d)|0;Ya(p|0)}function mp(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;a:do if(b<<24>>24==i<<24>>24)if(a[e>>0]|0){a[e>>0]=0;f=c[h>>2]|0;c[h>>2]=f+1;a[f>>0]=46;f=a[k>>0]|0;if((((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0?(p=c[m>>2]|0,(p-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;p=0}else p=0}else p=-1;else{if(b<<24>>24==j<<24>>24?(j=a[k>>0]|0,(((j&1)==0?(j&255)>>>1:c[k+4>>2]|0)|0)!=0):0){if(!(a[e>>0]|0)){p=-1;break}p=c[m>>2]|0;if((p-l|0)>=160){p=0;break}l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;c[n>>2]=0;p=0;break}i=o+32|0;p=o;while(1){if((a[p>>0]|0)==b<<24>>24)break;p=p+1|0;if((p|0)==(i|0)){p=i;break}}i=p-o|0;if((i|0)>31)p=-1;else{j=a[57498+i>>0]|0;switch(i|0){case 24:case 25:{p=c[h>>2]|0;if((p|0)!=(g|0)?(d[p+-1>>0]&95|0)!=(d[f>>0]&127|0):0){p=-1;break a}c[h>>2]=p+1;a[p>>0]=j;p=0;break a}case 23:case 22:{a[f>>0]=80;p=c[h>>2]|0;c[h>>2]=p+1;a[p>>0]=j;p=0;break a}default:{p=j&95;if((((p|0)==(a[f>>0]|0)?(a[f>>0]=p|128,(a[e>>0]|0)!=0):0)?(a[e>>0]=0,f=a[k>>0]|0,(((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0):0)?(q=c[m>>2]|0,(q-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=q+4;c[q>>2]=l}m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=j;if((i|0)>21){p=0;break a}c[n>>2]=(c[n>>2]|0)+1;p=0;break a}}}}while(0);return p|0}function np(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;k=i;i=i+16|0;j=k;b=jn(b)|0;c[j>>2]=b;o=0;f=ra(37,j|0,44212)|0;l=o;o=0;if((((!(l&1)?(o=0,va(c[(c[f>>2]|0)+48>>2]|0,f|0,57498,57524,d|0)|0,l=o,o=0,!(l&1)):0)?(o=0,h=ra(37,j|0,44368)|0,l=o,o=0,!(l&1)):0)?(o=0,g=ka(c[(c[h>>2]|0)+16>>2]|0,h|0)|0,l=o,o=0,!(l&1)):0)?(c[e>>2]=g,o=0,ia(c[(c[h>>2]|0)+20>>2]|0,a|0,h|0),l=o,o=0,!(l&1)):0){pm(b)|0;i=k;return}l=Na()|0;pm(b)|0;Ya(l|0)}function op(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+16|0;l=m;b=jn(b)|0;c[l>>2]=b;o=0;g=ra(37,l|0,44212)|0;n=o;o=0;if(((((!(n&1)?(o=0,va(c[(c[g>>2]|0)+48>>2]|0,g|0,57498,57530,d|0)|0,n=o,o=0,!(n&1)):0)?(o=0,k=ra(37,l|0,44368)|0,n=o,o=0,!(n&1)):0)?(o=0,h=ka(c[(c[k>>2]|0)+12>>2]|0,k|0)|0,n=o,o=0,!(n&1)):0)?(c[e>>2]=h,o=0,j=ka(c[(c[k>>2]|0)+16>>2]|0,k|0)|0,n=o,o=0,!(n&1)):0)?(c[f>>2]=j,o=0,ia(c[(c[k>>2]|0)+20>>2]|0,a|0,k|0),n=o,o=0,!(n&1)):0){pm(b)|0;i=m;return}n=Na()|0;pm(b)|0;Ya(n|0)}function pp(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0;a:do if((b|0)==(i|0))if(a[e>>0]|0){a[e>>0]=0;f=c[h>>2]|0;c[h>>2]=f+1;a[f>>0]=46;f=a[k>>0]|0;if((((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0?(p=c[m>>2]|0,(p-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;p=0}else p=0}else p=-1;else{if((b|0)==(j|0)?(j=a[k>>0]|0,(((j&1)==0?(j&255)>>>1:c[k+4>>2]|0)|0)!=0):0){if(!(a[e>>0]|0)){p=-1;break}p=c[m>>2]|0;if((p-l|0)>=160){p=0;break}l=c[n>>2]|0;c[m>>2]=p+4;c[p>>2]=l;c[n>>2]=0;p=0;break}i=o+128|0;p=o;while(1){if((c[p>>2]|0)==(b|0))break;p=p+4|0;if((p|0)==(i|0)){p=i;break}}i=p-o|0;p=i>>2;if((i|0)<=124){j=a[57498+p>>0]|0;switch(p|0){case 24:case 25:{p=c[h>>2]|0;if((p|0)!=(g|0)?(d[p+-1>>0]&95|0)!=(d[f>>0]&127|0):0){p=-1;break a}c[h>>2]=p+1;a[p>>0]=j;p=0;break a}case 23:case 22:{a[f>>0]=80;break}default:{p=j&95;if((((p|0)==(a[f>>0]|0)?(a[f>>0]=p|128,(a[e>>0]|0)!=0):0)?(a[e>>0]=0,f=a[k>>0]|0,(((f&1)==0?(f&255)>>>1:c[k+4>>2]|0)|0)!=0):0)?(q=c[m>>2]|0,(q-l|0)<160):0){l=c[n>>2]|0;c[m>>2]=q+4;c[q>>2]=l}}}m=c[h>>2]|0;c[h>>2]=m+1;a[m>>0]=j;if((i|0)>84)p=0;else{c[n>>2]=(c[n>>2]|0)+1;p=0}}else p=-1}while(0);return p|0}function qp(a){a=a|0;return}function rp(a){a=a|0;cj(a);return}function sp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+20|0;j=n+16|0;k=n+12|0;m=n;a:do if(!(c[e+4>>2]&1)){m=c[(c[b>>2]|0)+24>>2]|0;c[j>>2]=c[d>>2];c[h>>2]=c[j>>2];h=Mb[m&31](b,h,e,f,g&1)|0}else{h=jn(e)|0;c[k>>2]=h;o=0;j=ra(37,k|0,44360)|0;l=o;o=0;b:do if(l&1){n=Na()|0;pm(h)|0;h=n}else{pm(h)|0;h=c[j>>2]|0;if(g)Cb[c[h+24>>2]&127](m,j);else Cb[c[h+28>>2]&127](m,j);b=a[m>>0]|0;l=(b&1)==0;h=m+1|0;g=m+8|0;k=l?h:m+1|0;h=l?h:c[m+8>>2]|0;l=m+4|0;e=(b&1)==0;c:do if((h|0)!=((e?k:c[g>>2]|0)+(e?(b&255)>>>1:c[l>>2]|0)|0)){d:while(1){j=a[h>>0]|0;f=c[d>>2]|0;do if(f){e=f+24|0;b=c[e>>2]|0;if((b|0)!=(c[f+28>>2]|0)){c[e>>2]=b+1;a[b>>0]=j;break}o=0;j=ra(c[(c[f>>2]|0)+52>>2]|0,f|0,j&255|0)|0;b=o;o=0;if(b&1)break d;if((j|0)==-1)c[d>>2]=0}while(0);h=h+1|0;b=a[m>>0]|0;e=(b&1)==0;if((h|0)==((e?k:c[g>>2]|0)+(e?(b&255)>>>1:c[l>>2]|0)|0))break c}h=Na()|0;Im(m);break b}while(0);h=c[d>>2]|0;Im(m);break a}while(0);Ya(h|0)}while(0);i=n;return h|0}function tp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+64|0;h=n;q=n+56|0;r=n+44|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,1,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(1,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=cd(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function up(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;if(e&2048){a[b>>0]=43;b=b+1|0}if(e&512){a[b>>0]=35;b=b+1|0}f=a[c>>0]|0;if(f<<24>>24){g=c;while(1){g=g+1|0;c=b+1|0;a[b>>0]=f;f=a[g>>0]|0;if(!(f<<24>>24)){b=c;break}else b=c}}a:do switch(e&74|0){case 64:{a[b>>0]=111;break}case 8:if(!(e&16384)){a[b>>0]=120;break a}else{a[b>>0]=88;break a}default:if(d){a[b>>0]=100;break a}else{a[b>>0]=117;break a}}while(0);return}function vp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;a:do switch(c[e+4>>2]&176|0){case 16:{e=a[b>>0]|0;switch(e<<24>>24){case 43:case 45:{b=b+1|0;break a}default:{}}if((d-b|0)>1&e<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:{f=7;break a}}b=b+2|0}else f=7;break}case 32:{b=d;break}default:f=7}while(0);return b|0}function wp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+16|0;w=v;t=Is(j,44220)|0;m=Is(j,44360)|0;Cb[c[(c[m>>2]|0)+20>>2]&127](w,m);r=a[w>>0]|0;s=w+4|0;a:do if(!(((r&1)==0?(r&255)>>>1:c[s>>2]|0)|0)){o=0;va(c[(c[t>>2]|0)+32>>2]|0,t|0,b|0,e|0,f|0)|0;u=o;o=0;if(u&1)u=5;else{j=f+(e-b)|0;c[h>>2]=j;u=29}}else{c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,j|0)|0;r=o;o=0;if(r&1){u=5;break a}l=c[h>>2]|0;c[h>>2]=l+1;a[l>>0]=j;l=b+1|0;break}default:l=b}b:do if((e-l|0)>1?(a[l>>0]|0)==48:0){j=l+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:break b}o=0;k=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,48)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+1;a[r>>0]=k;o=0;j=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,a[j>>0]|0)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+1;a[r>>0]=j;l=l+2|0}while(0);if((l|0)!=(e|0)?(n=e+-1|0,l>>>0>>0):0){k=l;j=n;do{r=a[k>>0]|0;a[k>>0]=a[j>>0]|0;a[j>>0]=r;k=k+1|0;j=j+-1|0}while(k>>>0>>0)}o=0;n=ka(c[(c[m>>2]|0)+16>>2]|0,m|0)|0;r=o;o=0;if(!(r&1)){p=w+8|0;q=w+1|0;c:do if(l>>>0>>0){j=0;k=0;r=l;while(1){m=a[((a[w>>0]&1)==0?q:c[p>>2]|0)+k>>0]|0;if(m<<24>>24!=0&(j|0)==(m<<24>>24|0)){j=c[h>>2]|0;c[h>>2]=j+1;a[j>>0]=n;j=a[w>>0]|0;m=0;k=(k>>>0<(((j&1)==0?(j&255)>>>1:c[s>>2]|0)+-1|0)>>>0&1)+k|0}else m=j;o=0;j=ra(c[(c[t>>2]|0)+28>>2]|0,t|0,a[r>>0]|0)|0;x=o;o=0;if(x&1)break;x=c[h>>2]|0;c[h>>2]=x+1;a[x>>0]=j;r=r+1|0;if(r>>>0>=e>>>0)break c;else j=m+1|0}j=Na()|0;break a}while(0);k=b;j=f+(l-k)|0;b=c[h>>2]|0;if((j|0)==(b|0)){b=k;u=29}else{b=b+-1|0;if(j>>>0>>0)do{x=a[j>>0]|0;a[j>>0]=a[b>>0]|0;a[b>>0]=x;j=j+1|0;b=b+-1|0}while(j>>>0>>0);b=k;j=c[h>>2]|0;u=29}}else u=5}while(0);if((u|0)==5)j=Na()|0;else if((u|0)==29){c[g>>2]=(d|0)==(e|0)?j:f+(d-b)|0;Im(w);i=v;return}Im(w);Ya(j|0)}function xp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+96|0;h=n+8|0;a=n;q=n+74|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,1,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,22,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(1,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=cd(h,k,r,s,d,e)|0;i=n;return s|0}return 0}function yp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+64|0;h=n;q=n+56|0;r=n+44|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,0,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(1,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=cd(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function zp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+112|0;h=n+8|0;a=n;q=n+75|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,0,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,23,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(1,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=cd(h,k,r,s,d,e)|0;i=n;return s|0}return 0}function Ap(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+176|0;u=z+84|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+88|0;t=z+80|0;k=z+118|0;y=z+76|0;x=z+72|0;v=z+68|0;w=z+64|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58898,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,c[q>>2]=c[d+8>>2],h[q+8>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<1)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(2,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(39,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Bp(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(d&2048){a[b>>0]=43;b=b+1|0}if(d&1024){a[b>>0]=35;b=b+1|0}h=d&260;f=d>>>14;i=(h|0)==260;if(i)g=0;else{a[b>>0]=46;a[b+1>>0]=42;b=b+2|0;g=1}d=a[c>>0]|0;if(d<<24>>24){e=b;while(1){c=c+1|0;b=e+1|0;a[e>>0]=d;d=a[c>>0]|0;if(!(d<<24>>24))break;else e=b}}a:do switch(h|0){case 4:if(!(f&1)){a[b>>0]=102;break a}else{a[b>>0]=70;break a}case 256:if(!(f&1)){a[b>>0]=101;break a}else{a[b>>0]=69;break a}default:{d=(f&1|0)!=0;if(i)if(d){a[b>>0]=65;break a}else{a[b>>0]=97;break a}else if(d){a[b>>0]=71;break a}else{a[b>>0]=103;break a}}}while(0);return g|0}function Cp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;z=i;i=i+16|0;A=z;y=Is(j,44220)|0;w=Is(j,44360)|0;Cb[c[(c[w>>2]|0)+20>>2]&127](A,w);c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,j|0)|0;x=o;o=0;if(x&1)v=8;else{n=c[h>>2]|0;c[h>>2]=n+1;a[n>>0]=j;n=b+1|0;v=10}break}default:{n=b;v=10}}a:do if((v|0)==10){x=e;b:do if((x-n|0)>1?(a[n>>0]|0)==48:0){l=n+1|0;switch(a[l>>0]|0){case 88:case 120:break;default:{v=11;break b}}o=0;j=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,48)|0;u=o;o=0;if(u&1){v=8;break a}u=c[h>>2]|0;c[h>>2]=u+1;a[u>>0]=j;n=n+2|0;o=0;j=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,a[l>>0]|0)|0;u=o;o=0;if(u&1){v=8;break a}u=c[h>>2]|0;c[h>>2]=u+1;a[u>>0]=j;if(n>>>0>>0){j=n;while(1){l=a[j>>0]|0;o=0;m=ua(3)|0;u=o;o=0;if(u&1)break;o=0;l=ra(39,l<<24>>24|0,m|0)|0;u=o;o=0;if(u&1)break;if(!l){u=n;break b}j=j+1|0;if(j>>>0>=e>>>0){u=n;break b}}j=Na()|0;break a}else{u=n;j=n}}else v=11;while(0);c:do if((v|0)==11)if(n>>>0>>0){j=n;while(1){l=a[j>>0]|0;o=0;m=ua(3)|0;u=o;o=0;if(u&1)break;o=0;l=ra(40,l<<24>>24|0,m|0)|0;u=o;o=0;if(u&1)break;if(!l){u=n;break c}j=j+1|0;if(j>>>0>=e>>>0){u=n;break c}}j=Na()|0;break a}else{u=n;j=n}while(0);s=a[A>>0]|0;t=A+4|0;if(((s&1)==0?(s&255)>>>1:c[t>>2]|0)|0){if((u|0)!=(j|0)?(p=j+-1|0,u>>>0

>>0):0){m=u;l=p;do{s=a[m>>0]|0;a[m>>0]=a[l>>0]|0;a[l>>0]=s;m=m+1|0;l=l+-1|0}while(m>>>0>>0)}o=0;p=ka(c[(c[w>>2]|0)+16>>2]|0,w|0)|0;s=o;o=0;if(s&1){v=8;break}q=A+8|0;r=A+1|0;d:do if(u>>>0>>0){l=0;m=0;s=u;while(1){n=a[((a[A>>0]&1)==0?r:c[q>>2]|0)+m>>0]|0;if(n<<24>>24>0&(l|0)==(n<<24>>24|0)){l=c[h>>2]|0;c[h>>2]=l+1;a[l>>0]=p;l=a[A>>0]|0;n=0;m=(m>>>0<(((l&1)==0?(l&255)>>>1:c[t>>2]|0)+-1|0)>>>0&1)+m|0}else n=l;o=0;l=ra(c[(c[y>>2]|0)+28>>2]|0,y|0,a[s>>0]|0)|0;B=o;o=0;if(B&1)break;B=c[h>>2]|0;c[h>>2]=B+1;a[B>>0]=l;s=s+1|0;if(s>>>0>=j>>>0)break d;else l=n+1|0}j=Na()|0;break a}while(0);l=f+(u-b)|0;m=c[h>>2]|0;if((l|0)!=(m|0)?(k=m+-1|0,l>>>0>>0):0){do{B=a[l>>0]|0;a[l>>0]=a[k>>0]|0;a[k>>0]=B;l=l+1|0;k=k+-1|0}while(l>>>0>>0);l=y}else l=y}else{o=0;va(c[(c[y>>2]|0)+32>>2]|0,y|0,u|0,j|0,c[h>>2]|0)|0;B=o;o=0;if(B&1){v=8;break}c[h>>2]=(c[h>>2]|0)+(j-u);l=y}e:do if(j>>>0>>0){while(1){k=a[j>>0]|0;if(k<<24>>24==46)break;o=0;k=ra(c[(c[l>>2]|0)+28>>2]|0,y|0,k|0)|0;B=o;o=0;if(B&1){v=4;break}B=c[h>>2]|0;c[h>>2]=B+1;a[B>>0]=k;j=j+1|0;if(j>>>0>=e>>>0)break e}if((v|0)==4){j=Na()|0;break a}o=0;k=ka(c[(c[w>>2]|0)+12>>2]|0,w|0)|0;B=o;o=0;if(B&1){v=8;break a}B=c[h>>2]|0;c[h>>2]=B+1;a[B>>0]=k;j=j+1|0}while(0);o=0;va(c[(c[y>>2]|0)+32>>2]|0,y|0,j|0,e|0,c[h>>2]|0)|0;B=o;o=0;if(B&1)v=8;else{B=(c[h>>2]|0)+(x-j)|0;c[h>>2]=B;c[g>>2]=(d|0)==(e|0)?B:f+(d-b)|0;Im(A);i=z;return}}while(0);if((v|0)==8)j=Na()|0;Im(A);Ya(j|0)}function Dp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+176|0;u=z+76|0;q=z+48|0;p=z+32|0;l=z+24|0;g=z+8|0;n=z;s=z+80|0;t=z+72|0;k=z+110|0;y=z+68|0;x=z+64|0;v=z+60|0;w=z+56|0;m=n;c[m>>2]=37;c[m+4>>2]=0;m=Bp(n+1|0,58899,c[d+4>>2]|0)|0;c[t>>2]=s;a=Xo()|0;if(m){c[g>>2]=c[d+8>>2];h[g+8>>3]=f;g=Su(s,30,a,n,g)|0}else{h[l>>3]=f;g=Su(s,30,a,n,l)|0}a:do if((g|0)>29){o=0;a=ua(3)|0;g=o;o=0;g=g&1;if(m){if(!g?(o=0,c[p>>2]=c[d+8>>2],h[p+8>>3]=f,j=va(17,t|0,a|0,n|0,p|0)|0,r=o,o=0,!(r&1)):0)A=12}else if(!g?(o=0,h[q>>3]=f,r=va(17,t|0,a|0,n|0,q|0)|0,q=o,o=0,!(q&1)):0){j=r;A=12}do if((A|0)==12){a=c[t>>2]|0;if(!a){o=0;xa(6);r=o;o=0;if(r&1)break;g=c[t>>2]|0}else g=a;a=g;n=g;A=16;break a}while(0);a=Na()|0}else{a=c[t>>2]|0;n=0;j=g;A=16}while(0);if((A|0)==16){l=a+j|0;m=vp(a,l,d)|0;do if((a|0)==(s|0)){a=s;g=0;A=22}else{j=Fl(j<<1)|0;if(!j){o=0;xa(6);A=o;o=0;if(A&1){g=0;A=20;break}a=c[t>>2]|0}g=j;k=j;A=22}while(0);do if((A|0)==22){o=0;j=ka(68,d|0)|0;t=o;o=0;if(!(t&1)){c[v>>2]=j;o=0;pa(2,a|0,m|0,l|0,k|0,y|0,x|0,v|0);v=o;o=0;if(v&1){a=Na()|0;pm(j)|0;break}pm(j)|0;c[w>>2]=c[b>>2];A=c[y>>2]|0;a=c[x>>2]|0;o=0;c[u>>2]=c[w>>2];a=ja(39,u|0,k|0,A|0,a|0,d|0,e|0)|0;A=o;o=0;if(!(A&1)){c[b>>2]=a;if(g)Gl(g);if(n)Gl(n);i=z;return a|0}else A=20}else A=20}while(0);if((A|0)==20)a=Na()|0;if(g)Gl(g);if(n)Gl(n)}Ya(a|0);return 0}function Ep(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;q=i;i=i+80|0;l=q;b=q+70|0;n=q+12|0;p=q+32|0;k=q+8|0;m=q+4|0;a[b>>0]=a[58901]|0;a[b+1>>0]=a[58902]|0;a[b+2>>0]=a[58903]|0;a[b+3>>0]=a[58904]|0;a[b+4>>0]=a[58905]|0;a[b+5>>0]=a[58906]|0;h=Xo()|0;c[l>>2]=g;b=Su(n,20,h,b,l)|0;g=n+b|0;h=vp(n,g,e)|0;j=jn(e)|0;c[k>>2]=j;o=0;k=ra(37,k|0,44220)|0;r=o;o=0;if(r&1){r=Na()|0;pm(j)|0;Ya(r|0)}else{pm(j)|0;Pb[c[(c[k>>2]|0)+32>>2]&31](k,n,g,p)|0;r=p+b|0;c[m>>2]=c[d>>2];c[l>>2]=c[m>>2];r=cd(l,p,(h|0)==(g|0)?r:p+(h-n)|0,r,e,f)|0;i=q;return r|0}return 0}function Fp(a){a=a|0;return}function Gp(a){a=a|0;cj(a);return}function Hp(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;h=m+20|0;j=m+16|0;k=m+12|0;l=m;a:do if(!(c[e+4>>2]&1)){l=c[(c[b>>2]|0)+24>>2]|0;c[j>>2]=c[d>>2];c[h>>2]=c[j>>2];h=Mb[l&31](b,h,e,f,g&1)|0}else{h=jn(e)|0;c[k>>2]=h;o=0;j=ra(37,k|0,44368)|0;k=o;o=0;b:do if(k&1){m=Na()|0;pm(h)|0;h=m}else{pm(h)|0;h=c[j>>2]|0;if(g)Cb[c[h+24>>2]&127](l,j);else Cb[c[h+28>>2]&127](l,j);b=a[l>>0]|0;e=(b&1)==0;h=l+4|0;g=l+8|0;k=e?h:l+4|0;h=e?h:c[l+8>>2]|0;e=(b&1)==0;c:do if((h|0)!=((e?k:c[g>>2]|0)+((e?(b&255)>>>1:c[k>>2]|0)<<2)|0)){while(1){j=c[h>>2]|0;f=c[d>>2]|0;if(f){e=f+24|0;b=c[e>>2]|0;if((b|0)==(c[f+28>>2]|0)){o=0;j=ra(c[(c[f>>2]|0)+52>>2]|0,f|0,j|0)|0;b=o;o=0;if(b&1)break}else{c[e>>2]=b+4;c[b>>2]=j}if((j|0)==-1)c[d>>2]=0}h=h+4|0;b=a[l>>0]|0;e=(b&1)==0;if((h|0)==((e?k:c[g>>2]|0)+((e?(b&255)>>>1:c[k>>2]|0)<<2)|0))break c}h=Na()|0;Wm(l);break b}while(0);h=c[d>>2]|0;Wm(l);break a}while(0);Ya(h|0)}while(0);i=m;return h|0}function Ip(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;n=i;i=i+128|0;h=n;q=n+116|0;r=n+104|0;k=n+20|0;m=n+16|0;l=n+12|0;p=n+8|0;j=n+4|0;a[q>>0]=a[58887]|0;a[q+1>>0]=a[58888]|0;a[q+2>>0]=a[58889]|0;a[q+3>>0]=a[58890]|0;a[q+4>>0]=a[58891]|0;a[q+5>>0]=a[58892]|0;up(q+1|0,58893,1,c[e+4>>2]|0);b=Xo()|0;c[h>>2]=g;g=r+(Su(r,12,b,q,h)|0)|0;q=vp(r,g,e)|0;b=jn(e)|0;c[p>>2]=b;o=0;pa(3,r|0,q|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){r=Na()|0;pm(b)|0;Ya(r|0)}else{pm(b)|0;c[j>>2]=c[d>>2];q=c[m>>2]|0;r=c[l>>2]|0;c[h>>2]=c[j>>2];r=Uu(h,k,q,r,e,f)|0;i=n;return r|0}return 0}function Jp(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+16|0;w=v;t=Is(j,44212)|0;m=Is(j,44368)|0;Cb[c[(c[m>>2]|0)+20>>2]&127](w,m);r=a[w>>0]|0;s=w+4|0;a:do if(!(((r&1)==0?(r&255)>>>1:c[s>>2]|0)|0)){o=0;va(c[(c[t>>2]|0)+48>>2]|0,t|0,b|0,e|0,f|0)|0;u=o;o=0;if(u&1)u=5;else{j=f+(e-b<<2)|0;c[h>>2]=j;u=28}}else{c[h>>2]=f;j=a[b>>0]|0;switch(j<<24>>24){case 43:case 45:{o=0;j=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,j|0)|0;r=o;o=0;if(r&1){u=5;break a}l=c[h>>2]|0;c[h>>2]=l+4;c[l>>2]=j;l=b+1|0;break}default:l=b}b:do if((e-l|0)>1?(a[l>>0]|0)==48:0){j=l+1|0;switch(a[j>>0]|0){case 88:case 120:break;default:{r=l;break b}}o=0;k=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,48)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+4;c[r>>2]=k;o=0;j=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,a[j>>0]|0)|0;r=o;o=0;if(r&1){u=5;break a}r=c[h>>2]|0;c[h>>2]=r+4;c[r>>2]=j;r=l+2|0}else r=l;while(0);if((r|0)!=(e|0)?(n=e+-1|0,r>>>0>>0):0){k=r;j=n;do{q=a[k>>0]|0;a[k>>0]=a[j>>0]|0;a[j>>0]=q;k=k+1|0;j=j+-1|0}while(k>>>0>>0)}o=0;m=ka(c[(c[m>>2]|0)+16>>2]|0,m|0)|0;q=o;o=0;if(!(q&1)){n=w+8|0;p=w+1|0;c:do if(r>>>0>>0){j=0;k=0;q=r;while(1){l=a[((a[w>>0]&1)==0?p:c[n>>2]|0)+k>>0]|0;if(l<<24>>24!=0&(j|0)==(l<<24>>24|0)){j=c[h>>2]|0;c[h>>2]=j+4;c[j>>2]=m;j=a[w>>0]|0;l=0;k=(k>>>0<(((j&1)==0?(j&255)>>>1:c[s>>2]|0)+-1|0)>>>0&1)+k|0}else l=j;o=0;j=ra(c[(c[t>>2]|0)+44>>2]|0,t|0,a[q>>0]|0)|0;x=o;o=0;if(x&1)break;x=c[h>>2]|0;c[h>>2]=x+4;c[x>>2]=j;q=q+1|0;if(q>>>0>=e>>>0)break c;else j=l+1|0}j=Na()|0;break a}while(0);l=b;j=f+(r-l<<2)|0;k=c[h>>2]|0;if((j|0)!=(k|0)){b=k+-4|0;if(j>>>0>>0){do{x=c[j>>2]|0;c[j>>2]=c[b>>2];c[b>>2]=x;j=j+4|0;b=b+-4|0}while(j>>>0>>0);b=l;j=k;u=28}else{b=l;j=k;u=28}}else{b=l;u=28}}else u=5}while(0);if((u|0)==5)j=Na()|0;else if((u|0)==28){c[g>>2]=(d|0)==(e|0)?j:f+(d-b<<2)|0;Im(w);i=v;return}Im(w);Ya(j|0)}function Kp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;n=i;i=i+224|0;h=n+8|0;a=n;q=n+196|0;k=n+32|0;m=n+28|0;l=n+24|0;p=n+20|0;j=n+16|0;r=a;c[r>>2]=37;c[r+4>>2]=0;up(a+1|0,58895,1,c[d+4>>2]|0);r=Xo()|0;s=h;c[s>>2]=f;c[s+4>>2]=g;g=q+(Su(q,22,r,a,h)|0)|0;f=vp(q,g,d)|0;a=jn(d)|0;c[p>>2]=a;o=0;pa(3,q|0,f|0,g|0,k|0,m|0,l|0,p|0);g=o;o=0;if(g&1){s=Na()|0;pm(a)|0;Ya(s|0)}else{pm(a)|0;c[j>>2]=c[b>>2];r=c[m>>2]|0;s=c[l>>2]|0;c[h>>2]=c[j>>2];s=Uu(h,k,r,s,d,e)|0;i=n;return s|0}return 0}\n function ut(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=i;i=i+16|0;s=u;q=u+8|0;a:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(c[l>>2]|0))break a;l=l+4|0;if((l|0)==(f|0)){l=f;break}}}while(0);c[k>>2]=h;c[g>>2]=e;n=j;r=b+8|0;b:do if(!((h|0)==(j|0)|(e|0)==(f|0))){b=h;m=l;c:while(1){w=d;h=c[w+4>>2]|0;l=s;c[l>>2]=c[w>>2];c[l+4>>2]=h;l=qk(c[r>>2]|0)|0;o=0;h=sa(21,b|0,g|0,m-e>>2|0,n-b|0,d|0)|0;w=o;o=0;if(w&1){v=9;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=8;break}switch(h|0){case 0:{p=1;break b}case -1:{l=b;v=14;break c}default:{}}l=(c[k>>2]|0)+h|0;c[k>>2]=l;if((l|0)==(j|0)){v=27;break}if((m|0)==(f|0)){e=c[g>>2]|0;b=l;l=f}else{l=qk(c[r>>2]|0)|0;o=0;e=ma(34,q|0,0,d|0)|0;w=o;o=0;if(w&1){v=35;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=34;break}if((e|0)==-1){p=2;break b}if(e>>>0>(n-(c[k>>2]|0)|0)>>>0){p=1;break b}if(e){l=q;while(1){m=a[l>>0]|0;w=c[k>>2]|0;c[k>>2]=w+1;a[w>>0]=m;e=e+-1|0;if(!e)break;else l=l+1|0}}e=(c[g>>2]|0)+4|0;c[g>>2]=e;d:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(c[l>>2]|0))break d;l=l+4|0;if((l|0)==(f|0)){l=f;break}}}while(0);b=c[k>>2]|0}if((b|0)==(j|0)|(e|0)==(f|0)){v=47;break b}else m=l}if((v|0)==8){w=Na(0)|0;ec(w)}else if((v|0)==9){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}else if((v|0)==14){c[k>>2]=l;e:do if((e|0)!=(c[g>>2]|0)){while(1){w=c[e>>2]|0;b=qk(c[r>>2]|0)|0;o=0;l=ma(34,l|0,w|0,s|0)|0;w=o;o=0;if(w&1){t=b;break}if((b|0)!=0?(o=0,ka(75,b|0)|0,w=o,o=0,w&1):0){v=18;break}if((l|0)==-1)break e;l=(c[k>>2]|0)+l|0;c[k>>2]=l;e=e+4|0;if((e|0)==(c[g>>2]|0))break e}if((v|0)==18){w=Na(0)|0;ec(w)}e=Na()|0;if((t|0)!=0?(o=0,ka(75,t|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}while(0);c[g>>2]=e;p=2;break}else if((v|0)==27){e=c[g>>2]|0;v=47;break}else if((v|0)==34){w=Na(0)|0;ec(w)}else if((v|0)==35){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}}else v=47;while(0);if((v|0)==47)p=(e|0)!=(f|0)&1;i=u;return p|0}function vt(b,d,e,f,g,h,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=i;i=i+16|0;t=u;a:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(a[l>>0]|0))break a;l=l+1|0;if((l|0)==(f|0)){l=f;break}}}while(0);c[k>>2]=h;c[g>>2]=e;p=j;r=b+8|0;b:do if(!((h|0)==(j|0)|(e|0)==(f|0))){b=h;n=l;c:while(1){m=d;l=c[m+4>>2]|0;h=t;c[h>>2]=c[m>>2];c[h+4>>2]=l;h=n;l=qk(c[r>>2]|0)|0;o=0;m=sa(22,b|0,g|0,h-e|0,p-b>>2|0,d|0)|0;w=o;o=0;if(w&1){v=9;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=8;break}switch(m|0){case 0:{q=2;break b}case -1:{l=b;v=14;break c}default:{}}b=(c[k>>2]|0)+(m<<2)|0;c[k>>2]=b;if((b|0)==(j|0)){v=31;break}e=c[g>>2]|0;if((n|0)==(f|0))l=f;else{l=qk(c[r>>2]|0)|0;o=0;e=va(20,b|0,e|0,1,d|0)|0;w=o;o=0;if(w&1){v=38;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=37;break}if(e){q=2;break b}c[k>>2]=(c[k>>2]|0)+4;e=(c[g>>2]|0)+1|0;c[g>>2]=e;d:do if((e|0)==(f|0))l=f;else{l=e;while(1){if(!(a[l>>0]|0))break d;l=l+1|0;if((l|0)==(f|0)){l=f;break}}}while(0);b=c[k>>2]|0}if((b|0)==(j|0)|(e|0)==(f|0)){v=47;break b}else n=l}if((v|0)==8){w=Na(0)|0;ec(w)}else if((v|0)==9){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}else if((v|0)==14){c[k>>2]=l;e:do if((e|0)!=(c[g>>2]|0)){b=l;f:while(1){l=qk(c[r>>2]|0)|0;o=0;b=va(20,b|0,e|0,h-e|0,t|0)|0;w=o;o=0;if(w&1){v=19;break}if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){v=18;break}switch(b|0){case -1:{v=25;break f}case -2:{v=26;break f}case 0:{e=e+1|0;break}default:e=e+b|0}b=(c[k>>2]|0)+4|0;c[k>>2]=b;if((e|0)==(c[g>>2]|0)){s=e;break e}}if((v|0)==18){w=Na(0)|0;ec(w)}else if((v|0)==19){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}else if((v|0)==25){c[g>>2]=e;q=2;break b}else if((v|0)==26){c[g>>2]=e;q=1;break b}}else s=e;while(0);c[g>>2]=s;q=(s|0)!=(f|0)&1;break}else if((v|0)==31){e=c[g>>2]|0;v=47;break}else if((v|0)==37){w=Na(0)|0;ec(w)}else if((v|0)==38){e=Na()|0;if((l|0)!=0?(o=0,ka(75,l|0)|0,w=o,o=0,w&1):0){w=Na(0)|0;ec(w)}Ya(e|0)}}else v=47;while(0);if((v|0)==47)q=(e|0)!=(f|0)&1;i=u;return q|0}function wt(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;j=i;i=i+16|0;h=j;c[g>>2]=e;e=qk(c[b+8>>2]|0)|0;o=0;b=ma(34,h|0,0,d|0)|0;d=o;o=0;if(d&1){h=Na()|0;if((e|0)!=0?(o=0,ka(75,e|0)|0,j=o,o=0,j&1):0){j=Na(0)|0;ec(j)}Ya(h|0)}if((e|0)!=0?(o=0,ka(75,e|0)|0,d=o,o=0,d&1):0){d=Na(0)|0;ec(d)}switch(b|0){case 0:case -1:{h=2;break}default:{b=b+-1|0;if(b>>>0<=(f-(c[g>>2]|0)|0)>>>0)if(!b)h=0;else while(1){d=a[h>>0]|0;f=c[g>>2]|0;c[g>>2]=f+1;a[f>>0]=d;b=b+-1|0;if(!b){h=0;break}else h=h+1|0}else h=1}}i=j;return h|0}function xt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+8|0;o=0;d=ka(75,c[b>>2]|0)|0;e=o;o=0;do if(e&1)f=16;else{o=0;e=ma(35,0,0,4)|0;a=o;o=0;if(a&1){a=Na(0)|0;if(!d)break;o=0;ka(75,d|0)|0;h=o;o=0;if(!(h&1))break;h=Na(0)|0;ec(h)}if((d|0)!=0?(o=0,ka(75,d|0)|0,h=o,o=0,h&1):0){h=Na(0)|0;ec(h)}if(!e){a=c[b>>2]|0;if(a){o=0;a=ka(75,a|0)|0;h=o;o=0;if(h&1){f=16;break}if((a|0)!=0?(o=0,ka(75,a|0)|0,h=o,o=0,h&1):0){h=Na(0)|0;ec(h)}else g=0}else g=1}else g=-1;return g|0}while(0);if((f|0)==16)a=Na(0)|0;ec(a);return 0}function yt(a){a=a|0;return 0}function zt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=e;j=a+8|0;a:do if((d|0)==(e|0)|(f|0)==0)a=0;else{a=0;i=0;while(1){h=qk(c[j>>2]|0)|0;o=0;g=ma(36,d|0,k-d|0,b|0)|0;n=o;o=0;if(n&1){m=h;break}if((h|0)!=0?(o=0,ka(75,h|0)|0,n=o,o=0,n&1):0){l=5;break}switch(g|0){case -2:case -1:break a;case 0:{d=d+1|0;g=1;break}default:d=d+g|0}a=g+a|0;i=i+1|0;if((d|0)==(e|0)|i>>>0>=f>>>0)break a}if((l|0)==5){n=Na(0)|0;ec(n)}a=Na()|0;if((m|0)!=0?(o=0,ka(75,m|0)|0,n=o,o=0,n&1):0){n=Na(0)|0;ec(n)}Ya(a|0)}while(0);return a|0}function At(a){a=a|0;var b=0,d=0;a=c[a+8>>2]|0;if(a){o=0;a=ka(75,a|0)|0;d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}if((a|0)!=0?(o=0,ka(75,a|0)|0,d=o,o=0,d&1):0){d=Na(0)|0;ec(d)}else b=4}else b=1;return b|0}function Bt(a){a=a|0;cj(a);return}function Ct(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Hv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Dt(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Iv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Et(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function Ft(a){a=a|0;return 0}function Gt(a){a=a|0;return 0}function Ht(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Jv(c,d,e,1114111,0)|0}function It(a){a=a|0;return 4}function Jt(a){a=a|0;cj(a);return}function Kt(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Kv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Lt(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0;a=i;i=i+16|0;k=a+4|0;b=a;c[k>>2]=d;c[b>>2]=g;h=Lv(d,e,k,g,h,b,1114111,0)|0;c[f>>2]=c[k>>2];c[j>>2]=c[b>>2];i=a;return h|0}function Mt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=d;return 3}function Nt(a){a=a|0;return 0}function Ot(a){a=a|0;return 0}function Pt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Mv(c,d,e,1114111,0)|0}function Qt(a){a=a|0;return 4}function Rt(a){a=a|0;cj(a);return}function St(a){a=a|0;cj(a);return}function Tt(b,d){b=b|0;d=d|0;c[b+4>>2]=d+-1;c[b>>2]=44384;a[b+8>>0]=46;a[b+9>>0]=44;b=b+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}function Ut(a,b){a=a|0;b=b|0;c[a+4>>2]=b+-1;c[a>>2]=44424;c[a+8>>2]=46;c[a+12>>2]=44;a=a+16|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return}function Vt(a){a=a|0;c[a>>2]=44384;Im(a+12|0);return}function Wt(a){a=a|0;Vt(a);cj(a);return}function Xt(a){a=a|0;c[a>>2]=44424;Im(a+16|0);return}function Yt(a){a=a|0;Xt(a);cj(a);return}function Zt(b){b=b|0;return a[b+8>>0]|0}function _t(a){a=a|0;return c[a+8>>2]|0}function $t(b){b=b|0;return a[b+9>>0]|0}function au(a){a=a|0;return c[a+12>>2]|0}function bu(a,b){a=a|0;b=b|0;Fm(a,b+12|0);return}function cu(a,b){a=a|0;b=b|0;Fm(a,b+16|0);return}function du(a,b){a=a|0;b=b|0;Gm(a,59024,4);return}function eu(a,b){a=a|0;b=b|0;Um(a,44996,pl(44996)|0);return}function fu(a,b){a=a|0;b=b|0;Gm(a,59029,5);return}function gu(a,b){a=a|0;b=b|0;Um(a,45016,pl(45016)|0);return}function hu(a){a=a|0;switch(c[a+4>>2]&74|0){case 64:{a=8;break}case 8:{a=16;break}case 0:{a=0;break}default:a=10}return a|0}function iu(b){b=b|0;do if((a[2464]|0)==0?(Ha(2464)|0)!=0:0){if((a[2472]|0)==0?(Ha(2472)|0)!=0:0){b=45040;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=45208);kb(193,0,n|0)|0;Pa(2472)}o=0;ra(41,45040,59035)|0;b=o;o=0;if(((((((((((((!(b&1)?(o=0,ra(41,45052,59042)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45064,59049)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45076,59057)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45088,59067)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45100,59076)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45112,59083)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45124,59092)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45136,59096)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45148,59100)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45160,59104)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45172,59108)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45184,59112)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45196,59116)|0,b=o,o=0,!(b&1)):0){c[11302]=45040;Pa(2464);break}b=Na()|0;sb(2464);Ya(b|0)}while(0);return c[11302]|0}function ju(b){b=b|0;do if((a[2480]|0)==0?(Ha(2480)|0)!=0:0){if((a[2488]|0)==0?(Ha(2488)|0)!=0:0){b=45212;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=45380);kb(194,0,n|0)|0;Pa(2488)}o=0;ra(42,45212,45380)|0;b=o;o=0;if(((((((((((((!(b&1)?(o=0,ra(42,45224,45408)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45236,45436)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45248,45468)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45260,45508)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45272,45544)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45284,45572)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45296,45608)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45308,45624)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45320,45640)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45332,45656)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45344,45672)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45356,45688)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,45368,45704)|0,b=o,o=0,!(b&1)):0){c[11430]=45212;Pa(2480);break}b=Na()|0;sb(2480);Ya(b|0)}while(0);return c[11430]|0}function ku(b){b=b|0;a:do if((a[2496]|0)==0?(Ha(2496)|0)!=0:0){if((a[2504]|0)==0?(Ha(2504)|0)!=0:0){b=45724;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=46012);kb(195,0,n|0)|0;Pa(2504)}o=0;ra(41,45724,59120)|0;b=o;o=0;do if((((((((((((((!(b&1)?(o=0,ra(41,45736,59128)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45748,59137)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45760,59143)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45772,59149)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45784,59153)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45796,59158)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45808,59163)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45820,59170)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45832,59180)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45844,59188)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45856,59197)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45868,59206)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45880,59210)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(41,45892,59214)|0,b=o,o=0,!(b&1)):0){o=0;ra(41,45904,59218)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45916,59149)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45928,59222)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45940,59226)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45952,59230)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45964,59234)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45976,59238)|0;b=o;o=0;if(b&1)break;o=0;ra(41,45988,59242)|0;b=o;o=0;if(b&1)break;o=0;ra(41,46e3,59246)|0;b=o;o=0;if(b&1)break;c[11503]=45724;Pa(2496);break a}while(0);b=Na()|0;sb(2496);Ya(b|0)}while(0);return c[11503]|0}function lu(b){b=b|0;a:do if((a[2512]|0)==0?(Ha(2512)|0)!=0:0){if((a[2520]|0)==0?(Ha(2520)|0)!=0:0){b=46016;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=46304);kb(196,0,n|0)|0;Pa(2520)}o=0;ra(42,46016,46304)|0;b=o;o=0;do if((((((((((((((!(b&1)?(o=0,ra(42,46028,46336)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46040,46372)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46052,46396)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46064,46420)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46076,46436)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46088,46456)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46100,46476)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46112,46504)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46124,46544)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46136,46576)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46148,46612)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46160,46648)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46172,46664)|0,b=o,o=0,!(b&1)):0)?(o=0,ra(42,46184,46680)|0,b=o,o=0,!(b&1)):0){o=0;ra(42,46196,46696)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46208,46420)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46220,46712)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46232,46728)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46244,46744)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46256,46760)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46268,46776)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46280,46792)|0;b=o;o=0;if(b&1)break;o=0;ra(42,46292,46808)|0;b=o;o=0;if(b&1)break;c[11706]=46016;Pa(2512);break a}while(0);b=Na()|0;sb(2512);Ya(b|0)}while(0);return c[11706]|0}function mu(b){b=b|0;do if((a[2528]|0)==0?(Ha(2528)|0)!=0:0){if((a[2536]|0)==0?(Ha(2536)|0)!=0:0){b=46828;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=47116);kb(197,0,n|0)|0;Pa(2536)}o=0;ra(41,46828,59250)|0;b=o;o=0;if(!(b&1)?(o=0,ra(41,46840,59253)|0,b=o,o=0,!(b&1)):0){c[11779]=46828;Pa(2528);break}b=Na()|0;sb(2528);Ya(b|0)}while(0);return c[11779]|0}function nu(b){b=b|0;do if((a[2544]|0)==0?(Ha(2544)|0)!=0:0){if((a[2552]|0)==0?(Ha(2552)|0)!=0:0){b=47120;do{c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;b=b+12|0}while((b|0)!=47408);kb(198,0,n|0)|0;Pa(2552)}o=0;ra(42,47120,47408)|0;b=o;o=0;if(!(b&1)?(o=0,ra(42,47132,47420)|0,b=o,o=0,!(b&1)):0){c[11858]=47120;Pa(2544);break}b=Na()|0;sb(2544);Ya(b|0)}while(0);return c[11858]|0}function ou(b){b=b|0;do if((a[2560]|0)==0?(Ha(2560)|0)!=0:0){o=0;wa(5,47436,59256,8);b=o;o=0;if(b&1){b=Na()|0;sb(2560);Ya(b|0)}else{kb(199,47436,n|0)|0;Pa(2560);break}}while(0);return 47436}function pu(b){b=b|0;var c=0;do if((a[2568]|0)==0?(Ha(2568)|0)!=0:0){o=0;b=ka(76,47448)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47484,47448,b|0),c=o,o=0,!(c&1)):0){kb(200,47484,n|0)|0;Pa(2568);break}c=Na()|0;sb(2568);Ya(c|0)}while(0);return 47484}function qu(b){b=b|0;do if((a[2576]|0)==0?(Ha(2576)|0)!=0:0){o=0;wa(5,47496,59265,8);b=o;o=0;if(b&1){b=Na()|0;sb(2576);Ya(b|0)}else{kb(199,47496,n|0)|0;Pa(2576);break}}while(0);return 47496}function ru(b){b=b|0;var c=0;do if((a[2584]|0)==0?(Ha(2584)|0)!=0:0){o=0;b=ka(76,47508)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47544,47508,b|0),c=o,o=0,!(c&1)):0){kb(200,47544,n|0)|0;Pa(2584);break}c=Na()|0;sb(2584);Ya(c|0)}while(0);return 47544}function su(b){b=b|0;do if((a[2592]|0)==0?(Ha(2592)|0)!=0:0){o=0;wa(5,47556,59274,20);b=o;o=0;if(b&1){b=Na()|0;sb(2592);Ya(b|0)}else{kb(199,47556,n|0)|0;Pa(2592);break}}while(0);return 47556}function tu(b){b=b|0;var c=0;do if((a[2600]|0)==0?(Ha(2600)|0)!=0:0){o=0;b=ka(76,47568)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47652,47568,b|0),c=o,o=0,!(c&1)):0){kb(200,47652,n|0)|0;Pa(2600);break}c=Na()|0;sb(2600);Ya(c|0)}while(0);return 47652}function uu(b){b=b|0;do if((a[2608]|0)==0?(Ha(2608)|0)!=0:0){o=0;wa(5,47664,59295,11);b=o;o=0;if(b&1){b=Na()|0;sb(2608);Ya(b|0)}else{kb(199,47664,n|0)|0;Pa(2608);break}}while(0);return 47664}function vu(b){b=b|0;var c=0;do if((a[2616]|0)==0?(Ha(2616)|0)!=0:0){o=0;b=ka(76,47676)|0;c=o;o=0;if(!(c&1)?(o=0,wa(15,47724,47676,b|0),c=o,o=0,!(c&1)):0){kb(200,47724,n|0)|0;Pa(2616);break}c=Na()|0;sb(2616);Ya(c|0)}while(0);return 47724}function wu(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=44304;a=a+8|0;b=c[a>>2]|0;o=0;d=ua(3)|0;e=o;o=0;do if(!(e&1)){if((b|0)!=(d|0)?(o=0,ha(188,c[a>>2]|0),e=o,o=0,e&1):0)break;return}while(0);e=Na(0)|0;ec(e)}function xu(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=i;i=i+112|0;m=z;p=(g-f|0)/12|0;do if(p>>>0>100){m=Fl(p)|0;if((m|0)==0?(o=0,xa(6),y=o,o=0,y&1):0){l=0;s=6;break}l=m;s=11}else{l=0;s=11}while(0);a:do if((s|0)==11){if((f|0)==(g|0))n=0;else{s=f;q=0;r=m;while(1){n=a[s>>0]|0;if(!(n&1))n=(n&255)>>>1;else n=c[s+4>>2]|0;if(!n){a[r>>0]=2;n=q+1|0;p=p+-1|0}else{a[r>>0]=1;n=q}s=s+12|0;if((s|0)==(g|0))break;else{q=n;r=r+1|0}}}x=(f|0)==(g|0);y=(f|0)==(g|0);w=0;t=n;b:while(1){n=c[b>>2]|0;do if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;v=o;o=0;if(v&1){s=5;break b}if((n|0)==-1){c[b>>2]=0;n=0;break}else{n=c[b>>2]|0;break}}}else n=0;while(0);s=(n|0)==0;q=c[e>>2]|0;if(q){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;n=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;v=o;o=0;if(v&1){s=5;break}if((n|0)==-1){c[e>>2]=0;q=0}}}else q=0;r=(q|0)==0;n=c[b>>2]|0;if(!((p|0)!=0&(s^r))){s=64;break}q=c[n+12>>2]|0;if((q|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;v=o;o=0;if(v&1){s=5;break}}else n=d[q>>0]|0;n=n&255;if(!k){o=0;n=ra(c[(c[h>>2]|0)+12>>2]|0,h|0,n|0)|0;v=o;o=0;if(v&1){s=5;break}}v=w+1|0;if(x){n=0;s=t}else{r=0;u=f;s=t;t=m;while(1){do if((a[t>>0]|0)==1){if(!(a[u>>0]&1))q=u+1|0;else q=c[u+8>>2]|0;q=a[q+w>>0]|0;if(!k){o=0;q=ra(c[(c[h>>2]|0)+12>>2]|0,h|0,q|0)|0;A=o;o=0;if(A&1){s=4;break b}}if(n<<24>>24!=q<<24>>24){a[t>>0]=0;q=r;p=p+-1|0;break}q=a[u>>0]|0;if(!(q&1))q=(q&255)>>>1;else q=c[u+4>>2]|0;if((q|0)==(v|0)){a[t>>0]=2;q=1;s=s+1|0;p=p+-1|0}else q=1}else q=r;while(0);u=u+12|0;if((u|0)==(g|0)){n=q;break}else{r=q;t=t+1|0}}}if(!n){w=v;t=s;continue}n=c[b>>2]|0;q=n+12|0;r=c[q>>2]|0;if((r|0)==(c[n+16>>2]|0)){o=0;ka(c[(c[n>>2]|0)+40>>2]|0,n|0)|0;A=o;o=0;if(A&1){s=5;break}}else c[q>>2]=r+1;if((s+p|0)>>>0<2|y){w=v;t=s;continue}else{n=f;r=s;s=m}while(1){if((a[s>>0]|0)==2){q=a[n>>0]|0;if(!(q&1))q=(q&255)>>>1;else q=c[n+4>>2]|0;if((q|0)!=(v|0)){a[s>>0]=0;r=r+-1|0}}n=n+12|0;if((n|0)==(g|0)){w=v;t=r;continue b}else s=s+1|0}}if((s|0)==4){f=Na()|0;break}else if((s|0)==5){f=Na()|0;break}else if((s|0)==64){do if(n){if((c[n+12>>2]|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;A=o;o=0;if(A&1){s=6;break a}if((n|0)==-1){c[b>>2]=0;n=0;break}else{n=c[b>>2]|0;break}}}else n=0;while(0);p=(n|0)==0;do if(!r){if((c[q+12>>2]|0)==(c[q+16>>2]|0)){o=0;n=ka(c[(c[q>>2]|0)+36>>2]|0,q|0)|0;A=o;o=0;if(A&1){s=6;break a}if((n|0)==-1){c[e>>2]=0;s=76;break}}if(!p)s=77}else s=76;while(0);if((s|0)==76?p:0)s=77;if((s|0)==77)c[j>>2]=c[j>>2]|2;c:do if((f|0)==(g|0))s=81;else while(1){if((a[m>>0]|0)==2)break c;f=f+12|0;if((f|0)==(g|0)){s=81;break}else m=m+1|0}while(0);if((s|0)==81){c[j>>2]=c[j>>2]|4;f=g}if(l)Gl(l);i=z;return f|0}}while(0);if((s|0)==6)f=Na()|0;if(l)Gl(l);Ya(f|0);return 0}function yu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){D=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=24;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(l){k=0;break}else k=0}l=a[B>>0]|0;l=(l&1)==0?(l&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+l|0)){o=0;wa(8,B|0,l<<1|0,0);n=o;o=0;if(n&1){D=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){D=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}}else l=d[l>>0]|0;if(Wo(l&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}else continue}else{c[m>>2]=k+1;continue}}if((D|0)==24){b=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;g=va(21,g|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){c[j>>2]=g;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=25;break a}if((b|0)==-1){c[f>>2]=0;D=49;break}}if(!g)D=50}else D=49;while(0);if((D|0)==49?g:0)D=50;if((D|0)==50)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=25}else D=25;while(0);if((D|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function zu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){E=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;k=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(k)break;else break b;o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;n=o;o=0;if(n&1){E=24;break b}if((m|0)!=-1)if(k)break;else break b;else{c[f>>2]=0;E=16;break}}else E=16;while(0);if((E|0)==16){E=0;if(k){l=0;break}else l=0}k=a[B>>0]|0;k=(k&1)==0?(k&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+k|0)){o=0;wa(8,B|0,k<<1|0,0);n=o;o=0;if(n&1){E=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){E=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+k}m=b+12|0;k=c[m>>2]|0;n=b+16|0;if((k|0)==(c[n>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}}else k=d[k>>0]|0;if(Wo(k&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}else continue}else{c[m>>2]=k+1;continue}}if((E|0)==24){b=Na()|0;break}F=a[C>>0]|0;if((((F&1)==0?(F&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){F=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=F}o=0;g=va(22,g|0,c[v>>2]|0,h|0,u|0)|0;k=D;F=o;o=0;if(!(F&1)){F=j;c[F>>2]=g;c[F+4>>2]=k;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;F=o;o=0;if(F&1){E=25;break a}if((b|0)==-1){c[f>>2]=0;E=49;break}}if(!g)E=50}else E=49;while(0);if((E|0)==49?g:0)E=50;if((E|0)==50)c[h>>2]=c[h>>2]|2;F=c[e>>2]|0;Im(B);Im(C);i=A;return F|0}else E=25}else E=25;while(0);if((E|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Au(e,f,g,h,j,k){e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;B=i;i=i+240|0;u=B+202|0;l=B+200|0;D=B+24|0;C=B+12|0;w=B+8|0;z=B+40|0;A=B+4|0;x=B;v=hu(h)|0;kp(D,h,u,l);c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;if(!(a[C>>0]&1))e=10;else e=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,e|0,0);t=o;o=0;a:do if(!(t&1)){r=C+8|0;s=C+1|0;h=(a[C>>0]&1)==0?s:c[r>>2]|0;c[w>>2]=h;c[A>>2]=z;c[x>>2]=0;t=C+4|0;q=a[l>>0]|0;e=c[f>>2]|0;b:while(1){if(e){if((c[e+12>>2]|0)==(c[e+16>>2]|0)){o=0;l=ka(c[(c[e>>2]|0)+36>>2]|0,e|0)|0;p=o;o=0;if(p&1){E=24;break}if((l|0)==-1){c[f>>2]=0;e=0}}}else e=0;m=(e|0)==0;l=c[g>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(m)break;else break b;o=0;n=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){E=24;break b}if((n|0)!=-1)if(m)break;else break b;else{c[g>>2]=0;E=16;break}}else E=16;while(0);if((E|0)==16){E=0;if(m){l=0;break}else l=0}m=a[C>>0]|0;m=(m&1)==0?(m&255)>>>1:c[t>>2]|0;if((c[w>>2]|0)==(h+m|0)){o=0;wa(8,C|0,m<<1|0,0);p=o;o=0;if(p&1){E=24;break}if(!(a[C>>0]&1))h=10;else h=(c[C>>2]&-2)+-1|0;o=0;wa(8,C|0,h|0,0);p=o;o=0;if(p&1){E=24;break}h=(a[C>>0]&1)==0?s:c[r>>2]|0;c[w>>2]=h+m}n=e+12|0;m=c[n>>2]|0;p=e+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[e>>2]|0)+36>>2]|0,e|0)|0;F=o;o=0;if(F&1){E=24;break}}else m=d[m>>0]|0;if(Wo(m&255,v,h,w,x,q,D,z,A,u)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[e>>2]|0)+40>>2]|0,e|0)|0;F=o;o=0;if(F&1){E=24;break}else continue}else{c[n>>2]=l+1;continue}}if((E|0)==24){e=Na()|0;break}F=a[D>>0]|0;if((((F&1)==0?(F&255)>>>1:c[D+4>>2]|0)|0)!=0?(y=c[A>>2]|0,(y-z|0)<160):0){F=c[x>>2]|0;c[A>>2]=y+4;c[y>>2]=F}o=0;h=va(23,h|0,c[w>>2]|0,j|0,v|0)|0;F=o;o=0;if(!(F&1)){b[k>>1]=h;Ur(D,z,c[A>>2]|0,j);if(e){if((c[e+12>>2]|0)==(c[e+16>>2]|0)){o=0;h=ka(c[(c[e>>2]|0)+36>>2]|0,e|0)|0;F=o;o=0;if(F&1){E=25;break}if((h|0)==-1){c[f>>2]=0;e=0}}}else e=0;h=(e|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)){o=0;e=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;F=o;o=0;if(F&1){E=25;break a}if((e|0)==-1){c[g>>2]=0;E=49;break}}if(!h)E=50}else E=49;while(0);if((E|0)==49?h:0)E=50;if((E|0)==50)c[j>>2]=c[j>>2]|2;F=c[f>>2]|0;Im(C);Im(D);i=B;return F|0}else E=25}else E=25;while(0);if((E|0)==25)e=Na()|0;Im(C);Im(D);Ya(e|0);return 0}function Bu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){D=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=24;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(l){k=0;break}else k=0}l=a[B>>0]|0;l=(l&1)==0?(l&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+l|0)){o=0;wa(8,B|0,l<<1|0,0);n=o;o=0;if(n&1){D=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){D=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}}else l=d[l>>0]|0;if(Wo(l&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}else continue}else{c[m>>2]=k+1;continue}}if((D|0)==24){b=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;g=va(24,g|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){c[j>>2]=g;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=25;break a}if((b|0)==-1){c[f>>2]=0;D=49;break}}if(!g)D=50}else D=49;while(0);if((D|0)==49?g:0)D=50;if((D|0)==50)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=25}else D=25;while(0);if((D|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Cu(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){D=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;l=(b|0)==0;k=c[f>>2]|0;do if(k){if((c[k+12>>2]|0)!=(c[k+16>>2]|0))if(l)break;else break b;o=0;m=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=24;break b}if((m|0)!=-1)if(l)break;else break b;else{c[f>>2]=0;D=16;break}}else D=16;while(0);if((D|0)==16){D=0;if(l){k=0;break}else k=0}l=a[B>>0]|0;l=(l&1)==0?(l&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+l|0)){o=0;wa(8,B|0,l<<1|0,0);n=o;o=0;if(n&1){D=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){D=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+l}m=b+12|0;l=c[m>>2]|0;n=b+16|0;if((l|0)==(c[n>>2]|0)){o=0;l=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}}else l=d[l>>0]|0;if(Wo(l&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=24;break}else continue}else{c[m>>2]=k+1;continue}}if((D|0)==24){b=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;g=va(25,g|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){c[j>>2]=g;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;E=o;o=0;if(E&1){D=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=25;break a}if((b|0)==-1){c[f>>2]=0;D=49;break}}if(!g)D=50}else D=49;while(0);if((D|0)==49?g:0)D=50;if((D|0)==50)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=25}else D=25;while(0);if((D|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Du(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0;A=i;i=i+240|0;t=A+202|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;kp(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))b=10;else b=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,b|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=a[k>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;n=o;o=0;if(n&1){E=24;break}if((k|0)==-1){c[e>>2]=0;b=0}}}else b=0;k=(b|0)==0;l=c[f>>2]|0;do if(l){if((c[l+12>>2]|0)!=(c[l+16>>2]|0))if(k)break;else break b;o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;n=o;o=0;if(n&1){E=24;break b}if((m|0)!=-1)if(k)break;else break b;else{c[f>>2]=0;E=16;break}}else E=16;while(0);if((E|0)==16){E=0;if(k){l=0;break}else l=0}k=a[B>>0]|0;k=(k&1)==0?(k&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(g+k|0)){o=0;wa(8,B|0,k<<1|0,0);n=o;o=0;if(n&1){E=24;break}if(!(a[B>>0]&1))g=10;else g=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,g|0,0);n=o;o=0;if(n&1){E=24;break}g=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=g+k}m=b+12|0;k=c[m>>2]|0;n=b+16|0;if((k|0)==(c[n>>2]|0)){o=0;k=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}}else k=d[k>>0]|0;if(Wo(k&255,u,g,v,w,p,C,y,z,t)|0)break;k=c[m>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=24;break}else continue}else{c[m>>2]=k+1;continue}}if((E|0)==24){b=Na()|0;break}F=a[C>>0]|0;if((((F&1)==0?(F&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){F=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=F}o=0;g=va(26,g|0,c[v>>2]|0,h|0,u|0)|0;k=D;F=o;o=0;if(!(F&1)){F=j;c[F>>2]=g;c[F+4>>2]=k;Ur(C,y,c[z>>2]|0,h);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;F=o;o=0;if(F&1){E=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(l){if((c[l+12>>2]|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;F=o;o=0;if(F&1){E=25;break a}if((b|0)==-1){c[f>>2]=0;E=49;break}}if(!g)E=50}else E=49;while(0);if((E|0)==49?g:0)E=50;if((E|0)==50)c[h>>2]=c[h>>2]|2;F=c[e>>2]|0;Im(B);Im(C);i=A;return F|0}else E=25}else E=25;while(0);if((E|0)==25)b=Na()|0;Im(B);Im(C);Ya(b|0);return 0}function Eu(b,e,f,h,j,k){b=b|0;e=e|0;f=f|0;h=h|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;E=i;i=i+240|0;w=E+208|0;m=E+203|0;n=E+202|0;G=E+24|0;F=E+12|0;y=E+8|0;C=E+40|0;D=E+4|0;z=E;A=E+201|0;x=E+200|0;lp(G,h,w,m,n);c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;if(!(a[F>>0]&1))b=10;else b=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,b|0,0);v=o;o=0;a:do if(!(v&1)){t=F+8|0;u=F+1|0;h=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=h;c[D>>2]=C;c[z>>2]=0;a[A>>0]=1;a[x>>0]=69;v=F+4|0;s=a[m>>0]|0;r=a[n>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;m=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;q=o;o=0;if(q&1){H=24;break}if((m|0)==-1){c[e>>2]=0;b=0}}}else b=0;n=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(n)break;else break b;o=0;p=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;q=o;o=0;if(q&1){H=24;break b}if((p|0)!=-1)if(n)break;else break b;else{c[f>>2]=0;H=16;break}}else H=16;while(0);if((H|0)==16){H=0;if(n){m=0;break}else m=0}n=a[F>>0]|0;n=(n&1)==0?(n&255)>>>1:c[v>>2]|0;if((c[y>>2]|0)==(h+n|0)){o=0;wa(8,F|0,n<<1|0,0);q=o;o=0;if(q&1){H=24;break}if(!(a[F>>0]&1))h=10;else h=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,h|0,0);q=o;o=0;if(q&1){H=24;break}h=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=h+n}p=b+12|0;n=c[p>>2]|0;q=b+16|0;if((n|0)==(c[q>>2]|0)){o=0;n=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}}else n=d[n>>0]|0;if(mp(n&255,A,x,h,y,s,r,G,C,D,z,w)|0)break;m=c[p>>2]|0;if((m|0)==(c[q>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}else continue}else{c[p>>2]=m+1;continue}}if((H|0)==24){b=Na()|0;break}I=a[G>>0]|0;if(!((a[A>>0]|0)==0?1:(((I&1)==0?(I&255)>>>1:c[G+4>>2]|0)|0)==0)?(B=c[D>>2]|0,(B-C|0)<160):0){I=c[z>>2]|0;c[D>>2]=B+4;c[B>>2]=I}o=0;l=+ta(1,h|0,c[y>>2]|0,j|0);I=o;o=0;if(!(I&1)){g[k>>2]=l;Ur(G,C,c[D>>2]|0,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;h=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=25;break}if((h|0)==-1){c[e>>2]=0;b=0}}}else b=0;h=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;b=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;I=o;o=0;if(I&1){H=25;break a}if((b|0)==-1){c[f>>2]=0;H=49;break}}if(!h)H=50}else H=49;while(0);if((H|0)==49?h:0)H=50;if((H|0)==50)c[j>>2]=c[j>>2]|2;I=c[e>>2]|0;Im(F);Im(G);i=E;return I|0}else H=25}else H=25;while(0);if((H|0)==25)b=Na()|0;Im(F);Im(G);Ya(b|0);return 0}function Fu(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;E=i;i=i+240|0;w=E+208|0;m=E+203|0;n=E+202|0;G=E+24|0;F=E+12|0;y=E+8|0;C=E+40|0;D=E+4|0;z=E;A=E+201|0;x=E+200|0;lp(G,g,w,m,n);c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;if(!(a[F>>0]&1))b=10;else b=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,b|0,0);v=o;o=0;a:do if(!(v&1)){t=F+8|0;u=F+1|0;g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g;c[D>>2]=C;c[z>>2]=0;a[A>>0]=1;a[x>>0]=69;v=F+4|0;s=a[m>>0]|0;r=a[n>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;m=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;q=o;o=0;if(q&1){H=24;break}if((m|0)==-1){c[e>>2]=0;b=0}}}else b=0;n=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(n)break;else break b;o=0;p=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;q=o;o=0;if(q&1){H=24;break b}if((p|0)!=-1)if(n)break;else break b;else{c[f>>2]=0;H=16;break}}else H=16;while(0);if((H|0)==16){H=0;if(n){m=0;break}else m=0}n=a[F>>0]|0;n=(n&1)==0?(n&255)>>>1:c[v>>2]|0;if((c[y>>2]|0)==(g+n|0)){o=0;wa(8,F|0,n<<1|0,0);q=o;o=0;if(q&1){H=24;break}if(!(a[F>>0]&1))g=10;else g=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,g|0,0);q=o;o=0;if(q&1){H=24;break}g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g+n}p=b+12|0;n=c[p>>2]|0;q=b+16|0;if((n|0)==(c[q>>2]|0)){o=0;n=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}}else n=d[n>>0]|0;if(mp(n&255,A,x,g,y,s,r,G,C,D,z,w)|0)break;m=c[p>>2]|0;if((m|0)==(c[q>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}else continue}else{c[p>>2]=m+1;continue}}if((H|0)==24){b=Na()|0;break}I=a[G>>0]|0;if(!((a[A>>0]|0)==0?1:(((I&1)==0?(I&255)>>>1:c[G+4>>2]|0)|0)==0)?(B=c[D>>2]|0,(B-C|0)<160):0){I=c[z>>2]|0;c[D>>2]=B+4;c[B>>2]=I}o=0;l=+ta(2,g|0,c[y>>2]|0,j|0);I=o;o=0;if(!(I&1)){h[k>>3]=l;Ur(G,C,c[D>>2]|0,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;b=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;I=o;o=0;if(I&1){H=25;break a}if((b|0)==-1){c[f>>2]=0;H=49;break}}if(!g)H=50}else H=49;while(0);if((H|0)==49?g:0)H=50;if((H|0)==50)c[j>>2]=c[j>>2]|2;I=c[e>>2]|0;Im(F);Im(G);i=E;return I|0}else H=25}else H=25;while(0);if((H|0)==25)b=Na()|0;Im(F);Im(G);Ya(b|0);return 0}function Gu(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;E=i;i=i+240|0;w=E+208|0;m=E+203|0;n=E+202|0;G=E+24|0;F=E+12|0;y=E+8|0;C=E+40|0;D=E+4|0;z=E;A=E+201|0;x=E+200|0;lp(G,g,w,m,n);c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;if(!(a[F>>0]&1))b=10;else b=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,b|0,0);v=o;o=0;a:do if(!(v&1)){t=F+8|0;u=F+1|0;g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g;c[D>>2]=C;c[z>>2]=0;a[A>>0]=1;a[x>>0]=69;v=F+4|0;s=a[m>>0]|0;r=a[n>>0]|0;b=c[e>>2]|0;b:while(1){if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;m=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;q=o;o=0;if(q&1){H=24;break}if((m|0)==-1){c[e>>2]=0;b=0}}}else b=0;n=(b|0)==0;m=c[f>>2]|0;do if(m){if((c[m+12>>2]|0)!=(c[m+16>>2]|0))if(n)break;else break b;o=0;p=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;q=o;o=0;if(q&1){H=24;break b}if((p|0)!=-1)if(n)break;else break b;else{c[f>>2]=0;H=16;break}}else H=16;while(0);if((H|0)==16){H=0;if(n){m=0;break}else m=0}n=a[F>>0]|0;n=(n&1)==0?(n&255)>>>1:c[v>>2]|0;if((c[y>>2]|0)==(g+n|0)){o=0;wa(8,F|0,n<<1|0,0);q=o;o=0;if(q&1){H=24;break}if(!(a[F>>0]&1))g=10;else g=(c[F>>2]&-2)+-1|0;o=0;wa(8,F|0,g|0,0);q=o;o=0;if(q&1){H=24;break}g=(a[F>>0]&1)==0?u:c[t>>2]|0;c[y>>2]=g+n}p=b+12|0;n=c[p>>2]|0;q=b+16|0;if((n|0)==(c[q>>2]|0)){o=0;n=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}}else n=d[n>>0]|0;if(mp(n&255,A,x,g,y,s,r,G,C,D,z,w)|0)break;m=c[p>>2]|0;if((m|0)==(c[q>>2]|0)){o=0;ka(c[(c[b>>2]|0)+40>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=24;break}else continue}else{c[p>>2]=m+1;continue}}if((H|0)==24){b=Na()|0;break}I=a[G>>0]|0;if(!((a[A>>0]|0)==0?1:(((I&1)==0?(I&255)>>>1:c[G+4>>2]|0)|0)==0)?(B=c[D>>2]|0,(B-C|0)<160):0){I=c[z>>2]|0;c[D>>2]=B+4;c[B>>2]=I}o=0;l=+ta(3,g|0,c[y>>2]|0,j|0);I=o;o=0;if(!(I&1)){h[k>>3]=l;Ur(G,C,c[D>>2]|0,j);if(b){if((c[b+12>>2]|0)==(c[b+16>>2]|0)){o=0;g=ka(c[(c[b>>2]|0)+36>>2]|0,b|0)|0;I=o;o=0;if(I&1){H=25;break}if((g|0)==-1){c[e>>2]=0;b=0}}}else b=0;g=(b|0)==0;do if(m){if((c[m+12>>2]|0)==(c[m+16>>2]|0)){o=0;b=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;I=o;o=0;if(I&1){H=25;break a}if((b|0)==-1){c[f>>2]=0;H=49;break}}if(!g)H=50}else H=49;while(0);if((H|0)==49?g:0)H=50;if((H|0)==50)c[j>>2]=c[j>>2]|2;I=c[e>>2]|0;Im(F);Im(G);i=E;return I|0}else H=25}else H=25;while(0);if((H|0)==25)b=Na()|0;Im(F);Im(G);Ya(b|0);return 0}function Hu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=qk(b)|0;b=fl(a,d,g)|0;if((e|0)!=0?(o=0,ka(75,e|0)|0,g=o,o=0,g&1):0){g=Na(0)|0;ec(g)}i=f;return b|0}function Iu(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=i;i=i+112|0;l=y;n=(f-e|0)/12|0;do if(n>>>0>100){l=Fl(n)|0;if((l|0)==0?(o=0,xa(6),x=o,o=0,x&1):0){k=0;q=6;break}k=l;q=11}else{k=0;q=11}while(0);a:do if((q|0)==11){if((e|0)==(f|0))m=0;else{r=e;p=0;q=l;while(1){m=a[r>>0]|0;if(!(m&1))m=(m&255)>>>1;else m=c[r+4>>2]|0;if(!m){a[q>>0]=2;m=p+1|0;n=n+-1|0}else{a[q>>0]=1;m=p}r=r+12|0;if((r|0)==(f|0))break;else{p=m;q=q+1|0}}}w=(e|0)==(f|0);x=(e|0)==(f|0);v=0;s=n;b:while(1){n=c[b>>2]|0;do if(n){p=c[n+12>>2]|0;if((p|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;u=o;o=0;if(u&1){q=5;break b}}else n=c[p>>2]|0;if((n|0)==-1){c[b>>2]=0;r=1;break}else{r=(c[b>>2]|0)==0;break}}else r=1;while(0);p=c[d>>2]|0;if(p){n=c[p+12>>2]|0;if((n|0)==(c[p+16>>2]|0)){o=0;n=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;u=o;o=0;if(u&1){q=5;break}}else n=c[n>>2]|0;if((n|0)==-1){c[d>>2]=0;p=0;q=1}else q=0}else{p=0;q=1}n=c[b>>2]|0;if(!((s|0)!=0&(r^q))){q=66;break}p=c[n+12>>2]|0;if((p|0)==(c[n+16>>2]|0)){o=0;n=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;u=o;o=0;if(u&1){q=5;break}}else n=c[p>>2]|0;if(!j){o=0;n=ra(c[(c[g>>2]|0)+28>>2]|0,g|0,n|0)|0;u=o;o=0;if(u&1){q=5;break}}u=v+1|0;if(w){n=0;r=s}else{r=0;t=e;q=s;s=l;while(1){do if((a[s>>0]|0)==1){if(!(a[t>>0]&1))p=t+4|0;else p=c[t+8>>2]|0;p=c[p+(v<<2)>>2]|0;if(!j){o=0;p=ra(c[(c[g>>2]|0)+28>>2]|0,g|0,p|0)|0;z=o;o=0;if(z&1){q=4;break b}}if((n|0)!=(p|0)){a[s>>0]=0;p=r;q=q+-1|0;break}p=a[t>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[t+4>>2]|0;if((p|0)==(u|0)){a[s>>0]=2;p=1;m=m+1|0;q=q+-1|0}else p=1}else p=r;while(0);t=t+12|0;if((t|0)==(f|0)){n=p;r=q;break}else{r=p;s=s+1|0}}}if(!n){v=u;s=r;continue}n=c[b>>2]|0;p=n+12|0;q=c[p>>2]|0;if((q|0)==(c[n+16>>2]|0)){o=0;ka(c[(c[n>>2]|0)+40>>2]|0,n|0)|0;z=o;o=0;if(z&1){q=5;break}}else c[p>>2]=q+4;if((m+r|0)>>>0<2|x){v=u;s=r;continue}else{n=e;q=l}while(1){if((a[q>>0]|0)==2){p=a[n>>0]|0;if(!(p&1))p=(p&255)>>>1;else p=c[n+4>>2]|0;if((p|0)!=(u|0)){a[q>>0]=0;m=m+-1|0}}n=n+12|0;if((n|0)==(f|0)){v=u;s=r;continue b}else q=q+1|0}}if((q|0)==4){e=Na()|0;break}else if((q|0)==5){e=Na()|0;break}else if((q|0)==66){do if(n){m=c[n+12>>2]|0;if((m|0)==(c[n+16>>2]|0)){o=0;m=ka(c[(c[n>>2]|0)+36>>2]|0,n|0)|0;z=o;o=0;if(z&1){q=6;break a}}else m=c[m>>2]|0;if((m|0)==-1){c[b>>2]=0;n=1;break}else{n=(c[b>>2]|0)==0;break}}else n=1;while(0);do if(p){m=c[p+12>>2]|0;if((m|0)==(c[p+16>>2]|0)){o=0;m=ka(c[(c[p>>2]|0)+36>>2]|0,p|0)|0;z=o;o=0;if(z&1){q=6;break a}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else{q=81;break}else{c[d>>2]=0;q=79;break}}else q=79;while(0);if((q|0)==79?n:0)q=81;if((q|0)==81)c[h>>2]=c[h>>2]|2;c:do if((e|0)==(f|0))q=85;else while(1){if((a[l>>0]|0)==2)break c;e=e+12|0;if((e|0)==(f|0)){q=85;break}else l=l+1|0}while(0);if((q|0)==85){c[h>>2]=c[h>>2]|4;e=f}if(k)Gl(k);i=y;return e|0}}while(0);if((q|0)==6)e=Na()|0;if(k)Gl(k);Ya(e|0);return 0}function Ju(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){C=25;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k)break;else{j=l;break b}else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(k){j=0;break}else l=0}j=a[A>>0]|0;j=(j&1)==0?(j&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+j|0)){o=0;wa(8,A|0,j<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+j}k=f+12|0;j=c[k>>2]|0;m=f+16|0;if((j|0)==(c[m>>2]|0)){o=0;j=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}}else j=c[j>>2]|0;if(jp(j,t,b,u,v,n,B,x,y,s)|0){j=l;break}j=c[k>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}else{j=f;continue}}else{c[k>>2]=j+4;j=f;continue}}if((C|0)==25){b=Na()|0;break}D=a[B>>0]|0;if((((D&1)==0?(D&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){D=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=D}o=0;b=va(21,b|0,c[u>>2]|0,g|0,t|0)|0;D=o;o=0;if(!(D&1)){c[h>>2]=b;Ur(B,x,c[y>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;D=o;o=0;if(D&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;Im(A);Im(B);i=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Ku(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){f=c[k+12>>2]|0;if((f|0)==(c[k+16>>2]|0)){o=0;f=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;m=o;o=0;if(m&1){C=25;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(l)break;else break b;else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(l){k=0;break}else k=0}f=a[A>>0]|0;f=(f&1)==0?(f&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+f|0)){o=0;wa(8,A|0,f<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+f}l=j+12|0;f=c[l>>2]|0;m=j+16|0;if((f|0)==(c[m>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}}else f=c[f>>2]|0;if(jp(f,t,b,u,v,n,B,x,y,s)|0)break;f=c[l>>2]|0;if((f|0)==(c[m>>2]|0)){o=0;ka(c[(c[j>>2]|0)+40>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}else continue}else{c[l>>2]=f+4;continue}}if((C|0)==25){b=Na()|0;break}E=a[B>>0]|0;if((((E&1)==0?(E&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){E=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=E}o=0;b=va(22,b|0,c[u>>2]|0,g|0,t|0)|0;f=D;E=o;o=0;if(!(E&1)){E=h;c[E>>2]=b;c[E+4>>2]=f;Ur(B,x,c[y>>2]|0,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;E=c[d>>2]|0;Im(A);Im(B);i=z;return E|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Lu(d,e,f,g,h,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;A=i;i=i+320|0;t=A+208|0;k=A+200|0;C=A+24|0;B=A+12|0;v=A+8|0;y=A+40|0;z=A+4|0;w=A;u=hu(g)|0;np(C,g,t,k);c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;if(!(a[B>>0]&1))d=10;else d=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,d|0,0);s=o;o=0;a:do if(!(s&1)){q=B+8|0;r=B+1|0;d=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=d;c[z>>2]=y;c[w>>2]=0;s=B+4|0;p=c[k>>2]|0;k=c[e>>2]|0;b:while(1){if(k){g=c[k+12>>2]|0;if((g|0)==(c[k+16>>2]|0)){o=0;g=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;n=o;o=0;if(n&1){D=25;break}}else g=c[g>>2]|0;if((g|0)==-1){c[e>>2]=0;g=0;l=1}else{g=k;l=0}}else{g=0;l=1}m=c[f>>2]|0;do if(m){k=c[m+12>>2]|0;if((k|0)==(c[m+16>>2]|0)){o=0;k=ka(c[(c[m>>2]|0)+36>>2]|0,m|0)|0;n=o;o=0;if(n&1){D=25;break b}}else k=c[k>>2]|0;if((k|0)!=-1)if(l)break;else{k=m;break b}else{c[f>>2]=0;D=17;break}}else D=17;while(0);if((D|0)==17){D=0;if(l){k=0;break}else m=0}k=a[B>>0]|0;k=(k&1)==0?(k&255)>>>1:c[s>>2]|0;if((c[v>>2]|0)==(d+k|0)){o=0;wa(8,B|0,k<<1|0,0);n=o;o=0;if(n&1){D=25;break}if(!(a[B>>0]&1))d=10;else d=(c[B>>2]&-2)+-1|0;o=0;wa(8,B|0,d|0,0);n=o;o=0;if(n&1){D=25;break}d=(a[B>>0]&1)==0?r:c[q>>2]|0;c[v>>2]=d+k}l=g+12|0;k=c[l>>2]|0;n=g+16|0;if((k|0)==(c[n>>2]|0)){o=0;k=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;E=o;o=0;if(E&1){D=25;break}}else k=c[k>>2]|0;if(jp(k,u,d,v,w,p,C,y,z,t)|0){k=m;break}k=c[l>>2]|0;if((k|0)==(c[n>>2]|0)){o=0;ka(c[(c[g>>2]|0)+40>>2]|0,g|0)|0;E=o;o=0;if(E&1){D=25;break}else{k=g;continue}}else{c[l>>2]=k+4;k=g;continue}}if((D|0)==25){d=Na()|0;break}E=a[C>>0]|0;if((((E&1)==0?(E&255)>>>1:c[C+4>>2]|0)|0)!=0?(x=c[z>>2]|0,(x-y|0)<160):0){E=c[w>>2]|0;c[z>>2]=x+4;c[x>>2]=E}o=0;d=va(23,d|0,c[v>>2]|0,h|0,u|0)|0;E=o;o=0;if(!(E&1)){b[j>>1]=d;Ur(C,y,c[z>>2]|0,h);if(g){d=c[g+12>>2]|0;if((d|0)==(c[g+16>>2]|0)){o=0;d=ka(c[(c[g>>2]|0)+36>>2]|0,g|0)|0;E=o;o=0;if(E&1){D=26;break}}else d=c[d>>2]|0;if((d|0)==-1){c[e>>2]=0;g=1}else g=0}else g=1;do if(k){d=c[k+12>>2]|0;if((d|0)==(c[k+16>>2]|0)){o=0;d=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){D=26;break a}}else d=c[d>>2]|0;if((d|0)!=-1)if(g)break;else{D=53;break}else{c[f>>2]=0;D=51;break}}else D=51;while(0);if((D|0)==51?g:0)D=53;if((D|0)==53)c[h>>2]=c[h>>2]|2;E=c[e>>2]|0;Im(B);Im(C);i=A;return E|0}else D=26}else D=26;while(0);if((D|0)==26)d=Na()|0;Im(B);Im(C);Ya(d|0);return 0}function Mu(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){C=25;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k)break;else{j=l;break b}else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(k){j=0;break}else l=0}j=a[A>>0]|0;j=(j&1)==0?(j&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+j|0)){o=0;wa(8,A|0,j<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+j}k=f+12|0;j=c[k>>2]|0;m=f+16|0;if((j|0)==(c[m>>2]|0)){o=0;j=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}}else j=c[j>>2]|0;if(jp(j,t,b,u,v,n,B,x,y,s)|0){j=l;break}j=c[k>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}else{j=f;continue}}else{c[k>>2]=j+4;j=f;continue}}if((C|0)==25){b=Na()|0;break}D=a[B>>0]|0;if((((D&1)==0?(D&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){D=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=D}o=0;b=va(24,b|0,c[u>>2]|0,g|0,t|0)|0;D=o;o=0;if(!(D&1)){c[h>>2]=b;Ur(B,x,c[y>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;D=o;o=0;if(D&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;Im(A);Im(B);i=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Nu(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;f=0;k=1}else{f=j;k=0}}else{f=0;k=1}l=c[e>>2]|0;do if(l){j=c[l+12>>2]|0;if((j|0)==(c[l+16>>2]|0)){o=0;j=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;m=o;o=0;if(m&1){C=25;break b}}else j=c[j>>2]|0;if((j|0)!=-1)if(k)break;else{j=l;break b}else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(k){j=0;break}else l=0}j=a[A>>0]|0;j=(j&1)==0?(j&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+j|0)){o=0;wa(8,A|0,j<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+j}k=f+12|0;j=c[k>>2]|0;m=f+16|0;if((j|0)==(c[m>>2]|0)){o=0;j=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}}else j=c[j>>2]|0;if(jp(j,t,b,u,v,n,B,x,y,s)|0){j=l;break}j=c[k>>2]|0;if((j|0)==(c[m>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=25;break}else{j=f;continue}}else{c[k>>2]=j+4;j=f;continue}}if((C|0)==25){b=Na()|0;break}D=a[B>>0]|0;if((((D&1)==0?(D&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){D=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=D}o=0;b=va(25,b|0,c[u>>2]|0,g|0,t|0)|0;D=o;o=0;if(!(D&1)){c[h>>2]=b;Ur(B,x,c[y>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;D=o;o=0;if(D&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;D=o;o=0;if(D&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;D=c[d>>2]|0;Im(A);Im(B);i=z;return D|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Ou(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0;z=i;i=i+320|0;s=z+208|0;j=z+200|0;B=z+24|0;A=z+12|0;u=z+8|0;x=z+40|0;y=z+4|0;v=z;t=hu(f)|0;np(B,f,s,j);c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);r=o;o=0;a:do if(!(r&1)){p=A+8|0;q=A+1|0;b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b;c[y>>2]=x;c[v>>2]=0;r=A+4|0;n=c[j>>2]|0;j=c[d>>2]|0;b:while(1){if(j){f=c[j+12>>2]|0;if((f|0)==(c[j+16>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;m=o;o=0;if(m&1){C=25;break}}else f=c[f>>2]|0;if((f|0)==-1){c[d>>2]=0;j=0;l=1}else l=0}else{j=0;l=1}k=c[e>>2]|0;do if(k){f=c[k+12>>2]|0;if((f|0)==(c[k+16>>2]|0)){o=0;f=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;m=o;o=0;if(m&1){C=25;break b}}else f=c[f>>2]|0;if((f|0)!=-1)if(l)break;else break b;else{c[e>>2]=0;C=17;break}}else C=17;while(0);if((C|0)==17){C=0;if(l){k=0;break}else k=0}f=a[A>>0]|0;f=(f&1)==0?(f&255)>>>1:c[r>>2]|0;if((c[u>>2]|0)==(b+f|0)){o=0;wa(8,A|0,f<<1|0,0);m=o;o=0;if(m&1){C=25;break}if(!(a[A>>0]&1))b=10;else b=(c[A>>2]&-2)+-1|0;o=0;wa(8,A|0,b|0,0);m=o;o=0;if(m&1){C=25;break}b=(a[A>>0]&1)==0?q:c[p>>2]|0;c[u>>2]=b+f}l=j+12|0;f=c[l>>2]|0;m=j+16|0;if((f|0)==(c[m>>2]|0)){o=0;f=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}}else f=c[f>>2]|0;if(jp(f,t,b,u,v,n,B,x,y,s)|0)break;f=c[l>>2]|0;if((f|0)==(c[m>>2]|0)){o=0;ka(c[(c[j>>2]|0)+40>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=25;break}else continue}else{c[l>>2]=f+4;continue}}if((C|0)==25){b=Na()|0;break}E=a[B>>0]|0;if((((E&1)==0?(E&255)>>>1:c[B+4>>2]|0)|0)!=0?(w=c[y>>2]|0,(w-x|0)<160):0){E=c[v>>2]|0;c[y>>2]=w+4;c[w>>2]=E}o=0;b=va(26,b|0,c[u>>2]|0,g|0,t|0)|0;f=D;E=o;o=0;if(!(E&1)){E=h;c[E>>2]=b;c[E+4>>2]=f;Ur(B,x,c[y>>2]|0,g);if(j){b=c[j+12>>2]|0;if((b|0)==(c[j+16>>2]|0)){o=0;b=ka(c[(c[j>>2]|0)+36>>2]|0,j|0)|0;E=o;o=0;if(E&1){C=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(k){b=c[k+12>>2]|0;if((b|0)==(c[k+16>>2]|0)){o=0;b=ka(c[(c[k>>2]|0)+36>>2]|0,k|0)|0;E=o;o=0;if(E&1){C=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{C=53;break}else{c[e>>2]=0;C=51;break}}else C=51;while(0);if((C|0)==51?f:0)C=53;if((C|0)==53)c[g>>2]=c[g>>2]|2;E=c[d>>2]|0;Im(A);Im(B);i=z;return E|0}else C=26}else C=26;while(0);if((C|0)==26)b=Na()|0;Im(A);Im(B);Ya(b|0);return 0}function Pu(b,d,e,f,h,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;var k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=i;i=i+352|0;v=D+208|0;l=D+40|0;m=D+36|0;F=D+24|0;E=D+12|0;x=D+8|0;B=D+48|0;C=D+4|0;y=D;z=D+337|0;w=D+336|0;op(F,f,v,l,m);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);u=o;o=0;a:do if(!(u&1)){s=E+8|0;t=E+1|0;b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b;c[C>>2]=B;c[y>>2]=0;a[z>>0]=1;a[w>>0]=69;u=E+4|0;r=c[l>>2]|0;q=c[m>>2]|0;f=c[d>>2]|0;b:while(1){if(f){l=c[f+12>>2]|0;if((l|0)==(c[f+16>>2]|0)){o=0;l=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;p=o;o=0;if(p&1){G=25;break}}else l=c[l>>2]|0;if((l|0)==-1){c[d>>2]=0;f=0;n=1}else n=0}else{f=0;n=1}l=c[e>>2]|0;do if(l){m=c[l+12>>2]|0;if((m|0)==(c[l+16>>2]|0)){o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){G=25;break b}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else break b;else{c[e>>2]=0;G=17;break}}else G=17;while(0);if((G|0)==17){G=0;if(n){l=0;break}else l=0}m=a[E>>0]|0;m=(m&1)==0?(m&255)>>>1:c[u>>2]|0;if((c[x>>2]|0)==(b+m|0)){o=0;wa(8,E|0,m<<1|0,0);p=o;o=0;if(p&1){G=25;break}if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);p=o;o=0;if(p&1){G=25;break}b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b+m}n=f+12|0;m=c[n>>2]|0;p=f+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}}else m=c[m>>2]|0;if(pp(m,z,w,b,x,r,q,F,B,C,y,v)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}else continue}else{c[n>>2]=l+4;continue}}if((G|0)==25){b=Na()|0;break}H=a[F>>0]|0;if(!((a[z>>0]|0)==0?1:(((H&1)==0?(H&255)>>>1:c[F+4>>2]|0)|0)==0)?(A=c[C>>2]|0,(A-B|0)<160):0){H=c[y>>2]|0;c[C>>2]=A+4;c[A>>2]=H}o=0;k=+ta(1,b|0,c[x>>2]|0,h|0);H=o;o=0;if(!(H&1)){g[j>>2]=k;Ur(F,B,c[C>>2]|0,h);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;H=o;o=0;if(H&1){G=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{G=53;break}else{c[e>>2]=0;G=51;break}}else G=51;while(0);if((G|0)==51?f:0)G=53;if((G|0)==53)c[h>>2]=c[h>>2]|2;H=c[d>>2]|0;Im(E);Im(F);i=D;return H|0}else G=26}else G=26;while(0);if((G|0)==26)b=Na()|0;Im(E);Im(F);Ya(b|0);return 0}function Qu(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=i;i=i+352|0;v=D+208|0;l=D+40|0;m=D+36|0;F=D+24|0;E=D+12|0;x=D+8|0;B=D+48|0;C=D+4|0;y=D;z=D+337|0;w=D+336|0;op(F,f,v,l,m);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);u=o;o=0;a:do if(!(u&1)){s=E+8|0;t=E+1|0;b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b;c[C>>2]=B;c[y>>2]=0;a[z>>0]=1;a[w>>0]=69;u=E+4|0;r=c[l>>2]|0;q=c[m>>2]|0;f=c[d>>2]|0;b:while(1){if(f){l=c[f+12>>2]|0;if((l|0)==(c[f+16>>2]|0)){o=0;l=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;p=o;o=0;if(p&1){G=25;break}}else l=c[l>>2]|0;if((l|0)==-1){c[d>>2]=0;f=0;n=1}else n=0}else{f=0;n=1}l=c[e>>2]|0;do if(l){m=c[l+12>>2]|0;if((m|0)==(c[l+16>>2]|0)){o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){G=25;break b}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else break b;else{c[e>>2]=0;G=17;break}}else G=17;while(0);if((G|0)==17){G=0;if(n){l=0;break}else l=0}m=a[E>>0]|0;m=(m&1)==0?(m&255)>>>1:c[u>>2]|0;if((c[x>>2]|0)==(b+m|0)){o=0;wa(8,E|0,m<<1|0,0);p=o;o=0;if(p&1){G=25;break}if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);p=o;o=0;if(p&1){G=25;break}b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b+m}n=f+12|0;m=c[n>>2]|0;p=f+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}}else m=c[m>>2]|0;if(pp(m,z,w,b,x,r,q,F,B,C,y,v)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}else continue}else{c[n>>2]=l+4;continue}}if((G|0)==25){b=Na()|0;break}H=a[F>>0]|0;if(!((a[z>>0]|0)==0?1:(((H&1)==0?(H&255)>>>1:c[F+4>>2]|0)|0)==0)?(A=c[C>>2]|0,(A-B|0)<160):0){H=c[y>>2]|0;c[C>>2]=A+4;c[A>>2]=H}o=0;k=+ta(2,b|0,c[x>>2]|0,g|0);H=o;o=0;if(!(H&1)){h[j>>3]=k;Ur(F,B,c[C>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;H=o;o=0;if(H&1){G=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{G=53;break}else{c[e>>2]=0;G=51;break}}else G=51;while(0);if((G|0)==51?f:0)G=53;if((G|0)==53)c[g>>2]=c[g>>2]|2;H=c[d>>2]|0;Im(E);Im(F);i=D;return H|0}else G=26}else G=26;while(0);if((G|0)==26)b=Na()|0;Im(E);Im(F);Ya(b|0);return 0}function Ru(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;D=i;i=i+352|0;v=D+208|0;l=D+40|0;m=D+36|0;F=D+24|0;E=D+12|0;x=D+8|0;B=D+48|0;C=D+4|0;y=D;z=D+337|0;w=D+336|0;op(F,f,v,l,m);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);u=o;o=0;a:do if(!(u&1)){s=E+8|0;t=E+1|0;b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b;c[C>>2]=B;c[y>>2]=0;a[z>>0]=1;a[w>>0]=69;u=E+4|0;r=c[l>>2]|0;q=c[m>>2]|0;f=c[d>>2]|0;b:while(1){if(f){l=c[f+12>>2]|0;if((l|0)==(c[f+16>>2]|0)){o=0;l=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;p=o;o=0;if(p&1){G=25;break}}else l=c[l>>2]|0;if((l|0)==-1){c[d>>2]=0;f=0;n=1}else n=0}else{f=0;n=1}l=c[e>>2]|0;do if(l){m=c[l+12>>2]|0;if((m|0)==(c[l+16>>2]|0)){o=0;m=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;p=o;o=0;if(p&1){G=25;break b}}else m=c[m>>2]|0;if((m|0)!=-1)if(n)break;else break b;else{c[e>>2]=0;G=17;break}}else G=17;while(0);if((G|0)==17){G=0;if(n){l=0;break}else l=0}m=a[E>>0]|0;m=(m&1)==0?(m&255)>>>1:c[u>>2]|0;if((c[x>>2]|0)==(b+m|0)){o=0;wa(8,E|0,m<<1|0,0);p=o;o=0;if(p&1){G=25;break}if(!(a[E>>0]&1))b=10;else b=(c[E>>2]&-2)+-1|0;o=0;wa(8,E|0,b|0,0);p=o;o=0;if(p&1){G=25;break}b=(a[E>>0]&1)==0?t:c[s>>2]|0;c[x>>2]=b+m}n=f+12|0;m=c[n>>2]|0;p=f+16|0;if((m|0)==(c[p>>2]|0)){o=0;m=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}}else m=c[m>>2]|0;if(pp(m,z,w,b,x,r,q,F,B,C,y,v)|0)break;l=c[n>>2]|0;if((l|0)==(c[p>>2]|0)){o=0;ka(c[(c[f>>2]|0)+40>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=25;break}else continue}else{c[n>>2]=l+4;continue}}if((G|0)==25){b=Na()|0;break}H=a[F>>0]|0;if(!((a[z>>0]|0)==0?1:(((H&1)==0?(H&255)>>>1:c[F+4>>2]|0)|0)==0)?(A=c[C>>2]|0,(A-B|0)<160):0){H=c[y>>2]|0;c[C>>2]=A+4;c[A>>2]=H}o=0;k=+ta(3,b|0,c[x>>2]|0,g|0);H=o;o=0;if(!(H&1)){h[j>>3]=k;Ur(F,B,c[C>>2]|0,g);if(f){b=c[f+12>>2]|0;if((b|0)==(c[f+16>>2]|0)){o=0;b=ka(c[(c[f>>2]|0)+36>>2]|0,f|0)|0;H=o;o=0;if(H&1){G=26;break}}else b=c[b>>2]|0;if((b|0)==-1){c[d>>2]=0;f=1}else f=0}else f=1;do if(l){b=c[l+12>>2]|0;if((b|0)==(c[l+16>>2]|0)){o=0;b=ka(c[(c[l>>2]|0)+36>>2]|0,l|0)|0;H=o;o=0;if(H&1){G=26;break a}}else b=c[b>>2]|0;if((b|0)!=-1)if(f)break;else{G=53;break}else{c[e>>2]=0;G=51;break}}else G=51;while(0);if((G|0)==51?f:0)G=53;if((G|0)==53)c[g>>2]=c[g>>2]|2;H=c[d>>2]|0;Im(E);Im(F);i=D;return H|0}else G=26}else G=26;while(0);if((G|0)==26)b=Na()|0;Im(E);Im(F);Ya(b|0);return 0}function Su(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;i=i+16|0;h=g;c[h>>2]=f;f=qk(d)|0;d=el(a,b,e,h)|0;if((f|0)!=0?(o=0,ka(75,f|0)|0,h=o,o=0,h&1):0){h=Na(0)|0;ec(h)}i=g;return d|0}function Tu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=qk(b)|0;o=0;b=ma(37,a|0,d|0,g|0)|0;a=o;o=0;if(a&1){b=Na()|0;if((e|0)!=0?(o=0,ka(75,e|0)|0,g=o,o=0,g&1):0){g=Na(0)|0;ec(g)}Ya(b|0)}else{if((e|0)!=0?(o=0,ka(75,e|0)|0,g=o,o=0,g&1):0){g=Na(0)|0;ec(g)}i=f;return b|0}return 0}function Uu(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0;p=i;i=i+16|0;n=p;j=c[b>>2]|0;a:do if(!j)j=0;else{q=d;l=f-q>>2;m=g+12|0;k=c[m>>2]|0;l=(k|0)>(l|0)?k-l|0:0;k=e;q=k-q|0;g=q>>2;if((q|0)>0?(Gb[c[(c[j>>2]|0)+48>>2]&63](j,d,g)|0)!=(g|0):0){c[b>>2]=0;j=0;break}do if((l|0)>0){Vm(n,l,h);o=0;g=ma(c[(c[j>>2]|0)+48>>2]|0,j|0,((a[n>>0]&1)==0?n+4|0:c[n+8>>2]|0)|0,l|0)|0;q=o;o=0;if(q&1){q=Na()|0;Wm(n);Ya(q|0)}if((g|0)==(l|0)){Wm(n);break}else{c[b>>2]=0;Wm(n);j=0;break a}}while(0);q=f-k|0;f=q>>2;if((q|0)>0?(Gb[c[(c[j>>2]|0)+48>>2]&63](j,e,f)|0)!=(f|0):0){c[b>>2]=0;j=0;break}c[m>>2]=0}while(0);i=p;return j|0}function Vu(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;i=c[a>>2]|0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0))if((Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1){c[a>>2]=0;i=0;break}else{i=c[a>>2]|0;break}}else i=0;while(0);j=(i|0)==0;i=c[e>>2]|0;do if(i){if((c[i+12>>2]|0)==(c[i+16>>2]|0)?(Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0)==-1:0){c[e>>2]=0;r=11;break}if(j)r=13;else r=12}else r=11;while(0);if((r|0)==11)if(j)r=12;else{i=0;r=13}a:do if((r|0)==12){c[f>>2]=c[f>>2]|6;i=0}else if((r|0)==13){j=c[a>>2]|0;k=c[j+12>>2]|0;if((k|0)==(c[j+16>>2]|0))j=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else j=d[k>>0]|0;k=j&255;if(k<<24>>24>-1?(q=g+8|0,(b[(c[q>>2]|0)+(j<<24>>24<<1)>>1]&2048)!=0):0){m=(Gb[c[(c[g>>2]|0)+36>>2]&63](g,k,0)|0)<<24>>24;j=c[a>>2]|0;k=j+12|0;l=c[k>>2]|0;if((l|0)==(c[j+16>>2]|0)){Eb[c[(c[j>>2]|0)+40>>2]&127](j)|0;o=h;n=i;h=i;i=m}else{c[k>>2]=l+1;o=h;n=i;h=i;i=m}while(1){i=i+-48|0;p=o+-1|0;j=c[a>>2]|0;do if(j){if((c[j+12>>2]|0)==(c[j+16>>2]|0))if((Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0)==-1){c[a>>2]=0;j=0;break}else{j=c[a>>2]|0;break}}else j=0;while(0);l=(j|0)==0;if(h)if((c[h+12>>2]|0)==(c[h+16>>2]|0))if((Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0)==-1){c[e>>2]=0;k=0;h=0}else{k=n;h=n}else k=n;else{k=n;h=0}j=c[a>>2]|0;if(!((o|0)>1&(l^(h|0)==0)))break;l=c[j+12>>2]|0;if((l|0)==(c[j+16>>2]|0))j=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else j=d[l>>0]|0;l=j&255;if(l<<24>>24<=-1)break a;if(!(b[(c[q>>2]|0)+(j<<24>>24<<1)>>1]&2048))break a;i=((Gb[c[(c[g>>2]|0)+36>>2]&63](g,l,0)|0)<<24>>24)+(i*10|0)|0;j=c[a>>2]|0;l=j+12|0;m=c[l>>2]|0;if((m|0)==(c[j+16>>2]|0)){Eb[c[(c[j>>2]|0)+40>>2]&127](j)|0;o=p;n=k;continue}else{c[l>>2]=m+1;o=p;n=k;continue}}do if(j){if((c[j+12>>2]|0)==(c[j+16>>2]|0))if((Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0)==-1){c[a>>2]=0;j=0;break}else{j=c[a>>2]|0;break}}else j=0;while(0);j=(j|0)==0;do if(k){if((c[k+12>>2]|0)==(c[k+16>>2]|0)?(Eb[c[(c[k>>2]|0)+36>>2]&127](k)|0)==-1:0){c[e>>2]=0;r=50;break}if(j)break a}else r=50;while(0);if((r|0)==50?!j:0)break;c[f>>2]=c[f>>2]|2;break}c[f>>2]=c[f>>2]|4;i=0}while(0);return i|0}function Wu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=c[a>>2]|0;do if(g){h=c[g+12>>2]|0;if((h|0)==(c[g+16>>2]|0))g=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[h>>2]|0;if((g|0)==-1){c[a>>2]=0;i=1;break}else{i=(c[a>>2]|0)==0;break}}else i=1;while(0);h=c[b>>2]|0;do if(h){g=c[h+12>>2]|0;if((g|0)==(c[h+16>>2]|0))g=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else g=c[g>>2]|0;if((g|0)!=-1)if(i){o=17;break}else{o=16;break}else{c[b>>2]=0;o=14;break}}else o=14;while(0);if((o|0)==14)if(i)o=16;else{h=0;o=17}a:do if((o|0)==16){c[d>>2]=c[d>>2]|6;g=0}else if((o|0)==17){g=c[a>>2]|0;i=c[g+12>>2]|0;if((i|0)==(c[g+16>>2]|0))g=Eb[c[(c[g>>2]|0)+36>>2]&127](g)|0;else g=c[i>>2]|0;if(!(Gb[c[(c[e>>2]|0)+12>>2]&63](e,2048,g)|0)){c[d>>2]=c[d>>2]|4;g=0;break}g=(Gb[c[(c[e>>2]|0)+52>>2]&63](e,g,0)|0)<<24>>24;i=c[a>>2]|0;j=i+12|0;k=c[j>>2]|0;if((k|0)==(c[i+16>>2]|0)){Eb[c[(c[i>>2]|0)+40>>2]&127](i)|0;m=f;l=h;j=h}else{c[j>>2]=k+4;m=f;l=h;j=h}while(1){g=g+-48|0;n=m+-1|0;h=c[a>>2]|0;do if(h){i=c[h+12>>2]|0;if((i|0)==(c[h+16>>2]|0))h=Eb[c[(c[h>>2]|0)+36>>2]&127](h)|0;else h=c[i>>2]|0;if((h|0)==-1){c[a>>2]=0;k=1;break}else{k=(c[a>>2]|0)==0;break}}else k=1;while(0);do if(j){h=c[j+12>>2]|0;if((h|0)==(c[j+16>>2]|0))h=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else h=c[h>>2]|0;if((h|0)==-1){c[b>>2]=0;j=0;f=0;h=1;break}else{j=l;f=l;h=(l|0)==0;break}}else{j=l;f=0;h=1}while(0);i=c[a>>2]|0;if(!((m|0)>1&(k^h)))break;h=c[i+12>>2]|0;if((h|0)==(c[i+16>>2]|0))h=Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0;else h=c[h>>2]|0;if(!(Gb[c[(c[e>>2]|0)+12>>2]&63](e,2048,h)|0))break a;g=((Gb[c[(c[e>>2]|0)+52>>2]&63](e,h,0)|0)<<24>>24)+(g*10|0)|0;h=c[a>>2]|0;i=h+12|0;k=c[i>>2]|0;if((k|0)==(c[h+16>>2]|0)){Eb[c[(c[h>>2]|0)+40>>2]&127](h)|0;m=n;l=j;j=f;continue}else{c[i>>2]=k+4;m=n;l=j;j=f;continue}}do if(i){h=c[i+12>>2]|0;if((h|0)==(c[i+16>>2]|0))h=Eb[c[(c[i>>2]|0)+36>>2]&127](i)|0;else h=c[h>>2]|0;if((h|0)==-1){c[a>>2]=0;i=1;break}else{i=(c[a>>2]|0)==0;break}}else i=1;while(0);do if(j){h=c[j+12>>2]|0;if((h|0)==(c[j+16>>2]|0))h=Eb[c[(c[j>>2]|0)+36>>2]&127](j)|0;else h=c[h>>2]|0;if((h|0)!=-1)if(i)break a;else break;else{c[b>>2]=0;o=60;break}}else o=60;while(0);if((o|0)==60?!i:0)break;c[d>>2]=c[d>>2]|2}while(0);return g|0}function Xu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;e=(c[g>>2]|0)!=189;i=c[a>>2]|0;h=i;f=(c[d>>2]|0)-h|0;f=f>>>0<2147483647?f<<1:-1;h=(c[b>>2]|0)-h|0;i=Il(e?i:0,f)|0;if(!i)Sj();do if(!e){e=c[a>>2]|0;c[a>>2]=i;if(e){o=0;ha(c[g>>2]|0,e|0);i=o;o=0;if(i&1){i=Na(0)|0;ec(i)}else{j=c[a>>2]|0;break}}else j=i}else{c[a>>2]=i;j=i}while(0);c[g>>2]=201;c[b>>2]=j+h;c[d>>2]=(c[a>>2]|0)+f;return}function Yu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;e=(c[g>>2]|0)!=189;i=c[a>>2]|0;h=i;f=(c[d>>2]|0)-h|0;f=f>>>0<2147483647?f<<1:-1;h=(c[b>>2]|0)-h>>2;i=Il(e?i:0,f)|0;if(!i)Sj();do if(!e){e=c[a>>2]|0;c[a>>2]=i;if(e){o=0;ha(c[g>>2]|0,e|0);i=o;o=0;if(i&1){i=Na(0)|0;ec(i)}else{j=c[a>>2]|0;break}}else j=i}else{c[a>>2]=i;j=i}while(0);c[g>>2]=201;c[b>>2]=j+(h<<2);c[d>>2]=(c[a>>2]|0)+(f>>>2<<2);return}function Zu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=d;f=a[b>>0]|0;if(!(f&1)){g=10;k=(f&255)>>>1}else{f=c[b>>2]|0;g=(f&-2)+-1|0;k=c[b+4>>2]|0;f=f&255}j=e-h|0;do if((e|0)!=(d|0)){if((g-k|0)>>>0>>0){Tm(b,g,k+j-g|0,k,k,0,0);f=a[b>>0]|0}if(!(f&1))i=b+1|0;else i=c[b+8>>2]|0;h=e+(k-h)|0;if((d|0)!=(e|0)){f=d;g=i+k|0;while(1){a[g>>0]=a[f>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else g=g+1|0}}a[i+h>>0]=0;f=k+j|0;if(!(a[b>>0]&1)){a[b>>0]=f<<1;break}else{c[b+4>>2]=f;break}}while(0);return b|0}function _u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;e=(c[g>>2]|0)!=189;i=c[a>>2]|0;h=i;f=(c[d>>2]|0)-h|0;f=f>>>0<2147483647?f<<1:-1;h=(c[b>>2]|0)-h>>2;i=Il(e?i:0,f)|0;if(!i)Sj();do if(!e){e=c[a>>2]|0;c[a>>2]=i;if(e){o=0;ha(c[g>>2]|0,e|0);i=o;o=0;if(i&1){i=Na(0)|0;ec(i)}else{j=c[a>>2]|0;break}}else j=i}else{c[a>>2]=i;j=i}while(0);c[g>>2]=201;c[b>>2]=j+(h<<2);c[d>>2]=(c[a>>2]|0)+(f>>>2<<2);return}function $u(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;h=d;f=a[b>>0]|0;if(!(f&1)){g=1;k=(f&255)>>>1}else{f=c[b>>2]|0;g=(f&-2)+-1|0;k=c[b+4>>2]|0;f=f&255}j=e-h>>2;do if(j){if((g-k|0)>>>0>>0){an(b,g,k+j-g|0,k,k,0,0);f=a[b>>0]|0}if(!(f&1))i=b+4|0;else i=c[b+8>>2]|0;h=k+((e-h|0)>>>2)|0;if((d|0)!=(e|0)){f=d;g=i+(k<<2)|0;while(1){c[g>>2]=c[f>>2];f=f+4|0;if((f|0)==(e|0))break;else g=g+4|0}}c[i+(h<<2)>>2]=0;f=k+j|0;if(!(a[b>>0]&1)){a[b>>0]=f<<1;break}else{c[b+4>>2]=f;break}}while(0);return b|0}function av(b,d){b=b|0;d=d|0;var e=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a[b+128>>0]=0;do if(d){o=0;ia(125,b|0,d|0);e=o;o=0;if(e&1){e=Na()|0;Dv(b);Ya(e|0)}else{Uv(b,d);break}}while(0);return}function bv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43148)|0);return}function cv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43188)|0);return}function dv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44220)|0);return}function ev(a,b){a=a|0;b=b|0;xs(a,b,Hs(44212)|0);return}function fv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44280)|0);return}function gv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44288)|0);return}function hv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44344)|0);return}function iv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44352)|0);return}function jv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44360)|0);return}function kv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44368)|0);return}function lv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43260)|0);return}function mv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43332)|0);return}function nv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43392)|0);return}function ov(a,b){a=a|0;b=b|0;xs(a,b,Hs(43452)|0);return}function pv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43764)|0);return}function qv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43828)|0);return}function rv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43892)|0);return}function sv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43956)|0);return}function tv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43992)|0);return}function uv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44028)|0);return}function vv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44064)|0);return}function wv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44100)|0);return}function xv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43544)|0);return}function yv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43636)|0);return}function zv(a,b){a=a|0;b=b|0;xs(a,b,Hs(43668)|0);return}function Av(a,b){a=a|0;b=b|0;xs(a,b,Hs(43700)|0);return}function Bv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44140)|0);return}function Cv(a,b){a=a|0;b=b|0;xs(a,b,Hs(44180)|0);return}function Dv(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;do if(e){f=b+4|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}if((b+16|0)==(e|0)){a[b+128>>0]=0;break}else{cj(e);break}}while(0);return}function Ev(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=a+4|0;d=c[h>>2]|0;e=c[a>>2]|0;f=d-e>>2;if(f>>>0>=b>>>0){if(f>>>0>b>>>0?(g=e+(b<<2)|0,(d|0)!=(g|0)):0){do d=d+-4|0;while((d|0)!=(g|0));c[h>>2]=d}}else Tv(a,b-f|0);return}function Fv(a,b){a=a|0;b=b|0;var d=0;d=c[a+8>>2]|0;if((c[a+12>>2]|0)-d>>2>>>0>b>>>0)d=(c[d+(b<<2)>>2]|0)!=0;else d=0;return d|0}function Gv(a){a=a|0;var b=0,d=0;d=a+4|0;b=c[d>>2]|0;d=c[d+4>>2]|0;a=(c[a>>2]|0)+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;Bb[b&255](a);return}function Hv(d,f,g,h,i,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0;c[g>>2]=d;c[j>>2]=h;if(l&2)if((i-h|0)<3)d=1;else{c[j>>2]=h+1;a[h>>0]=-17;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=-69;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=-65;m=4}else m=4;a:do if((m|0)==4){n=f;d=c[g>>2]|0;if(d>>>0>>0)while(1){l=b[d>>1]|0;m=l&65535;if(m>>>0>k>>>0){d=2;break a}do if((l&65535)<128){d=c[j>>2]|0;if((i-d|0)<1){d=1;break a}c[j>>2]=d+1;a[d>>0]=l}else{if((l&65535)<2048){d=c[j>>2]|0;if((i-d|0)<2){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>6|192;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((l&65535)<55296){d=c[j>>2]|0;if((i-d|0)<3){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>12|224;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>6&63|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((l&65535)>=56320){if((l&65535)<57344){d=2;break a}d=c[j>>2]|0;if((i-d|0)<3){d=1;break a}c[j>>2]=d+1;a[d>>0]=m>>>12|224;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>6&63|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m&63|128;break}if((n-d|0)<4){d=1;break a}d=d+2|0;l=e[d>>1]|0;if((l&64512|0)!=56320){d=2;break a}if((i-(c[j>>2]|0)|0)<4){d=1;break a}h=m&960;if(((h<<10)+65536|m<<10&64512|l&1023)>>>0>k>>>0){d=2;break a}c[g>>2]=d;d=(h>>>6)+1|0;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=d>>>2|240;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m>>>2&15|d<<4&48|128;h=c[j>>2]|0;c[j>>2]=h+1;a[h>>0]=m<<4&48|l>>>6&15|128;m=c[j>>2]|0;c[j>>2]=m+1;a[m>>0]=l&63|128}while(0);d=(c[g>>2]|0)+2|0;c[g>>2]=d;if(d>>>0>=f>>>0){d=0;break}}else d=0}while(0);return d|0}function Iv(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0;c[g>>2]=e;c[j>>2]=h;if(l&4){e=c[g>>2]|0;l=f;if((((l-e|0)>2?(a[e>>0]|0)==-17:0)?(a[e+1>>0]|0)==-69:0)?(a[e+2>>0]|0)==-65:0){c[g>>2]=e+3;m=c[j>>2]|0}else m=h}else{m=h;l=f}q=i;h=c[g>>2]|0;e=h>>>0>>0;a:do if(e&m>>>0>>0)while(1){e=a[h>>0]|0;o=e&255;if(o>>>0>k>>>0){e=2;break a}do if(e<<24>>24>-1){b[m>>1]=e&255;c[g>>2]=h+1}else{if((e&255)<194){e=2;break a}if((e&255)<224){if((l-h|0)<2){e=1;break a}e=d[h+1>>0]|0;if((e&192|0)!=128){e=2;break a}e=e&63|o<<6&1984;if(e>>>0>k>>>0){e=2;break a}b[m>>1]=e;c[g>>2]=h+2;break}if((e&255)<240){if((l-h|0)<3){e=1;break a}n=a[h+1>>0]|0;e=a[h+2>>0]|0;switch(o|0){case 224:{if((n&-32)<<24>>24!=-96){e=2;break a}break}case 237:{if((n&-32)<<24>>24!=-128){e=2;break a}break}default:if((n&-64)<<24>>24!=-128){e=2;break a}}e=e&255;if((e&192|0)!=128){e=2;break a}e=(n&255)<<6&4032|o<<12|e&63;if((e&65535)>>>0>k>>>0){e=2;break a}b[m>>1]=e;c[g>>2]=h+3;break}if((e&255)>=245){e=2;break a}if((l-h|0)<4){e=1;break a}n=a[h+1>>0]|0;e=a[h+2>>0]|0;h=a[h+3>>0]|0;switch(o|0){case 240:{if((n+112&255)>=48){e=2;break a}break}case 244:{if((n&-16)<<24>>24!=-128){e=2;break a}break}default:if((n&-64)<<24>>24!=-128){e=2;break a}}p=e&255;if((p&192|0)!=128){e=2;break a}e=h&255;if((e&192|0)!=128){e=2;break a}if((q-m|0)<4){e=1;break a}o=o&7;h=n&255;n=p<<6;e=e&63;if((h<<12&258048|o<<18|n&4032|e)>>>0>k>>>0){e=2;break a}b[m>>1]=h<<2&60|p>>>4&3|((h>>>4&3|o<<2)<<6)+16320|55296;p=m+2|0;c[j>>2]=p;b[p>>1]=e|n&960|56320;c[g>>2]=(c[g>>2]|0)+4}while(0);m=(c[j>>2]|0)+2|0;c[j>>2]=m;h=c[g>>2]|0;e=h>>>0>>0;if(!(e&m>>>0>>0)){r=39;break}}else r=39;while(0);if((r|0)==39)e=e&1;return e|0}function Jv(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c;if((((g&4|0)!=0?(n-b|0)>2:0)?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)g=(a[b+2>>0]|0)==-65?b+3|0:b;else g=b;a:do if((e|0)!=0&g>>>0>>0){m=g;h=0;b:while(1){g=a[m>>0]|0;l=g&255;if(l>>>0>f>>>0){g=m;h=42;break a}do if(g<<24>>24>-1)g=m+1|0;else{if((g&255)<194){g=m;h=42;break a}if((g&255)<224){if((n-m|0)<2){g=m;h=42;break a}g=d[m+1>>0]|0;if((g&192|0)!=128){g=m;h=42;break a}if((g&63|l<<6&1984)>>>0>f>>>0){g=m;h=42;break a}g=m+2|0;break}if((g&255)<240){g=m;if((n-g|0)<3){g=m;h=42;break a}j=a[m+1>>0]|0;i=a[m+2>>0]|0;switch(l|0){case 224:{if((j&-32)<<24>>24!=-96){h=20;break b}break}case 237:{if((j&-32)<<24>>24!=-128){h=22;break b}break}default:if((j&-64)<<24>>24!=-128){h=24;break b}}g=i&255;if((g&192|0)!=128){g=m;h=42;break a}if(((j&255)<<6&4032|l<<12&61440|g&63)>>>0>f>>>0){g=m;h=42;break a}g=m+3|0;break}if((g&255)>=245){g=m;h=42;break a}g=m;if((e-h|0)>>>0<2|(n-g|0)<4){g=m;h=42;break a}k=a[m+1>>0]|0;i=a[m+2>>0]|0;j=a[m+3>>0]|0;switch(l|0){case 240:{if((k+112&255)>=48){h=32;break b}break}case 244:{if((k&-16)<<24>>24!=-128){h=34;break b}break}default:if((k&-64)<<24>>24!=-128){h=36;break b}}i=i&255;if((i&192|0)!=128){g=m;h=42;break a}g=j&255;if((g&192|0)!=128){g=m;h=42;break a}if(((k&255)<<12&258048|l<<18&1835008|i<<6&4032|g&63)>>>0>f>>>0){g=m;h=42;break a}g=m+4|0;h=h+1|0}while(0);h=h+1|0;if(!(h>>>0>>0&g>>>0>>0)){h=42;break a}else m=g}if((h|0)==20){g=g-b|0;break}else if((h|0)==22){g=g-b|0;break}else if((h|0)==24){g=g-b|0;break}else if((h|0)==32){g=g-b|0;break}else if((h|0)==34){g=g-b|0;break}else if((h|0)==36){g=g-b|0;break}}else h=42;while(0);if((h|0)==42)g=g-b|0;return g|0}function Kv(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;c[e>>2]=b;c[h>>2]=f;l=g;if(j&2)if((l-f|0)<3)b=1;else{c[h>>2]=f+1;a[f>>0]=-17;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=-69;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=-65;k=4}else k=4;a:do if((k|0)==4){b=c[e>>2]|0;if(b>>>0>>0)while(1){j=c[b>>2]|0;if(j>>>0>i>>>0|(j&-2048|0)==55296){b=2;break a}do if(j>>>0>=128){if(j>>>0<2048){b=c[h>>2]|0;if((l-b|0)<2){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>6|192;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}b=c[h>>2]|0;g=l-b|0;if(j>>>0<65536){if((g|0)<3){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>12|224;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>6&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}else{if((g|0)<4){b=1;break a}c[h>>2]=b+1;a[b>>0]=j>>>18|240;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>12&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j>>>6&63|128;k=c[h>>2]|0;c[h>>2]=k+1;a[k>>0]=j&63|128;break}}else{b=c[h>>2]|0;if((l-b|0)<1){b=1;break a}c[h>>2]=b+1;a[b>>0]=j}while(0);b=(c[e>>2]|0)+4|0;c[e>>2]=b;if(b>>>0>=d>>>0){b=0;break}}else b=0}while(0);return b|0}function Lv(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0;c[f>>2]=b;c[i>>2]=g;if(k&4){b=c[f>>2]|0;k=e;if((((k-b|0)>2?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)?(a[b+2>>0]|0)==-65:0){c[f>>2]=b+3;g=c[i>>2]|0;p=k}else p=k}else p=e;k=c[f>>2]|0;b=k>>>0>>0;a:do if(b&g>>>0>>0)while(1){b=a[k>>0]|0;o=b&255;do if(b<<24>>24>-1){if(o>>>0>j>>>0){b=2;break a}c[g>>2]=o;c[f>>2]=k+1}else{if((b&255)<194){b=2;break a}if((b&255)<224){if((p-k|0)<2){b=1;break a}b=d[k+1>>0]|0;if((b&192|0)!=128){b=2;break a}b=b&63|o<<6&1984;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+2;break}if((b&255)<240){if((p-k|0)<3){b=1;break a}l=a[k+1>>0]|0;b=a[k+2>>0]|0;switch(o|0){case 224:{if((l&-32)<<24>>24!=-96){b=2;break a}break}case 237:{if((l&-32)<<24>>24!=-128){b=2;break a}break}default:if((l&-64)<<24>>24!=-128){b=2;break a}}b=b&255;if((b&192|0)!=128){b=2;break a}b=(l&255)<<6&4032|o<<12&61440|b&63;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+3;break}if((b&255)>=245){b=2;break a}if((p-k|0)<4){b=1;break a}n=a[k+1>>0]|0;b=a[k+2>>0]|0;l=a[k+3>>0]|0;switch(o|0){case 240:{if((n+112&255)>=48){b=2;break a}break}case 244:{if((n&-16)<<24>>24!=-128){b=2;break a}break}default:if((n&-64)<<24>>24!=-128){b=2;break a}}m=b&255;if((m&192|0)!=128){b=2;break a}b=l&255;if((b&192|0)!=128){b=2;break a}b=(n&255)<<12&258048|o<<18&1835008|m<<6&4032|b&63;if(b>>>0>j>>>0){b=2;break a}c[g>>2]=b;c[f>>2]=k+4}while(0);g=(c[i>>2]|0)+4|0;c[i>>2]=g;k=c[f>>2]|0;b=k>>>0>>0;if(!(b&g>>>0>>0)){q=38;break}}else q=38;while(0);if((q|0)==38)b=b&1;return b|0}function Mv(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c;if((((g&4|0)!=0?(n-b|0)>2:0)?(a[b>>0]|0)==-17:0)?(a[b+1>>0]|0)==-69:0)g=(a[b+2>>0]|0)==-65?b+3|0:b;else g=b;a:do if((e|0)!=0&g>>>0>>0){l=g;m=0;b:while(1){g=a[l>>0]|0;k=g&255;do if(g<<24>>24>-1){if(k>>>0>f>>>0){g=l;h=42;break a}g=l+1|0}else{if((g&255)<194){g=l;h=42;break a}if((g&255)<224){if((n-l|0)<2){g=l;h=42;break a}g=d[l+1>>0]|0;if((g&192|0)!=128){g=l;h=42;break a}if((g&63|k<<6&1984)>>>0>f>>>0){g=l;h=42;break a}g=l+2|0;break}if((g&255)<240){g=l;if((n-g|0)<3){g=l;h=42;break a}i=a[l+1>>0]|0;h=a[l+2>>0]|0;switch(k|0){case 224:{if((i&-32)<<24>>24!=-96){h=20;break b}break}case 237:{if((i&-32)<<24>>24!=-128){h=22;break b}break}default:if((i&-64)<<24>>24!=-128){h=24;break b}}g=h&255;if((g&192|0)!=128){g=l;h=42;break a}if(((i&255)<<6&4032|k<<12&61440|g&63)>>>0>f>>>0){g=l;h=42;break a}g=l+3|0;break}if((g&255)>=245){g=l;h=42;break a}g=l;if((n-g|0)<4){g=l;h=42;break a}j=a[l+1>>0]|0;h=a[l+2>>0]|0;i=a[l+3>>0]|0;switch(k|0){case 240:{if((j+112&255)>=48){h=32;break b}break}case 244:{if((j&-16)<<24>>24!=-128){h=34;break b}break}default:if((j&-64)<<24>>24!=-128){h=36;break b}}h=h&255;if((h&192|0)!=128){g=l;h=42;break a}g=i&255;if((g&192|0)!=128){g=l;h=42;break a}if(((j&255)<<12&258048|k<<18&1835008|h<<6&4032|g&63)>>>0>f>>>0){g=l;h=42;break a}g=l+4|0}while(0);m=m+1|0;if(!(m>>>0>>0&g>>>0>>0)){h=42;break a}else l=g}if((h|0)==20){g=g-b|0;break}else if((h|0)==22){g=g-b|0;break}else if((h|0)==24){g=g-b|0;break}else if((h|0)==32){g=g-b|0;break}else if((h|0)==34){g=g-b|0;break}else if((h|0)==36){g=g-b|0;break}}else h=42;while(0);if((h|0)==42)g=g-b|0;return g|0}function Nv(a){a=a|0;Im(45196);Im(45184);Im(45172);Im(45160);Im(45148);Im(45136);Im(45124);Im(45112);Im(45100);Im(45088);Im(45076);Im(45064);Im(45052);Im(45040);return}function Ov(a){a=a|0;Wm(45368);Wm(45356);Wm(45344);Wm(45332);Wm(45320);Wm(45308);Wm(45296);Wm(45284);Wm(45272);Wm(45260);Wm(45248);Wm(45236);Wm(45224);Wm(45212);return}function Pv(a){a=a|0;Im(46e3);Im(45988);Im(45976);Im(45964);Im(45952);Im(45940);Im(45928);Im(45916);Im(45904);Im(45892);Im(45880);Im(45868);Im(45856);Im(45844);Im(45832);Im(45820);Im(45808);Im(45796);Im(45784);Im(45772);Im(45760);Im(45748);Im(45736);Im(45724);return}function Qv(a){a=a|0;Wm(46292);Wm(46280);Wm(46268);Wm(46256);Wm(46244);Wm(46232);Wm(46220);Wm(46208);Wm(46196);Wm(46184);Wm(46172);Wm(46160);Wm(46148);Wm(46136);Wm(46124);Wm(46112);Wm(46100);Wm(46088);Wm(46076);Wm(46064);Wm(46052);Wm(46040);Wm(46028);Wm(46016);return}function Rv(a){a=a|0;Im(47104);Im(47092);Im(47080);Im(47068);Im(47056);Im(47044);Im(47032);Im(47020);Im(47008);Im(46996);Im(46984);Im(46972);Im(46960);Im(46948);Im(46936);Im(46924);Im(46912);Im(46900);Im(46888);Im(46876);Im(46864);Im(46852);Im(46840);Im(46828);return}function Sv(a){a=a|0;Wm(47396);Wm(47384);Wm(47372);Wm(47360);Wm(47348);Wm(47336);Wm(47324);Wm(47312);Wm(47300);Wm(47288);Wm(47276);Wm(47264);Wm(47252);Wm(47240);Wm(47228);Wm(47216);Wm(47204);Wm(47192);Wm(47180);Wm(47168);Wm(47156);Wm(47144);Wm(47132);Wm(47120);return}function Tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k;g=c[a+8>>2]|0;d=c[a+4>>2]|0;if(g-d>>2>>>0>>0){e=c[a>>2]|0;h=d-e>>2;f=h+b|0;if(f>>>0>1073741823)$i(a);d=g-e|0;if(d>>2>>>0<536870911){d=d>>1;d=d>>>0>>0?f:d}else d=1073741823;Vv(j,d,h,a+16|0);h=j+8|0;g=c[h>>2]|0;iw(g|0,0,b<<2|0)|0;c[h>>2]=g+(b<<2);Wv(a,j);Xv(j)}else Uv(a,b);i=k;return}function Uv(a,b){a=a|0;b=b|0;var d=0;d=a+4|0;a=b;b=c[d>>2]|0;do{c[b>>2]=0;b=(c[d>>2]|0)+4|0;c[d>>2]=b;a=a+-1|0}while((a|0)!=0);return}function Vv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;c[b+12>>2]=0;c[b+16>>2]=f;do if(d){g=f+112|0;if(d>>>0<29&(a[g>>0]|0)==0){a[g>>0]=1;break}else{f=bj(d<<2)|0;break}}else f=0;while(0);c[b>>2]=f;e=f+(e<<2)|0;c[b+8>>2]=e;c[b+4>>2]=e;c[b+12>>2]=f+(d<<2);return}function Wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=c[a>>2]|0;g=a+4|0;d=b+4|0;f=(c[g>>2]|0)-e|0;h=(c[d>>2]|0)+(0-(f>>2)<<2)|0;c[d>>2]=h;lw(h|0,e|0,f|0)|0;f=c[a>>2]|0;c[a>>2]=c[d>>2];c[d>>2]=f;f=b+8|0;e=c[g>>2]|0;c[g>>2]=c[f>>2];c[f>>2]=e;f=a+8|0;a=b+12|0;e=c[f>>2]|0;c[f>>2]=c[a>>2];c[a>>2]=e;c[b>>2]=c[d>>2];return}function Xv(b){b=b|0;var d=0,e=0,f=0;e=c[b+4>>2]|0;f=b+8|0;d=c[f>>2]|0;if((d|0)!=(e|0)){do d=d+-4|0;while((d|0)!=(e|0));c[f>>2]=d}e=c[b>>2]|0;do if(e){d=c[b+16>>2]|0;if((d|0)==(e|0)){a[d+112>>0]=0;break}else{cj(e);break}}while(0);return}function Yv(b,d){b=b|0;d=d|0;var e=0;if(d>>>0>1073741823)$i(b);e=b+128|0;if(d>>>0<29&(a[e>>0]|0)==0){a[e>>0]=1;e=b+16|0}else e=bj(d<<2)|0;c[b+4>>2]=e;c[b>>2]=e;c[b+8>>2]=e+(d<<2);return}function Zv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)!=(b|0)){f=ck()|0;g=c[f>>2]|0;c[f>>2]=0;e=+gl(a,h,Xo()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}else{c[d>>2]=4;e=0.0}while(0);i=j;return +e}function _v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)!=(b|0)){f=ck()|0;g=c[f>>2]|0;c[f>>2]=0;e=+gl(a,h,Xo()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}else{c[d>>2]=4;e=0.0}while(0);i=j;return +e}function $v(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;do if((a|0)==(b|0)){c[d>>2]=4;e=0.0}else{f=ck()|0;g=c[f>>2]|0;c[f>>2]=0;e=+gl(a,h,Xo()|0);a=c[f>>2]|0;if(!a)c[f>>2]=g;if((c[h>>2]|0)!=(b|0)){c[d>>2]=4;e=0.0;break}if((a|0)==34)c[d>>2]=4}while(0);i=j;return +e}function aw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;f=0;b=0;break}g=ck()|0;h=c[g>>2]|0;c[g>>2]=0;b=Xj(b,j,f,Xo()|0)|0;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(d|0)){c[e>>2]=4;f=0;b=0;break}if((f|0)==34){c[e>>2]=4;f=-1;b=-1}else f=D}else{c[e>>2]=4;f=0;b=0}while(0);D=f;i=k;return b|0}function bw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=ck()|0;j=c[h>>2]|0;c[h>>2]=0;b=Xj(b,k,f,Xo()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>4294967295|(g|0)==34){c[e>>2]=4;b=-1;break}else break}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function cw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=ck()|0;j=c[h>>2]|0;c[h>>2]=0;b=Xj(b,k,f,Xo()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>4294967295|(g|0)==34){c[e>>2]=4;b=-1;break}else break}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function dw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l;do if((b|0)!=(d|0)){if((a[b>>0]|0)==45){c[e>>2]=4;b=0;break}h=ck()|0;j=c[h>>2]|0;c[h>>2]=0;b=Xj(b,k,f,Xo()|0)|0;f=D;g=c[h>>2]|0;if(!g)c[h>>2]=j;if((c[k>>2]|0)!=(d|0)){c[e>>2]=4;b=0;break}if(f>>>0>0|(f|0)==0&b>>>0>65535|(g|0)==34){c[e>>2]=4;b=-1;break}else{b=b&65535;break}}else{c[e>>2]=4;b=0}while(0);i=l;return b|0}function ew(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;do if((a|0)!=(b|0)){g=ck()|0;h=c[g>>2]|0;c[g>>2]=0;a=Yj(a,j,e,Xo()|0)|0;e=D;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(b|0)){c[d>>2]=4;e=0;a=0;break}if((f|0)==34){c[d>>2]=4;j=(e|0)>0|(e|0)==0&a>>>0>0;D=j?2147483647:-2147483648;i=k;return (j?-1:0)|0}}else{c[d>>2]=4;e=0;a=0}while(0);D=e;i=k;return a|0}function fw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;a:do if((a|0)==(b|0)){c[d>>2]=4;a=0}else{g=ck()|0;h=c[g>>2]|0;c[g>>2]=0;a=Yj(a,j,e,Xo()|0)|0;e=D;f=c[g>>2]|0;if(!f)c[g>>2]=h;if((c[j>>2]|0)!=(b|0)){c[d>>2]=4;a=0;break}do if((f|0)==34){c[d>>2]=4;if((e|0)>0|(e|0)==0&a>>>0>0){a=2147483647;break a}}else{if((e|0)<-1|(e|0)==-1&a>>>0<2147483648){c[d>>2]=4;break}if((e|0)>0|(e|0)==0&a>>>0>2147483647){c[d>>2]=4;a=2147483647;break a}else break a}while(0);a=-2147483648}while(0);i=k;return a|0}function gw(){}function hw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (D=d,a-c>>>0|0)|0}function iw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function jw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (D=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function kw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>>c;return a>>>c|(b&(1<>>c-32|0}function lw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return Wa(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function mw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b<>>32-c;return a<0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else lw(b,c,d)|0;return b|0}function ow(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>c;return a>>>c|(b&(1<>c-32|0}function pw(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function qw(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=$(e,f)|0;d=a>>>16;a=(c>>>16)+($(e,d)|0)|0;e=b>>>16;b=$(e,f)|0;return (D=(a>>>16)+($(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function rw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=hw(j^a,i^b,j,i)|0;g=D;a=f^j;b=e^i;return hw((ww(h,g,hw(f^c,e^d,f,e)|0,D,0)|0)^a,D^b,a,b)|0}function sw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=hw(h^a,g^b,h,g)|0;b=D;ww(a,b,hw(l^d,k^e,l,k)|0,D,j)|0;e=hw(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=D;i=f;return (D=d,e)|0}function tw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=qw(e,f)|0;a=D;return (D=($(b,f)|0)+($(d,e)|0)+a|a&0,c|0|0)|0}function uw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ww(a,b,c,d,0)|0}function vw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;ww(a,b,d,e,f)|0;i=g;return (D=c[f+4>>2]|0,c[f>>2]|0)|0}function ww(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (D=n,f)|0}else{if(!g){n=0;f=0;return (D=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (D=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(ba(i|0)|0)-(ba(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (D=n,f)|0}g=h-1|0;if(g&h){i=(ba(h|0)|0)+33-(ba(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (D=o,p)|0}else{p=pw(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (D=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (D=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (D=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((pw(i|0)|0)>>>0);return (D=o,p)|0}g=(ba(i|0)|0)-(ba(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (D=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=jw(m|0,l|0,-1,-1)|0;d=D;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;hw(k,d,e,n)|0;p=D;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=hw(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=D;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (D=o,p)|0}function xw(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return yb[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function yw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;zb[a&15](b|0,c|0,d|0,e|0,f|0)}function zw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;return Ab[a&3](b|0,c|0,d|0,e|0,f|0,+g)|0}function Aw(a,b){a=a|0;b=b|0;Bb[a&255](b|0)}function Bw(a,b,c){a=a|0;b=b|0;c=c|0;Cb[a&127](b|0,c|0)}function Cw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Db[a&63](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Dw(a,b){a=a|0;b=b|0;return Eb[a&127](b|0)|0}function Ew(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Fb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function Fw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Gb[a&63](b|0,c|0,d|0)|0}function Gw(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;Hb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0,m|0,n|0,o|0,p|0)}function Hw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ib[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function Iw(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Jb[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function Jw(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;Kb[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function Kw(a,b,c){a=a|0;b=b|0;c=c|0;return Lb[a&63](b|0,c|0)|0}function Lw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Mb[a&31](b|0,c|0,d|0,e|0,f|0)|0}function Mw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Nb[a&3](b|0,c|0,d|0)}function Nw(a){a=a|0;return Ob[a&15]()|0}function Ow(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Pb[a&31](b|0,c|0,d|0,e|0)|0}function Pw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Qb[a&15](b|0,c|0,d|0)}function Qw(a){a=a|0;Rb[a&7]()}function Rw(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return Sb[a&15](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Sw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;return Tb[a&7](b|0,c|0,d|0,e|0,+f)|0}function Tw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ub[a&63](b|0,c|0,d|0,e|0)}function Uw(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ca(0);return 0}function Vw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(1)}function Ww(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;ca(2);return 0}function Xw(a){a=a|0;ca(3)}function Yw(a,b){a=a|0;b=b|0;ca(4)}function Zw(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ca(5);return 0}function _w(a){a=a|0;ca(6);return 0}function $w(a){a=a|0;return cb(a|0)|0}function ax(a){a=a|0;return rb(a|0)|0}function bx(a){a=a|0;return hb(a|0)|0}function cx(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ca(7);return 0}function dx(a,b,c){a=a|0;b=b|0;c=c|0;ca(8);return 0}function ex(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;ca(9)}function fx(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ca(10)}function gx(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ca(11)}function hx(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;ca(12)}function ix(a,b){a=a|0;b=b|0;ca(13);return 0}function jx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(14);return 0}function kx(a,b,c){a=a|0;b=b|0;c=c|0;ca(15);return 0.0}function lx(){ca(16);return 0}function mx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(17);return 0}function nx(a,b,c){a=a|0;b=b|0;c=c|0;ca(18)}function ox(a,b,c){a=a|0;b=b|0;c=c|0;lb(a|0,b|0,c|0)}function px(){ca(19)}function qx(){pb()}function rx(){Xa()}function sx(){mb()}function tx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ca(20);return 0}function ux(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ca(21);return 0}function vx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(22)}\n function di(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+32|0;k=m;Ei(k,255,0);l=b+152|0;if(((c[k+4>>2]|0)==(c[l>>2]|0)?(c[k+8>>2]|0)==(c[b+156>>2]|0):0)?(c[k+12>>2]|0)==(c[b+160>>2]|0):0){l=c[8900]|0;c[b+4580>>2]=l+(((c[8901]|0)-l|0)>>>1);i=m;return}e=b+4584|0;f=b+4588|0;g=c[f>>2]|0;d=c[e>>2]|0;h=g-d|0;if(h>>>0>=512){if(h>>>0>512?(j=d+512|0,(g|0)!=(j|0)):0)c[f>>2]=j}else{ie(e,512-h|0);d=c[e>>2]|0}k=b+4580|0;c[k>>2]=d+256;j=b+160|0;g=b+156|0;h=-256;while(1){d=c[j>>2]|0;if((h|0)>(0-d|0)){e=c[g>>2]|0;if((h|0)>(0-e|0)){f=c[l>>2]|0;if((h|0)>(0-f|0))if((h|0)>=0){if((h|0)<1){a[(c[k>>2]|0)+h>>0]=0;h=1;continue}if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1}else d=-1;else d=-2}else d=-3}else d=-4;a[(c[k>>2]|0)+h>>0]=d;h=h+1|0;if((h|0)==256)break}i=m;return}function ei(a){a=a|0;var b=0,d=0;c[a>>2]=35660;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}a=a+88|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;Bb[c[(c[b>>2]|0)+4>>2]&255](b);return}function fi(a){a=a|0;var b=0,d=0;c[a>>2]=35660;b=c[a+4608>>2]|0;if(b){d=a+4612|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}c[a>>2]=36736;b=c[a+92>>2]|0;if(b){d=a+96|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b)}d=a+88|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){cj(a);return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);cj(a);return}function gi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=i;i=i+352|0;x=w+328|0;y=w+192|0;e=w+343|0;f=w+342|0;g=w+341|0;h=w+340|0;r=w+176|0;k=w+168|0;l=w+160|0;m=w+152|0;v=w;t=w+136|0;if((c[b+28>>2]|0)!=0?(c[b+20>>2]|0)!=1:0){s=b+4|0;u=b+32|0;j=c[u>>2]|0;if(!j){b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[e>>0]|0;Aa(44,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}b=c[b+12>>2]|0;if((b|0)==8)switch(j|0){case 1:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[f>>0]|0;Aa(45,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[g>>0]|0;Aa(46,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(48)|0;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];a[x>>0]=a[h>>0]|0;Aa(47,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=y+56|0;g=y+4|0;c[y>>2]=36160;c[j>>2]=36180;o=0;ia(62,y+56|0,g|0);w=o;o=0;if(w&1){z=Na()|0;fn(j);Ya(z|0)}c[y+128>>2]=0;c[y+132>>2]=-1;c[y>>2]=36200;c[y+56>>2]=36220;o=0;ha(180,g|0);w=o;o=0;do if(w&1)b=Na()|0;else{c[g>>2]=36236;h=y+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[y+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);w=o;o=0;if(w&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,y|0,49007,21)|0;x=o;o=0;do if((!(x&1)?(o=0,p=ra(36,b|0,c[u>>2]|0)|0,x=o,o=0,!(x&1)):0)?(o=0,ma(28,p|0,50997,18)|0,x=o,o=0,!(x&1)):0){f=Ma(16)|0;o=0;ia(64,r|0,g|0);x=o;o=0;if(!(x&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,r|0);x=o;o=0;if(x&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(r);if(!e)break}else b=Na()|0;La(f|0)}else z=34;while(0);if((z|0)==34)b=Na()|0;c[y>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}if((b|0)<=8){b=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,b|0,8,35648);z=o;o=0;if(!(z&1))lb(b|0,824,96);z=Na()|0;La(b|0);Ya(z|0)}e=16-b|0;switch(j|0){case 1:{b=bj(60)|0;c[k>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[k>>2];c[x+4>>2]=c[k+4>>2];Aa(41,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 2:{b=bj(60)|0;c[l>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[l>>2];c[x+4>>2]=c[l+4>>2];Aa(42,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}case 3:{b=bj(60)|0;c[m>>2]=e;o=0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[x>>2]=c[m>>2];c[x+4>>2]=c[m+4>>2];Aa(43,b|0,y|0,s|0,x|0);z=o;o=0;if(!(z&1)){z=b;i=w;return z|0}z=Na()|0;cj(b);Ya(z|0)}default:{j=v+56|0;g=v+4|0;c[v>>2]=36160;c[j>>2]=36180;o=0;ia(62,v+56|0,g|0);y=o;o=0;if(y&1){z=Na()|0;fn(j);Ya(z|0)}c[v+128>>2]=0;c[v+132>>2]=-1;c[v>>2]=36200;c[v+56>>2]=36220;o=0;ha(180,g|0);y=o;o=0;do if(y&1)b=Na()|0;else{c[g>>2]=36236;h=v+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[v+52>>2]=16;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;o=0;ia(63,g|0,x|0);y=o;o=0;if(y&1){b=Na()|0;Im(x);Im(h);nn(g);break}Im(x);o=0;b=ma(28,v|0,49007,21)|0;y=o;o=0;do if((!(y&1)?(o=0,q=ra(36,b|0,c[u>>2]|0)|0,y=o,o=0,!(y&1)):0)?(o=0,ma(28,q|0,50997,18)|0,y=o,o=0,!(y&1)):0){f=Ma(16)|0;o=0;ia(64,t|0,g|0);y=o;o=0;if(!(y&1)){if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;Aa(36,f|0,9,35648,t|0);y=o;o=0;if(y&1)e=1;else{o=0;wa(6,f|0,824,96);o=0;e=0}b=Na()|0;Im(t);if(!e)break}else b=Na()|0;La(f|0)}else z=64;while(0);if((z|0)==64)b=Na()|0;c[v>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(j);z=b;Ya(z|0)}while(0);z=b;fn(j);Ya(z|0)}}}e=c[d+4>>2]|0;f=bj(16)|0;b=c[b+16>>2]|0;if(!e){z=c[d>>2]|0;c[f>>2]=36132;c[f+4>>2]=z;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}else{c[f>>2]=36108;c[f+4>>2]=e;c[f+8>>2]=1;c[f+12>>2]=b;z=f;i=w;return z|0}return 0}function hi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;k=i;i=i+32|0;m=k;Ei(m,c[d+128>>2]|0,c[d+136>>2]|0);l=c[e+4>>2]|0;j=c[e+8>>2]|0;j=(j|0)==0?c[m+8>>2]|0:j;h=c[e+12>>2]|0;h=(h|0)==0?c[m+12>>2]|0:h;f=c[e+16>>2]|0;g=c[m+16>>2]|0;c[d+176>>2]=(l|0)==0?c[m+4>>2]|0:l;c[d+180>>2]=j;c[d+184>>2]=h;pi(d);h=d+132|0;e=(c[h>>2]|0)+32|0;e=(e|0)<128?2:(e|0)/64|0;j=0;do{c[d+188+(j*12|0)>>2]=e;c[d+188+(j*12|0)+4>>2]=0;b[d+188+(j*12|0)+8>>1]=0;b[d+188+(j*12|0)+10>>1]=1;j=j+1|0}while((j|0)!=365);l=(c[h>>2]|0)+32|0;l=(l|0)<128?2:(l|0)/64|0;m=((f|0)==0?g:f)&255;c[d+4568>>2]=l;c[d+4572>>2]=0;a[d+4576>>0]=m;a[d+4577>>0]=1;a[d+4578>>0]=0;c[d+4580>>2]=l;c[d+4584>>2]=1;a[d+4588>>0]=m;a[d+4589>>0]=1;a[d+4590>>0]=0;c[d+4592>>2]=0;i=k;return}function ii(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b+88|0;h=c[d>>2]|0;c[d>>2]=0;d=c[i>>2]|0;c[i>>2]=h;if(d)Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=f+4|0;h=c[i>>2]|0;a[b+4620>>0]=g&1;d=b+156|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];Wd(b,f);ji(b);d=c[b+116>>2]|0;b=c[b+112>>2]|0;while(1){g=d+-1|0;e=(a[g>>0]|0)==-1?7:8;if((b|0)<(e|0))break;else{d=g;b=b-e|0}}d=d-h|0;g=c[i>>2]|0;if(!g)return;c[i>>2]=g+d;f=f+8|0;c[f>>2]=(c[f>>2]|0)-d;return}function ji(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;A=i;i=i+32|0;C=A+12|0;z=A;k=b+172|0;y=(c[k>>2]|0)+4|0;if((c[b+28>>2]|0)==1)l=c[b+20>>2]|0;else l=1;d=$(l<<1,y)|0;c[C>>2]=0;D=C+4|0;c[D>>2]=0;c[C+8>>2]=0;a:do if(d){if(!((d|0)<0?(o=0,ha(178,C|0),B=o,o=0,B&1):0))x=6;if((x|0)==6?(o=0,e=ka(67,d|0)|0,B=o,o=0,!(B&1)):0){c[D>>2]=e;c[C>>2]=e;c[C+8>>2]=e+d;while(1){a[e>>0]=0;e=(c[D>>2]|0)+1|0;c[D>>2]=e;d=d+-1|0;if(!d)break a}}e=Na()|0;d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}while(0);c[z>>2]=0;B=z+4|0;c[B>>2]=0;c[z+8>>2]=0;do if(!l)x=19;else{if(!(l>>>0>1073741823?(o=0,ha(178,z|0),w=o,o=0,w&1):0))x=17;if((x|0)==17?(f=l<<2,o=0,g=ka(67,f|0)|0,w=o,o=0,!(w&1)):0){c[z>>2]=g;x=g+(l<<2)|0;c[z+8>>2]=x;iw(g|0,0,f|0)|0;c[B>>2]=x;x=19;break}e=Na()|0;d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}while(0);if((x|0)==19){m=b+8|0;d=c[m>>2]|0;b:do if((d|0)>0){n=b+4596|0;p=$(l,y)|0;q=p+1|0;r=b+4600|0;s=b+160|0;t=b+168|0;u=b+164|0;v=b+156|0;w=b+88|0;j=b+4592|0;if((l|0)>0)h=0;else{h=0;while(1){g=c[C>>2]|0;e=g+1|0;c[n>>2]=e;f=g+q|0;c[r>>2]=f;if(!(h&1))e=q;else{c[n>>2]=f;c[r>>2]=e;e=1}l=c[s>>2]|0;if((l|0)<=(h|0)?(h|0)<((c[t>>2]|0)+l|0):0){l=c[w>>2]|0;o=0;Aa(c[(c[l>>2]|0)+8>>2]|0,l|0,g+(e+((c[v>>2]|0)-p))|0,c[u>>2]|0,y|0);l=o;o=0;if(l&1)break;d=c[m>>2]|0}h=h+1|0;if((h|0)>=(d|0)){x=50;break b}}e=Na()|0;break}c:while(1){e=c[C>>2]|0;d=e+1|0;c[n>>2]=d;e=e+q|0;c[r>>2]=e;if(h&1){c[n>>2]=e;c[r>>2]=d;d=e}g=c[z>>2]|0;e=d;f=0;do{c[j>>2]=c[g+(f<<2)>>2];x=c[k>>2]|0;a[e+x>>0]=a[e+(x+-1)>>0]|0;a[(c[r>>2]|0)+-1>>0]=a[c[n>>2]>>0]|0;o=0;ia(83,b|0,0);x=o;o=0;if(x&1){x=38;break c}g=c[z>>2]|0;c[g+(f<<2)>>2]=c[j>>2];e=(c[n>>2]|0)+y|0;c[n>>2]=e;d=c[r>>2]|0;c[r>>2]=d+y;f=f+1|0}while((f|0)<(l|0));x=c[s>>2]|0;if(((x|0)<=(h|0)?(h|0)<((c[t>>2]|0)+x|0):0)?(x=c[w>>2]|0,o=0,Aa(c[(c[x>>2]|0)+8>>2]|0,x|0,d+(y+((c[v>>2]|0)-p))|0,c[u>>2]|0,y|0),x=o,o=0,x&1):0){x=30;break}h=h+1|0;if((h|0)>=(c[m>>2]|0)){x=50;break b}}if((x|0)==30){e=Na()|0;break}else if((x|0)==38){e=Na()|0;break}}else x=50;while(0);do if((x|0)==50){o=0;ha(183,b|0);b=o;o=0;if(b&1){e=Na()|0;break}d=c[z>>2]|0;e=d;if(d){f=c[B>>2]|0;if((f|0)!=(d|0))c[B>>2]=f+(~((f+-4-e|0)>>>2)<<2);cj(d)}d=c[C>>2]|0;if(!d){i=A;return}if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);i=A;return}while(0);d=c[z>>2]|0;f=d;if(d){g=c[B>>2]|0;if((g|0)!=(d|0))c[B>>2]=g+(~((g+-4-f|0)>>>2)<<2);cj(d)}}d=c[C>>2]|0;if(!d)Ya(e|0);if((c[D>>2]|0)!=(d|0))c[D>>2]=d;cj(d);Ya(e|0)}function ki(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=b+4596|0;f=c[p>>2]|0;t=b+172|0;e=c[t>>2]|0;if((e|0)<=0)return;q=b+4600|0;r=b+4604|0;s=b+4592|0;k=f;i=d[f+-1>>0]|0;f=d[f>>0]|0;o=0;while(1){m=c[q>>2]|0;j=a[m+(o+-1)>>0]|0;n=j&255;h=o+1|0;g=d[k+h>>0]|0;l=c[r>>2]|0;k=f-i|0;i=i-n|0;l=((((a[l+(g-f)>>0]|0)*9|0)+(a[l+k>>0]|0)|0)*9|0)+(a[l+i>>0]|0)|0;m=m+o|0;if(!l){e=mi(b,j,m,e-o|0)|0;f=e+o|0;if((f|0)!=(c[t>>2]|0)){n=ni(b,n,d[(c[p>>2]|0)+f>>0]|0)|0;a[(c[q>>2]|0)+f>>0]=n;n=c[s>>2]|0;c[s>>2]=(n|0)<1?0:n+-1|0;e=e+1|0}h=e+o|0;g=c[p>>2]|0;f=d[g+(h+-1)>>0]|0;g=d[g+h>>0]|0}else{e=f-n>>31;if((e^i|0)<0)e=f;else e=n+((e^k|0)<0?0:k)|0;n=li(b,l,d[m>>0]|0,e,0)|0;a[(c[q>>2]|0)+o>>0]=n}e=c[t>>2]|0;if((e|0)<=(h|0))break;k=c[p>>2]|0;i=f;f=g;o=h}return}function li(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,p=0,q=0,r=0,s=0,t=0;t=e>>31;l=(t^e)-t|0;r=d+188+(l*12|0)+10|0;f=b[r>>1]|0;q=d+188+(l*12|0)|0;h=c[q>>2]|0;if((f|0)<(h|0))if((f<<1|0)<(h|0))if((f<<2|0)<(h|0))if((f<<3|0)<(h|0))if((f<<4|0)<(h|0)){e=5;while(1)if((f<>1]^t)-t+g|0;s=d+128|0;h=c[s>>2]|0;if((f&h|0)==(f|0))m=f;else m=h&~(f>>31);f=d+112|0;if((c[f>>2]|0)<8)ge(d);h=d+108|0;g=c[h>>2]|0;i=g>>>24;j=c[2832+(e<<11)+(i<<3)+4>>2]|0;if(!j){k=c[d+148>>2]|0;h=c[d+140>>2]|0;f=Jg(d)|0;if((f|0)<(k+-1-h|0)){if(e)f=(Kg(d,e)|0)+(f<>31^f>>1;if((((f|0)>-1?f:0-f|0)|0)>65535){f=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,f|0,5,35648);d=o;o=0;if(d&1){d=Na()|0;La(f|0);Ya(d|0)}else lb(f|0,824,96)}}else{c[f>>2]=(c[f>>2]|0)-j;c[h>>2]=g<>2]|0}k=d+136|0;g=c[k>>2]|0;if(!e){if(!g)h=(c[d+188+(l*12|0)+4>>2]<<1)+-1+(b[r>>1]|0)>>31;else h=0;j=h^f}else j=f;e=c[d+152>>2]|0;h=(c[q>>2]|0)+((j|0)>-1?j:0-j|0)|0;i=d+188+(l*12|0)+4|0;f=(c[i>>2]|0)+($(g<<1|1,j)|0)|0;g=b[r>>1]|0;if((g|0)==(e|0)){h=h>>1;f=f>>1;g=e>>1}c[q>>2]=h;e=g+1|0;b[r>>1]=e;h=e+f|0;if((h|0)>=1){if((f|0)>0){f=f-e|0;r=b[p>>1]|0;b[p>>1]=(r<<16>>16<127&1)+(r&65535);f=(f|0)>0?0:f}}else{f=b[p>>1]|0;b[p>>1]=(f&65535)-(f<<16>>16>-128&1);f=(h|0)>(~g|0)?h:0-g|0}c[i>>2]=f;e=c[k>>2]|0;g=e<<1|1;h=($(g,(j^t)-t|0)|0)+m|0;if((h|0)>=(0-e|0)){f=c[s>>2]|0;if((f+e|0)<(h|0))h=h-($(c[d+132>>2]|0,g)|0)|0}else{h=($(c[d+132>>2]|0,g)|0)+h|0;f=c[s>>2]|0}if((h&f|0)==(h|0)){d=h;d=d&255;return d|0}d=f&~(h>>31);d=d&255;return d|0}function mi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,p=0,q=0;j=b+112|0;k=b+108|0;l=b+4592|0;g=c[j>>2]|0;h=0;while(1){if((g|0)<1){ge(b);g=c[j>>2]|0}i=c[k>>2]|0;g=g+-1|0;c[j>>2]=g;c[k>>2]=i<<1;if((i|0)>=0){m=8;break}i=c[l>>2]|0;p=1<>2];q=f-h|0;q=(p|0)<(q|0)?p:q;h=q+h|0;if((q|0)==(p|0))c[l>>2]=(i|0)>30?31:i+1|0;if((h|0)==(f|0)){g=f;break}}if((m|0)==8)if((h|0)!=(f|0)){g=c[l>>2]|0;if((g+-4|0)>>>0<28)g=Kg(b,c[36476+(g<<2)>>2]|0)|0;else g=0;g=g+h|0;if((g|0)>(f|0)){g=Ma(16)|0;if((a[8]|0)==0?(Ha(8)|0)!=0:0){kb(72,35648,n|0)|0;Pa(8)}o=0;wa(7,g|0,5,35648);q=o;o=0;if(q&1){q=Na()|0;La(g|0);Ya(q|0)}else lb(g|0,824,96)}}else g=f;if((g|0)<=0)return g|0;iw(e|0,d|0,g|0)|0;return g|0}function ni(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=b-d|0;h=a+128|0;e=a+136|0;if((((g|0)>-1?g:0-g|0)|0)>(c[e>>2]|0)){b=$(oi(a,a+4568|0)|0,d-b>>31|1)|0;f=c[e>>2]|0;g=f<<1|1;b=($(b,g)|0)+d|0;if((b|0)>=(0-f|0)){e=c[h>>2]|0;if((e+f|0)<(b|0))b=b-($(c[a+132>>2]|0,g)|0)|0}else{b=($(c[a+132>>2]|0,g)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&255;return a|0}a=e&~(b>>31);a=a&255;return a|0}else{d=oi(a,a+4580|0)|0;g=c[e>>2]|0;f=g<<1|1;b=($(f,d)|0)+b|0;if((b|0)>=(0-g|0)){e=c[h>>2]|0;if((e+g|0)<(b|0))b=b-($(c[a+132>>2]|0,f)|0)|0}else{b=($(c[a+132>>2]|0,f)|0)+b|0;e=c[h>>2]|0}if((b&e|0)==(b|0)){a=b;a=a&255;return a|0}a=e&~(b>>31);a=a&255;return a|0}return 0}function oi(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=e+9|0;f=d[m>>0]|0;i=e+4|0;h=($(f>>>1,c[i>>2]|0)|0)+(c[e>>2]|0)|0;if((f|0)<(h|0)){g=0;do{f=f<<1;g=g+1|0}while((f|0)<(h|0))}else g=0;j=c[b+148>>2]|0;k=c[36476+(c[b+4592>>2]<<2)>>2]|0;f=c[b+140>>2]|0;h=Jg(b)|0;do if((h|0)<(j+-2-k-f|0))if(!g){g=c[i>>2]|0;b=g+h|0;f=b&1;b=(f+b|0)/2|0;l=8;break}else{k=(Kg(b,g)|0)+(h<>2]|0;h=k+g|0;j=h&1;f=j;i=1;h=(j+h|0)/2|0;break}else{h=(Kg(b,f)|0)+1|0;j=c[i>>2]|0;b=h+j|0;f=b&1;b=(f+b|0)/2|0;if(!g){g=j;l=8}else{k=h;i=1;h=b;g=j}}while(0);if((l|0)==8){k=h;i=d[e+10>>0]<<1>>>0>=(d[m>>0]|0)>>>0;h=b}h=(f|0)!=0^i?h:0-h|0;if((h|0)<0){l=e+10|0;a[l>>0]=(d[l>>0]|0)+1}f=(k+1-g>>1)+(c[e>>2]|0)|0;c[e>>2]=f;g=a[m>>0]|0;if(g<<24>>24!=(a[e+8>>0]|0)){e=g;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}c[e>>2]=f>>1;l=(g&255)>>>1;a[m>>0]=l;e=e+10|0;a[e>>0]=(d[e>>0]|0)>>>1;e=l;e=e&255;e=e+1|0;e=e&255;a[m>>0]=e;return h|0}function pi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;f=p;o=b+136|0;a:do if(!(c[o>>2]|0)){e=c[b+128>>2]|0;d=b+144|0;if((((e|0)==((1<>2])+-1|0)?(Ei(f,e,0),(c[f+4>>2]|0)==(c[b+176>>2]|0)):0)?(c[f+8>>2]|0)==(c[b+180>>2]|0):0)?(c[f+12>>2]|0)==(c[b+184>>2]|0):0)switch(c[d>>2]|0){case 8:{o=c[8900]|0;c[b+4604>>2]=o+(((c[8901]|0)-o|0)>>>1);i=p;return}case 10:{o=c[8903]|0;c[b+4604>>2]=o+(((c[8904]|0)-o|0)>>>1);i=p;return}case 12:{o=c[8906]|0;c[b+4604>>2]=o+(((c[8907]|0)-o|0)>>>1);i=p;return}case 16:{o=c[8909]|0;c[b+4604>>2]=o+(((c[8910]|0)-o|0)>>>1);i=p;return}default:break a}}else d=b+144|0;while(0);n=1<>2];e=b+4608|0;f=n<<1;g=b+4612|0;h=c[g>>2]|0;d=c[e>>2]|0;j=h-d|0;if(f>>>0<=j>>>0){if(f>>>0>>0?(k=d+f|0,(h|0)!=(k|0)):0)c[g>>2]=k}else{ie(e,f-j|0);d=c[e>>2]|0}m=b+4604|0;c[m>>2]=d+n;d=0-n|0;if((n|0)<=(d|0)){i=p;return}k=b+184|0;l=b+180|0;j=b+176|0;h=d;do{d=c[k>>2]|0;if((h|0)>(0-d|0)){e=c[l>>2]|0;if((h|0)>(0-e|0)){f=c[j>>2]|0;if((h|0)>(0-f|0)){g=c[o>>2]|0;if((h|0)>=(0-g|0))if((g|0)<(h|0))if((f|0)<=(h|0))if((e|0)>(h|0))d=2;else d=(d|0)>(h|0)?3:4;else d=1;else d=0;else d=-1}else d=-2}else d=-3}else d=-4;a[(c[m>>2]|0)+h>>0]=d;h=h+1|0}while((h|0)!=(n|0));i=p;return}function qi(a){a=a|0;cj(a);return}function ri(a){a=a|0;return 50767}function si(a,b,c){a=a|0;b=b|0;c=c|0;Gm(a,50754,12);return}function ti(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;s=i;i=i+16|0;t=s;c[t>>2]=0;u=t+4|0;c[u>>2]=0;c[t+8>>2]=0;q=t+8|0;o=0;g=ka(67,1)|0;p=o;o=0;a:do if((!(p&1)?(p=g+1|0,a[g>>0]=e,c[t>>2]=g,c[u>>2]=p,c[q>>2]=p,o=0,ia(84,t|0,d&65535|0),p=o,o=0,!(p&1)):0)?(o=0,ia(84,t|0,b&65535|0),p=o,o=0,!(p&1)):0){m=f&255;g=c[u>>2]|0;e=c[q>>2]|0;if(g>>>0>=e>>>0){d=c[t>>2]|0;b=d;j=g-b+1|0;if((j|0)<0){o=0;ha(178,t|0);p=o;o=0;if(p&1){r=52;break}b=c[t>>2]|0;e=c[q>>2]|0;d=b}l=d;g=e-l|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;e=c[u>>2]|0;k=e-l|0;if(!g){g=0;j=0}else r=12}else{k=c[u>>2]|0;g=2147483647;e=k;k=k-l|0;r=12}if((r|0)==12){o=0;j=ka(67,g|0)|0;p=o;o=0;if(p&1){r=52;break}}a[j+k>>0]=m;n=e-l|0;p=j+(k-n)|0;lw(p|0,d|0,n|0)|0;c[t>>2]=p;c[u>>2]=j+(k+1);c[q>>2]=j+g;if(b)cj(b)}else{a[g>>0]=m;c[u>>2]=(c[u>>2]|0)+1}b:do if((f|0)>0){p=0;while(1){p=p+1|0;n=p&255;g=c[u>>2]|0;d=c[q>>2]|0;if(g>>>0>=d>>>0){b=c[t>>2]|0;e=b;j=g-e+1|0;if((j|0)<0){o=0;ha(178,t|0);m=o;o=0;if(m&1)break;b=c[t>>2]|0;e=b;d=c[q>>2]|0}m=b;g=d-m|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;d=c[u>>2]|0;k=d-m|0;if(!g){l=0;j=0}else r=25}else{k=c[u>>2]|0;g=2147483647;d=k;k=k-m|0;r=25}if((r|0)==25){r=0;o=0;j=ka(67,g|0)|0;l=o;o=0;if(l&1)break;else l=g}a[j+k>>0]=n;g=j+(k+1)|0;m=d-m|0;n=j+(k-m)|0;lw(n|0,b|0,m|0)|0;c[t>>2]=n;c[u>>2]=g;c[q>>2]=j+l;if(e){cj(e);g=c[u>>2]|0}}else{a[g>>0]=n;g=(c[u>>2]|0)+1|0;c[u>>2]=g}e=c[q>>2]|0;if(g>>>0>=e>>>0){d=c[t>>2]|0;b=d;j=g-b+1|0;if((j|0)<0){o=0;ha(178,t|0);n=o;o=0;if(n&1)break;b=c[t>>2]|0;e=c[q>>2]|0;d=b}m=d;g=e-m|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;j=c[u>>2]|0;k=j-m|0;if(!g){l=0;e=0}else r=36}else{k=c[u>>2]|0;g=2147483647;j=k;k=k-m|0;r=36}if((r|0)==36){r=0;o=0;e=ka(67,g|0)|0;n=o;o=0;if(n&1)break;else l=g}a[e+k>>0]=17;g=e+(k+1)|0;m=j-m|0;n=e+(k-m)|0;lw(n|0,d|0,m|0)|0;c[t>>2]=n;c[u>>2]=g;c[q>>2]=e+l;if(b){cj(b);g=c[u>>2]|0}}else{a[g>>0]=17;g=(c[u>>2]|0)+1|0;c[u>>2]=g}e=c[q>>2]|0;if(g>>>0>=e>>>0){d=c[t>>2]|0;b=d;j=g-b+1|0;if((j|0)<0){o=0;ha(178,t|0);n=o;o=0;if(n&1)break;b=c[t>>2]|0;e=c[q>>2]|0;d=b}l=d;g=e-l|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;e=c[u>>2]|0;k=e-l|0;if(!g){g=0;j=0}else r=48}else{k=c[u>>2]|0;g=2147483647;e=k;k=k-l|0;r=48}if((r|0)==48){r=0;o=0;j=ka(67,g|0)|0;n=o;o=0;if(n&1)break}a[j+k>>0]=0;m=e-l|0;n=j+(k-m)|0;lw(n|0,d|0,m|0)|0;c[t>>2]=n;c[u>>2]=j+(k+1);c[q>>2]=j+g;if(b)cj(b)}else{a[g>>0]=0;c[u>>2]=(c[u>>2]|0)+1}if((p|0)>=(f|0))break b}h=Na()|0;break a}while(0);o=0;k=ka(67,20)|0;f=o;o=0;if(!(f&1)){c[k>>2]=36800;a[k+4>>0]=-9;b=k+8|0;c[b>>2]=0;j=k+12|0;c[j>>2]=0;e=k+16|0;c[e>>2]=0;g=c[u>>2]|0;f=c[t>>2]|0;d=g-f|0;do if((g|0)!=(f|0)){if(!((d|0)<0?(o=0,ha(178,b|0),f=o,o=0,f&1):0))r=62;if((r|0)==62?(o=0,h=ka(67,d|0)|0,f=o,o=0,!(f&1)):0){c[j>>2]=h;c[b>>2]=h;c[e>>2]=h+d;g=c[t>>2]|0;e=c[u>>2]|0;if((g|0)==(e|0))break;do{a[h>>0]=a[g>>0]|0;h=(c[j>>2]|0)+1|0;c[j>>2]=h;g=g+1|0}while((g|0)!=(e|0));g=c[t>>2]|0;break}h=Na()|0;g=c[b>>2]|0;if(g){if((c[j>>2]|0)!=(g|0))c[j>>2]=g;cj(g)}cj(k);break a}while(0);if(!g){i=s;return k|0}if((c[u>>2]|0)!=(g|0))c[u>>2]=g;cj(g);i=s;return k|0}else r=52}else r=52;while(0);if((r|0)==52)h=Na()|0;g=c[t>>2]|0;if(!g)Ya(h|0);if((c[u>>2]|0)!=(g|0))c[u>>2]=g;cj(g);Ya(h|0);return 0}function ui(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=i;i=i+32|0;r=u+28|0;w=u+16|0;t=u+4|0;s=u;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;p=bj(5)|0;c[w>>2]=p;q=w+8|0;c[q>>2]=p+5;a[p>>0]=74;a[p+1>>0]=70;a[p+2>>0]=73;a[p+3>>0]=70;a[p+4>>0]=0;c[x>>2]=p+5;o=0;ia(84,w|0,c[b>>2]&65535|0);p=o;o=0;a:do if(!(p&1)){m=c[b+4>>2]&255;d=c[x>>2]|0;f=c[q>>2]|0;if(d>>>0>=f>>>0){g=c[w>>2]|0;h=g;j=d-h+1|0;if((j|0)<0){o=0;ha(178,w|0);p=o;o=0;if(p&1){v=43;break}h=c[w>>2]|0;f=c[q>>2]|0;g=h}l=g;d=f-l|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?j:d;f=c[x>>2]|0;k=f-l|0;if(!d){d=0;j=0}else v=10}else{k=c[x>>2]|0;d=2147483647;f=k;k=k-l|0;v=10}if((v|0)==10){o=0;j=ka(67,d|0)|0;p=o;o=0;if(p&1){v=43;break}}a[j+k>>0]=m;n=f-l|0;p=j+(k-n)|0;lw(p|0,g|0,n|0)|0;c[w>>2]=p;c[x>>2]=j+(k+1);c[q>>2]=j+d;if(h)cj(h)}else{a[d>>0]=m;c[x>>2]=(c[x>>2]|0)+1}o=0;ia(84,w|0,c[b+8>>2]&65535|0);p=o;o=0;if(!(p&1)?(o=0,ia(84,w|0,c[b+12>>2]&65535|0),p=o,o=0,!(p&1)):0){p=b+16|0;n=c[p>>2]&255;d=c[x>>2]|0;g=c[q>>2]|0;if(d>>>0>=g>>>0){h=c[w>>2]|0;f=h;j=d-f+1|0;if((j|0)<0){o=0;ha(178,w|0);m=o;o=0;if(m&1){v=43;break}h=c[w>>2]|0;f=h;g=c[q>>2]|0}m=h;d=g-m|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?j:d;j=c[x>>2]|0;k=j-m|0;if(!d){l=0;g=0}else v=23}else{k=c[x>>2]|0;d=2147483647;j=k;k=k-m|0;v=23}if((v|0)==23){o=0;g=ka(67,d|0)|0;l=o;o=0;if(l&1){v=43;break}else l=d}a[g+k>>0]=n;d=g+(k+1)|0;m=j-m|0;n=g+(k-m)|0;lw(n|0,h|0,m|0)|0;c[w>>2]=n;c[x>>2]=d;c[q>>2]=g+l;if(f){cj(f);d=c[x>>2]|0}}else{a[d>>0]=n;d=(c[x>>2]|0)+1|0;c[x>>2]=d}n=b+20|0;m=c[n>>2]&255;f=c[q>>2]|0;if(d>>>0>=f>>>0){g=c[w>>2]|0;h=g;j=d-h+1|0;if((j|0)<0){o=0;ha(178,w|0);l=o;o=0;if(l&1){v=43;break}h=c[w>>2]|0;f=c[q>>2]|0;g=h}l=g;d=f-l|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?j:d;f=c[x>>2]|0;k=f-l|0;if(!d){d=0;j=0}else v=34}else{k=c[x>>2]|0;d=2147483647;f=k;k=k-l|0;v=34}if((v|0)==34){o=0;j=ka(67,d|0)|0;y=o;o=0;if(y&1){v=43;break}}a[j+k>>0]=m;m=f-l|0;y=j+(k-m)|0;lw(y|0,g|0,m|0)|0;c[w>>2]=y;c[x>>2]=j+(k+1);c[q>>2]=j+d;if(h)cj(h)}else{a[d>>0]=m;c[x>>2]=(c[x>>2]|0)+1}d=c[p>>2]|0;do if((d|0)>0){if(!(c[b+24>>2]|0)){c[s>>2]=c[x>>2];y=0+($(d*3|0,c[n>>2]|0)|0)|0;o=0;c[r>>2]=c[s>>2];va(15,w|0,r|0,0,y|0)|0;y=o;o=0;if(y&1){v=43;break a}else break}f=Ma(16)|0;o=0;wa(5,t|0,50792,57);y=o;o=0;if(!(y&1)){o=0;d=ua(1)|0;y=o;o=0;if(!(y&1)?(o=0,Aa(36,f|0,1,d|0,t|0),y=o,o=0,!(y&1)):0){o=0;wa(6,f|0,824,96);o=0;e=0}else e=1;d=Na()|0;Im(t);if(!e){e=d;break a}}else d=Na()|0;La(f|0);e=d;break a}while(0);o=0;k=ka(67,20)|0;y=o;o=0;if(!(y&1)){c[k>>2]=36800;a[k+4>>0]=-32;h=k+8|0;c[h>>2]=0;j=k+12|0;c[j>>2]=0;f=k+16|0;c[f>>2]=0;d=c[x>>2]|0;y=c[w>>2]|0;g=d-y|0;do if((d|0)!=(y|0)){if(!((g|0)<0?(o=0,ha(178,h|0),y=o,o=0,y&1):0))v=53;if((v|0)==53?(o=0,e=ka(67,g|0)|0,y=o,o=0,!(y&1)):0){c[j>>2]=e;c[h>>2]=e;c[f>>2]=e+g;d=c[w>>2]|0;f=c[x>>2]|0;if((d|0)==(f|0))break;do{a[e>>0]=a[d>>0]|0;e=(c[j>>2]|0)+1|0;c[j>>2]=e;d=d+1|0}while((d|0)!=(f|0));d=c[w>>2]|0;break}d=Na()|0;e=c[h>>2]|0;if(e){if((c[j>>2]|0)!=(e|0))c[j>>2]=e;cj(e)}cj(k);v=44;break a}while(0);if(!d){i=u;return k|0}if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);i=u;return k|0}else v=43}else v=43}else v=43;while(0);if((v|0)==43){d=Na()|0;v=44}if((v|0)==44)e=d;d=c[w>>2]|0;if(!d)Ya(e|0);if((c[x>>2]|0)!=(d|0))c[x>>2]=d;cj(d);Ya(e|0);return 0}function vi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0;k=i;i=i+16|0;m=k;c[m>>2]=0;n=m+4|0;c[n>>2]=0;c[m+8>>2]=0;o=0;d=ka(67,1)|0;j=o;o=0;a:do if((((((!(j&1)?(j=d+1|0,a[d>>0]=1,c[m>>2]=d,c[n>>2]=j,c[m+8>>2]=j,o=0,ia(84,m|0,c[b>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+4>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+8>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+12>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,ia(84,m|0,c[b+16>>2]&65535|0),j=o,o=0,!(j&1)):0)?(o=0,l=ka(67,20)|0,j=o,o=0,!(j&1)):0){c[l>>2]=36800;a[l+4>>0]=-8;g=l+8|0;c[g>>2]=0;j=l+12|0;c[j>>2]=0;b=l+16|0;c[b>>2]=0;d=c[n>>2]|0;p=c[m>>2]|0;f=d-p|0;do if((d|0)!=(p|0)){if(!((f|0)<0?(o=0,ha(178,g|0),p=o,o=0,p&1):0))h=11;if((h|0)==11?(o=0,e=ka(67,f|0)|0,p=o,o=0,!(p&1)):0){c[j>>2]=e;c[g>>2]=e;c[b>>2]=e+f;d=c[m>>2]|0;b=c[n>>2]|0;if((d|0)==(b|0))break;do{a[e>>0]=a[d>>0]|0;e=(c[j>>2]|0)+1|0;c[j>>2]=e;d=d+1|0}while((d|0)!=(b|0));d=c[m>>2]|0;break}e=Na()|0;d=c[g>>2]|0;if(d){if((c[j>>2]|0)!=(d|0))c[j>>2]=d;cj(d)}cj(l);break a}while(0);if(!d){i=k;return l|0}if((c[n>>2]|0)!=(d|0))c[n>>2]=d;cj(d);i=k;return l|0}else h=25;while(0);if((h|0)==25)e=Na()|0;d=c[m>>2]|0;if(!d)Ya(e|0);if((c[n>>2]|0)!=(d|0))c[n>>2]=d;cj(d);Ya(e|0);return 0}function wi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=bj(5)|0;a[h>>0]=109;a[h+1>>0]=114;a[h+2>>0]=102;a[h+3>>0]=120;a[h+4>>0]=b;o=0;g=ka(67,20)|0;f=o;o=0;if(f&1){g=Na()|0;cj(h);Ya(g|0)}c[g>>2]=36800;a[g+4>>0]=-24;b=g+8|0;c[b>>2]=0;d=g+12|0;c[d>>2]=0;e=g+16|0;c[e>>2]=0;o=0;f=ka(67,5)|0;i=o;o=0;if(!(i&1)){c[d>>2]=f;c[b>>2]=f;c[e>>2]=f+5;a[f>>0]=109;i=(c[d>>2]|0)+1|0;c[d>>2]=i;f=h+1|0;a[i>>0]=a[f>>0]|0;i=(c[d>>2]|0)+1|0;c[d>>2]=i;f=f+1|0;a[i>>0]=a[f>>0]|0;i=(c[d>>2]|0)+1|0;c[d>>2]=i;f=f+1|0;a[i>>0]=a[f>>0]|0;i=(c[d>>2]|0)+1|0;c[d>>2]=i;a[i>>0]=a[f+1>>0]|0;c[d>>2]=(c[d>>2]|0)+1;cj(h);return g|0}i=Na()|0;cj(g);cj(h);Ya(i|0);return 0}function xi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+16|0;w=v;c[w>>2]=0;x=w+4|0;c[x>>2]=0;c[w+8>>2]=0;t=w+8|0;o=0;g=ka(67,1)|0;s=o;o=0;a:do if(!(s&1)){k=g+1|0;s=k;a[g>>0]=d;c[w>>2]=g;c[x>>2]=s;c[t>>2]=s;if((d|0)>0){j=k;s=0;do{r=s+b&255;if(j>>>0>=k>>>0){g=c[w>>2]|0;l=g;j=j-l+1|0;if((j|0)<0){o=0;ha(178,w|0);q=o;o=0;if(q&1){u=28;break}l=c[w>>2]|0;k=c[t>>2]|0;q=l}else q=g;p=q;g=k-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;k=c[x>>2]|0;m=k-p|0;if(!g){n=0;j=0}else u=13}else{m=c[x>>2]|0;g=2147483647;k=m;m=m-p|0;u=13}if((u|0)==13){u=0;o=0;j=ka(67,g|0)|0;n=o;o=0;if(n&1){u=28;break}else n=g}a[j+m>>0]=r;g=j+(m+1)|0;p=k-p|0;r=j+(m-p)|0;lw(r|0,q|0,p|0)|0;c[w>>2]=r;c[x>>2]=g;c[t>>2]=j+n;if(l){cj(l);g=c[x>>2]|0}}else{a[j>>0]=r;g=(c[x>>2]|0)+1|0;c[x>>2]=g}k=c[t>>2]|0;if(g>>>0>=k>>>0){l=c[w>>2]|0;j=l;m=g-j+1|0;if((m|0)<0){o=0;ha(178,w|0);r=o;o=0;if(r&1){u=28;break}l=c[w>>2]|0;j=l;k=c[t>>2]|0}p=l;g=k-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?m:g;m=c[x>>2]|0;k=m-p|0;if(!g){g=0;n=0}else u=24}else{k=c[x>>2]|0;g=2147483647;m=k;k=k-p|0;u=24}if((u|0)==24){u=0;o=0;n=ka(67,g|0)|0;r=o;o=0;if(r&1){u=28;break}}a[n+k>>0]=0;q=m-p|0;r=n+(k-q)|0;lw(r|0,l|0,q|0)|0;c[w>>2]=r;c[x>>2]=n+(k+1);c[t>>2]=n+g;if(j)cj(j)}else{a[g>>0]=0;c[x>>2]=(c[x>>2]|0)+1}s=s+1|0;j=c[x>>2]|0;k=c[t>>2]|0}while((s|0)<(d|0));if((u|0)==28){h=Na()|0;break}g=e&255;if(j>>>0>>0){a[j>>0]=g;j=(c[x>>2]|0)+1|0;c[x>>2]=j}else u=37}else{j=k;g=e&255;u=37}if((u|0)==37){l=c[w>>2]|0;m=l;n=j-m+1|0;if((n|0)<0){o=0;ha(178,w|0);e=o;o=0;if(e&1){u=29;break}m=c[w>>2]|0;k=c[t>>2]|0;l=m}r=l;j=k-r|0;if(j>>>0<1073741823){j=j<<1;j=j>>>0>>0?n:j;n=c[x>>2]|0;p=n-r|0;if(!j){q=0;k=0}else u=43}else{p=c[x>>2]|0;j=2147483647;n=p;p=p-r|0;u=43}if((u|0)==43){o=0;k=ka(67,j|0)|0;e=o;o=0;if(e&1){u=29;break}else q=j}a[k+p>>0]=g;j=k+(p+1)|0;b=n-r|0;e=k+(p-b)|0;lw(e|0,l|0,b|0)|0;c[w>>2]=e;c[x>>2]=j;c[t>>2]=k+q;if(m){cj(m);j=c[x>>2]|0}}r=f&255;g=c[t>>2]|0;if(j>>>0>=g>>>0){k=c[w>>2]|0;l=k;j=j-l+1|0;if((j|0)<0){o=0;ha(178,w|0);f=o;o=0;if(f&1){u=29;break}l=c[w>>2]|0;g=c[t>>2]|0;k=l}q=k;g=g-q|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?j:g;m=c[x>>2]|0;n=m-q|0;if(!g){p=0;j=0}else u=54}else{n=c[x>>2]|0;g=2147483647;m=n;n=n-q|0;u=54}if((u|0)==54){o=0;j=ka(67,g|0)|0;f=o;o=0;if(f&1){u=29;break}else p=g}a[j+n>>0]=r;g=j+(n+1)|0;e=m-q|0;f=j+(n-e)|0;lw(f|0,k|0,e|0)|0;c[w>>2]=f;c[x>>2]=g;c[t>>2]=j+p;if(l){cj(l);g=c[x>>2]|0}}else{a[j>>0]=r;g=(c[x>>2]|0)+1|0;c[x>>2]=g}j=c[t>>2]|0;if(g>>>0>=j>>>0){k=c[w>>2]|0;l=k;m=g-l+1|0;if((m|0)<0){o=0;ha(178,w|0);f=o;o=0;if(f&1){u=29;break}l=c[w>>2]|0;j=c[t>>2]|0;k=l}p=k;g=j-p|0;if(g>>>0<1073741823){g=g<<1;g=g>>>0>>0?m:g;j=c[x>>2]|0;n=j-p|0;if(!g){g=0;m=0}else u=65}else{n=c[x>>2]|0;g=2147483647;j=n;n=n-p|0;u=65}if((u|0)==65){o=0;m=ka(67,g|0)|0;f=o;o=0;if(f&1){u=29;break}}a[m+n>>0]=0;e=j-p|0;f=m+(n-e)|0;lw(f|0,k|0,e|0)|0;c[w>>2]=f;c[x>>2]=m+(n+1);c[t>>2]=m+g;if(l)cj(l)}else{a[g>>0]=0;c[x>>2]=(c[x>>2]|0)+1}o=0;n=ka(67,20)|0;t=o;o=0;if(!(t&1)){c[n>>2]=36800;a[n+4>>0]=-38;l=n+8|0;c[l>>2]=0;m=n+12|0;c[m>>2]=0;j=n+16|0;c[j>>2]=0;g=c[x>>2]|0;t=c[w>>2]|0;k=g-t|0;do if((g|0)!=(t|0)){if(!((k|0)<0?(o=0,ha(178,l|0),t=o,o=0,t&1):0))u=72;if((u|0)==72?(o=0,h=ka(67,k|0)|0,t=o,o=0,!(t&1)):0){c[m>>2]=h;c[l>>2]=h;c[j>>2]=h+k;g=c[w>>2]|0;j=c[x>>2]|0;if((g|0)==(j|0))break;do{a[h>>0]=a[g>>0]|0;h=(c[m>>2]|0)+1|0;c[m>>2]=h;g=g+1|0}while((g|0)!=(j|0));g=c[w>>2]|0;break}h=Na()|0;g=c[l>>2]|0;if(g){if((c[m>>2]|0)!=(g|0))c[m>>2]=g;cj(g)}cj(n);break a}while(0);if(!g){i=v;return n|0}if((c[x>>2]|0)!=(g|0))c[x>>2]=g;cj(g);i=v;return n|0}else u=29}else u=29;while(0);if((u|0)==29)h=Na()|0;g=c[w>>2]|0;if(!g)Ya(h|0);if((c[x>>2]|0)!=(g|0))c[x>>2]=g;cj(g);Ya(h|0);return 0}function yi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=(d&65535)>>>8&255;o=b+4|0;e=c[o>>2]|0;p=b+8|0;f=c[p>>2]|0;if(e>>>0>=f>>>0){g=c[b>>2]|0;h=g;i=e-h+1|0;if((i|0)<0){$i(b);h=c[b>>2]|0;f=c[p>>2]|0;g=h}m=g;e=f-m|0;if(e>>>0<1073741823){e=e<<1;e=e>>>0>>0?i:e;i=c[o>>2]|0;f=i-m|0;if(!e){l=0;k=0;j=f;e=i}else q=8}else{f=c[o>>2]|0;e=2147483647;i=f;f=f-m|0;q=8}if((q|0)==8){l=e;k=bj(e)|0;j=f;e=i}a[k+j>>0]=n;f=k+(j+1)|0;m=e-m|0;n=k+(j-m)|0;lw(n|0,g|0,m|0)|0;c[b>>2]=n;c[o>>2]=f;c[p>>2]=k+l;if(h){cj(h);f=c[o>>2]|0}}else{a[e>>0]=n;f=(c[o>>2]|0)+1|0;c[o>>2]=f}m=d&255;e=c[p>>2]|0;if(f>>>0>>0){a[f>>0]=m;c[o>>2]=(c[o>>2]|0)+1;return}g=c[b>>2]|0;h=g;f=f-h+1|0;if((f|0)<0){$i(b);h=c[b>>2]|0;e=c[p>>2]|0;g=h}l=g;e=e-l|0;if(e>>>0<1073741823){e=e<<1;e=e>>>0>>0?f:e;i=c[o>>2]|0;f=i-l|0;if(!e){k=0;j=0;e=i}else q=18}else{f=c[o>>2]|0;e=2147483647;i=f;f=f-l|0;q=18}if((q|0)==18){k=e;j=bj(e)|0;e=i}a[j+f>>0]=m;d=e-l|0;q=j+(f-d)|0;lw(q|0,g|0,d|0)|0;c[b>>2]=q;c[o>>2]=j+(f+1);c[p>>2]=j+k;if(!h)return;cj(h);return}function zi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=c[b>>2]|0;q=c[d>>2]|0;p=q;k=g;n=e;l=f-n|0;if((l|0)<=0){r=q;return r|0}o=b+8|0;d=c[o>>2]|0;r=b+4|0;m=c[r>>2]|0;h=m;if((l|0)<=(d-h|0)){j=h-p|0;if((l|0)>(j|0)){i=e+j|0;if((i|0)==(f|0))d=m;else{h=i;d=m;do{a[d>>0]=a[h>>0]|0;d=(c[r>>2]|0)+1|0;c[r>>2]=d;h=h+1|0}while((h|0)!=(f|0))}if((j|0)>0)j=d;else{r=q;return r|0}}else{j=m;i=f}g=j-(g+(l-k+p))|0;d=q+g|0;if(d>>>0>>0){h=j;do{a[h>>0]=a[d>>0]|0;d=d+1|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h}while((d|0)!=(m|0))}nw(j+(0-g)|0,q|0,g|0)|0;nw(q|0,e|0,i-n|0)|0;r=q;return r|0}h=h-k+l|0;if((h|0)<0){$i(b);d=c[o>>2]|0;g=c[b>>2]|0}i=g;d=d-i|0;if(d>>>0<1073741823){d=d<<1;d=d>>>0>>0?h:d;h=p-i|0;if(!d){i=0;l=0}else j=15}else{d=2147483647;h=p-i|0;j=15}if((j|0)==15){i=d;l=bj(d)|0}k=l+h|0;d=k;j=l+i|0;if((e|0)!=(f|0)){g=e;i=k;do{a[i>>0]=a[g>>0]|0;i=d+1|0;d=i;g=g+1|0}while((g|0)!=(f|0));g=c[b>>2]|0}e=p-g|0;f=l+(h-e)|0;lw(f|0,g|0,e|0)|0;p=(c[r>>2]|0)-p|0;e=d;lw(e|0,q|0,p|0)|0;d=c[b>>2]|0;c[b>>2]=f;c[r>>2]=e+p;c[o>>2]=j;if(!d){r=k;return r|0}cj(d);r=k;return r|0}function Ai(a){a=a|0;var b=0;c[a>>2]=36800;b=c[a+8>>2]|0;if(!b)return;a=a+12|0;if((c[a>>2]|0)!=(b|0))c[a>>2]=b;cj(b);return}function Bi(a){a=a|0;var b=0,d=0;c[a>>2]=36800;b=c[a+8>>2]|0;if(!b){cj(a);return}d=a+12|0;if((c[d>>2]|0)!=(b|0))c[d>>2]=b;cj(b);cj(a);return}function Ci(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;Di(d,-1);Di(d,a[b+4>>0]|0);g=b+12|0;f=b+8|0;b=(c[g>>2]|0)-(c[f>>2]|0)+2|0;Di(d,(b&65535)>>>8&255);Di(d,b&255);b=c[f>>2]|0;if((c[g>>2]|0)==(b|0))return;else e=0;do{Di(d,a[b+e>>0]|0);e=e+1|0;b=c[f>>2]|0}while(e>>>0<((c[g>>2]|0)-b|0)>>>0);return}function Di(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=c[b+4>>2]|0;if(g){e=g+24|0;f=c[e>>2]|0;if((f|0)==(c[g+28>>2]|0)){Lb[c[(c[g>>2]|0)+52>>2]&63](g,d&255)|0;return}else{c[e>>2]=f+1;a[f>>0]=d;return}}e=b+16|0;f=c[e>>2]|0;if(f>>>0<(c[b+12>>2]|0)>>>0){c[e>>2]=f+1;a[(c[b+8>>2]|0)+f>>0]=d;return}e=Ma(16)|0;o=0;f=ua(1)|0;d=o;o=0;if(d&1){d=Na()|0;La(e|0);Ya(d|0)}o=0;wa(7,e|0,4,f|0);d=o;o=0;if(d&1){d=Na()|0;La(e|0);Ya(d|0)}else lb(e|0,824,96)}function Ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;f=(b|0)<4095?(b+128|0)/256|0:16;g=(d*3|0)+2+f|0;e=d+1|0;g=(g|0)<(e|0)|(g|0)>(b|0)?e:g;c[a+4>>2]=g;e=(f<<2|3)+(d*5|0)|0;e=(e|0)>(b|0)|(e|0)<(g|0)?g:e;c[a+8>>2]=e;d=(d*7|0)+4+(f*17|0)|0;c[a+12>>2]=(d|0)>(b|0)|(d|0)<(e|0)?e:d;c[a>>2]=b;c[a+16>>2]=64;return}function Fi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+128|0;k=m+100|0;f=m+16|0;e=m+112|0;l=m+4|0;n=m;g=f;h=b+20|0;j=g+84|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));c[f+16>>2]=c[b+4>>2];h=pc(e,f,b+56|0)|0;e=c[(c[h>>2]|0)+16>>2]|0;b=b+8|0;o=0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];e=ra(e|0,h|0,k|0)|0;b=o;o=0;do if(b&1)e=Na()|0;else{g=d+4|0;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];c[l+8>>2]=c[g+8>>2];g=d+16|0;b=c[g>>2]|0;k=l+8|0;c[k>>2]=(c[k>>2]|0)-b;k=l+4|0;c[k>>2]=(c[k>>2]|0)+b;k=c[(c[h>>2]|0)+12>>2]|0;c[n>>2]=e;o=0;e=va(k|0,h|0,n|0,l|0,((a[d>>0]|0)==0?0:(c[d+8>>2]|0)+b|0)|0)|0;l=o;o=0;if(l&1){e=Na()|0;f=c[n>>2]|0;c[n>>2]=0;if(!f)break;Bb[c[(c[f>>2]|0)+4>>2]&255](f);break}f=c[n>>2]|0;c[n>>2]=0;if(f)Bb[c[(c[f>>2]|0)+4>>2]&255](f);if(!(c[d+4>>2]|0))c[g>>2]=(c[g>>2]|0)+e;if(!h){i=m;return}Bb[c[(c[h>>2]|0)+4>>2]&255](h);i=m;return}while(0);if(!h)Ya(e|0);Bb[c[(c[h>>2]|0)+4>>2]&255](h);Ya(e|0)}function Gi(b,d){b=b|0;d=d|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];a[b+12>>0]=0;d=b+16|0;b=d+100|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(b|0));return}function Hi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;v=i;i=i+32|0;u=v+4|0;q=v+16|0;w=v;Ii(b);r=b+16|0;g=c[b+24>>2]|0;a:do if((g+-2|0)>>>0<=14){s=b+40|0;e=c[s>>2]|0;if(e>>>0>2)e=5;else{t=b+32|0;h=c[t>>2]|0;switch(h|0){case 0:{e=1;break a}case 4:{if((e|0)==2){e=2;break a}break}case 3:break;default:if(e){e=2;break a}}p=b+100|0;e=b+108|0;f=c[e>>2]|0;if((f|0)<1){f=c[r>>2]|0;c[e>>2]=f;e=c[b+20>>2]|0;c[b+112>>2]=e}else e=c[b+112>>2]|0;l=tw(e|0,((e|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;k=(g+7|0)/8|0;k=tw(l|0,D|0,k|0,((k|0)<0)<<31>>31|0)|0;l=d+4|0;e=c[l>>2]|0;j=d+8|0;if((e|0)!=0?(m=c[j>>2]|0,n=tw(h|0,((h|0)<0)<<31>>31|0,k|0,D|0)|0,g=D,0<(g|0)|0==(g|0)&m>>>0>>0):0){e=Ma(16)|0;o=0;f=ua(1)|0;w=o;o=0;if(!(w&1)?(o=0,wa(7,e|0,3,f|0),w=o,o=0,!(w&1)):0)lb(e|0,824,96);w=Na()|0;La(e|0);Ya(w|0)}m=b+52|0;n=b+12|0;if((h|0)>0)h=0;else{i=v;return}while(1){Ji(b,(h|0)==0);f=nc(q,r,m)|0;g=c[(c[f>>2]|0)+8>>2]|0;o=0;c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];g=ra(g|0,f|0,u|0)|0;x=o;o=0;if(x&1){g=32;break}x=c[(c[f>>2]|0)+16>>2]|0;c[w>>2]=g;o=0;fa(x|0,f|0,w|0,p|0,b|0,(a[n>>0]|0)!=0|0);x=o;o=0;if(x&1){g=30;break}g=c[w>>2]|0;c[w>>2]=0;if(g)Bb[c[(c[g>>2]|0)+4>>2]&255](g);if(!e)e=0;else{e=e+k|0;c[l>>2]=e;c[j>>2]=(c[j>>2]|0)-k}g=(c[s>>2]|0)==0;h=(g&1)+h|0;if(f)Bb[c[(c[f>>2]|0)+4>>2]&255](f);if(!g){g=34;break}if((h|0)>=(c[t>>2]|0)){g=34;break}}if((g|0)==30){e=Na()|0;g=c[w>>2]|0;c[w>>2]=0;if(g)Bb[c[(c[g>>2]|0)+4>>2]&255](g)}else if((g|0)==32){e=Na()|0;if(!f){x=e;Ya(x|0)}}else if((g|0)==34){i=v;return}Bb[c[(c[f>>2]|0)+4>>2]&255](f);x=e;Ya(x|0)}}else e=2;while(0);f=Ma(16)|0;o=0;g=ua(1)|0;x=o;o=0;if(!(x&1)?(o=0,wa(7,f|0,e|0,g|0),x=o,o=0,!(x&1)):0)lb(f|0,824,96);x=Na()|0;La(f|0);Ya(x|0)}function Ii(a){a=a|0;var b=0,c=0,d=0,e=0;if((Mi(a)|0)<<24>>24!=-40){b=Ma(16)|0;o=0;c=ua(1)|0;e=o;o=0;if(!(e&1)?(o=0,wa(7,b|0,5,c|0),e=o,o=0,!(e&1)):0)lb(b|0,824,96);e=Na()|0;La(b|0);Ya(e|0)}b=Mi(a)|0;if(b<<24>>24==-38)return;while(1){d=((Li(a)|0)&255)<<8;d=d|(Li(a)|0)&255;b=Ni(a,b)|0;c=-2-b+d|0;if((c|0)<0)break;if((c|0)>0){b=d+-2-b|0;c=0;do{Li(a)|0;c=c+1|0}while((c|0)!=(b|0))}b=Mi(a)|0;if(b<<24>>24==-38){e=8;break}}if((e|0)==8)return;b=Ma(16)|0;o=0;c=ua(1)|0;e=o;o=0;if(!(e&1)?(o=0,wa(7,b|0,5,c|0),e=o,o=0,!(e&1)):0)lb(b|0,824,96);e=Na()|0;La(b|0);Ya(e|0)}function Ji(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b){if((Li(a)|0)<<24>>24!=-1){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,12,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}if((Li(a)|0)<<24>>24!=-38){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,5,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}}Li(a)|0;Li(a)|0;d=Li(a)|0;e=d&255;do if(d<<24>>24==1){Li(a)|0;d=0;f=20}else{if((e|0)==(c[a+32>>2]|0)){b=Li(a)|0;if(!(d<<24>>24))break;else{d=0;f=20;break}}b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,2,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}while(0);if((f|0)==20)while(1){Li(a)|0;d=d+1|0;b=Li(a)|0;if((d|0)==(e|0))break;else f=20}c[a+36>>2]=b&255;f=Li(a)|0;d=a+40|0;c[d>>2]=f&255;if((f&255)>=3){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,5,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}if((Li(a)|0)<<24>>24){b=Ma(16)|0;o=0;d=ua(1)|0;a=o;o=0;if(!(a&1)?(o=0,wa(7,b|0,5,d|0),a=o,o=0,!(a&1)):0)lb(b|0,824,96);a=Na()|0;La(b|0);Ya(a|0)}e=a+28|0;if(c[e>>2]|0)return;b=c[a+108>>2]|0;if(!b)b=c[a+16>>2]|0;if(!(c[d>>2]|0))d=1;else d=c[a+32>>2]|0;f=$(d,b)|0;c[e>>2]=$(f,((c[a+24>>2]|0)+7|0)/8|0)|0;return}function Ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((e|0)<=0)return;n=d+4|0;o=d+8|0;q=0;do{p=Li(b)|0;f=c[n>>2]|0;g=c[o>>2]|0;if(f>>>0>=g>>>0){h=c[d>>2]|0;i=h;j=f-i+1|0;if((j|0)<0){$i(d);i=c[d>>2]|0;g=c[o>>2]|0;h=i}m=h;f=g-m|0;if(f>>>0<1073741823){f=f<<1;f=f>>>0>>0?j:f;j=c[n>>2]|0;g=j-m|0;if(!f){l=0;k=0;f=j}else r=10}else{g=c[n>>2]|0;f=2147483647;j=g;g=g-m|0;r=10}if((r|0)==10){r=0;l=f;k=bj(f)|0;f=j}a[k+g>>0]=p;m=f-m|0;p=k+(g-m)|0;lw(p|0,h|0,m|0)|0;c[d>>2]=p;c[n>>2]=k+(g+1);c[o>>2]=k+l;if(i)cj(i)}else{a[f>>0]=p;c[n>>2]=(c[n>>2]|0)+1}q=q+1|0}while((q|0)!=(e|0));return}function Li(b){b=b|0;var e=0,f=0,g=0,h=0;f=c[b>>2]|0;if(f){b=f+12|0;e=c[b>>2]|0;if((e|0)==(c[f+16>>2]|0))b=Eb[c[(c[f>>2]|0)+40>>2]&127](f)|0;else{c[b>>2]=e+1;b=d[e>>0]|0}h=b&255;return h|0}g=b+8|0;h=c[g>>2]|0;if(h){b=b+4|0;e=c[b>>2]|0;f=a[e>>0]|0;if(!e){h=f;return h|0}c[b>>2]=e+1;c[g>>2]=h+-1;h=f;return h|0}b=Ma(16)|0;o=0;e=ua(1)|0;h=o;o=0;if(h&1){h=Na()|0;La(b|0);Ya(h|0)}o=0;wa(7,b|0,4,e|0);h=o;o=0;if(h&1){h=Na()|0;La(b|0);Ya(h|0)}else lb(b|0,824,96);return 0}function Mi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+176|0;b=d+152|0;k=d+16|0;h=d;j=Li(a)|0;e=j&255;if(j<<24>>24==-1){do b=Li(a)|0;while(b<<24>>24==-1);i=d;return b|0}j=k+56|0;g=k+4|0;c[k>>2]=36160;c[j>>2]=36180;o=0;ia(62,k+56|0,g|0);f=o;o=0;if(f&1){k=Na()|0;fn(j);Ya(k|0)}c[k+128>>2]=0;c[k+132>>2]=-1;c[k>>2]=36200;c[k+56>>2]=36220;o=0;ha(180,g|0);f=o;o=0;do if(f&1)b=Na()|0;else{c[g>>2]=36236;f=k+36|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[k+52>>2]=16;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;o=0;ia(63,g|0,b|0);d=o;o=0;if(d&1){k=Na()|0;Im(b);Im(f);nn(g);b=k;break}Im(b);c[k+((c[(c[k>>2]|0)+-12>>2]|0)+76)>>2]=48;o=0;b=ma(28,k|0,50907,62)|0;d=o;o=0;if(!(d&1)?(d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,c[d>>2]=c[d>>2]&-75|8,d=b+((c[(c[b>>2]|0)+-12>>2]|0)+4)|0,c[d>>2]=c[d>>2]|16384,c[b+((c[(c[b>>2]|0)+-12>>2]|0)+12)>>2]=2,o=0,ra(38,b|0,e|0)|0,e=o,o=0,!(e&1)):0){d=Ma(16)|0;o=0;ia(64,h|0,g|0);e=o;o=0;if(!(e&1)){o=0;b=ua(1)|0;e=o;o=0;if(!(e&1)?(o=0,Aa(36,d|0,12,b|0,h|0),e=o,o=0,!(e&1)):0){o=0;wa(6,d|0,824,96);o=0;a=0}else a=1;b=Na()|0;Im(h);if(!a){h=b;c[k>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(f);nn(g);fn(j);Ya(h|0)}}else b=Na()|0;La(d|0);h=b;c[k>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(f);nn(g);fn(j);Ya(h|0)}h=Na()|0;c[k>>2]=36200;c[j>>2]=36220;c[g>>2]=36236;Im(f);nn(g);fn(j);Ya(h|0)}while(0);k=b;fn(j);Ya(k|0);return 0}function Ni(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0;d=i;i=i+320|0;j=d+300|0;m=d+152|0;k=d+288|0;n=d+16|0;l=d;switch(b<<24>>24){case -9:{c[a+24>>2]=(Li(a)|0)&255;p=((Li(a)|0)&255)<<8|(Li(a)|0)&255;c[a+16>>2]=((Li(a)|0)&255)<<8|(Li(a)|0)&255;c[a+20>>2]=p;c[a+32>>2]=(Li(a)|0)&255;p=6;i=d;return p|0}case -8:{p=Oi(a)|0;i=d;return p|0}case -24:{p=Pi(a)|0;i=d;return p|0}case -53:case -54:case -55:case -57:case -58:case -59:case -61:case -62:case -63:case -64:{h=m+56|0;f=m+4|0;c[m>>2]=36160;c[h>>2]=36180;o=0;ia(62,m+56|0,f|0);n=o;o=0;if(n&1){p=Na()|0;fn(h);Ya(p|0)}c[m+128>>2]=0;c[m+132>>2]=-1;c[m>>2]=36200;c[m+56>>2]=36220;o=0;ha(180,f|0);n=o;o=0;do if(n&1)a=Na()|0;else{c[f>>2]=36236;g=m+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[m+52>>2]=16;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;o=0;ia(63,f|0,j|0);n=o;o=0;if(n&1){a=Na()|0;Im(j);Im(g);nn(f);break}Im(j);o=0;a=ma(28,m|0,50970,26)|0;n=o;o=0;do if((!(n&1)?(o=0,e=ra(38,a|0,b&255|0)|0,n=o,o=0,!(n&1)):0)?(o=0,ma(28,e|0,50997,18)|0,n=o,o=0,!(n&1)):0){e=Ma(16)|0;o=0;ia(64,k|0,f|0);n=o;o=0;if(!(n&1)){o=0;a=ua(1)|0;n=o;o=0;if(!(n&1)?(o=0,Aa(36,e|0,10,a|0,k|0),n=o,o=0,!(n&1)):0){o=0;wa(6,e|0,824,96);o=0;d=0}else d=1;a=Na()|0;Im(k);if(!d)break}else a=Na()|0;La(e|0)}else p=20;while(0);if((p|0)==20)a=Na()|0;c[m>>2]=36200;c[h>>2]=36220;c[f>>2]=36236;Im(g);nn(f);fn(h);p=a;Ya(p|0)}while(0);p=a;fn(h);Ya(p|0)}case -25:case -32:case -2:{p=0;i=d;return p|0}default:{k=n+56|0;g=n+4|0;c[n>>2]=36160;c[k>>2]=36180;o=0;ia(62,n+56|0,g|0);m=o;o=0;if(m&1){p=Na()|0;fn(k);Ya(p|0)}c[n+128>>2]=0;c[n+132>>2]=-1;c[n>>2]=36200;c[n+56>>2]=36220;o=0;ha(180,g|0);m=o;o=0;do if(m&1)a=Na()|0;else{c[g>>2]=36236;h=n+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[n+52>>2]=16;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;o=0;ia(63,g|0,j|0);m=o;o=0;if(m&1){a=Na()|0;Im(j);Im(h);nn(g);break}Im(j);o=0;a=ma(28,n|0,51016,20)|0;m=o;o=0;do if((!(m&1)?(o=0,f=ra(38,a|0,b&255|0)|0,m=o,o=0,!(m&1)):0)?(o=0,ma(28,f|0,51037,13)|0,m=o,o=0,!(m&1)):0){e=Ma(16)|0;o=0;ia(64,l|0,g|0);m=o;o=0;if(!(m&1)){o=0;a=ua(1)|0;m=o;o=0;if(!(m&1)?(o=0,Aa(36,e|0,11,a|0,l|0),m=o,o=0,!(m&1)):0){o=0;wa(6,e|0,824,96);o=0;d=0}else d=1;a=Na()|0;Im(l);if(!d)break}else a=Na()|0;La(e|0)}else p=40;while(0);if((p|0)==40)a=Na()|0;c[n>>2]=36200;c[k>>2]=36220;c[g>>2]=36236;Im(h);nn(g);fn(k);p=a;Ya(p|0)}while(0);p=a;fn(k);Ya(p|0)}}return 0}function Oi(a){a=a|0;var b=0;if((Li(a)|0)<<24>>24!=1){a=1;return a|0}b=((Li(a)|0)&255)<<8;c[a+52>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+56>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+60>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+64>>2]=b|(Li(a)|0)&255;b=((Li(a)|0)&255)<<8;c[a+68>>2]=b|(Li(a)|0)&255;a=11;return a|0}function Pi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;d=i;i=i+16|0;f=d;c[f>>2]=0;g=f+4|0;c[g>>2]=0;c[f+8>>2]=0;o=0;wa(9,a|0,f|0,4);b=o;o=0;a:do if(b&1)e=3;else{b=c[f>>2]|0;b:do if(!(ol(b,51051,4)|0)){o=0;b=ka(69,a|0)|0;h=o;o=0;if(h&1){e=3;break a}b=b&255;switch(b|0){case 3:case 2:case 1:case 0:{c[a+44>>2]=b;a=5;b=c[f>>2]|0;break b}case 5:case 4:{b=Ma(16)|0;o=0;a=ua(1)|0;h=o;o=0;if(!(h&1)?(o=0,wa(7,b|0,7,a|0),h=o,o=0,!(h&1)):0){o=0;wa(6,b|0,824,96);o=0;e=3;break a}a=Na()|0;La(b|0);break a}default:{b=Ma(16)|0;o=0;a=ua(1)|0;h=o;o=0;if(!(h&1)?(o=0,wa(7,b|0,5,a|0),h=o,o=0,!(h&1)):0){o=0;wa(6,b|0,824,96);o=0;e=3;break a}a=Na()|0;La(b|0);break a}}}else a=4;while(0);if(!b){i=d;return a|0}if((c[g>>2]|0)!=(b|0))c[g>>2]=b;cj(b);i=d;return a|0}while(0);if((e|0)==3)a=Na()|0;b=c[f>>2]|0;if(!b)Ya(a|0);if((c[g>>2]|0)!=(b|0))c[g>>2]=b;cj(b);Ya(a|0);return 0}function Qi(a){a=a|0;var b=0,d=0,e=0;e=c[(c[a>>2]|0)+-12>>2]|0;c[a+e>>2]=36200;b=a+(e+56)|0;c[b>>2]=36220;d=a+(e+4)|0;c[d>>2]=36236;Im(a+(e+36)|0);nn(d);fn(b);return}function Ri(a){a=a|0;return}function Si(a){a=a|0;cj(a);return}function Ti(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}function Ui(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=i;i=i+16|0;g=f;b=wi(b)|0;c[g>>2]=b;d=a+28|0;e=c[d>>2]|0;if(e>>>0<(c[a+32>>2]|0)>>>0){c[e>>2]=b;c[d>>2]=e+4;c[g>>2]=0;i=f;return}o=0;ia(57,a+24|0,g|0);a=o;o=0;if(a&1){b=Na()|0;d=c[g>>2]|0;c[g>>2]=0;if(!d)Ya(b|0);Bb[c[(c[d>>2]|0)+4>>2]&255](d);Ya(b|0)}else{b=c[g>>2]|0;c[g>>2]=0;if(!b){i=f;return}Bb[c[(c[b>>2]|0)+4>>2]&255](b);i=f;return}}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Di(a,-1);Di(a,-40);e=a+28|0;f=a+24|0;b=c[f>>2]|0;if((c[e>>2]|0)==(b|0)){Di(a,-1);Di(a,-39);a=a+16|0;a=c[a>>2]|0;return a|0}else d=0;do{g=c[b+(d<<2)>>2]|0;Cb[c[(c[g>>2]|0)+8>>2]&127](g,a);d=d+1|0;b=c[f>>2]|0}while(d>>>0<(c[e>>2]|0)-b>>2>>>0);Di(a,-1);Di(a,-39);g=a+16|0;g=c[g>>2]|0;return g|0}function Wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0;n=i;i=i+48|0;j=n+32|0;f=n+12|0;k=n+8|0;m=n+4|0;p=n;e=d+36|0;do if(((((c[e>>2]|0)==0?(c[d+40>>2]|0)==0:0)?(c[d+44>>2]|0)==0:0)?(c[d+48>>2]|0)==0:0)?(c[d+52>>2]|0)==0:0){e=c[d+8>>2]|0;if((e|0)<=12){g=a+28|0;h=a+32|0;break}Ei(f,(1<>2]|0);e=vi(f)|0;c[k>>2]=e;g=a+28|0;f=c[g>>2]|0;h=a+32|0;if(f>>>0<(c[h>>2]|0)>>>0){c[f>>2]=e;c[g>>2]=f+4;c[k>>2]=0;break}o=0;ia(57,a+24|0,k|0);j=o;o=0;if(!(j&1)){e=c[k>>2]|0;c[k>>2]=0;if(!e)break;Bb[c[(c[e>>2]|0)+4>>2]&255](e);break}d=Na()|0;e=c[k>>2]|0;c[k>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}else l=6;while(0);do if((l|0)==6){e=vi(e)|0;c[j>>2]=e;g=a+28|0;f=c[g>>2]|0;h=a+32|0;if(f>>>0<(c[h>>2]|0)>>>0){c[f>>2]=e;c[g>>2]=f+4;c[j>>2]=0;break}o=0;ia(57,a+24|0,j|0);l=o;o=0;if(!(l&1)){e=c[j>>2]|0;c[j>>2]=0;if(!e)break;Bb[c[(c[e>>2]|0)+4>>2]&255](e);break}d=Na()|0;e=c[j>>2]|0;c[j>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}while(0);e=a+20|0;f=(c[e>>2]|0)+1|0;c[e>>2]=f;e=c[d+24>>2]|0;j=(e|0)==0?1:c[d+16>>2]|0;e=xi(f,j,c[d+20>>2]|0,e)|0;c[m>>2]=e;f=c[g>>2]|0;do if(f>>>0<(c[h>>2]|0)>>>0){c[f>>2]=e;c[g>>2]=f+4;c[m>>2]=0}else{o=0;ia(57,a+24|0,m|0);l=o;o=0;if(!(l&1)){e=c[m>>2]|0;c[m>>2]=0;if(!e)break;Bb[c[(c[e>>2]|0)+4>>2]&255](e);break}d=Na()|0;e=c[m>>2]|0;c[m>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}while(0);k=bj(104)|0;c[k>>2]=36820;c[k+4>>2]=j;f=k+8|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];f=k+20|0;e=f+84|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));c[p>>2]=k;d=c[g>>2]|0;if(d>>>0<(c[h>>2]|0)>>>0){c[d>>2]=k;c[g>>2]=d+4;c[p>>2]=0;i=n;return}o=0;ia(57,a+24|0,p|0);a=o;o=0;if(a&1){d=Na()|0;e=c[p>>2]|0;c[p>>2]=0;if(!e){p=d;Ya(p|0)}Bb[c[(c[e>>2]|0)+4>>2]&255](e);p=d;Ya(p|0)}else{d=c[p>>2]|0;c[p>>2]=0;if(!d){i=n;return}Bb[c[(c[d>>2]|0)+4>>2]&255](d);i=n;return}}function Xi(b,d,e,f,g,h,j,k,l,m,n){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=i;i=i+96|0;p=q;o=ic(b,d,p,0)|0;if(o){g=o;i=q;return g|0}a[p+32>>0]=0;s=c[p+8>>2]|0;u=c[p>>2]|0;t=c[p+4>>2]|0;o=$(t,u)|0;r=c[p+16>>2]|0;o=$($(o,(s|0)<9?1:2)|0,r)|0;c[f>>2]=o;o=Fl(o)|0;c[e>>2]=o;c[g>>2]=u;c[h>>2]=t;c[j>>2]=s;c[k>>2]=c[p+12>>2];c[l>>2]=r;c[m>>2]=c[p+20>>2];c[n>>2]=c[p+24>>2];g=jc(o,c[f>>2]|0,b,d,0,0)|0;i=q;return g|0}function Yi(a,b,d,e,f,g,h,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;n=i;i=i+96|0;l=n+4|0;h=n;m=l;o=m+84|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));c[l+16>>2]=g;c[l+8>>2]=f;c[l>>2]=d;c[l+4>>2]=e;c[j>>2]=Fl(b)|0;c[h>>2]=0;d=hc(j,b,h,a,b,l,0)|0;c[k>>2]=c[h>>2];i=n;return d|0}function Zi(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d>>2]=b;b=c[9320]|0;cl(b,a,d)|0;Wk(10,b)|0;Ga()}function _i(a){a=a|0;Ka(51337,51366,1164,51442)}function $i(a){a=a|0;Ka(51463,51486,303,51442)}function aj(){var a=0,b=0;a=i;i=i+16|0;if(!(db(37024,4)|0)){b=$a(c[9255]|0)|0;i=a;return b|0}else Zi(51562,a);return 0}function bj(a){a=a|0;var b=0;b=(a|0)==0?1:a;a=Fl(b)|0;a:do if(!a){while(1){a=kj()|0;if(!a)break;Rb[a&7]();a=Fl(b)|0;if(a)break a}b=Ma(4)|0;c[b>>2]=36844;lb(b|0,592,78)}while(0);return a|0}function cj(a){a=a|0;Gl(a);return}function dj(a){a=a|0;cj(a);return}function ej(a){a=a|0;c[a>>2]=36844;return}function fj(a){a=a|0;return}function gj(a){a=a|0;cj(a);return}function hj(a){a=a|0;return 51611}function ij(a){a=a|0;var b=0;b=i;i=i+16|0;o=0;xa(a|0);a=o;o=0;if(!(a&1)){o=0;ia(85,51626,b|0);o=0}a=Na(0)|0;Va(a|0)|0;o=0;ia(85,51666,b+8|0);o=0;a=Na(0)|0;o=0;xa(3);b=o;o=0;if(b&1){b=Na(0)|0;ec(b)}else ec(a)}function jj(){var a=0,b=0,d=0;o=0;a=ua(2)|0;d=o;o=0;if(d&1){d=Na(0)|0;ec(d)}if(((a|0)!=0?(b=c[a>>2]|0,(b|0)!=0):0)?(d=b+48|0,(c[d>>2]&-256|0)==1126902528?(c[d+4>>2]|0)==1129074247:0):0)ij(c[b+12>>2]|0);d=c[9208]|0;c[9208]=d+0;ij(d)}function kj(){var a=0;a=c[9214]|0;c[9214]=a+0;return a|0}function lj(a){a=a|0;return}function mj(a){a=a|0;c[a>>2]=36868;Vj(a+4|0);return}function nj(a){a=a|0;mj(a);cj(a);return}function oj(a){a=a|0;return c[a+4>>2]|0}function pj(a){a=a|0;return}function qj(a){a=a|0;c[a>>2]=36888;return}function rj(a){a=a|0;return}function sj(a){a=a|0;cj(a);return}function tj(a){a=a|0;return 51716}function uj(a){a=a|0;return}function vj(a){a=a|0;return}function wj(a){a=a|0;return}function xj(a){a=a|0;cj(a);return}function yj(a){a=a|0;cj(a);return}function zj(a){a=a|0;cj(a);return}function Aj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+64|0;g=h;if((a|0)!=(b|0))if((b|0)!=0?(f=Gj(b,656,672,0)|0,(f|0)!=0):0){b=g;e=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;Ub[c[(c[f>>2]|0)+28>>2]&63](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;i=h;return b|0}function Bj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function Cj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))Bj(0,b,d,e);return}function Dj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((a|0)==(c[b+8>>2]|0))Bj(0,b,d,e);else{a=c[a+8>>2]|0;Ub[c[(c[a>>2]|0)+28>>2]&63](a,b,d,e)}return}function Ej(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ub[c[(c[a>>2]|0)+28>>2]&63](a,b,d+f|0,(g&2|0)!=0?e:2);return}function Fj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if((b|0)!=(c[d+8>>2]|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Ej(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Ej(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else Bj(0,d,e,f);while(0);return}function Gj(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+64|0;q=r;p=c[d>>2]|0;o=d+(c[p+-8>>2]|0)|0;p=c[p+-4>>2]|0;c[q>>2]=f;c[q+4>>2]=d;c[q+8>>2]=e;c[q+12>>2]=g;g=q+16|0;d=q+20|0;e=q+24|0;h=q+28|0;j=q+32|0;k=q+40|0;l=(p|0)==(f|0);m=g;n=m+36|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do if(l){c[q+48>>2]=1;Ib[c[(c[f>>2]|0)+20>>2]&15](f,q,o,o,1,0);g=(c[e>>2]|0)==1?o:0}else{zb[c[(c[p>>2]|0)+24>>2]&15](p,q,o,1,0);switch(c[q+36>>2]|0){case 0:{g=(c[k>>2]|0)==1&(c[h>>2]|0)==1&(c[j>>2]|0)==1?c[d>>2]|0:0;break a}case 1:break;default:{g=0;break a}}if((c[e>>2]|0)!=1?!((c[k>>2]|0)==0&(c[h>>2]|0)==1&(c[j>>2]|0)==1):0){g=0;break}g=c[g>>2]|0}while(0);i=r;return g|0}function Hj(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;f=d+16|0;b=c[f>>2]|0;if(!b){c[f>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((b|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}b=d+24|0;f=c[b>>2]|0;if((f|0)==2){c[b>>2]=g;f=g}if((f|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function Ij(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){q=c[b+12>>2]|0;j=b+16+(q<<3)|0;Kj(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;i=c[b+8>>2]|0;if((i&2|0)==0?(k=d+36|0,(c[k>>2]|0)!=1):0){if(!(i&1)){i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[k>>2]|0)==1)break a;Kj(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+24|0;b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[k>>2]|0)==1?(c[i>>2]|0)==1:0)break a;Kj(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}i=d+54|0;while(1){if(a[i>>0]|0)break a;Kj(h,d,e,f,g);h=h+8|0;if(h>>>0>=j>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(p=d+20|0,(c[p>>2]|0)!=(e|0)):0){c[d+32>>2]=f;m=d+44|0;if((c[m>>2]|0)==4)break;i=c[b+12>>2]|0;j=b+16+(i<<3)|0;k=d+52|0;f=d+53|0;n=d+54|0;l=b+8|0;o=d+24|0;b:do if((i|0)>0){i=0;h=0;b=b+16|0;while(1){a[k>>0]=0;a[f>>0]=0;Jj(b,d,e,e,1,g);if(a[n>>0]|0){q=20;break b}do if(a[f>>0]|0){if(!(a[k>>0]|0))if(!(c[l>>2]&1)){h=1;q=20;break b}else{h=1;break}if((c[o>>2]|0)==1)break b;if(!(c[l>>2]&2))break b;else{i=1;h=1}}while(0);b=b+8|0;if(b>>>0>=j>>>0){q=20;break}}}else{i=0;h=0;q=20}while(0);do if((q|0)==20){if((!i?(c[p>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h)break}else q=24;if((q|0)==24?h:0)break;c[m>>2]=4;break a}while(0);c[m>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Jj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ib[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e+h|0,(i&2|0)!=0?f:2,g);return}function Kj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;zb[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,(h&2|0)!=0?e:2,f);return}function Lj(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(h=d+28|0,(c[h>>2]|0)!=1):0)c[h>>2]=f}else{if((b|0)!=(c[d>>2]|0)){j=c[b+8>>2]|0;zb[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(i=d+20|0,(c[i>>2]|0)!=(e|0)):0){c[d+32>>2]=f;f=d+44|0;if((c[f>>2]|0)==4)break;h=d+52|0;a[h>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ib[c[(c[b>>2]|0)+20>>2]&15](b,d,e,e,1,g);if(a[k>>0]|0){if(!(a[h>>0]|0)){h=1;j=13}}else{h=0;j=13}do if((j|0)==13){c[i>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(h)break}else j=16;if((j|0)==16?h:0)break;c[f>>2]=4;break a}while(0);c[f>>2]=3;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Mj(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;do if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)==(e|0)?(i=d+28|0,(c[i>>2]|0)!=1):0)c[i>>2]=f}else if((b|0)==(c[d>>2]|0)){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}while(0);return}function Nj(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((b|0)==(c[d+8>>2]|0))Hj(0,d,e,f,g);else{m=d+52|0;n=a[m>>0]|0;o=d+53|0;p=a[o>>0]|0;l=c[b+12>>2]|0;i=b+16+(l<<3)|0;a[m>>0]=0;a[o>>0]=0;Jj(b+16|0,d,e,f,g,h);a:do if((l|0)>1){j=d+24|0;k=b+8|0;l=d+54|0;b=b+24|0;do{if(a[l>>0]|0)break a;if(!(a[m>>0]|0)){if((a[o>>0]|0)!=0?(c[k>>2]&1|0)==0:0)break a}else{if((c[j>>2]|0)==1)break a;if(!(c[k>>2]&2))break a}a[m>>0]=0;a[o>>0]=0;Jj(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[m>>0]=n;a[o>>0]=p}return}function Oj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))Hj(0,b,d,e,f);else{a=c[a+8>>2]|0;Ib[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e,f,g)}return}function Pj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if((a|0)==(c[b+8>>2]|0))Hj(0,b,d,e,f);return}function Qj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;e=f;c[e>>2]=c[d>>2];a=Gb[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];i=f;return a&1|0}function Rj(a){a=a|0;if(!a)a=0;else a=(Gj(a,656,704,0)|0)!=0;return a&1|0}function Sj(){var a=0;a=Ma(4)|0;ej(a);lb(a|0,592,78)}function Tj(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;f=i;i=i+48|0;h=f+32|0;d=f+24|0;j=f+16|0;g=f;f=f+36|0;a=aj()|0;if((a|0)!=0?(e=c[a>>2]|0,(e|0)!=0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=c[9257];Zi(51919,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Gb[c[(c[608>>2]|0)+16>>2]&63](608,e,f)|0){j=c[f>>2]|0;f=c[9257]|0;j=Eb[c[(c[j>>2]|0)+8>>2]&127](j)|0;c[g>>2]=f;c[g+4>>2]=a;c[g+8>>2]=j;Zi(51833,g)}else{c[j>>2]=c[9257];c[j+4>>2]=a;Zi(51878,j)}}Zi(51957,h)}function Uj(){var a=0;a=i;i=i+16|0;if(!(Fa(37020,184)|0)){i=a;return}else Zi(51730,a)}function Vj(a){a=a|0;var b=0,d=0;d=(c[a>>2]|0)+-4|0;b=c[d>>2]|0;c[d>>2]=b+-1;if((b+-1|0)<0)cj((c[a>>2]|0)+-12|0);return}function Wj(a){a=a|0;var b=0;b=i;i=i+16|0;Gl(a);if(!(jb(c[9255]|0,0)|0)){i=b;return}else Zi(51780,b)}function Xj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=hl(a,b,c)|0;return a|0}function Yj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=il(a,b,c)|0;return a|0}function Zj(){return 37296}function _j(){return 37300}function $j(){return 37304}function ak(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function bk(a){a=a|0;if((a+-48|0)>>>0<10)a=1;else a=((a|32)+-97|0)>>>0<6;return a&1|0}function ck(){var a=0;if(!(c[9258]|0))a=37308;else a=c[(bb()|0)+60>>2]|0;return a|0}function dk(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[51978+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=52066;e=5;break}}if((e|0)==2)if(!c)b=52066;else{b=52066;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function ek(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,j=0.0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;L=i;i=i+512|0;H=L;switch(e|0){case 0:{K=24;J=-149;A=4;break}case 1:{K=53;J=-1074;A=4;break}case 2:{K=53;J=-1074;A=4;break}default:g=0.0}a:do if((A|0)==4){E=b+4|0;C=b+100|0;do{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0}while((ak(e)|0)!=0);b:do switch(e|0){case 43:case 45:{h=1-(((e|0)==45&1)<<1)|0;e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;I=h;break b}else{e=hk(b)|0;I=h;break b}}default:I=1}while(0);h=e;e=0;do{if((h|32|0)!=(a[53870+e>>0]|0))break;do if(e>>>0<7){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=hk(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{A=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{A=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[56747+e>>0]|0))break d;do if(e>>>0<2){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0;break}else{h=hk(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==40)e=1;else{if(!(c[C>>2]|0)){g=s;break a}c[E>>2]=(c[E>>2]|0)+-1;g=s;break a}while(1){h=c[E>>2]|0;if(h>>>0<(c[C>>2]|0)>>>0){c[E>>2]=h+1;h=d[h>>0]|0}else h=hk(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[C>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!k){c[(ck()|0)>>2]=22;gk(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{do if((h|0)==48){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|32|0)!=120){if(!(c[C>>2]|0)){e=48;break}c[E>>2]=(c[E>>2]|0)+-1;e=48;break}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=0}else{e=hk(b)|0;k=0}e:while(1){switch(e|0){case 46:{A=74;break e}case 48:break;default:{y=0;l=0;x=0;h=0;n=k;o=0;w=0;m=1.0;k=0;g=0.0;break e}}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=hk(b)|0;k=1;continue}}if((A|0)==74){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==48){k=0;h=0;do{e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;k=jw(k|0,h|0,-1,-1)|0;h=D}while((e|0)==48);y=0;l=0;x=k;n=1;o=1;w=0;m=1.0;k=0;g=0.0}else{y=0;l=0;x=0;h=0;n=k;o=1;w=0;m=1.0;k=0;g=0.0}}while(1){u=e+-48|0;p=e|32;if(u>>>0>=10){v=(e|0)==46;if(!(v|(p+-97|0)>>>0<6)){p=x;u=y;break}if(v)if(!o){v=l;h=y;u=y;o=1;p=w;j=m}else{p=x;u=y;e=46;break}else A=86}else A=86;if((A|0)==86){A=0;e=(e|0)>57?p+-87|0:u;do if(!((y|0)<0|(y|0)==0&l>>>0<8)){if((y|0)<0|(y|0)==0&l>>>0<14){r=m*.0625;p=w;j=r;g=g+r*+(e|0);break}if((w|0)!=0|(e|0)==0){p=w;j=m}else{p=1;j=m;g=g+m*.5}}else{p=w;j=m;k=e+(k<<4)|0}while(0);l=jw(l|0,y|0,1,0)|0;v=x;u=D;n=1}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;y=u;x=v;e=d[e>>0]|0;w=p;m=j;continue}else{y=u;x=v;e=hk(b)|0;w=p;m=j;continue}}if(!n){e=(c[C>>2]|0)==0;if(!e)c[E>>2]=(c[E>>2]|0)+-1;if(f){if(!e?(z=c[E>>2]|0,c[E>>2]=z+-1,(o|0)!=0):0)c[E>>2]=z+-2}else gk(b,0);g=+(I|0)*0.0;break a}n=(o|0)==0;o=n?l:p;n=n?u:h;if((u|0)<0|(u|0)==0&l>>>0<8){h=u;do{k=k<<4;l=jw(l|0,h|0,1,0)|0;h=D}while((h|0)<0|(h|0)==0&l>>>0<8)}if((e|32|0)==112){h=tl(b,f)|0;e=D;if((h|0)==0&(e|0)==-2147483648){if(!f){gk(b,0);g=0.0;break a}if(!(c[C>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}}}else if(!(c[C>>2]|0)){h=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;h=0;e=0}H=mw(o|0,n|0,2)|0;H=jw(H|0,D|0,-32,-1)|0;e=jw(H|0,D|0,h|0,e|0)|0;h=D;if(!k){g=+(I|0)*0.0;break a}if((h|0)>0|(h|0)==0&e>>>0>(0-J|0)>>>0){c[(ck()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break a}H=J+-106|0;G=((H|0)<0)<<31>>31;if((h|0)<(G|0)|(h|0)==(G|0)&e>>>0>>0){c[(ck()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break a}if((k|0)>-1){do{G=!(g>=.5);H=G&1|k<<1;k=H^1;g=g+(G?g:g+-1.0);e=jw(e|0,h|0,-1,-1)|0;h=D}while((H|0)>-1);l=e;m=g}else{l=e;m=g}e=hw(32,0,J|0,((J|0)<0)<<31>>31|0)|0;e=jw(l|0,h|0,e|0,D|0)|0;J=D;if(0>(J|0)|0==(J|0)&K>>>0>e>>>0)if((e|0)<0){e=0;A=127}else A=125;else{e=K;A=125}if((A|0)==125)if((e|0)<53)A=127;else{h=e;j=+(I|0);g=0.0}if((A|0)==127){g=+(I|0);h=e;j=g;g=+sk(+xk(1.0,84-e|0),g)}K=(k&1|0)==0&(m!=0.0&(h|0)<32);g=j*(K?0.0:m)+(g+j*+(((K&1)+k|0)>>>0))-g;if(!(g!=0.0))c[(ck()|0)>>2]=34;g=+yk(g,l);break a}else e=h;while(0);F=J+K|0;G=0-F|0;k=0;f:while(1){switch(e|0){case 46:{A=138;break f}case 48:break;default:{h=0;p=0;o=0;break f}}e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0;k=1;continue}else{e=hk(b)|0;k=1;continue}}if((A|0)==138){e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==48){h=0;e=0;while(1){h=jw(h|0,e|0,-1,-1)|0;k=D;e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;if((e|0)==48)e=k;else{p=k;k=1;o=1;break}}}else{h=0;p=0;o=1}}c[H>>2]=0;n=e+-48|0;l=(e|0)==46;g:do if(l|n>>>0<10){B=H+496|0;y=0;v=0;w=l;A=p;u=k;z=o;k=0;l=0;o=0;h:while(1){do if(w)if(!z){h=y;p=v;z=1}else{p=A;e=y;n=v;break h}else{w=jw(y|0,v|0,1,0)|0;v=D;x=(e|0)!=48;if((l|0)>=125){if(!x){p=A;y=w;break}c[B>>2]=c[B>>2]|1;p=A;y=w;break}p=H+(l<<2)|0;if(k)n=e+-48+((c[p>>2]|0)*10|0)|0;c[p>>2]=n;k=k+1|0;n=(k|0)==9;p=A;y=w;u=1;k=n?0:k;l=(n&1)+l|0;o=x?w:o}while(0);e=c[E>>2]|0;if(e>>>0<(c[C>>2]|0)>>>0){c[E>>2]=e+1;e=d[e>>0]|0}else e=hk(b)|0;n=e+-48|0;w=(e|0)==46;if(!(w|n>>>0<10)){n=z;A=161;break g}else A=p}u=(u|0)!=0;A=169}else{y=0;v=0;u=k;n=o;k=0;l=0;o=0;A=161}while(0);do if((A|0)==161){B=(n|0)==0;h=B?y:h;p=B?v:p;u=(u|0)!=0;if(!((e|32|0)==101&u))if((e|0)>-1){e=y;n=v;A=169;break}else{e=y;n=v;A=171;break}n=tl(b,f)|0;e=D;if((n|0)==0&(e|0)==-2147483648){if(!f){gk(b,0);g=0.0;break}if(!(c[C>>2]|0)){n=0;e=0}else{c[E>>2]=(c[E>>2]|0)+-1;n=0;e=0}}h=jw(n|0,e|0,h|0,p|0)|0;u=y;p=D;n=v;A=173}while(0);if((A|0)==169)if(c[C>>2]|0){c[E>>2]=(c[E>>2]|0)+-1;if(u){u=e;A=173}else A=172}else A=171;if((A|0)==171)if(u){u=e;A=173}else A=172;do if((A|0)==172){c[(ck()|0)>>2]=22;gk(b,0);g=0.0}else if((A|0)==173){e=c[H>>2]|0;if(!e){g=+(I|0)*0.0;break}if(((n|0)<0|(n|0)==0&u>>>0<10)&((h|0)==(u|0)&(p|0)==(n|0))?K>>>0>30|(e>>>K|0)==0:0){g=+(I|0)*+(e>>>0);break}b=(J|0)/-2|0;E=((b|0)<0)<<31>>31;if((p|0)>(E|0)|(p|0)==(E|0)&h>>>0>b>>>0){c[(ck()|0)>>2]=34;g=+(I|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}b=J+-106|0;E=((b|0)<0)<<31>>31;if((p|0)<(E|0)|(p|0)==(E|0)&h>>>0>>0){c[(ck()|0)>>2]=34;g=+(I|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(k){if((k|0)<9){n=H+(l<<2)|0;e=c[n>>2]|0;do{e=e*10|0;k=k+1|0}while((k|0)!=9);c[n>>2]=e}l=l+1|0}if((o|0)<9?(o|0)<=(h|0)&(h|0)<18:0){if((h|0)==9){g=+(I|0)*+((c[H>>2]|0)>>>0);break}if((h|0)<9){g=+(I|0)*+((c[H>>2]|0)>>>0)/+(c[37312+(8-h<<2)>>2]|0);break}b=K+27+($(h,-3)|0)|0;e=c[H>>2]|0;if((b|0)>30|(e>>>b|0)==0){g=+(I|0)*+(e>>>0)*+(c[37312+(h+-10<<2)>>2]|0);break}}e=(h|0)%9|0;if(!e){k=0;e=0}else{u=(h|0)>-1?e:e+9|0;n=c[37312+(8-u<<2)>>2]|0;if(l){o=1e9/(n|0)|0;k=0;e=0;p=0;do{C=H+(p<<2)|0;E=c[C>>2]|0;b=((E>>>0)/(n>>>0)|0)+e|0;c[C>>2]=b;e=$((E>>>0)%(n>>>0)|0,o)|0;b=(p|0)==(k|0)&(b|0)==0;p=p+1|0;h=b?h+-9|0:h;k=b?p&127:k}while((p|0)!=(l|0));if(e){c[H+(l<<2)>>2]=e;l=l+1|0}}else{k=0;l=0}e=0;h=9-u+h|0}i:while(1){v=(h|0)<18;w=(h|0)==18;x=H+(k<<2)|0;do{if(!v){if(!w)break i;if((c[x>>2]|0)>>>0>=9007199){h=18;break i}}n=0;o=l+127|0;while(1){u=o&127;p=H+(u<<2)|0;o=mw(c[p>>2]|0,0,29)|0;o=jw(o|0,D|0,n|0,0)|0;n=D;if(n>>>0>0|(n|0)==0&o>>>0>1e9){b=uw(o|0,n|0,1e9,0)|0;o=vw(o|0,n|0,1e9,0)|0;n=b}else n=0;c[p>>2]=o;b=(u|0)==(k|0);l=(u|0)!=(l+127&127|0)|b?l:(o|0)==0?u:l;if(b)break;else o=u+-1|0}e=e+-29|0}while((n|0)==0);k=k+127&127;if((k|0)==(l|0)){b=l+127&127;l=H+((l+126&127)<<2)|0;c[l>>2]=c[l>>2]|c[H+(b<<2)>>2];l=b}c[H+(k<<2)>>2]=n;h=h+9|0}j:while(1){y=l+1&127;x=H+((l+127&127)<<2)|0;while(1){v=(h|0)==18;w=(h|0)>27?9:1;u=v^1;while(1){o=k&127;p=(o|0)==(l|0);do if(!p){n=c[H+(o<<2)>>2]|0;if(n>>>0<9007199){A=219;break}if(n>>>0>9007199)break;n=k+1&127;if((n|0)==(l|0)){A=219;break}n=c[H+(n<<2)>>2]|0;if(n>>>0<254740991){A=219;break}if(!(n>>>0>254740991|u)){h=o;break j}}else A=219;while(0);if((A|0)==219?(A=0,v):0){A=220;break j}e=e+w|0;if((k|0)==(l|0))k=l;else break}u=(1<>>w;o=k;n=0;p=k;while(1){E=H+(p<<2)|0;b=c[E>>2]|0;k=(b>>>w)+n|0;c[E>>2]=k;n=$(b&u,v)|0;k=(p|0)==(o|0)&(k|0)==0;p=p+1&127;h=k?h+-9|0:h;k=k?p:o;if((p|0)==(l|0))break;else o=k}if(!n)continue;if((y|0)!=(k|0))break;c[x>>2]=c[x>>2]|1}c[H+(l<<2)>>2]=n;l=y}if((A|0)==220)if(p){c[H+(y+-1<<2)>>2]=0;h=l;l=y}else h=o;g=+((c[H+(h<<2)>>2]|0)>>>0);h=k+1&127;if((h|0)==(l|0)){l=k+2&127;c[H+(l+-1<<2)>>2]=0}r=+(I|0);j=r*(g*1.0e9+ +((c[H+(h<<2)>>2]|0)>>>0));v=e+53|0;p=v-J|0;u=(p|0)<(K|0);h=u&1;o=u?((p|0)<0?0:p):K;if((o|0)<53){M=+sk(+xk(1.0,105-o|0),j);m=+uk(j,+xk(1.0,53-o|0));q=M;g=m;m=M+(j-m)}else{q=0.0;g=0.0;m=j}n=k+2&127;do if((n|0)==(l|0))j=g;else{n=c[H+(n<<2)>>2]|0;do if(n>>>0>=5e8){if(n>>>0>5e8){g=r*.75+g;break}if((k+3&127|0)==(l|0)){g=r*.5+g;break}else{g=r*.75+g;break}}else{if((n|0)==0?(k+3&127|0)==(l|0):0)break;g=r*.25+g}while(0);if((53-o|0)<=1){j=g;break}if(+uk(g,1.0)!=0.0){j=g;break}j=g+1.0}while(0);g=m+j-q;do if((v&2147483647|0)>(-2-F|0)){if(+O(+g)>=9007199254740992.0){h=u&(o|0)==(p|0)?0:h;e=e+1|0;g=g*.5}if((e+50|0)<=(G|0)?!(j!=0.0&(h|0)!=0):0)break;c[(ck()|0)>>2]=34}while(0);g=+yk(g,e)}while(0);break a}default:{if(c[C>>2]|0)c[E>>2]=(c[E>>2]|0)+-1;c[(ck()|0)>>2]=22;gk(b,0);g=0.0;break a}}}}while(0);if((A|0)==23){h=(c[C>>2]|0)==0;if(!h)c[E>>2]=(c[E>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[E>>2]=(c[E>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(I|0)*t}while(0);i=L;return +g}function fk(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;a:do if(e>>>0>36){c[(ck()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0}while((ak(i)|0)!=0);b:do switch(i|0){case 43:case 45:{j=((i|0)==45)<<31>>31;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0;p=j;break b}else{i=hk(b)|0;p=j;break b}}default:p=0}while(0);j=(e|0)==0;do if((e&-17|0)==0&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=hk(b)|0;if((d[53879+(i+1)>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){gk(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if((d[53879+(i+1)>>0]|0)>>>0>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;gk(b,0);c[(ck()|0)>>2]=22;h=0;g=0;break a}}while(0);if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;while(1){j=(i*10|0)+e|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;i=d[e>>0]|0}else i=hk(b)|0;e=i+-48|0;if(!(e>>>0<10&j>>>0<429496729)){e=j;break}else i=j}j=0}else{e=0;j=0}f=i+-48|0;if(f>>>0<10){while(1){k=tw(e|0,j|0,10,0)|0;l=D;m=((f|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&k>>>0>~f>>>0){k=e;break}e=jw(k|0,l|0,f|0,m|0)|0;j=D;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;f=i+-48|0;if(!(f>>>0<10&(j>>>0<429496729|(j|0)==429496729&e>>>0<2576980378))){k=e;break}}if(f>>>0>9){i=k;e=p}else{e=10;n=72}}else{i=e;e=p}}else n=46;c:do if((n|0)==46){if(!(e+-1&e)){n=a[54136+((e*23|0)>>>5&7)>>0]|0;j=a[53879+(i+1)>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f|i<>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;f=j&255;if(!(k>>>0<134217728&f>>>0>>0))break;else i=k}f=0}else{f=0;k=0}l=kw(-1,-1,n|0)|0;m=D;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break}else i=f;while(1){k=mw(k|0,i|0,n|0)|0;f=D;k=j&255|k;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;if((j&255)>>>0>=e>>>0|(f>>>0>m>>>0|(f|0)==(m|0)&k>>>0>l>>>0)){j=f;n=72;break c}else i=f}}j=a[53879+(i+1)>>0]|0;f=j&255;if(f>>>0>>0){i=0;while(1){k=f+($(i,e)|0)|0;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;f=j&255;if(!(k>>>0<119304647&f>>>0>>0))break;else i=k}f=0}else{k=0;f=0}if((j&255)>>>0>>0){n=uw(-1,-1,e|0,0)|0;o=D;m=f;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&k>>>0>n>>>0){j=m;n=72;break c}f=tw(k|0,m|0,e|0,0)|0;l=D;j=j&255;if(l>>>0>4294967295|(l|0)==-1&f>>>0>~j>>>0){j=m;n=72;break c}k=jw(j|0,0,f|0,l|0)|0;f=D;i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0;j=a[53879+(i+1)>>0]|0;if((j&255)>>>0>=e>>>0){j=f;n=72;break}else m=f}}else{j=f;n=72}}while(0);if((n|0)==72)if((d[53879+(i+1)>>0]|0)>>>0>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=hk(b)|0}while((d[53879+(i+1)>>0]|0)>>>0>>0);c[(ck()|0)>>2]=34;j=h;i=g;e=(g&1|0)==0&0==0?p:0}else{i=k;e=p}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(j>>>0>>0|(j|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(e|0)!=0)){c[(ck()|0)>>2]=34;g=jw(g|0,h|0,-1,-1)|0;h=D;break}if(j>>>0>h>>>0|(j|0)==(h|0)&i>>>0>g>>>0){c[(ck()|0)>>2]=34;break}}g=((e|0)<0)<<31>>31;g=hw(i^e|0,j^g|0,e|0,g|0)|0;h=D}while(0);D=h;return g|0}function gk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+4>>2]|0;e=c[a+8>>2]|0;f=e-d|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0))c[a+100>>2]=d+b;else c[a+100>>2]=e;return}function hk(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;i=c[f>>2]|0;if((i|0)!=0?(c[b+108>>2]|0)>=(i|0):0)j=4;else{e=Uk(b)|0;if((e|0)>=0){h=c[f>>2]|0;f=b+8|0;if(h){g=c[f>>2]|0;i=c[b+4>>2]|0;f=g;h=h-(c[b+108>>2]|0)+-1|0;if((f-i|0)>(h|0))c[b+100>>2]=i+h;else j=9}else{g=c[f>>2]|0;f=g;j=9}if((j|0)==9)c[b+100>>2]=f;f=c[b+4>>2]|0;if(g){b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((d[f>>0]|0|0)!=(e|0))a[f>>0]=e}else j=4}if((j|0)==4){c[b+100>>2]=0;e=-1}return e|0}function ik(a){a=a|0;if(a>>>0>4294963200){c[(ck()|0)>>2]=0-a;a=-1}return a|0}function jk(a){a=a|0;return 0}function kk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return d|0}function lk(a,b){a=a|0;b=b|0;return -1|0}function mk(a){a=a|0;Gl(a);return}function nk(a,b){a=a|0;b=b|0;return (a+-48|0)>>>0<10|0}function ok(a,b){a=a|0;b=b|0;return bk(a)|0}function pk(b,c,d){b=b|0;c=c|0;d=d|0;if(((a[c>>0]|0)!=0?(ll(c,58885)|0)!=0:0)?(ll(c,54145)|0)!=0:0)d=0;else if(!d)d=Hl(1,4)|0;return d|0}function qk(a){a=a|0;var b=0,d=0;b=(bb()|0)+176|0;d=c[b>>2]|0;if(a)c[b>>2]=a;return d|0}function rk(a,b){a=+a;b=+b;var d=0,e=0;h[k>>3]=a;e=c[k>>2]|0;d=c[k+4>>2]|0;h[k>>3]=b;d=c[k+4>>2]&-2147483648|d&2147483647;c[k>>2]=e;c[k+4>>2]=d;return +(+h[k>>3])}function sk(a,b){a=+a;b=+b;return +(+rk(a,b))}function tk(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0;h[k>>3]=a;d=c[k>>2]|0;m=c[k+4>>2]|0;h[k>>3]=b;n=c[k>>2]|0;o=c[k+4>>2]|0;e=kw(d|0,m|0,52)|0;e=e&2047;j=kw(n|0,o|0,52)|0;j=j&2047;p=m&-2147483648;i=mw(n|0,o|0,1)|0;l=D;a:do if(!((i|0)==0&(l|0)==0)?(g=o&2147483647,!(g>>>0>2146435072|(g|0)==2146435072&n>>>0>0|(e|0)==2047)):0){f=mw(d|0,m|0,1)|0;g=D;if(!(g>>>0>l>>>0|(g|0)==(l|0)&f>>>0>i>>>0))return +((f|0)==(i|0)&(g|0)==(l|0)?a*0.0:a);if(!e){e=mw(d|0,m|0,12)|0;f=D;if((f|0)>-1|(f|0)==-1&e>>>0>4294967295){g=e;e=0;do{e=e+-1|0;g=mw(g|0,f|0,1)|0;f=D}while((f|0)>-1|(f|0)==-1&g>>>0>4294967295)}else e=0;d=mw(d|0,m|0,1-e|0)|0;f=D}else f=m&1048575|1048576;if(!j){g=mw(n|0,o|0,12)|0;i=D;if((i|0)>-1|(i|0)==-1&g>>>0>4294967295){j=0;do{j=j+-1|0;g=mw(g|0,i|0,1)|0;i=D}while((i|0)>-1|(i|0)==-1&g>>>0>4294967295)}else j=0;n=mw(n|0,o|0,1-j|0)|0;m=D}else m=o&1048575|1048576;l=hw(d|0,f|0,n|0,m|0)|0;i=D;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;b:do if((e|0)>(j|0)){while(1){if(g)if((d|0)==(n|0)&(f|0)==(m|0))break;else{d=l;f=i}d=mw(d|0,f|0,1)|0;f=D;e=e+-1|0;l=hw(d|0,f|0,n|0,m|0)|0;i=D;g=(i|0)>-1|(i|0)==-1&l>>>0>4294967295;if((e|0)<=(j|0))break b}b=a*0.0;break a}while(0);if(g)if((d|0)==(n|0)&(f|0)==(m|0)){b=a*0.0;break}else{f=i;d=l}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=mw(d|0,f|0,1)|0;f=D;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=jw(d|0,f|0,0,-1048576)|0;d=D;e=mw(e|0,0,52)|0;d=d|D;e=o|e}else{e=kw(d|0,f|0,1-e|0)|0;d=D}c[k>>2]=e;c[k+4>>2]=d|p;b=+h[k>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function uk(a,b){a=+a;b=+b;return +(+tk(a,b))}function vk(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=kw(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+vk(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=f+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function wk(a,b){a=+a;b=b|0;return +(+vk(a,b))}function xk(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=mw(d+1023|0,0,52)|0;b=D;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function yk(a,b){a=+a;b=b|0;return +(+xk(a,b))}function zk(a,b,c){a=a|0;b=b|0;c=c|0;return Ak(0,a,b,(c|0)!=0?c:37344)|0}function Ak(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+16|0;g=l;j=(f|0)==0?37348:f;f=c[j>>2]|0;a:do if(!d)if(!f)f=0;else k=15;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;g=f&255;if(f<<24>>24>-1){c[h>>2]=g;f=f<<24>>24!=0&1;break}f=g+-194|0;if(f>>>0>50){k=15;break}f=c[37076+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;k=9}}else{g=e;k=9}b:do if((k|0)==9){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){k=15;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){k=15;break a}}c[j>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[j>>2]=f;f=-2}}while(0);if((k|0)==15){c[j>>2]=0;c[(ck()|0)>>2]=84;f=-1}i=l;return f|0}function Bk(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0;return a&1|0}function Ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;i=i+1040|0;l=o+8|0;n=o;k=c[b>>2]|0;c[n>>2]=k;m=(a|0)!=0;e=m?e:256;a=m?a:l;g=k;a:do if((e|0)!=0&(k|0)!=0){j=e;k=g;e=0;while(1){g=d>>>2;h=g>>>0>=j>>>0;if(!(d>>>0>131|h)){g=k;break a}g=h?j:g;d=d-g|0;g=Dk(a,n,g,f)|0;if((g|0)==-1){e=d;break}p=(a|0)==(l|0);k=p?0:g;h=j-k|0;a=p?a:a+(g<<2)|0;e=g+e|0;g=c[n>>2]|0;if((j|0)!=(k|0)&(g|0)!=0){j=h;k=g}else{j=h;break a}}d=e;j=0;g=c[n>>2]|0;e=-1}else{j=e;e=0}while(0);b:do if((g|0)!=0?(j|0)!=0&(d|0)!=0:0){h=g;g=a;while(1){a=Ak(g,h,d,f)|0;if((a+2|0)>>>0<3)break;h=(c[n>>2]|0)+a|0;c[n>>2]=h;j=j+-1|0;e=e+1|0;if(!((j|0)!=0&(d|0)!=(a|0)))break b;else{d=d-a|0;g=g+4|0}}switch(a|0){case -1:{e=-1;break b}case 0:{c[n>>2]=0;break b}default:{c[f>>2]=0;break b}}}while(0);if(m)c[b>>2]=c[n>>2];i=o;return e|0}function Dk(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=c[e>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)!=0):0)if(!b){g=f;j=h;m=16}else{c[g>>2]=0;l=b;g=f;k=i;m=37}else if(!b){g=f;m=7}else{i=b;g=f;m=6}a:while(1)if((m|0)==6){if(!g){m=26;break}else b=i;while(1){i=a[h>>0]|0;do if(((i&255)+-1|0)>>>0<127?g>>>0>4&(h&3|0)==0:0){j=h;while(1){h=c[j>>2]|0;if((h+-16843009|h)&-2139062144){i=h;h=j;m=32;break}c[b>>2]=h&255;c[b+4>>2]=d[j+1>>0];c[b+8>>2]=d[j+2>>0];h=j+4|0;i=b+16|0;c[b+12>>2]=d[j+3>>0];g=g+-4|0;if(g>>>0>4){b=i;j=h}else{m=31;break}}if((m|0)==31){b=i;i=a[h>>0]|0;break}else if((m|0)==32){i=i&255;break}}while(0);i=i&255;if((i+-1|0)>>>0>=127)break;h=h+1|0;c[b>>2]=i;g=g+-1|0;if(!g){m=26;break a}else b=b+4|0}i=i+-194|0;if(i>>>0>50){m=48;break}l=b;k=c[37076+(i<<2)>>2]|0;h=h+1|0;m=37;continue}else if((m|0)==7){i=a[h>>0]|0;if(((i&255)+-1|0)>>>0<127?(h&3|0)==0:0){i=c[h>>2]|0;if(!((i+-16843009|i)&-2139062144))do{h=h+4|0;g=g+-4|0;i=c[h>>2]|0}while(((i+-16843009|i)&-2139062144|0)==0);i=i&255}i=i&255;if((i+-1|0)>>>0<127){g=g+-1|0;h=h+1|0;m=7;continue}i=i+-194|0;if(i>>>0>50){m=48;break}i=c[37076+(i<<2)>>2]|0;j=h+1|0;m=16;continue}else if((m|0)==16){m=(d[j>>0]|0)>>>3;if((m+-16|m+(i>>26))>>>0>7){m=17;break}h=j+1|0;if(i&33554432){if((a[h>>0]&-64)<<24>>24!=-128){m=20;break}h=j+2|0;if(i&524288){if((a[h>>0]&-64)<<24>>24!=-128){m=23;break}h=j+3|0}}g=g+-1|0;m=7;continue}else if((m|0)==37){i=d[h>>0]|0;m=i>>>3;if((m+-16|m+(k>>26))>>>0>7){m=38;break}j=h+1|0;b=i+-128|k<<6;if((b|0)<0){i=d[j>>0]|0;if((i&192|0)!=128){m=41;break}j=h+2|0;b=i+-128|b<<6;if((b|0)<0){i=d[j>>0]|0;if((i&192|0)!=128){m=44;break}b=i+-128|b<<6;h=h+3|0}else h=j}else h=j;c[l>>2]=b;i=l+4|0;g=g+-1|0;m=6;continue}if((m|0)==17){h=j+-1|0;m=47}else if((m|0)==20){h=j+-1|0;m=47}else if((m|0)==23){h=j+-1|0;m=47}else if((m|0)==26)c[e>>2]=h;else if((m|0)==38){b=l;i=k;h=h+-1|0;m=47}else if((m|0)==41){g=l;f=h+-1|0;m=52}else if((m|0)==44){g=l;f=h+-1|0;m=52}if((m|0)==47)if(!i)m=48;else{g=b;f=h;m=52}if((m|0)==48)if(!(a[h>>0]|0)){if(b){c[b>>2]=0;c[e>>2]=0}f=f-g|0}else{g=b;f=h;m=52}if((m|0)==52){c[(ck()|0)>>2]=84;if(!g)f=-1;else{c[e>>2]=f;f=-1}}return f|0}function Ek(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;g=k;a:do if(!e)g=0;else{do if(f){j=(b|0)==0?g:b;g=a[e>>0]|0;b=g&255;if(g<<24>>24>-1){c[j>>2]=b;g=g<<24>>24!=0&1;break a}g=b+-194|0;if(g>>>0<=50){b=e+1|0;h=c[37076+(g<<2)>>2]|0;if(f>>>0<4?(h&-2147483648>>>((f*6|0)+-6|0)|0)!=0:0)break;g=d[b>>0]|0;f=g>>>3;if((f+-16|f+(h>>26))>>>0<=7){g=g+-128|h<<6;if((g|0)>=0){c[j>>2]=g;g=2;break a}b=d[e+2>>0]|0;if((b&192|0)==128){b=b+-128|g<<6;if((b|0)>=0){c[j>>2]=b;g=3;break a}g=d[e+3>>0]|0;if((g&192|0)==128){c[j>>2]=g+-128|b<<6;g=4;break a}}}}}while(0);c[(ck()|0)>>2]=84;g=-1}while(0);i=k;return g|0}function Fk(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(ck()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Gk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;m=i;i=i+272|0;j=m+8|0;l=m;h=c[b>>2]|0;c[l>>2]=h;k=(a|0)!=0;f=k?e:256;e=k?a:j;a=h;a:do if((f|0)!=0&(h|0)!=0){h=f;g=a;f=0;while(1){a=d>>>0>=h>>>0;if(!(a|d>>>0>32)){a=g;break a}a=a?h:d;d=d-a|0;a=Hk(e,l,a,0)|0;if((a|0)==-1){f=d;break}o=(e|0)==(j|0);n=o?0:a;g=h-n|0;e=o?e:e+a|0;f=a+f|0;a=c[l>>2]|0;if((h|0)!=(n|0)&(a|0)!=0){h=g;g=a}else{h=g;break a}}d=f;h=0;a=c[l>>2]|0;f=-1}else{h=f;f=0}while(0);b:do if((a|0)!=0?(h|0)!=0&(d|0)!=0:0){g=a;a=e;while(1){e=Fk(a,c[g>>2]|0,0)|0;if((e+1|0)>>>0<2)break;g=(c[l>>2]|0)+4|0;c[l>>2]=g;d=d+-1|0;f=f+1|0;if(!((h|0)!=(e|0)&(d|0)!=0))break b;else{h=h-e|0;a=a+e|0}}if(!e)c[l>>2]=0;else f=-1}while(0);if(k)c[b>>2]=c[l>>2];i=m;return f|0}function Hk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;a:do if(!b){b=c[d>>2]|0;f=c[b>>2]|0;if(!f)e=0;else{e=0;do{if(f>>>0>127){f=Fk(j,f,0)|0;if((f|0)==-1){e=-1;break a}}else f=1;e=f+e|0;b=b+4|0;f=c[b>>2]|0}while((f|0)!=0)}}else{b:do if(e>>>0>3){f=e;g=c[d>>2]|0;while(1){h=c[g>>2]|0;if((h+-1|0)>>>0>126){if(!h)break;h=Fk(b,h,0)|0;if((h|0)==-1){e=-1;break a}b=b+h|0;f=f-h|0}else{a[b>>0]=h;b=b+1|0;f=f+-1|0;g=c[d>>2]|0}g=g+4|0;c[d>>2]=g;if(f>>>0<=3)break b}a[b>>0]=0;c[d>>2]=0;e=e-f|0;break a}else f=e;while(0);if(f){g=c[d>>2]|0;while(1){h=c[g>>2]|0;if((h+-1|0)>>>0>126){if(!h){g=19;break}h=Fk(j,h,0)|0;if((h|0)==-1){e=-1;break a}if(f>>>0>>0){g=22;break}Fk(b,c[g>>2]|0,0)|0;b=b+h|0;f=f-h|0}else{a[b>>0]=h;b=b+1|0;f=f+-1|0;g=c[d>>2]|0}g=g+4|0;c[d>>2]=g;if(!f)break a}if((g|0)==19){a[b>>0]=0;c[d>>2]=0;e=e-f|0;break}else if((g|0)==22){e=e-f|0;break}}}while(0);i=k;return e|0}function Ik(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Fk(a,b,0)|0;return a|0}function Jk(a){a=a|0;return 0}function Kk(a){a=a|0;return}function Lk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;k=e&255;a[l>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(Tk(b)|0)){h=c[g>>2]|0;j=4}else f=-1;else j=4;do if((j|0)==4){g=b+20|0;j=c[g>>2]|0;if(j>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[g>>2]=j+1;a[j>>0]=k;break}if((Gb[c[b+36>>2]&63](b,l,1)|0)==1)f=d[l>>0]|0;else f=-1}while(0);i=m;return f|0}function Mk(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=ik(nb(6,d|0)|0)|0;i=b;return a|0}function Nk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;h=m+16|0;g=m;f=m+32|0;c[f>>2]=d;j=f+4|0;l=b+48|0;n=c[l>>2]|0;c[j>>2]=e-((n|0)!=0&1);k=b+44|0;c[f+8>>2]=c[k>>2];c[f+12>>2]=n;if(!(c[9258]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=ik(vb(145,h|0)|0)|0}else{ob(185,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=ik(vb(145,g|0)|0)|0;gb(0)}if((f|0)>=1){j=c[j>>2]|0;if(f>>>0>j>>>0){h=c[k>>2]|0;g=b+4|0;c[g>>2]=h;c[b+8>>2]=h+(f-j);if(!(c[l>>2]|0))f=e;else{c[g>>2]=h+1;a[d+(e+-1)>>0]=a[h>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=m;return f|0}function Ok(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((ik(ub(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[9258]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=ik(wb(146,n|0)|0)|0}else{ob(186,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=ik(wb(146,m|0)|0)|0;gb(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=8;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,(eb(54,f|0)|0)!=0):0)a[b+75>>0]=-1;f=Pk(b,d,e)|0;i=g;return f|0}function Rk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=jl(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;lw(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function Sk(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Gb[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function Tk(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Uk(a){a=a|0;var b=0,e=0;e=i;i=i+16|0;b=e;if((c[a+8>>2]|0)==0?(Sk(a)|0)!=0:0)b=-1;else if((Gb[c[a+32>>2]&63](a,b,1)|0)==1)b=d[b>>0]|0;else b=-1;i=e;return b|0}function Vk(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=wl(a)|0;break}d=(Jk(a)|0)==0;b=wl(a)|0;if(!d)Kk(a)}else{if(!(c[9323]|0))b=0;else b=Vk(c[9323]|0)|0;Ea(37060);a=c[9264]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=Jk(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=wl(a)|0|b;if(d)Kk(a);a=c[a+56>>2]|0}while((a|0)!=0);fb(37060)}while(0);return b|0}function Wk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((c[d+76>>2]|0)>=0?(Jk(d)|0)!=0:0){if((a[d+75>>0]|0)!=(b|0)?(f=d+20|0,g=c[f>>2]|0,g>>>0<(c[d+16>>2]|0)>>>0):0){c[f>>2]=g+1;a[g>>0]=b;e=b&255}else e=Lk(d,b)|0;Kk(d)}else i=3;do if((i|0)==3){if((a[d+75>>0]|0)!=(b|0)?(h=d+20|0,e=c[h>>2]|0,e>>>0<(c[d+16>>2]|0)>>>0):0){c[h>>2]=e+1;a[e>>0]=b;e=b&255;break}e=Lk(d,b)|0}while(0);return e|0}function Xk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(Tk(e)|0)){g=c[f>>2]|0;h=4}else f=0;else h=4;a:do if((h|0)==4){i=e+20|0;h=c[i>>2]|0;if((g-h|0)>>>0>>0){f=Gb[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((Gb[c[e+36>>2]&63](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);lw(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function Yk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=$(d,b)|0;if((c[e+76>>2]|0)>-1){g=(Jk(e)|0)==0;a=Xk(a,f,e)|0;if(!g)Kk(e)}else a=Xk(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function Zk(a){a=a|0;var b=0,e=0,f=0;if((c[a+76>>2]|0)>=0?(Jk(a)|0)!=0:0){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0}else b=Uk(a)|0}else f=3;do if((f|0)==3){b=a+4|0;e=c[b>>2]|0;if(e>>>0<(c[a+8>>2]|0)>>>0){c[b>>2]=e+1;b=d[e>>0]|0;break}else{b=Uk(a)|0;break}}while(0);return b|0}function _k(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+16|0;g=f;c[g>>2]=e;e=el(a,b,d,g)|0;i=f;return e|0}function $k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=fl(a,b,f)|0;i=e;return d|0}function al(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;do if((b|0)!=-1){if((c[d+76>>2]|0)>-1)g=Jk(d)|0;else g=0;if(!((c[d+8>>2]|0)==0?(Sk(d)|0)!=0:0))h=6;if((h|0)==6?(e=d+4|0,f=c[e>>2]|0,f>>>0>((c[d+44>>2]|0)+-8|0)>>>0):0){h=f+-1|0;c[e>>2]=h;a[h>>0]=b;c[d>>2]=c[d>>2]&-17;if(!g)break;Kk(d);break}if(g){Kk(d);b=-1}else b=-1}else b=-1;while(0);return b|0}function bl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;e=j;f=Fl(240)|0;do if(f){c[e>>2]=c[d>>2];e=el(f,240,b,e)|0;if(e>>>0<240){b=Il(f,e+1|0)|0;c[a>>2]=(b|0)!=0?b:f;break}Gl(f);if((e|0)>=0?(h=e+1|0,g=Fl(h)|0,c[a>>2]=g,(g|0)!=0):0)e=el(g,h,b,d)|0;else e=-1}else e=-1;while(0);i=j;return e|0}function cl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=c[e>>2];if((xl(0,d,o,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)m=Jk(b)|0;else m=0;e=c[b>>2]|0;n=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=p;j=b+28|0;c[j>>2]=p;k=b+20|0;c[k>>2]=p;c[e>>2]=80;l=b+16|0;c[l>>2]=p+80;f=xl(b,d,o,q,r)|0;if(h){Gb[c[b+36>>2]&63](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[l>>2]=0;c[j>>2]=0;c[k>>2]=0}}else f=xl(b,d,o,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|n;if(m)Kk(b);e=(e&32|0)==0?f:-1}i=s;return e|0}function dl(e,f,j){e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;P=i;i=i+304|0;H=P+16|0;J=P+8|0;I=P+33|0;K=P;y=P+32|0;if((c[e+76>>2]|0)>-1)O=Jk(e)|0;else O=0;k=a[f>>0]|0;a:do if(k<<24>>24){L=e+4|0;M=e+100|0;G=e+108|0;z=e+8|0;A=I+10|0;B=I+33|0;C=J+4|0;E=I+46|0;F=I+94|0;m=k;k=0;n=f;s=0;l=0;f=0;b:while(1){c:do if(!(ak(m&255)|0)){m=(a[n>>0]|0)==37;d:do if(m){q=n+1|0;o=a[q>>0]|0;e:do switch(o<<24>>24){case 37:break d;case 42:{x=0;o=n+2|0;break}default:{o=(o&255)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[H>>2]=c[j>>2];while(1){x=(c[H>>2]|0)+(4-1)&~(4-1);m=c[x>>2]|0;c[H>>2]=x+4;if(o>>>0>1)o=o+-1|0;else break}x=m;o=n+3|0;break e}o=(c[j>>2]|0)+(4-1)&~(4-1);x=c[o>>2]|0;c[j>>2]=o+4;o=q}}while(0);m=a[o>>0]|0;n=m&255;if((n+-48|0)>>>0<10){m=0;while(1){q=(m*10|0)+-48+n|0;o=o+1|0;m=a[o>>0]|0;n=m&255;if((n+-48|0)>>>0>=10)break;else m=q}}else q=0;if(m<<24>>24==109){o=o+1|0;r=a[o>>0]|0;m=(x|0)!=0&1;l=0;f=0}else{r=m;m=0}n=o+1|0;switch(r&255|0){case 104:{w=(a[n>>0]|0)==104;n=w?o+2|0:n;o=w?-2:-1;break}case 108:{w=(a[n>>0]|0)==108;n=w?o+2|0:n;o=w?3:1;break}case 106:{o=3;break}case 116:case 122:{o=1;break}case 76:{o=2;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{n=o;o=0;break}default:{N=152;break b}}r=d[n>>0]|0;t=(r&47|0)==3;r=t?r|32:r;t=t?1:o;switch(r|0){case 99:{w=s;v=(q|0)<1?1:q;break}case 91:{w=s;v=q;break}case 110:{if(!x){o=s;break c}switch(t|0){case -2:{a[x>>0]=s;o=s;break c}case -1:{b[x>>1]=s;o=s;break c}case 0:{c[x>>2]=s;o=s;break c}case 1:{c[x>>2]=s;o=s;break c}case 3:{o=x;c[o>>2]=s;c[o+4>>2]=((s|0)<0)<<31>>31;o=s;break c}default:{o=s;break c}}}default:{gk(e,0);do{o=c[L>>2]|0;if(o>>>0<(c[M>>2]|0)>>>0){c[L>>2]=o+1;o=d[o>>0]|0}else o=hk(e)|0}while((ak(o)|0)!=0);o=c[L>>2]|0;if(c[M>>2]|0){o=o+-1|0;c[L>>2]=o}w=(c[G>>2]|0)+s+o-(c[z>>2]|0)|0;v=q}}gk(e,v);o=c[L>>2]|0;q=c[M>>2]|0;if(o>>>0>>0)c[L>>2]=o+1;else{if((hk(e)|0)<0){N=152;break b}q=c[M>>2]|0}if(q)c[L>>2]=(c[L>>2]|0)+-1;f:do switch(r|0){case 91:case 99:case 115:{u=(r|0)==99;g:do if((r&239|0)==99){iw(I|0,-1,257)|0;a[I>>0]=0;if((r|0)==115){a[B>>0]=0;a[A>>0]=0;a[A+1>>0]=0;a[A+2>>0]=0;a[A+3>>0]=0;a[A+4>>0]=0}}else{Q=n+1|0;s=(a[Q>>0]|0)==94;o=s&1;r=s?Q:n;n=s?n+2|0:Q;iw(I|0,s&1|0,257)|0;a[I>>0]=0;switch(a[n>>0]|0){case 45:{s=(o^1)&255;a[E>>0]=s;n=r+2|0;break}case 93:{s=(o^1)&255;a[F>>0]=s;n=r+2|0;break}default:s=(o^1)&255}while(1){o=a[n>>0]|0;h:do switch(o<<24>>24){case 0:{N=152;break b}case 93:break g;case 45:{r=n+1|0;o=a[r>>0]|0;switch(o<<24>>24){case 93:case 0:{o=45;break h}default:{}}n=a[n+-1>>0]|0;if((n&255)<(o&255)){n=n&255;do{n=n+1|0;a[I+n>>0]=s;o=a[r>>0]|0}while((n|0)<(o&255|0));n=r}else n=r;break}default:{}}while(0);a[I+((o&255)+1)>>0]=s;n=n+1|0}}while(0);r=u?v+1|0:31;s=(t|0)==1;t=(m|0)!=0;i:do if(s){if(t){f=Fl(r<<2)|0;if(!f){l=0;N=152;break b}}else f=x;c[J>>2]=0;c[C>>2]=0;l=0;j:while(1){q=(f|0)==0;do{k:while(1){o=c[L>>2]|0;if(o>>>0<(c[M>>2]|0)>>>0){c[L>>2]=o+1;o=d[o>>0]|0}else o=hk(e)|0;if(!(a[I+(o+1)>>0]|0))break j;a[y>>0]=o;switch(Ak(K,y,1,J)|0){case -1:{l=0;N=152;break b}case -2:break;default:break k}}if(!q){c[f+(l<<2)>>2]=c[K>>2];l=l+1|0}}while(!(t&(l|0)==(r|0)));l=r<<1|1;o=Il(f,l<<2)|0;if(!o){l=0;N=152;break b}Q=r;r=l;f=o;l=Q}if(!(Bk(J)|0)){l=0;N=152;break b}else{q=l;l=0}}else{if(t){l=Fl(r)|0;if(!l){l=0;f=0;N=152;break b}else o=0;while(1){do{f=c[L>>2]|0;if(f>>>0<(c[M>>2]|0)>>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=hk(e)|0;if(!(a[I+(f+1)>>0]|0)){q=o;f=0;break i}a[l+o>>0]=f;o=o+1|0}while((o|0)!=(r|0));f=r<<1|1;o=Il(l,f)|0;if(!o){f=0;N=152;break b}else{Q=r;r=f;l=o;o=Q}}}if(!x){l=q;while(1){f=c[L>>2]|0;if(f>>>0>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=hk(e)|0;if(!(a[I+(f+1)>>0]|0)){q=0;l=0;f=0;break i}l=c[M>>2]|0}}else{l=0;while(1){f=c[L>>2]|0;if(f>>>0>>0){c[L>>2]=f+1;f=d[f>>0]|0}else f=hk(e)|0;if(!(a[I+(f+1)>>0]|0)){q=l;l=x;f=0;break i}a[x+l>>0]=f;q=c[M>>2]|0;l=l+1|0}}}while(0);o=c[L>>2]|0;if(c[M>>2]|0){o=o+-1|0;c[L>>2]=o}o=o-(c[z>>2]|0)+(c[G>>2]|0)|0;if(!o)break b;if(!((o|0)==(v|0)|u^1))break b;do if(t)if(s){c[x>>2]=f;break}else{c[x>>2]=l;break}while(0);if(!u){if(f)c[f+(q<<2)>>2]=0;if(!l){l=0;break f}a[l+q>>0]=0}break}case 120:case 88:case 112:{o=16;N=134;break}case 111:{o=8;N=134;break}case 117:case 100:{o=10;N=134;break}case 105:{o=0;N=134;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{p=+ek(e,t,0);if((c[G>>2]|0)==((c[z>>2]|0)-(c[L>>2]|0)|0))break b;if(x)switch(t|0){case 0:{g[x>>2]=p;break f}case 1:{h[x>>3]=p;break f}case 2:{h[x>>3]=p;break f}default:break f}break}default:{}}while(0);l:do if((N|0)==134){N=0;o=fk(e,o,0,-1,-1)|0;if((c[G>>2]|0)==((c[z>>2]|0)-(c[L>>2]|0)|0))break b;if((x|0)!=0&(r|0)==112){c[x>>2]=o;break}if(x)switch(t|0){case -2:{a[x>>0]=o;break l}case -1:{b[x>>1]=o;break l}case 0:{c[x>>2]=o;break l}case 1:{c[x>>2]=o;break l}case 3:{Q=x;c[Q>>2]=o;c[Q+4>>2]=D;break l}default:break l}}while(0);k=((x|0)!=0&1)+k|0;o=(c[G>>2]|0)+w+(c[L>>2]|0)-(c[z>>2]|0)|0;break c}while(0);n=n+(m&1)|0;gk(e,0);m=c[L>>2]|0;if(m>>>0<(c[M>>2]|0)>>>0){c[L>>2]=m+1;m=d[m>>0]|0}else m=hk(e)|0;if((m|0)!=(d[n>>0]|0)){N=21;break b}o=s+1|0}else{while(1){m=n+1|0;if(!(ak(d[m>>0]|0)|0))break;else n=m}gk(e,0);do{m=c[L>>2]|0;if(m>>>0<(c[M>>2]|0)>>>0){c[L>>2]=m+1;m=d[m>>0]|0}else m=hk(e)|0}while((ak(m)|0)!=0);m=c[L>>2]|0;if(c[M>>2]|0){m=m+-1|0;c[L>>2]=m}o=(c[G>>2]|0)+s+m-(c[z>>2]|0)|0}while(0);n=n+1|0;m=a[n>>0]|0;if(!(m<<24>>24))break a;else s=o}if((N|0)==21){if(c[M>>2]|0)c[L>>2]=(c[L>>2]|0)+-1;if((k|0)!=0|(m|0)>-1)break;else{k=0;N=153}}else if((N|0)==152)if(!k){k=m;N=153}if((N|0)==153){m=k;k=-1}if(m){Gl(l);Gl(f)}}else k=0;while(0);if(O)Kk(e);i=P;return k|0}function el(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;g=n+112|0;m=n;h=m;j=37352;k=h+112|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;l=4}else{c[(ck()|0)>>2]=75;d=-1}else{g=b;l=4}if((l|0)==4){l=-2-g|0;l=d>>>0>l>>>0?l:d;c[m+48>>2]=l;b=m+20|0;c[b>>2]=g;c[m+44>>2]=g;d=g+l|0;g=m+16|0;c[g>>2]=d;c[m+28>>2]=d;d=cl(m,e,f)|0;if(l){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=n;return d|0}function fl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+112|0;e=g;f=e;h=f+112|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=29;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=dl(e,b,d)|0;i=g;return h|0}function gl(a,b,c){a=a|0;b=b|0;c=c|0;return +(+zl(a,b,2))}function hl(a,b,c){a=a|0;b=b|0;c=c|0;a=Al(a,b,c,-1,-1)|0;return a|0}function il(a,b,c){a=a|0;b=b|0;c=c|0;a=Al(a,b,c,0,-2147483648)|0;return a|0}function jl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=$(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return ((e|0)!=0?b:0)|0}function kl(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function ll(b,c){b=b|0;c=c|0;var d=0,e=0;e=a[b>>0]|0;d=a[c>>0]|0;if(e<<24>>24==0?1:e<<24>>24!=d<<24>>24)c=e;else{do{b=b+1|0;c=c+1|0;e=a[b>>0]|0;d=a[c>>0]|0}while(!(e<<24>>24==0?1:e<<24>>24!=d<<24>>24));c=e}return (c&255)-(d&255)|0}function ml(a,b){a=a|0;b=b|0;kl(a,b)|0;return a|0}function nl(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function ol(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)c=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);c=(f&255)-(d[c>>0]|0)|0}return c|0}function pl(a){a=a|0;var b=0;b=a;while(1)if(!(c[b>>2]|0))break;else b=b+4|0;return b-a>>2|0}function ql(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d){e=a;while(1){d=d+-1|0;c[e>>2]=c[b>>2];if(!d)break;else{b=b+4|0;e=e+4|0}}}return a|0}function rl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=(d|0)==0;if(a-b>>2>>>0>>0){if(!e)do{d=d+-1|0;c[a+(d<<2)>>2]=c[b+(d<<2)>>2]}while((d|0)!=0)}else if(!e){e=b;b=a;while(1){d=d+-1|0;c[b>>2]=c[e>>2];if(!d)break;else{e=e+4|0;b=b+4|0}}}return a|0}function sl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(d){e=a;while(1){d=d+-1|0;c[e>>2]=b;if(!d)break;else e=e+4|0}}return a|0}function tl(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;e=c[i>>2]|0;j=a+100|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[j>>2]|0)!=0:0){c[i>>2]=(c[i>>2]|0)+-1;h=f}else h=f;break}default:h=0}if((e+-48|0)>>>0>9)if(!(c[j>>2]|0)){f=-2147483648;e=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=-2147483648;e=0}else{f=0;do{f=e+-48+(f*10|0)|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0}while((e+-48|0)>>>0<10&(f|0)<214748364);b=((f|0)<0)<<31>>31;if((e+-48|0)>>>0<10){do{b=tw(f|0,b|0,10,0)|0;f=D;e=jw(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=jw(e|0,D|0,b|0,f|0)|0;b=D;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));g=f}else g=f;if((e+-48|0)>>>0<10)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=hk(a)|0}while((e+-48|0)>>>0<10);if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;a=(h|0)!=0;e=hw(0,0,g|0,b|0)|0;f=a?D:b;e=a?e:g}D=f;return e|0}function ul(a){a=a|0;if(!(c[a+68>>2]|0))Kk(a);return}function vl(a){a=a|0;if(!(c[a+68>>2]|0))Kk(a);return}function wl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(Gb[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)Gb[c[a+40>>2]&63](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0}\n\n// EMSCRIPTEN_END_FUNCS\n var yb=[Uw,Qq,Uq,Or,Sr,Xr,Zr,xu,Iu,Uw,Uw,Uw,Uw,Uw,Uw,Uw];var zb=[Vw,ii,Yh,Mh,Ah,oh,ch,Sg,Bg,Mj,Lj,Ij,Vw,Vw,Vw,Vw];var Ab=[Ww,bs,hs,Ww];var Bb=[Xw,ei,fi,Uh,Vh,Ih,Jh,wh,xh,kh,lh,_g,$g,Og,Pg,xg,yg,kg,lg,_f,$f,Of,Pf,Cf,Df,qf,rf,ye,ze,le,me,tc,uc,Pd,Td,Qd,bo,eo,co,fo,kd,ld,Qi,md,dd,ed,Ic,Jc,Qc,Rc,Xc,Yc,nd,od,ud,vd,Bd,Cd,Id,Jd,je,ke,He,Ie,Oe,Pe,Ve,We,af,bf,Mg,Ng,Dm,qi,Ai,Bi,Ri,Si,fj,gj,mj,nj,rj,sj,uj,xj,vj,wj,yj,zj,Cn,Tl,Zl,nn,cm,im,Bm,Cm,on,Dn,Rn,Tn,Sn,Un,Xn,Zn,Yn,_n,ko,mo,lo,no,uo,vo,en,wo,xo,yo,Ao,Ks,Eo,Fo,Jo,Ko,Yo,Zo,qp,rp,Fp,Gp,Sp,Tp,pq,qq,Nq,Pq,Sq,Tq,Wq,Xq,fr,gr,qr,rr,Br,Cr,Mr,Nr,Vr,Wr,$r,as,fs,gs,ls,ms,qs,rs,ys,zs,at,bt,wu,tt,Vt,Wt,Xt,Yt,zo,Js,Ms,kt,Bt,Jt,Rt,St,Ti,Ii,$i,sc,pn,Wn,_d,Eg,Wj,ul,vl,Ml,mk,Pr,Rr,Ls,Gv,Nv,Ov,Pv,Qv,Rv,Sv,Im,Wm,Gl,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw,Xw];var Cb=[Yw,hi,Xh,Lh,zh,nh,bh,Rg,Ag,mg,ag,Qf,Ef,sf,Ae,ne,vc,qn,Ci,Fi,Ul,Yl,dm,hm,Fn,_q,$q,ar,br,dr,er,jr,kr,lr,mr,or,pr,ur,vr,wr,xr,zr,Ar,Fr,Gr,Hr,Ir,Kr,Lr,ps,us,bu,du,fu,cu,eu,gu,kc,Ui,Gi,Hi,Ji,kn,Cc,Ec,go,dn,Qm,Zd,re,jf,wf,If,Uf,eg,qg,Dg,Ug,eh,qh,Ch,Oh,_h,ki,yi,Zi,sm,qm,hn,oo,rm,Om,_m,Zm,av,bv,cv,dv,ev,fv,st,gv,hv,iv,jv,kv,lv,mv,nv,ov,pv,qv,rv,sv,tv,uv,vv,wv,xv,yv,zv,Av,Bv,Cv,Ev,Yv,Yw,Yw];var Db=[Zw,Lo,Mo,No,Oo,Po,Qo,Ro,So,To,Uo,Vo,_o,$o,ap,bp,cp,dp,ep,fp,gp,hp,ip,xp,zp,Kp,Mp,Vp,Wp,Xp,Zp,$p,sq,tq,uq,wq,yq,es,ks,cd,Uu,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw,Zw];var Eb=[_w,un,vn,hd,yn,ri,hj,oj,tj,Mk,Vl,Kn,Mn,Nn,Jn,_l,$l,em,xn,jm,km,qo,Up,iu,ku,mu,su,uu,ou,qu,rq,ju,lu,nu,tu,vu,pu,ru,Yq,Zq,cr,hr,ir,nr,sr,tr,yr,Dr,Er,Jr,xt,yt,At,Zt,$t,_t,au,ot,pt,rt,Ft,Gt,It,Nt,Ot,Qt,ui,bj,jn,Li,Vn,$n,$w,ax,bx,qk,pl,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w,_w];var Fb=[cx,Qr,Yr,cx];var Gb=[dx,rn,wn,An,um,vm,Aj,Bl,Pk,Ok,Nk,Qk,Gn,Ln,Wl,Pn,fm,Do,Io,ns,ss,dt,ft,it,Ns,Us,Xs,_s,Dc,yl,Rm,pk,Zu,$u,Fk,Ek,zk,bl,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx,dx];var Hb=[ex,ds,js,ex];var Ib=[fx,fd,Pj,Oj,Nj,Hn,sn,os,ts,fx,fx,fx,fx,fx,fx,fx];var Jb=[gx,wp,Cp,Jp,Op,gx,gx,gx];var Kb=[hx,Tr,_r,cs,is,hx,hx,hx];var Lb=[ix,gi,Wh,Kh,yh,mh,ah,Qg,zg,og,cg,Sf,Gf,uf,Ce,pe,xc,id,jd,On,Xl,am,Qn,zn,gm,lm,Bn,ct,et,gt,Ss,Vs,Ys,Vi,oc,qc,io,Is,jo,ok,nk,Km,Xm,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix,ix];var Mb=[jx,Bo,Go,sp,tp,yp,Ep,Hp,Ip,Lp,Qp,jt,wt,zt,$s,nt,qt,Et,Ht,Mt,Pt,Gk,Ck,jx,jx,jx,jx,jx,jx,jx,jx,jx];var Nb=[kx,$v,_v,Zv];var Ob=[lx,lc,aj,Xo,Bs,Cs,Ds,Zj,$j,_j,lx,lx,lx,lx,lx,lx];var Pb=[mx,ng,bg,Rf,Ff,tf,Be,oe,wc,ht,Ps,Qs,Rs,Zs,ti,zi,Hu,Tu,Dk,kk,Ak,fw,ew,dw,cw,bw,aw,mx,mx,mx,mx,mx];var Qb=[nx,tm,si,ro,Wi,Gm,ox,Am,Mm,Ki,xm,to,Xu,Yu,_u,Um];var Rb=[px,qx,Tj,rx,Uj,sx,Sj,px];var Sb=[tx,bq,Aq,ut,vt,lt,mt,Ct,Dt,Kt,Lt,tx,tx,tx,tx,tx];var Tb=[ux,Ap,Dp,Np,Pp,ux,ux,ux];var Ub=[vx,Ud,Vd,Rd,Sd,gd,Kc,Lc,Sc,Tc,Zc,_c,pd,qd,wd,xd,Dd,Ed,Kd,Ld,Je,Ke,Qe,Re,Xe,Ye,cf,df,Cj,Dj,Fj,In,tn,Co,Ho,dc,zm,yc,zc,Ac,Bc,Fc,Gc,Hc,De,Ee,Fe,Ge,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx,vx];return{_jpegls_encode:Yi,___cxa_can_catch:Qj,_free:Gl,_jpegls_decode:Xi,___cxa_is_pointer_type:Rj,_i64Add:jw,_memmove:nw,_i64Subtract:hw,_memset:iw,_malloc:Fl,_memcpy:lw,_bitshift64Lshr:kw,_bitshift64Shl:mw,__GLOBAL__I_000101:Nl,__GLOBAL__sub_I_jpegls_cpp:rc,__GLOBAL__sub_I_iostream_cpp:Ol,runPostSets:gw,stackAlloc:Vb,stackSave:Wb,stackRestore:Xb,establishStackSpace:Yb,setThrew:Zb,setTempRet0:ac,getTempRet0:bc,dynCall_iiiiiiii:xw,dynCall_viiiii:yw,dynCall_iiiiiid:zw,dynCall_vi:Aw,dynCall_vii:Bw,dynCall_iiiiiii:Cw,dynCall_ii:Dw,dynCall_iiiiiiiiiiii:Ew,dynCall_iiii:Fw,dynCall_viiiiiiiiiiiiiii:Gw,dynCall_viiiiii:Hw,dynCall_viiiiiii:Iw,dynCall_viiiiiiiiii:Jw,dynCall_iii:Kw,dynCall_iiiiii:Lw,dynCall_diii:Mw,dynCall_i:Nw,dynCall_iiiii:Ow,dynCall_viii:Pw,dynCall_v:Qw,dynCall_iiiiiiiii:Rw,dynCall_iiiiid:Sw,dynCall_viiii:Tw}})\n\n\n // EMSCRIPTEN_END_ASM\n (Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _jpegls_encode=Module[\"_jpegls_encode\"]=asm[\"_jpegls_encode\"];var ___cxa_can_catch=Module[\"___cxa_can_catch\"]=asm[\"___cxa_can_catch\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _jpegls_decode=Module[\"_jpegls_decode\"]=asm[\"_jpegls_decode\"];var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=asm[\"___cxa_is_pointer_type\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _memmove=Module[\"_memmove\"]=asm[\"_memmove\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var __GLOBAL__sub_I_iostream_cpp=Module[\"__GLOBAL__sub_I_iostream_cpp\"]=asm[\"__GLOBAL__sub_I_iostream_cpp\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var __GLOBAL__sub_I_jpegls_cpp=Module[\"__GLOBAL__sub_I_jpegls_cpp\"]=asm[\"__GLOBAL__sub_I_jpegls_cpp\"];var __GLOBAL__I_000101=Module[\"__GLOBAL__I_000101\"]=asm[\"__GLOBAL__I_000101\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var dynCall_iiiiiiii=Module[\"dynCall_iiiiiiii\"]=asm[\"dynCall_iiiiiiii\"];var dynCall_viiiii=Module[\"dynCall_viiiii\"]=asm[\"dynCall_viiiii\"];var dynCall_iiiiiid=Module[\"dynCall_iiiiiid\"]=asm[\"dynCall_iiiiiid\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iiiiiiiiiiii=Module[\"dynCall_iiiiiiiiiiii\"]=asm[\"dynCall_iiiiiiiiiiii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_viiiiiiiiiiiiiii=Module[\"dynCall_viiiiiiiiiiiiiii\"]=asm[\"dynCall_viiiiiiiiiiiiiii\"];var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=asm[\"dynCall_viiiiii\"];var dynCall_viiiiiii=Module[\"dynCall_viiiiiii\"]=asm[\"dynCall_viiiiiii\"];var dynCall_viiiiiiiiii=Module[\"dynCall_viiiiiiiiii\"]=asm[\"dynCall_viiiiiiiiii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_diii=Module[\"dynCall_diii\"]=asm[\"dynCall_diii\"];var dynCall_i=Module[\"dynCall_i\"]=asm[\"dynCall_i\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_v=Module[\"dynCall_v\"]=asm[\"dynCall_v\"];var dynCall_iiiiiiiii=Module[\"dynCall_iiiiiiiii\"]=asm[\"dynCall_iiiiiiiii\"];var dynCall_iiiiid=Module[\"dynCall_iiiiid\"]=asm[\"dynCall_iiiiid\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];Runtime.stackAlloc=asm[\"stackAlloc\"];Runtime.stackSave=asm[\"stackSave\"];Runtime.stackRestore=asm[\"stackRestore\"];Runtime.establishStackSpace=asm[\"establishStackSpace\"];Runtime.setTempRet0=asm[\"setTempRet0\"];Runtime.getTempRet0=asm[\"getTempRet0\"];function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller};Module[\"callMain\"]=Module.callMain=function callMain(args){assert(runDependencies==0,\"cannot call main when async dependencies remain! (listen on __ATMAIN__)\");assert(__ATPRERUN__.length==0,\"cannot call main when preRun functions remain to be called\");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module[\"thisProgram\"]),\"i8\",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();if(Module[\"_main\"]&&shouldRunNow)Module[\"callMain\"](args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout((function(){setTimeout((function(){Module[\"setStatus\"](\"\")}),1);doRun()}),1)}else{doRun()}}Module[\"run\"]=Module.run=run;function exit(status,implicit){if(implicit&&Module[\"noExitRuntime\"]){return}if(Module[\"noExitRuntime\"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}if(ENVIRONMENT_IS_NODE){process[\"stdout\"][\"once\"](\"drain\",(function(){process[\"exit\"](status)}));console.log(\" \");setTimeout((function(){process[\"exit\"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit===\"function\"){quit(status)}throw new ExitStatus(status)}Module[\"exit\"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=\"\"}ABORT=true;EXITSTATUS=1;var extra=\"\\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.\";var output=\"abort(\"+what+\") at \"+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module[\"abort\"]=Module.abort=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=true;if(Module[\"noInitialRun\"]){shouldRunNow=false}run()\n\n\n\n\n\n return Module;\n};\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = CharLS;\n\n/***/ }),\n\n/***/ \"../codecs/jpeg.js\":\n/*!*************************!*\\\n !*** ../codecs/jpeg.js ***!\n \\*************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n// jshint ignore: start\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /\n /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\n/*\n Copyright 2011 notmasteryet\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n */\n\n// - The JPEG specification can be found in the ITU CCITT Recommendation T.81\n// (www.w3.org/Graphics/JPEG/itu-t81.pdf)\n// - The JFIF specification can be found in the JPEG File Interchange Format\n// (www.w3.org/Graphics/JPEG/jfif3.pdf)\n// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters\n// in PostScript Level 2, Technical Note #5116\n// (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)\n\nvar ColorSpace = {Unkown: 0, Grayscale: 1, AdobeRGB: 2, RGB: 3, CYMK: 4};\nvar JpegImage = (function jpegImage() {\n \"use strict\";\n var dctZigZag = new Int32Array([\n 0,\n 1, 8,\n 16, 9, 2,\n 3, 10, 17, 24,\n 32, 25, 18, 11, 4,\n 5, 12, 19, 26, 33, 40,\n 48, 41, 34, 27, 20, 13, 6,\n 7, 14, 21, 28, 35, 42, 49, 56,\n 57, 50, 43, 36, 29, 22, 15,\n 23, 30, 37, 44, 51, 58,\n 59, 52, 45, 38, 31,\n 39, 46, 53, 60,\n 61, 54, 47,\n 55, 62,\n 63\n ]);\n\n var dctCos1 = 4017; // cos(pi/16)\n var dctSin1 = 799; // sin(pi/16)\n var dctCos3 = 3406; // cos(3*pi/16)\n var dctSin3 = 2276; // sin(3*pi/16)\n var dctCos6 = 1567; // cos(6*pi/16)\n var dctSin6 = 3784; // sin(6*pi/16)\n var dctSqrt2 = 5793; // sqrt(2)\n var dctSqrt1d2 = 2896; // sqrt(2) / 2\n\n function constructor() {\n }\n\n function buildHuffmanTable(codeLengths, values) {\n var k = 0, code = [], i, j, length = 16;\n while (length > 0 && !codeLengths[length - 1])\n length--;\n code.push({children: [], index: 0});\n var p = code[0], q;\n for (i = 0; i < length; i++) {\n for (j = 0; j < codeLengths[i]; j++) {\n p = code.pop();\n p.children[p.index] = values[k];\n while (p.index > 0) {\n p = code.pop();\n }\n p.index++;\n code.push(p);\n while (code.length <= i) {\n code.push(q = {children: [], index: 0});\n p.children[p.index] = q.children;\n p = q;\n }\n k++;\n }\n if (i + 1 < length) {\n // p here points to last code\n code.push(q = {children: [], index: 0});\n p.children[p.index] = q.children;\n p = q;\n }\n }\n return code[0].children;\n }\n\n function getBlockBufferOffset(component, row, col) {\n return 64 * ((component.blocksPerLine + 1) * row + col);\n }\n\n function decodeScan(data, offset,\n frame, components, resetInterval,\n spectralStart, spectralEnd,\n successivePrev, successive) {\n var precision = frame.precision;\n var samplesPerLine = frame.samplesPerLine;\n var scanLines = frame.scanLines;\n var mcusPerLine = frame.mcusPerLine;\n var progressive = frame.progressive;\n var maxH = frame.maxH, maxV = frame.maxV;\n\n var startOffset = offset, bitsData = 0, bitsCount = 0;\n\n function readBit() {\n if (bitsCount > 0) {\n bitsCount--;\n return (bitsData >> bitsCount) & 1;\n }\n bitsData = data[offset++];\n if (bitsData == 0xFF) {\n var nextByte = data[offset++];\n if (nextByte) {\n throw \"unexpected marker: \" + ((bitsData << 8) | nextByte).toString(16);\n }\n // unstuff 0\n }\n bitsCount = 7;\n return bitsData >>> 7;\n }\n\n function decodeHuffman(tree) {\n var node = tree;\n var bit;\n while ((bit = readBit()) !== null) {\n node = node[bit];\n if (typeof node === 'number')\n return node;\n if (typeof node !== 'object')\n throw \"invalid huffman sequence\";\n }\n return null;\n }\n\n function receive(length) {\n var n = 0;\n while (length > 0) {\n var bit = readBit();\n if (bit === null)\n return;\n n = (n << 1) | bit;\n length--;\n }\n return n;\n }\n\n function receiveAndExtend(length) {\n var n = receive(length);\n if (n >= 1 << (length - 1))\n return n;\n return n + (-1 << length) + 1;\n }\n\n function decodeBaseline(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : receiveAndExtend(t);\n component.blockData[offset] = (component.pred += diff);\n var k = 1;\n while (k < 64) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15, r = rs >> 4;\n if (s === 0) {\n if (r < 15)\n break;\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s);\n k++;\n }\n }\n\n function decodeDCFirst(component, offset) {\n var t = decodeHuffman(component.huffmanTableDC);\n var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);\n component.blockData[offset] = (component.pred += diff);\n }\n\n function decodeDCSuccessive(component, offset) {\n component.blockData[offset] |= readBit() << successive;\n }\n\n var eobrun = 0;\n function decodeACFirst(component, offset) {\n if (eobrun > 0) {\n eobrun--;\n return;\n }\n var k = spectralStart, e = spectralEnd;\n while (k <= e) {\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15, r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r) - 1;\n break;\n }\n k += 16;\n continue;\n }\n k += r;\n var z = dctZigZag[k];\n component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);\n k++;\n }\n }\n\n var successiveACState = 0, successiveACNextValue;\n function decodeACSuccessive(component, offset) {\n var k = spectralStart, e = spectralEnd, r = 0;\n while (k <= e) {\n var z = dctZigZag[k];\n switch (successiveACState) {\n case 0: // initial state\n var rs = decodeHuffman(component.huffmanTableAC);\n var s = rs & 15;\n r = rs >> 4;\n if (s === 0) {\n if (r < 15) {\n eobrun = receive(r) + (1 << r);\n successiveACState = 4;\n } else {\n r = 16;\n successiveACState = 1;\n }\n } else {\n if (s !== 1)\n throw \"invalid ACn encoding\";\n successiveACNextValue = receiveAndExtend(s);\n successiveACState = r ? 2 : 3;\n }\n continue;\n case 1: // skipping r zero items\n case 2:\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += (readBit() << successive);\n } else {\n r--;\n if (r === 0)\n successiveACState = successiveACState == 2 ? 3 : 0;\n }\n break;\n case 3: // set value for a zero item\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += (readBit() << successive);\n } else {\n component.blockData[offset + z] = successiveACNextValue << successive;\n successiveACState = 0;\n }\n break;\n case 4: // eob\n if (component.blockData[offset + z]) {\n component.blockData[offset + z] += (readBit() << successive);\n }\n break;\n }\n k++;\n }\n if (successiveACState === 4) {\n eobrun--;\n if (eobrun === 0)\n successiveACState = 0;\n }\n }\n\n function decodeMcu(component, decode, mcu, row, col) {\n var mcuRow = (mcu / mcusPerLine) | 0;\n var mcuCol = mcu % mcusPerLine;\n var blockRow = mcuRow * component.v + row;\n var blockCol = mcuCol * component.h + col;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n function decodeBlock(component, decode, mcu) {\n var blockRow = (mcu / component.blocksPerLine) | 0;\n var blockCol = mcu % component.blocksPerLine;\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n decode(component, offset);\n }\n\n var componentsLength = components.length;\n var component, i, j, k, n;\n var decodeFn;\n if (progressive) {\n if (spectralStart === 0)\n decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\n else\n decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\n } else {\n decodeFn = decodeBaseline;\n }\n\n var mcu = 0, marker;\n var mcuExpected;\n if (componentsLength == 1) {\n mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\n } else {\n mcuExpected = mcusPerLine * frame.mcusPerColumn;\n }\n if (!resetInterval) {\n resetInterval = mcuExpected;\n }\n\n var h, v;\n while (mcu < mcuExpected) {\n // reset interval stuff\n for (i = 0; i < componentsLength; i++) {\n components[i].pred = 0;\n }\n eobrun = 0;\n\n if (componentsLength == 1) {\n component = components[0];\n for (n = 0; n < resetInterval; n++) {\n decodeBlock(component, decodeFn, mcu);\n mcu++;\n }\n } else {\n for (n = 0; n < resetInterval; n++) {\n for (i = 0; i < componentsLength; i++) {\n component = components[i];\n h = component.h;\n v = component.v;\n for (j = 0; j < v; j++) {\n for (k = 0; k < h; k++) {\n decodeMcu(component, decodeFn, mcu, j, k);\n }\n }\n }\n mcu++;\n }\n }\n\n // find marker\n bitsCount = 0;\n marker = (data[offset] << 8) | data[offset + 1];\n if (marker <= 0xFF00) {\n throw \"marker was not found\";\n }\n\n if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx\n offset += 2;\n } else {\n break;\n }\n }\n\n return offset - startOffset;\n }\n\n // A port of poppler's IDCT method which in turn is taken from:\n // Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,\n // \"Practical Fast 1-D DCT Algorithms with 11 Multiplications\",\n // IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,\n // 988-991.\n function quantizeAndInverse(component, blockBufferOffset, p) {\n var qt = component.quantizationTable;\n var v0, v1, v2, v3, v4, v5, v6, v7, t;\n var i;\n\n // dequant\n for (i = 0; i < 64; i++) {\n p[i] = component.blockData[blockBufferOffset + i] * qt[i];\n }\n\n // inverse DCT on rows\n for (i = 0; i < 8; ++i) {\n var row = 8 * i;\n\n // check for all-zero AC coefficients\n if (p[1 + row] === 0 && p[2 + row] === 0 && p[3 + row] === 0 &&\n p[4 + row] === 0 && p[5 + row] === 0 && p[6 + row] === 0 &&\n p[7 + row] === 0) {\n t = (dctSqrt2 * p[0 + row] + 512) >> 10;\n p[0 + row] = t;\n p[1 + row] = t;\n p[2 + row] = t;\n p[3 + row] = t;\n p[4 + row] = t;\n p[5 + row] = t;\n p[6 + row] = t;\n p[7 + row] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;\n v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;\n v2 = p[2 + row];\n v3 = p[6 + row];\n v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;\n v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;\n v5 = p[3 + row] << 4;\n v6 = p[5 + row] << 4;\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 + row] = v0 + v7;\n p[7 + row] = v0 - v7;\n p[1 + row] = v1 + v6;\n p[6 + row] = v1 - v6;\n p[2 + row] = v2 + v5;\n p[5 + row] = v2 - v5;\n p[3 + row] = v3 + v4;\n p[4 + row] = v3 - v4;\n }\n\n // inverse DCT on columns\n for (i = 0; i < 8; ++i) {\n var col = i;\n\n // check for all-zero AC coefficients\n if (p[1 * 8 + col] === 0 && p[2 * 8 + col] === 0 && p[3 * 8 + col] === 0 &&\n p[4 * 8 + col] === 0 && p[5 * 8 + col] === 0 && p[6 * 8 + col] === 0 &&\n p[7 * 8 + col] === 0) {\n t = (dctSqrt2 * p[i + 0] + 8192) >> 14;\n p[0 * 8 + col] = t;\n p[1 * 8 + col] = t;\n p[2 * 8 + col] = t;\n p[3 * 8 + col] = t;\n p[4 * 8 + col] = t;\n p[5 * 8 + col] = t;\n p[6 * 8 + col] = t;\n p[7 * 8 + col] = t;\n continue;\n }\n\n // stage 4\n v0 = (dctSqrt2 * p[0 * 8 + col] + 2048) >> 12;\n v1 = (dctSqrt2 * p[4 * 8 + col] + 2048) >> 12;\n v2 = p[2 * 8 + col];\n v3 = p[6 * 8 + col];\n v4 = (dctSqrt1d2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048) >> 12;\n v7 = (dctSqrt1d2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048) >> 12;\n v5 = p[3 * 8 + col];\n v6 = p[5 * 8 + col];\n\n // stage 3\n t = (v0 - v1 + 1) >> 1;\n v0 = (v0 + v1 + 1) >> 1;\n v1 = t;\n t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;\n v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;\n v3 = t;\n t = (v4 - v6 + 1) >> 1;\n v4 = (v4 + v6 + 1) >> 1;\n v6 = t;\n t = (v7 + v5 + 1) >> 1;\n v5 = (v7 - v5 + 1) >> 1;\n v7 = t;\n\n // stage 2\n t = (v0 - v3 + 1) >> 1;\n v0 = (v0 + v3 + 1) >> 1;\n v3 = t;\n t = (v1 - v2 + 1) >> 1;\n v1 = (v1 + v2 + 1) >> 1;\n v2 = t;\n t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;\n v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;\n v7 = t;\n t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;\n v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;\n v6 = t;\n\n // stage 1\n p[0 * 8 + col] = v0 + v7;\n p[7 * 8 + col] = v0 - v7;\n p[1 * 8 + col] = v1 + v6;\n p[6 * 8 + col] = v1 - v6;\n p[2 * 8 + col] = v2 + v5;\n p[5 * 8 + col] = v2 - v5;\n p[3 * 8 + col] = v3 + v4;\n p[4 * 8 + col] = v3 - v4;\n }\n\n // convert to 8-bit integers\n for (i = 0; i < 64; ++i) {\n var index = blockBufferOffset + i;\n var q = p[i];\n q = (q <= -2056 / component.bitConversion) ? 0 :\n (q >= 2024 / component.bitConversion) ? 255 / component.bitConversion :\n (q + 2056 / component.bitConversion) >> 4;\n component.blockData[index] = q;\n }\n }\n\n function buildComponentData(frame, component) {\n var lines = [];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n var computationBuffer = new Int32Array(64);\n\n var i, j, ll = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var offset = getBlockBufferOffset(component, blockRow, blockCol);\n quantizeAndInverse(component, offset, computationBuffer);\n }\n }\n return component.blockData;\n }\n\n function clampToUint8(a) {\n return a <= 0 ? 0 : a >= 255 ? 255 : a | 0;\n }\n\n constructor.prototype = {\n load: function load(path) {\n var handleData = (function (data) {\n this.parse(data);\n if (this.onload)\n this.onload();\n }).bind(this);\n\n if (path.indexOf(\"data:\") > -1) {\n var offset = path.indexOf(\"base64,\") + 7;\n var data = atob(path.substring(offset));\n var arr = new Uint8Array(data.length);\n for (var i = data.length - 1; i >= 0; i--) {\n arr[i] = data.charCodeAt(i);\n }\n handleData(data);\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", path, true);\n xhr.responseType = \"arraybuffer\";\n xhr.onload = (function () {\n // TODO catch parse error\n var data = new Uint8Array(xhr.response);\n handleData(data);\n }).bind(this);\n xhr.send(null);\n }\n },\n parse: function parse(data) {\n\n function readUint16() {\n var value = (data[offset] << 8) | data[offset + 1];\n offset += 2;\n return value;\n }\n\n function readDataBlock() {\n var length = readUint16();\n var array = data.subarray(offset, offset + length - 2);\n offset += array.length;\n return array;\n }\n\n function prepareComponents(frame) {\n var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\n var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\n for (var i = 0; i < frame.components.length; i++) {\n component = frame.components[i];\n var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\n var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\n var blocksPerLineForMcu = mcusPerLine * component.h;\n var blocksPerColumnForMcu = mcusPerColumn * component.v;\n\n var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\n component.blockData = new Int16Array(blocksBufferSize);\n component.blocksPerLine = blocksPerLine;\n component.blocksPerColumn = blocksPerColumn;\n }\n frame.mcusPerLine = mcusPerLine;\n frame.mcusPerColumn = mcusPerColumn;\n }\n\n var offset = 0, length = data.length;\n var jfif = null;\n var adobe = null;\n var pixels = null;\n var frame, resetInterval;\n var quantizationTables = [];\n var huffmanTablesAC = [], huffmanTablesDC = [];\n var fileMarker = readUint16();\n if (fileMarker != 0xFFD8) { // SOI (Start of Image)\n throw \"SOI not found\";\n }\n\n fileMarker = readUint16();\n while (fileMarker != 0xFFD9) { // EOI (End of image)\n var i, j, l;\n switch (fileMarker) {\n case 0xFFE0: // APP0 (Application Specific)\n case 0xFFE1: // APP1\n case 0xFFE2: // APP2\n case 0xFFE3: // APP3\n case 0xFFE4: // APP4\n case 0xFFE5: // APP5\n case 0xFFE6: // APP6\n case 0xFFE7: // APP7\n case 0xFFE8: // APP8\n case 0xFFE9: // APP9\n case 0xFFEA: // APP10\n case 0xFFEB: // APP11\n case 0xFFEC: // APP12\n case 0xFFED: // APP13\n case 0xFFEE: // APP14\n case 0xFFEF: // APP15\n case 0xFFFE: // COM (Comment)\n var appData = readDataBlock();\n\n if (fileMarker === 0xFFE0) {\n if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&\n appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\\x00'\n jfif = {\n version: {major: appData[5], minor: appData[6]},\n densityUnits: appData[7],\n xDensity: (appData[8] << 8) | appData[9],\n yDensity: (appData[10] << 8) | appData[11],\n thumbWidth: appData[12],\n thumbHeight: appData[13],\n thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\n };\n }\n }\n // TODO APP1 - Exif\n if (fileMarker === 0xFFEE) {\n if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&\n appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\\x00'\n adobe = {\n version: appData[6],\n flags0: (appData[7] << 8) | appData[8],\n flags1: (appData[9] << 8) | appData[10],\n transformCode: appData[11]\n };\n }\n }\n break;\n\n case 0xFFDB: // DQT (Define Quantization Tables)\n var quantizationTablesLength = readUint16();\n var quantizationTablesEnd = quantizationTablesLength + offset - 2;\n while (offset < quantizationTablesEnd) {\n var quantizationTableSpec = data[offset++];\n var tableData = new Int32Array(64);\n if ((quantizationTableSpec >> 4) === 0) { // 8 bit values\n for (j = 0; j < 64; j++) {\n var z = dctZigZag[j];\n tableData[z] = data[offset++];\n }\n } else if ((quantizationTableSpec >> 4) === 1) { //16 bit\n for (j = 0; j < 64; j++) {\n var zz = dctZigZag[j];\n tableData[zz] = readUint16();\n }\n } else\n throw \"DQT: invalid table spec\";\n quantizationTables[quantizationTableSpec & 15] = tableData;\n }\n break;\n\n case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)\n case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)\n case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)\n if (frame) {\n throw \"Only single frame JPEGs supported\";\n }\n readUint16(); // skip data length\n frame = {};\n frame.extended = (fileMarker === 0xFFC1);\n frame.progressive = (fileMarker === 0xFFC2);\n frame.precision = data[offset++];\n frame.scanLines = readUint16();\n frame.samplesPerLine = readUint16();\n frame.components = [];\n frame.componentIds = {};\n var componentsCount = data[offset++], componentId;\n var maxH = 0, maxV = 0;\n for (i = 0; i < componentsCount; i++) {\n componentId = data[offset];\n var h = data[offset + 1] >> 4;\n var v = data[offset + 1] & 15;\n if (maxH < h)\n maxH = h;\n if (maxV < v)\n maxV = v;\n var qId = data[offset + 2];\n l = frame.components.push({\n h: h,\n v: v,\n quantizationTable: quantizationTables[qId],\n quantizationTableId: qId,\n bitConversion: 255 / ((1 << frame.precision) - 1)\n });\n frame.componentIds[componentId] = l - 1;\n offset += 3;\n }\n frame.maxH = maxH;\n frame.maxV = maxV;\n prepareComponents(frame);\n break;\n\n case 0xFFC4: // DHT (Define Huffman Tables)\n var huffmanLength = readUint16();\n for (i = 2; i < huffmanLength; ) {\n var huffmanTableSpec = data[offset++];\n var codeLengths = new Uint8Array(16);\n var codeLengthSum = 0;\n for (j = 0; j < 16; j++, offset++)\n codeLengthSum += (codeLengths[j] = data[offset]);\n var huffmanValues = new Uint8Array(codeLengthSum);\n for (j = 0; j < codeLengthSum; j++, offset++)\n huffmanValues[j] = data[offset];\n i += 17 + codeLengthSum;\n\n ((huffmanTableSpec >> 4) === 0 ?\n huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =\n buildHuffmanTable(codeLengths, huffmanValues);\n }\n break;\n\n case 0xFFDD: // DRI (Define Restart Interval)\n readUint16(); // skip data length\n resetInterval = readUint16();\n break;\n\n case 0xFFDA: // SOS (Start of Scan)\n var scanLength = readUint16();\n var selectorsCount = data[offset++];\n var components = [], component;\n for (i = 0; i < selectorsCount; i++) {\n var componentIndex = frame.componentIds[data[offset++]];\n component = frame.components[componentIndex];\n var tableSpec = data[offset++];\n component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\n component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\n components.push(component);\n }\n var spectralStart = data[offset++];\n var spectralEnd = data[offset++];\n var successiveApproximation = data[offset++];\n var processed = decodeScan(data, offset,\n frame, components, resetInterval,\n spectralStart, spectralEnd,\n successiveApproximation >> 4, successiveApproximation & 15);\n offset += processed;\n break;\n case 0xFFFF: // Fill bytes\n if (data[offset] !== 0xFF) { // Avoid skipping a valid marker.\n offset--;\n }\n break;\n default:\n if (data[offset - 3] == 0xFF &&\n data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {\n // could be incorrect encoding -- last 0xFF byte of the previous\n // block was eaten by the encoder\n offset -= 3;\n break;\n }\n throw \"unknown JPEG marker \" + fileMarker.toString(16);\n }\n fileMarker = readUint16();\n }\n\n this.width = frame.samplesPerLine;\n this.height = frame.scanLines;\n this.jfif = jfif;\n this.adobe = adobe;\n this.components = [];\n switch (frame.components.length)\n {\n case 1:\n this.colorspace = ColorSpace.Grayscale;\n break;\n case 3:\n if (this.adobe)\n this.colorspace = ColorSpace.AdobeRGB;\n else\n this.colorspace = ColorSpace.RGB;\n break;\n case 4:\n this.colorspace = ColorSpace.CYMK;\n break;\n default:\n this.colorspace = ColorSpace.Unknown;\n }\n for (var i = 0; i < frame.components.length; i++) {\n var component = frame.components[i];\n if (!component.quantizationTable && component.quantizationTableId !== null)\n component.quantizationTable = quantizationTables[component.quantizationTableId];\n this.components.push({\n output: buildComponentData(frame, component),\n scaleX: component.h / frame.maxH,\n scaleY: component.v / frame.maxV,\n blocksPerLine: component.blocksPerLine,\n blocksPerColumn: component.blocksPerColumn,\n bitConversion: component.bitConversion\n });\n }\n },\n getData16: function getData16(width, height) {\n if (this.components.length !== 1)\n throw 'Unsupported color mode';\n var scaleX = this.width / width, scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint16Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint16Array((this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn * 8);\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j, k, ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol);\n var offset = 0, sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++];\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n return data;\n },\n getData: function getData(width, height) {\n var scaleX = this.width / width, scaleY = this.height / height;\n\n var component, componentScaleX, componentScaleY;\n var x, y, i;\n var offset = 0;\n var Y, Cb, Cr, K, C, M, Ye, R, G, B;\n var colorTransform;\n var numComponents = this.components.length;\n var dataLength = width * height * numComponents;\n var data = new Uint8Array(dataLength);\n var componentLine;\n\n // lineData is reused for all components. Assume first component is\n // the biggest\n var lineData = new Uint8Array((this.components[0].blocksPerLine << 3) *\n this.components[0].blocksPerColumn * 8);\n\n // First construct image data ...\n for (i = 0; i < numComponents; i++) {\n component = this.components[i];\n var blocksPerLine = component.blocksPerLine;\n var blocksPerColumn = component.blocksPerColumn;\n var samplesPerLine = blocksPerLine << 3;\n\n var j, k, ll = 0;\n var lineOffset = 0;\n for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\n var scanLine = blockRow << 3;\n for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\n var bufferOffset = getBlockBufferOffset(component, blockRow, blockCol);\n var offset = 0, sample = blockCol << 3;\n for (j = 0; j < 8; j++) {\n var lineOffset = (scanLine + j) * samplesPerLine;\n for (k = 0; k < 8; k++) {\n lineData[lineOffset + sample + k] =\n component.output[bufferOffset + offset++] * component.bitConversion;\n }\n }\n }\n }\n\n componentScaleX = component.scaleX * scaleX;\n componentScaleY = component.scaleY * scaleY;\n offset = i;\n\n var cx, cy;\n var index;\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n cy = 0 | (y * componentScaleY);\n cx = 0 | (x * componentScaleX);\n index = cy * samplesPerLine + cx;\n data[offset] = lineData[index];\n offset += numComponents;\n }\n }\n }\n\n // ... then transform colors, if necessary\n switch (numComponents) {\n case 1:\n case 2:\n break;\n // no color conversion for one or two compoenents\n\n case 3:\n // The default transform for three components is true\n colorTransform = true;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode)\n colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i ];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n R = clampToUint8(Y - 179.456 + 1.402 * Cr);\n G = clampToUint8(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);\n B = clampToUint8(Y - 226.816 + 1.772 * Cb);\n\n data[i ] = R;\n data[i + 1] = G;\n data[i + 2] = B;\n }\n }\n break;\n case 4:\n if (!this.adobe)\n throw 'Unsupported color mode (4 components)';\n // The default transform for four components is false\n colorTransform = false;\n // The adobe transform marker overrides any previous setting\n if (this.adobe && this.adobe.transformCode)\n colorTransform = true;\n else if (typeof this.colorTransform !== 'undefined')\n colorTransform = !!this.colorTransform;\n\n if (colorTransform) {\n for (i = 0; i < dataLength; i += numComponents) {\n Y = data[i];\n Cb = data[i + 1];\n Cr = data[i + 2];\n\n C = clampToUint8(434.456 - Y - 1.402 * Cr);\n M = clampToUint8(119.541 - Y + 0.344 * Cb + 0.714 * Cr);\n Y = clampToUint8(481.816 - Y - 1.772 * Cb);\n\n data[i ] = C;\n data[i + 1] = M;\n data[i + 2] = Y;\n // K is unchanged\n }\n }\n break;\n default:\n throw 'Unsupported color mode';\n }\n return data;\n }\n };\n\n return constructor;\n})();\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = JpegImage;\n\n/***/ }),\n\n/***/ \"../codecs/jpegLossless.js\":\n/*!*********************************!*\\\n !*** ../codecs/jpegLossless.js ***!\n \\*********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.jpeg = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o> 4) !== 0x0FFC) || (current === 0xFFC4))) { // SOF 0~15\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n if ((current < 0xFFC0) || (current > 0xFFC7)) {\n throw new Error(\"ERROR: could not handle arithmetic code!\");\n }\n\n this.frame.read(this.stream);\n current = this.stream.get16();\n\n do {\n while (current !== 0x0FFDA) { // SOS\n switch (current) {\n case 0xFFC4: // DHT\n this.huffTable.read(this.stream, this.HuffTab);\n break;\n case 0xFFCC: // DAC\n throw new Error(\"Program doesn't support arithmetic coding. (format throw new IOException)\");\n case 0xFFDB:\n this.quantTable.read(this.stream, jpeg.lossless.Decoder.TABLE);\n break;\n case 0xFFDD:\n this.restartInterval = this.readNumber();\n break;\n case 0xFFE0:\n case 0xFFE1:\n case 0xFFE2:\n case 0xFFE3:\n case 0xFFE4:\n case 0xFFE5:\n case 0xFFE6:\n case 0xFFE7:\n case 0xFFE8:\n case 0xFFE9:\n case 0xFFEA:\n case 0xFFEB:\n case 0xFFEC:\n case 0xFFED:\n case 0xFFEE:\n case 0xFFEF:\n this.readApp();\n break;\n case 0xFFFE:\n this.readComment();\n break;\n default:\n if ((current >> 8) !== 0xFF) {\n throw new Error(\"ERROR: format throw new IOException! (Parser.decode)\");\n }\n }\n\n current = this.stream.get16();\n }\n\n this.precision = this.frame.precision;\n this.components = this.frame.components;\n\n if (!this.numBytes) {\n this.numBytes = parseInt(Math.ceil(this.precision / 8));\n }\n\n if (this.numBytes == 1) {\n this.mask = 0xFF;\n } else {\n this.mask = 0xFFFF;\n }\n\n this.scan.read(this.stream);\n this.numComp = this.scan.numComp;\n this.selection = this.scan.selection;\n\n if (this.numBytes === 1) {\n if (this.numComp === 3) {\n this.getter = this.getValueRGB;\n this.setter = this.setValueRGB;\n this.output = this.outputRGB;\n } else {\n this.getter = this.getValue8;\n this.setter = this.setValue8;\n this.output = this.outputSingle;\n }\n } else {\n this.getter = this.getValue16;\n this.setter = this.setValue16;\n this.output = this.outputSingle;\n }\n\n switch (this.selection) {\n case 2:\n this.selector = this.select2;\n break;\n case 3:\n this.selector = this.select3;\n break;\n case 4:\n this.selector = this.select4;\n break;\n case 5:\n this.selector = this.select5;\n break;\n case 6:\n this.selector = this.select6;\n break;\n case 7:\n this.selector = this.select7;\n break;\n default:\n this.selector = this.select1;\n break;\n }\n\n this.scanComps = this.scan.components;\n this.quantTables = this.quantTable.quantTables;\n\n for (i = 0; i < this.numComp; i+=1) {\n compN = this.scanComps[i].scanCompSel;\n this.qTab[i] = this.quantTables[this.components[compN].quantTableSel];\n this.nBlock[i] = this.components[compN].vSamp * this.components[compN].hSamp;\n this.dcTab[i] = this.HuffTab[this.scanComps[i].dcTabSel][0];\n this.acTab[i] = this.HuffTab[this.scanComps[i].acTabSel][1];\n }\n\n this.xDim = this.frame.dimX;\n this.yDim = this.frame.dimY;\n if (this.numBytes == 1) {\n this.outputData = new Uint8Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp));\n } else {\n this.outputData = new Uint16Array(new ArrayBuffer(this.xDim * this.yDim * this.numBytes * this.numComp));\n }\n\n scanNum+=1;\n\n while (true) { // Decode one scan\n temp[0] = 0;\n index[0] = 0;\n\n for (i = 0; i < 10; i+=1) {\n pred[i] = (1 << (this.precision - 1));\n }\n\n if (this.restartInterval === 0) {\n current = this.decodeUnit(pred, temp, index);\n\n while ((current === 0) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim))) {\n this.output(pred);\n current = this.decodeUnit(pred, temp, index);\n }\n\n break; //current=MARKER\n }\n\n for (mcuNum = 0; mcuNum < this.restartInterval; mcuNum+=1) {\n this.restarting = (mcuNum == 0);\n current = this.decodeUnit(pred, temp, index);\n this.output(pred);\n\n if (current !== 0) {\n break;\n }\n }\n\n if (current === 0) {\n if (this.markerIndex !== 0) {\n current = (0xFF00 | this.marker);\n this.markerIndex = 0;\n } else {\n current = this.stream.get16();\n }\n }\n\n if (!((current >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) &&\n (current <= jpeg.lossless.Decoder.RESTART_MARKER_END))) {\n break; //current=MARKER\n }\n }\n\n if ((current === 0xFFDC) && (scanNum === 1)) { //DNL\n this.readNumber();\n current = this.stream.get16();\n }\n } while ((current !== 0xFFD9) && ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) && (scanNum === 0));\n\n return this.outputData;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.decodeUnit = function (prev, temp, index) {\n if (this.numComp == 1) {\n return this.decodeSingle(prev, temp, index);\n } else if (this.numComp == 3) {\n return this.decodeRGB(prev, temp, index);\n } else {\n return -1;\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select1 = function (compOffset) {\n return this.getPreviousX(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select2 = function (compOffset) {\n return this.getPreviousY(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select3 = function (compOffset) {\n return this.getPreviousXY(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select4 = function (compOffset) {\n return (this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) - this.getPreviousXY(compOffset);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select5 = function (compOffset) {\n return this.getPreviousX(compOffset) + ((this.getPreviousY(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select6 = function (compOffset) {\n return this.getPreviousY(compOffset) + ((this.getPreviousX(compOffset) - this.getPreviousXY(compOffset)) >> 1);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.select7 = function (compOffset) {\n return ((this.getPreviousX(compOffset) + this.getPreviousY(compOffset)) / 2);\n };\n\n\n\n jpeg.lossless.Decoder.prototype.decodeRGB = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, actab, dctab, qtab, ctrC, i, k, j;\n\n prev[0] = this.selector(0);\n prev[1] = this.selector(1);\n prev[2] = this.selector(2);\n\n for (ctrC = 0; ctrC < this.numComp; ctrC+=1) {\n qtab = this.qTab[ctrC];\n actab = this.acTab[ctrC];\n dctab = this.dcTab[ctrC];\n for (i = 0; i < this.nBlock[ctrC]; i+=1) {\n for (k = 0; k < this.IDCT_Source.length; k+=1) {\n this.IDCT_Source[k] = 0;\n }\n\n value = this.getHuffmanValue(dctab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n prev[ctrC] = this.IDCT_Source[0] = prev[ctrC] + this.getn(index, value, temp, index);\n this.IDCT_Source[0] *= qtab[0];\n\n for (j = 1; j < 64; j+=1) {\n value = this.getHuffmanValue(actab, temp, index);\n\n if (value >= 0xFF00) {\n return value;\n }\n\n j += (value >> 4);\n\n if ((value & 0x0F) === 0) {\n if ((value >> 4) === 0) {\n break;\n }\n } else {\n this.IDCT_Source[jpeg.lossless.Decoder.IDCT_P[j]] = this.getn(index, value & 0x0F, temp, index) * qtab[j];\n }\n }\n }\n }\n\n return 0;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.decodeSingle = function (prev, temp, index) {\n /*jslint bitwise: true */\n\n var value, i, n, nRestart;\n\n if (this.restarting) {\n this.restarting = false;\n prev[0] = (1 << (this.frame.precision - 1));\n } else {\n prev[0] = this.selector();\n }\n\n for (i = 0; i < this.nBlock[0]; i+=1) {\n value = this.getHuffmanValue(this.dcTab[0], temp, index);\n if (value >= 0xFF00) {\n return value;\n }\n\n n = this.getn(prev, value, temp, index);\n nRestart = (n >> 8);\n\n if ((nRestart >= jpeg.lossless.Decoder.RESTART_MARKER_BEGIN) && (nRestart <= jpeg.lossless.Decoder.RESTART_MARKER_END)) {\n return nRestart;\n }\n\n prev[0] += n;\n }\n\n return 0;\n };\n\n\n\n // Huffman table for fast search: (HuffTab) 8-bit Look up table 2-layer search architecture, 1st-layer represent 256 node (8 bits) if codeword-length > 8\n // bits, then the entry of 1st-layer = (# of 2nd-layer table) | MSB and it is stored in the 2nd-layer Size of tables in each layer are 256.\n // HuffTab[*][*][0-256] is always the only 1st-layer table.\n //\n // An entry can be: (1) (# of 2nd-layer table) | MSB , for code length > 8 in 1st-layer (2) (Code length) << 8 | HuffVal\n //\n // HuffmanValue(table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n // ):\n // return: Huffman Value of table\n // 0xFF?? if it receives a MARKER\n // Parameter: table HuffTab[x][y] (ex) HuffmanValue(HuffTab[1][0],...)\n // temp temp storage for remainded bits\n // index index to bit of temp\n // in FILE pointer\n // Effect:\n // temp store new remainded bits\n // index change to new index\n // in change to new position\n // NOTE:\n // Initial by temp=0; index=0;\n // NOTE: (explain temp and index)\n // temp: is always in the form at calling time or returning time\n // | byte 4 | byte 3 | byte 2 | byte 1 |\n // | 0 | 0 | 00000000 | 00000??? | if not a MARKER\n // ^index=3 (from 0 to 15)\n // 321\n // NOTE (marker and marker_index):\n // If get a MARKER from 'in', marker=the low-byte of the MARKER\n // and marker_index=9\n // If marker_index=9 then index is always > 8, or HuffmanValue()\n // will not be called\n jpeg.lossless.Decoder.prototype.getHuffmanValue = function (table, temp, index) {\n /*jslint bitwise: true */\n\n var code, input, mask;\n mask = 0xFFFF;\n\n if (index[0] < 8) {\n temp[0] <<= 8;\n input = this.stream.get8();\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n temp[0] |= input;\n } else {\n index[0] -= 8;\n }\n\n code = table[temp[0] >> index[0]];\n\n if ((code & jpeg.lossless.Decoder.MSB) !== 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n code = table[((code & 0xFF) * 256) + (temp[0] >> index[0])];\n index[0] += 8;\n }\n\n index[0] += 8 - (code >> 8);\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" temp=\" + temp[0] + \" code=\" + code + \" in HuffmanValue()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return 0xFF00 | this.marker;\n }\n\n temp[0] &= (mask >> (16 - index[0]));\n return code & 0xFF;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getn = function (PRED, n, temp, index) {\n /*jslint bitwise: true */\n\n var result, one, n_one, mask, input;\n one = 1;\n n_one = -1;\n mask = 0xFFFF;\n\n if (n === 0) {\n return 0;\n }\n\n if (n === 16) {\n if (PRED[0] >= 0) {\n return -32768;\n } else {\n return 32768;\n }\n }\n\n index[0] -= n;\n\n if (index[0] >= 0) {\n if ((index[0] < this.markerIndex) && !this.isLastPixel()) { // this was corrupting the last pixel in some cases\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n } else {\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n\n if (index[0] < 0) {\n if (this.markerIndex !== 0) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n temp[0] <<= 8;\n input = this.stream.get8();\n\n if (input === 0xFF) {\n this.marker = this.stream.get8();\n if (this.marker !== 0) {\n this.markerIndex = 9;\n }\n }\n\n temp[0] |= input;\n index[0] += 8;\n }\n\n if (index[0] < 0) {\n throw new Error(\"index=\" + index[0] + \" in getn()\");\n }\n\n if (index[0] < this.markerIndex) {\n this.markerIndex = 0;\n return (0xFF00 | this.marker) << 8;\n }\n\n result = temp[0] >> index[0];\n temp[0] &= (mask >> (16 - index[0]));\n }\n\n if (result < (one << (n - 1))) {\n result += (n_one << n) + 1;\n }\n\n return result;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getPreviousX = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.xLoc > 0) {\n return this.getter((((this.yLoc * this.xDim) + this.xLoc) - 1), compOffset);\n } else if (this.yLoc > 0) {\n return this.getPreviousY(compOffset);\n } else {\n return (1 << (this.frame.precision - 1));\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getPreviousXY = function (compOffset) {\n /*jslint bitwise: true */\n\n if ((this.xLoc > 0) && (this.yLoc > 0)) {\n return this.getter(((((this.yLoc - 1) * this.xDim) + this.xLoc) - 1), compOffset);\n } else {\n return this.getPreviousY(compOffset);\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.getPreviousY = function (compOffset) {\n /*jslint bitwise: true */\n\n if (this.yLoc > 0) {\n return this.getter((((this.yLoc - 1) * this.xDim) + this.xLoc), compOffset);\n } else {\n return this.getPreviousX(compOffset);\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.isLastPixel = function () {\n return (this.xLoc === (this.xDim - 1)) && (this.yLoc === (this.yDim - 1));\n };\n\n\n\n jpeg.lossless.Decoder.prototype.outputSingle = function (PRED) {\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter((((this.yLoc * this.xDim) + this.xLoc)), this.mask & PRED[0]);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n };\n\n\n\n jpeg.lossless.Decoder.prototype.outputRGB = function (PRED) {\n var offset = ((this.yLoc * this.xDim) + this.xLoc);\n\n if ((this.xLoc < this.xDim) && (this.yLoc < this.yDim)) {\n this.setter(offset, PRED[0], 0);\n this.setter(offset, PRED[1], 1);\n this.setter(offset, PRED[2], 2);\n\n this.xLoc+=1;\n\n if (this.xLoc >= this.xDim) {\n this.yLoc+=1;\n this.xLoc = 0;\n }\n }\n };\n\n jpeg.lossless.Decoder.prototype.setValue8 = function (index, val) {\n this.outputData[index] = val;\n };\n\n jpeg.lossless.Decoder.prototype.getValue8 = function (index) {\n return this.outputData[index]; // mask should not be necessary because outputData is either Int8Array or Int16Array\n };\n\n var littleEndian = (function() {\n var buffer = new ArrayBuffer(2);\n new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n // Int16Array uses the platform's endianness.\n return new Int16Array(buffer)[0] === 256;\n })();\n\n if (littleEndian) {\n // just reading from an array is fine then. Int16Array will use platform endianness.\n jpeg.lossless.Decoder.prototype.setValue16 = jpeg.lossless.Decoder.prototype.setValue8;\n jpeg.lossless.Decoder.prototype.getValue16 = jpeg.lossless.Decoder.prototype.getValue8;\n }\n else {\n // If platform is big-endian, we will need to convert to little-endian\n jpeg.lossless.Decoder.prototype.setValue16 = function (index, val) {\n this.outputData[index] = ((val & 0xFF) << 8) | ((val >> 8) & 0xFF);\n };\n\n jpeg.lossless.Decoder.prototype.getValue16 = function (index) {\n var val = this.outputData[index];\n return ((val & 0xFF) << 8) | ((val >> 8) & 0xFF);\n };\n }\n\n jpeg.lossless.Decoder.prototype.setValueRGB = function (index, val, compOffset) {\n // this.outputData.setUint8(index * 3 + compOffset, val);\n this.outputData[index * 3 + compOffset] = val;\n };\n\n jpeg.lossless.Decoder.prototype.getValueRGB = function (index, compOffset) {\n // return this.outputData.getUint8(index * 3 + compOffset);\n return this.outputData[index * 3 + compOffset];\n };\n\n\n\n jpeg.lossless.Decoder.prototype.readApp = function() {\n var count = 0, length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n this.stream.get8();\n count+=1;\n }\n\n return length;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.readComment = function () {\n var sb = \"\", count = 0, length;\n\n length = this.stream.get16();\n count += 2;\n\n while (count < length) {\n sb += this.stream.get8();\n count+=1;\n }\n\n return sb;\n };\n\n\n\n jpeg.lossless.Decoder.prototype.readNumber = function() {\n var Ld = this.stream.get16();\n\n if (Ld !== 4) {\n throw new Error(\"ERROR: Define number format throw new IOException [Ld!=4]\");\n }\n\n return this.stream.get16();\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Decoder;\n }\n\n },{\"./data-stream.js\":2,\"./frame-header.js\":4,\"./huffman-table.js\":5,\"./quantization-table.js\":7,\"./scan-header.js\":9,\"./utils.js\":10}],4:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || function () {\n this.components = []; // Components\n this.dimX = 0; // Number of samples per line\n this.dimY = 0; // Number of lines\n this.numComp = 0; // Number of component in the frame\n this.precision = 0; // Sample Precision (from the original image)\n };\n\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.FrameHeader.prototype.read = function (data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, c, temp;\n\n length = data.get16();\n count += 2;\n\n this.precision = data.get8();\n count+=1;\n\n this.dimY = data.get16();\n count += 2;\n\n this.dimX = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n for (i = 1; i <= this.numComp; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: frame format error\");\n }\n\n c = data.get8();\n count+=1;\n\n if (count >= length) {\n throw new Error(\"ERROR: frame format error [c>=Lf]\");\n }\n\n temp = data.get8();\n count+=1;\n\n if (!this.components[c]) {\n this.components[c] = new jpeg.lossless.ComponentSpec();\n }\n\n this.components[c].hSamp = temp >> 4;\n this.components[c].vSamp = temp & 0x0F;\n this.components[c].quantTableSel = data.get8();\n count+=1;\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: frame format error [Lf!=count]\");\n }\n\n return 1;\n };\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.FrameHeader;\n }\n\n },{\"./component-spec.js\":1,\"./data-stream.js\":2}],5:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || function () {\n this.l = jpeg.lossless.Utils.createArray(4, 2, 16);\n this.th = [];\n this.v = jpeg.lossless.Utils.createArray(4, 2, 16, 200);\n this.tc = jpeg.lossless.Utils.createArray(4, 2);\n\n this.tc[0][0] = 0;\n this.tc[1][0] = 0;\n this.tc[2][0] = 0;\n this.tc[3][0] = 0;\n this.tc[0][1] = 0;\n this.tc[1][1] = 0;\n this.tc[2][1] = 0;\n this.tc[3][1] = 0;\n this.th[0] = 0;\n this.th[1] = 0;\n this.th[2] = 0;\n this.th[3] = 0;\n };\n\n\n\n /*** Static Pseudo-constants ***/\n\n jpeg.lossless.HuffmanTable.MSB = 0x80000000;\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.HuffmanTable.prototype.read = function(data, HuffTab) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, c, i, j;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n if (t > 3) {\n throw new Error(\"ERROR: Huffman table ID > 3\");\n }\n\n c = temp >> 4;\n if (c > 2) {\n throw new Error(\"ERROR: Huffman table [Table class > 2 ]\");\n }\n\n this.th[t] = 1;\n this.tc[t][c] = 1;\n\n for (i = 0; i < 16; i+=1) {\n this.l[t][c][i] = data.get8();\n count+=1;\n }\n\n for (i = 0; i < 16; i+=1) {\n for (j = 0; j < this.l[t][c][i]; j+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Huffman table format error [count>Lh]\");\n }\n\n this.v[t][c][i][j] = data.get8();\n count+=1;\n }\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Huffman table format error [count!=Lf]\");\n }\n\n for (i = 0; i < 4; i+=1) {\n for (j = 0; j < 2; j+=1) {\n if (this.tc[i][j] !== 0) {\n this.buildHuffTable(HuffTab[i][j], this.l[i][j], this.v[i][j]);\n }\n }\n }\n\n return 1;\n };\n\n\n\n // Build_HuffTab()\n // Parameter: t table ID\n // c table class ( 0 for DC, 1 for AC )\n // L[i] # of codewords which length is i\n // V[i][j] Huffman Value (length=i)\n // Effect:\n // build up HuffTab[t][c] using L and V.\n jpeg.lossless.HuffmanTable.prototype.buildHuffTable = function(tab, L, V) {\n /*jslint bitwise: true */\n\n var currentTable, temp, k, i, j, n;\n temp = 256;\n k = 0;\n\n for (i = 0; i < 8; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i + 1)); n+=1) {\n tab[k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n }\n }\n\n for (i = 1; k < 256; i+=1, k+=1) {\n tab[k] = i | jpeg.lossless.HuffmanTable.MSB;\n }\n\n currentTable = 1;\n k = 0;\n\n for (i = 8; i < 16; i+=1) { // i+1 is Code length\n for (j = 0; j < L[i]; j+=1) {\n for (n = 0; n < (temp >> (i - 7)); n+=1) {\n tab[(currentTable * 256) + k] = V[i][j] | ((i + 1) << 8);\n k+=1;\n }\n\n if (k >= 256) {\n if (k > 256) {\n throw new Error(\"ERROR: Huffman table error(1)!\");\n }\n\n k = 0;\n currentTable+=1;\n }\n }\n }\n };\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.HuffmanTable;\n }\n\n },{\"./data-stream.js\":2,\"./utils.js\":10}],6:[function(require,module,exports){\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ****/\n\n /**\n * jpeg\n * @type {*|{}}\n */\n var jpeg = jpeg || {};\n\n /**\n * jpeg.lossless\n * @type {*|{}}\n */\n jpeg.lossless = jpeg.lossless || {};\n\n\n jpeg.lossless.ComponentSpec = jpeg.lossless.ComponentSpec || ((typeof require !== 'undefined') ? require('./component-spec.js') : null);\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.Decoder = jpeg.lossless.Decoder || ((typeof require !== 'undefined') ? require('./decoder.js') : null);\n jpeg.lossless.FrameHeader = jpeg.lossless.FrameHeader || ((typeof require !== 'undefined') ? require('./frame-header.js') : null);\n jpeg.lossless.HuffmanTable = jpeg.lossless.HuffmanTable || ((typeof require !== 'undefined') ? require('./huffman-table.js') : null);\n jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || ((typeof require !== 'undefined') ? require('./quantization-table.js') : null);\n jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\n jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || ((typeof require !== 'undefined') ? require('./scan-header.js') : null);\n jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n /*** Exports ***/\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg;\n }\n\n },{\"./component-spec.js\":1,\"./data-stream.js\":2,\"./decoder.js\":3,\"./frame-header.js\":4,\"./huffman-table.js\":5,\"./quantization-table.js\":7,\"./scan-component.js\":8,\"./scan-header.js\":9,\"./utils.js\":10}],7:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.Utils = jpeg.lossless.Utils || ((typeof require !== 'undefined') ? require('./utils.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.QuantizationTable = jpeg.lossless.QuantizationTable || function () {\n this.precision = []; // Quantization precision 8 or 16\n this.tq = []; // 1: this table is presented\n this.quantTables = jpeg.lossless.Utils.createArray(4, 64); // Tables\n\n this.tq[0] = 0;\n this.tq[1] = 0;\n this.tq[2] = 0;\n this.tq[3] = 0;\n };\n\n\n\n /*** Static Methods ***/\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable = function(qtab, table) {\n /*jslint bitwise: true */\n\n var i;\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[(0 * 8) + i]] *= 90;\n qtab[table[(4 * 8) + i]] *= 90;\n qtab[table[(2 * 8) + i]] *= 118;\n qtab[table[(6 * 8) + i]] *= 49;\n qtab[table[(5 * 8) + i]] *= 71;\n qtab[table[(1 * 8) + i]] *= 126;\n qtab[table[(7 * 8) + i]] *= 25;\n qtab[table[(3 * 8) + i]] *= 106;\n }\n\n for (i = 0; i < 8; i+=1) {\n qtab[table[0 + (8 * i)]] *= 90;\n qtab[table[4 + (8 * i)]] *= 90;\n qtab[table[2 + (8 * i)]] *= 118;\n qtab[table[6 + (8 * i)]] *= 49;\n qtab[table[5 + (8 * i)]] *= 71;\n qtab[table[1 + (8 * i)]] *= 126;\n qtab[table[7 + (8 * i)]] *= 25;\n qtab[table[3 + (8 * i)]] *= 106;\n }\n\n for (i = 0; i < 64; i+=1) {\n qtab[i] >>= 6;\n }\n };\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.QuantizationTable.prototype.read = function (data, table) {\n /*jslint bitwise: true */\n\n var count = 0, length, temp, t, i;\n\n length = data.get16();\n count += 2;\n\n while (count < length) {\n temp = data.get8();\n count+=1;\n t = temp & 0x0F;\n\n if (t > 3) {\n throw new Error(\"ERROR: Quantization table ID > 3\");\n }\n\n this.precision[t] = temp >> 4;\n\n if (this.precision[t] === 0) {\n this.precision[t] = 8;\n } else if (this.precision[t] === 1) {\n this.precision[t] = 16;\n } else {\n throw new Error(\"ERROR: Quantization table precision error\");\n }\n\n this.tq[t] = 1;\n\n if (this.precision[t] === 8) {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get8();\n count+=1;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n } else {\n for (i = 0; i < 64; i+=1) {\n if (count > length) {\n throw new Error(\"ERROR: Quantization table format error\");\n }\n\n this.quantTables[t][i] = data.get16();\n count += 2;\n }\n\n jpeg.lossless.QuantizationTable.enhanceQuantizationTable(this.quantTables[t], table);\n }\n }\n\n if (count !== length) {\n throw new Error(\"ERROR: Quantization table error [count!=Lq]\");\n }\n\n return 1;\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.QuantizationTable;\n }\n\n },{\"./data-stream.js\":2,\"./utils.js\":10}],8:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n\n\n /*** Constructor ***/\n jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || function () {\n this.acTabSel = 0; // AC table selector\n this.dcTabSel = 0; // DC table selector\n this.scanCompSel = 0; // Scan component selector\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanComponent;\n }\n\n },{}],9:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n jpeg.lossless.DataStream = jpeg.lossless.DataStream || ((typeof require !== 'undefined') ? require('./data-stream.js') : null);\n jpeg.lossless.ScanComponent = jpeg.lossless.ScanComponent || ((typeof require !== 'undefined') ? require('./scan-component.js') : null);\n\n\n /*** Constructor ***/\n jpeg.lossless.ScanHeader = jpeg.lossless.ScanHeader || function () {\n this.ah = 0;\n this.al = 0;\n this.numComp = 0; // Number of components in the scan\n this.selection = 0; // Start of spectral or predictor selection\n this.spectralEnd = 0; // End of spectral selection\n this.components = [];\n };\n\n\n /*** Prototype Methods ***/\n\n jpeg.lossless.ScanHeader.prototype.read = function(data) {\n /*jslint bitwise: true */\n\n var count = 0, length, i, temp;\n\n length = data.get16();\n count += 2;\n\n this.numComp = data.get8();\n count+=1;\n\n for (i = 0; i < this.numComp; i+=1) {\n this.components[i] = new jpeg.lossless.ScanComponent();\n\n if (count > length) {\n throw new Error(\"ERROR: scan header format error\");\n }\n\n this.components[i].scanCompSel = data.get8();\n count+=1;\n\n temp = data.get8();\n count+=1;\n\n this.components[i].dcTabSel = (temp >> 4);\n this.components[i].acTabSel = (temp & 0x0F);\n }\n\n this.selection = data.get8();\n count+=1;\n\n this.spectralEnd = data.get8();\n count+=1;\n\n temp = data.get8();\n this.ah = (temp >> 4);\n this.al = (temp & 0x0F);\n count+=1;\n\n if (count !== length) {\n throw new Error(\"ERROR: scan header format error [count!=Ns]\");\n }\n\n return 1;\n };\n\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.ScanHeader;\n }\n\n },{\"./data-stream.js\":2,\"./scan-component.js\":8}],10:[function(require,module,exports){\n /*\n * Copyright (C) 2015 Michael Martinez\n * Changes: Added support for selection values 2-7, fixed minor bugs &\n * warnings, split into multiple class files, and general clean up.\n *\n * 08-25-2015: Helmut Dersch agreed to a license change from LGPL to MIT.\n */\n\n /*\n * Copyright (C) Helmut Dersch\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n /*jslint browser: true, node: true */\n /*global require, module */\n\n \"use strict\";\n\n /*** Imports ***/\n var jpeg = jpeg || {};\n jpeg.lossless = jpeg.lossless || {};\n\n\n /*** Constructor ***/\n jpeg.lossless.Utils = jpeg.lossless.Utils || {};\n\n\n /*** Static methods ***/\n\n // http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript\n jpeg.lossless.Utils.createArray = function (length) {\n var arr = new Array(length || 0),\n i = length;\n\n if (arguments.length > 1) {\n var args = Array.prototype.slice.call(arguments, 1);\n while(i--) arr[length-1 - i] = jpeg.lossless.Utils.createArray.apply(this, args);\n }\n\n return arr;\n };\n\n\n // http://stackoverflow.com/questions/18638900/javascript-crc32\n jpeg.lossless.Utils.makeCRCTable = function(){\n var c;\n var crcTable = [];\n for(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n }\n return crcTable;\n };\n\n jpeg.lossless.Utils.crc32 = function(dataView) {\n var uint8view = new Uint8Array(dataView.buffer);\n var crcTable = jpeg.lossless.Utils.crcTable || (jpeg.lossless.Utils.crcTable = jpeg.lossless.Utils.makeCRCTable());\n var crc = 0 ^ (-1);\n\n for (var i = 0; i < uint8view.length; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ uint8view[i]) & 0xFF];\n }\n\n return (crc ^ (-1)) >>> 0;\n };\n\n\n /*** Exports ***/\n\n var moduleType = typeof module;\n if ((moduleType !== 'undefined') && module.exports) {\n module.exports = jpeg.lossless.Utils;\n }\n\n},{}]},{},[6])(6)\n});\n\n\n/***/ }),\n\n/***/ \"../codecs/jpx.min.js\":\n/*!****************************!*\\\n !*** ../codecs/jpx.min.js ***!\n \\****************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n/*! image-JPEG2000 - v0.3.1 - 2015-08-26 | https://github.com/OHIF/image-JPEG2000 */\n\"use strict\";var PDFJS = {};function info(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.infos&&console.log(\"Info: \"+a)}function warn(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.warnings&&console.log(\"Warning: \"+a)}function error(a){if(arguments.length>1){var b=[\"Error:\"];b.push.apply(b,arguments),console.log.apply(console,b),a=[].join.call(arguments,\" \")}else console.log(\"Error: \"+a);throw console.log(backtrace()),UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown),new Error(a)}function backtrace(){try{throw new Error}catch(a){return a.stack?a.stack.split(\"\\n\").slice(2).join(\"\\n\"):\"\"}}function assert(a,b){a||error(b)}function combineUrl(a,b){if(!b)return a;if(/^[a-z][a-z0-9+\\-.]*:/i.test(b))return b;var c;if(\"/\"===b.charAt(0))return c=a.indexOf(\"://\"),\"/\"===b.charAt(1)?++c:c=a.indexOf(\"/\",c+3),a.substring(0,c)+b;var d=a.length;c=a.lastIndexOf(\"#\"),d=c>=0?c:d,c=a.lastIndexOf(\"?\",d),d=c>=0?c:d;var e=a.lastIndexOf(\"/\",d);return a.substring(0,e+1)+b}function isValidUrl(a,b){if(!a)return!1;var c=/^[a-z][a-z0-9+\\-.]*(?=:)/i.exec(a);if(!c)return b;switch(c=c[0].toLowerCase()){case\"http\":case\"https\":case\"ftp\":case\"mailto\":case\"tel\":return!0;default:return!1}}function shadow(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!1}),c}function bytesToString(a){assert(null!==a&&\"object\"==typeof a&&void 0!==a.length,\"Invalid argument for bytesToString\");var b=a.length,c=8192;if(c>b)return String.fromCharCode.apply(null,a);for(var d=[],e=0;b>e;e+=c){var f=Math.min(e+c,b),g=a.subarray(e,f);d.push(String.fromCharCode.apply(null,g))}return d.join(\"\")}function stringToBytes(a){assert(\"string\"==typeof a,\"Invalid argument for stringToBytes\");for(var b=a.length,c=new Uint8Array(b),d=0;b>d;++d)c[d]=255&a.charCodeAt(d);return c}function string32(a){return String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)}function log2(a){for(var b=1,c=0;a>b;)b<<=1,c++;return c}function readInt8(a,b){return a[b]<<24>>24}function readUint16(a,b){return a[b]<<8|a[b+1]}function readUint32(a,b){return(a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3])>>>0}function isLittleEndian(){var a=new Uint8Array(2);a[0]=1;var b=new Uint16Array(a.buffer);return 1===b[0]}function hasCanvasTypedArrays(){var a=document.createElement(\"canvas\");a.width=a.height=1;var b=a.getContext(\"2d\"),c=b.createImageData(1,1);return\"undefined\"!=typeof c.data.buffer}function stringToPDFString(a){var b,c=a.length,d=[];if(\"þ\"===a[0]&&\"ÿ\"===a[1])for(b=2;c>b;b+=2)d.push(String.fromCharCode(a.charCodeAt(b)<<8|a.charCodeAt(b+1)));else for(b=0;c>b;++b){var e=PDFStringTranslateTable[a.charCodeAt(b)];d.push(e?String.fromCharCode(e):a.charAt(b))}return d.join(\"\")}function stringToUTF8String(a){return decodeURIComponent(escape(a))}function isEmptyObj(a){for(var b in a)return!1;return!0}function isBool(a){return\"boolean\"==typeof a}function isInt(a){return\"number\"==typeof a&&(0|a)===a}function isNum(a){return\"number\"==typeof a}function isString(a){return\"string\"==typeof a}function isNull(a){return null===a}function isName(a){return a instanceof Name}function isCmd(a,b){return a instanceof Cmd&&(void 0===b||a.cmd===b)}function isDict(a,b){if(!(a instanceof Dict))return!1;if(!b)return!0;var c=a.get(\"Type\");return isName(c)&&c.name===b}function isArray(a){return a instanceof Array}function isStream(a){return\"object\"==typeof a&&null!==a&&void 0!==a.getBytes}function isArrayBuffer(a){return\"object\"==typeof a&&null!==a&&void 0!==a.byteLength}function isRef(a){return a instanceof Ref}function createPromiseCapability(){var a={};return a.promise=new Promise(function(b,c){a.resolve=b,a.reject=c}),a}function MessageHandler(a,b){this.name=a,this.comObj=b,this.callbackIndex=1,this.postMessageTransfers=!0;var c=this.callbacksCapabilities={},d=this.actionHandler={};d.console_log=[function(a){console.log.apply(console,a)}],d.console_error=[function(a){console.error.apply(console,a)}],d._unsupported_feature=[function(a){UnsupportedManager.notify(a)}],b.onmessage=function(a){var e=a.data;if(e.isReply){var f=e.callbackId;if(e.callbackId in c){var g=c[f];delete c[f],\"error\"in e?g.reject(e.error):g.resolve(e.data)}else error(\"Cannot resolve callback \"+f)}else if(e.action in d){var h=d[e.action];e.callbackId?Promise.resolve().then(function(){return h[0].call(h[1],e.data)}).then(function(a){b.postMessage({isReply:!0,callbackId:e.callbackId,data:a})},function(a){b.postMessage({isReply:!0,callbackId:e.callbackId,error:a})}):h[0].call(h[1],e.data)}else error(\"Unknown action from worker: \"+e.action)}}function loadJpegStream(a,b,c){var d=new Image;d.onload=function(){c.resolve(a,d)},d.onerror=function(){c.resolve(a,null),warn(\"Error during JPEG image loading\")},d.src=b}var JpxImage=function(){function a(){this.failOnCorruptedImage=!1}function b(a,b){a.x0=Math.ceil(b.XOsiz/a.XRsiz),a.x1=Math.ceil(b.Xsiz/a.XRsiz),a.y0=Math.ceil(b.YOsiz/a.YRsiz),a.y1=Math.ceil(b.Ysiz/a.YRsiz),a.width=a.x1-a.x0,a.height=a.y1-a.y0}function c(a,b){for(var c,d=a.SIZ,e=[],f=Math.ceil((d.Xsiz-d.XTOsiz)/d.XTsiz),g=Math.ceil((d.Ysiz-d.YTOsiz)/d.YTsiz),h=0;g>h;h++)for(var i=0;f>i;i++)c={},c.tx0=Math.max(d.XTOsiz+i*d.XTsiz,d.XOsiz),c.ty0=Math.max(d.YTOsiz+h*d.YTsiz,d.YOsiz),c.tx1=Math.min(d.XTOsiz+(i+1)*d.XTsiz,d.Xsiz),c.ty1=Math.min(d.YTOsiz+(h+1)*d.YTsiz,d.Ysiz),c.width=c.tx1-c.tx0,c.height=c.ty1-c.ty0,c.components=[],e.push(c);a.tiles=e;for(var j=d.Csiz,k=0,l=j;l>k;k++)for(var m=b[k],n=0,o=e.length;o>n;n++){var p={};c=e[n],p.tcx0=Math.ceil(c.tx0/m.XRsiz),p.tcy0=Math.ceil(c.ty0/m.YRsiz),p.tcx1=Math.ceil(c.tx1/m.XRsiz),p.tcy1=Math.ceil(c.ty1/m.YRsiz),p.width=p.tcx1-p.tcx0,p.height=p.tcy1-p.tcy0,c.components[k]=p}}function d(a,b,c){var d=b.codingStyleParameters,e={};return d.entropyCoderWithCustomPrecincts?(e.PPx=d.precinctsSizes[c].PPx,e.PPy=d.precinctsSizes[c].PPy):(e.PPx=15,e.PPy=15),e.xcb_=c>0?Math.min(d.xcb,e.PPx-1):Math.min(d.xcb,e.PPx),e.ycb_=c>0?Math.min(d.ycb,e.PPy-1):Math.min(d.ycb,e.PPy),e}function e(a,b,c){var d=1<b.trx0?Math.ceil(b.trx1/d)-Math.floor(b.trx0/d):0,j=b.try1>b.try0?Math.ceil(b.try1/e)-Math.floor(b.try0/e):0,k=i*j;b.precinctParameters={precinctWidth:d,precinctHeight:e,numprecinctswide:i,numprecinctshigh:j,numprecincts:k,precinctWidthInSubband:g,precinctHeightInSubband:h}}function f(a,b,c){var d,e,f,g,h=c.xcb_,i=c.ycb_,j=1<>h,m=b.tby0>>i,n=b.tbx1+j-1>>h,o=b.tby1+k-1>>i,p=b.resolution.precinctParameters,q=[],r=[];for(e=m;o>e;e++)for(d=l;n>d;d++){f={cbx:d,cby:e,tbx0:j*d,tby0:k*e,tbx1:j*(d+1),tby1:k*(e+1)},f.tbx0_=Math.max(b.tbx0,f.tbx0),f.tby0_=Math.max(b.tby0,f.tby0),f.tbx1_=Math.min(b.tbx1,f.tbx1),f.tby1_=Math.min(b.tby1,f.tby1);var s=Math.floor((f.tbx0_-b.tbx0)/p.precinctWidthInSubband),t=Math.floor((f.tby0_-b.tby0)/p.precinctHeightInSubband);if(g=s+t*p.numprecinctswide,f.precinctNumber=g,f.subbandType=b.type,f.Lblock=3,!(f.tbx1_<=f.tbx0_||f.tby1_<=f.tby0_)){q.push(f);var u=r[g];void 0!==u?(du.cbxMax&&(u.cbxMax=d),eu.cbyMax&&(u.cbyMax=e)):r[g]=u={cbxMin:d,cbyMin:e,cbxMax:d,cbyMax:e},f.precinct=u}}b.codeblockParameters={codeblockWidth:h,codeblockHeight:i,numcodeblockwide:n-l+1,numcodeblockhigh:o-m+1},b.codeblocks=q,b.precincts=r}function g(a,b,c){for(var d=[],e=a.subbands,f=0,g=e.length;g>f;f++)for(var h=e[f],i=h.codeblocks,j=0,k=i.length;k>j;j++){var l=i[j];l.precinctNumber===b&&d.push(l)}return{layerNumber:c,codeblocks:d}}function h(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;e>j;j++){for(;h>=k;k++){for(;f>l;l++){var a=d.components[l];if(!(k>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[k],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,j);return m++,i}m=0}}l=0}k=0}}}function i(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=0,i=0;f>i;i++)h=Math.max(h,d.components[i].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;h>=j;j++){for(;e>k;k++){for(;f>l;l++){var a=d.components[l];if(!(j>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[j],c=b.precinctParameters.numprecincts;c>m;){var i=g(b,m,k);return m++,i}m=0}}l=0}k=0}}}function j(a){var b,c,d,e,f=a.SIZ,h=a.currentTile.index,i=a.tiles[h],j=i.codingStyleDefaultParameters.layersCount,k=f.Csiz,l=0;for(d=0;k>d;d++){var m=i.components[d];l=Math.max(l,m.codingStyleParameters.decompositionLevelsCount)}var n=new Int32Array(l+1);for(c=0;l>=c;++c){var o=0;for(d=0;k>d;++d){var p=i.components[d].resolutions;c=c;c++){for(;ed;d++){var a=i.components[d];if(!(c>a.codingStyleParameters.decompositionLevelsCount)){var f=a.resolutions[c],h=f.precinctParameters.numprecincts;if(!(e>=h)){for(;j>b;){var m=g(f,e,b);return b++,m}b=0}}}d=0}e=0}}}function k(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=h,j=0,k=0,l=0,o=0,p=0;this.nextPacket=function(){for(;pl;l++){for(var a=d.components[l],b=a.codingStyleParameters.decompositionLevelsCount;b>=k;k++){var c=a.resolutions[k],n=h.components[l].resolutions[k],q=m(o,p,n,i,c);if(null!==q){for(;e>j;){var r=g(c,q,j);return j++,r}j=0}}k=0}l=0}o=0}}}function l(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,h=n(d),i=0,j=0,k=0,l=0,o=0;this.nextPacket=function(){for(;f>k;++k){for(var a=d.components[k],b=h.components[k],c=a.codingStyleParameters.decompositionLevelsCount;o=j;j++){var n=a.resolutions[j],p=b.resolutions[j],q=m(l,o,p,b,n);if(null!==q){for(;e>i;){var r=g(n,q,i);return i++,r}i=0}}j=0}l=0}o=0}}}function m(a,b,c,d,e){var f=a*d.minWidth,g=b*d.minHeight;if(f%c.width!==0||g%c.height!==0)return null;var h=g/c.width*e.precinctParameters.numprecinctswide;return f/c.height+h}function n(a){for(var b=a.components.length,c=Number.MAX_VALUE,d=Number.MAX_VALUE,e=0,f=0,g=new Array(b),h=0;b>h;h++){for(var i=a.components[h],j=i.codingStyleParameters.decompositionLevelsCount,k=new Array(j+1),l=Number.MAX_VALUE,m=Number.MAX_VALUE,n=0,o=0,p=1,q=j;q>=0;--q){var r=i.resolutions[q],s=p*r.precinctParameters.precinctWidth,t=p*r.precinctParameters.precinctHeight;l=Math.min(l,s),m=Math.min(m,t),n=Math.max(n,r.precinctParameters.numprecinctswide),o=Math.max(o,r.precinctParameters.numprecinctshigh),k[q]={width:s,height:t},p<<=1}c=Math.min(c,l),d=Math.min(d,m),e=Math.max(e,n),f=Math.max(f,o),g[h]={resolutions:k,minWidth:l,minHeight:m,maxNumWide:n,maxNumHigh:o}}return{components:g,minWidth:c,minHeight:d,maxNumWide:e,maxNumHigh:f}}function o(a){for(var b=a.SIZ,c=a.currentTile.index,g=a.tiles[c],m=b.Csiz,n=0;m>n;n++){for(var o=g.components[n],p=o.codingStyleParameters.decompositionLevelsCount,q=[],r=[],s=0;p>=s;s++){var t=d(a,o,s),u={},v=1<l;){if(c+k>=b.length)throw new Error(\"Unexpected EOF\");var d=b[c+k];k++,m?(j=j<<7|d,l+=7,m=!1):(j=j<<8|d,l+=8),255===d&&(m=!0)}return l-=a,j>>>l&(1<a?a+3:(a=e(5),31>a?a+6:(a=e(7),a+37))}for(var j,k=0,l=0,m=!1,n=a.currentTile.index,o=a.tiles[n],p=a.COD.sopMarkerUsed,q=a.COD.ephMarkerUsed,r=o.packetsIterator;d>k;)try{h(),p&&f(145)&&g(4);var s=r.nextPacket();if(void 0===s)return;if(!e(1))continue;for(var t,u=s.layerNumber,x=[],y=0,z=s.codeblocks.length;z>y;y++){t=s.codeblocks[y];var A,B=t.precinct,C=t.cbx-B.cbxMin,D=t.cby-B.cbyMin,E=!1,F=!1;if(void 0!==t.included)E=!!e(1);else{B=t.precinct;var G,H;if(void 0!==B.inclusionTree)G=B.inclusionTree;else{var I=B.cbxMax-B.cbxMin+1,J=B.cbyMax-B.cbyMin+1;G=new w(I,J),H=new v(I,J),B.inclusionTree=G,B.zeroBitPlanesTree=H}for(G.reset(C,D,u);;){if(k>=b.length)return;if(G.isAboveThreshold())break;if(G.isKnown())G.nextLevel();else if(e(1)){if(G.setKnown(),G.isLeaf()){t.included=!0,E=F=!0;break}G.nextLevel()}else G.incrementValue()}}if(E){if(F){for(H=B.zeroBitPlanesTree,H.reset(C,D);;){if(k>=b.length)return;if(e(1)){if(A=!H.nextLevel())break}else H.incrementValue()}t.zeroBitPlanes=H.value}for(var K=i();e(1);)t.Lblock++;var L=log2(K),M=(1<K?L-1:L)+t.Lblock,N=e(M);x.push({codeblock:t,codingpasses:K,dataLength:N})}}for(h(),q&&f(146);x.length>0;){var O=x.shift();t=O.codeblock,void 0===t.data&&(t.data=[]),t.data.push({data:b,start:c+k,end:c+k+O.dataLength,codingpasses:O.codingpasses}),k+=O.dataLength}}catch(P){return}return k}function q(a,b,c,d,e,f,g,h){for(var i=d.tbx0,j=d.tby0,k=d.tbx1-d.tbx0,l=d.codeblocks,m=\"H\"===d.type.charAt(0)?1:0,n=\"H\"===d.type.charAt(1)?b:0,o=0,p=l.length;p>o;++o){var q=l[o],r=q.tbx1_-q.tbx0_,s=q.tby1_-q.tby0_;if(0!==r&&0!==s&&void 0!==q.data){var t,u;t=new x(r,s,q.subbandType,q.zeroBitPlanes,f),u=2;var v,w,y,z=q.data,A=0,B=0;for(v=0,w=z.length;w>v;v++)y=z[v],A+=y.end-y.start,B+=y.codingpasses;var C=new Int16Array(A),D=0;for(v=0,w=z.length;w>v;v++){y=z[v];var E=y.data.subarray(y.start,y.end);C.set(E,D),D+=E.length}var F=new ArithmeticDecoder(C,0,A);for(t.setDecoder(F),v=0;B>v;v++){switch(u){case 0:t.runSignificancePropogationPass();break;case 1:t.runMagnitudeRefinementPass();break;case 2:t.runCleanupPass(),h&&t.checkSegmentationSymbol()}u=(u+1)%3}var G,H,I,J=q.tbx0_-i+(q.tby0_-j)*k,K=t.coefficentsSign,L=t.coefficentsMagnitude,M=t.bitsDecoded,N=g?0:.5;D=0;var O=\"LL\"!==d.type;for(v=0;s>v;v++){var P=J/k|0,Q=2*P*(b-k)+m+n;for(G=0;r>G;G++){if(H=L[D],0!==H){H=(H+N)*e,0!==K[D]&&(H=-H),I=M[D];var R=O?Q+(J<<1):J;g&&I>=f?a[R]=H:a[R]=H*(1<=r;r++){for(var s=d.resolutions[r],t=s.trx1-s.trx0,v=s.try1-s.try0,w=new Float32Array(t*v),x=0,y=s.subbands.length;y>x;x++){var B,C;i?(B=h[p].mu,C=h[p].epsilon,p++):(B=h[0].mu,C=h[0].epsilon+(r>0?1-r:0));var D=s.subbands[x],E=u[D.type],F=m?1:Math.pow(2,l+E-C)*(1+B/2048),G=j+C-1;q(w,t,v,D,F,G,m,k)}o.push({width:t,height:v,items:w})}var H=n.calculate(o,d.tcx0,d.tcy0);return{left:d.tcx0,top:d.tcy0,width:H.width,height:H.height,items:H.items}}function s(a){for(var b=a.SIZ,c=a.components,d=b.Csiz,e=[],f=0,g=a.tiles.length;g>f;f++){var h,i=a.tiles[f],j=[];for(h=0;d>h;h++)j[h]=r(a,i,h);var k=j[0],l=c[0].isSigned;if(l)var m=new Int16Array(k.items.length*d);else var m=new Uint16Array(k.items.length*d);var n,o,p,q,s,t,u,v,w,x,y,z,A,B,C,D={left:k.left,top:k.top,width:k.width,height:k.height,items:m},E=0;if(i.codingStyleDefaultParameters.multipleComponentTransform){var F=4===d,G=j[0].items,H=j[1].items,I=j[2].items,J=F?j[3].items:null;n=c[0].precision-8,o=(128<t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],z=v-(x+w>>2),y=z+x,A=z+w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;else for(t=0;u>t;t++,E+=L)v=G[t]+o,w=H[t],x=I[t],y=v+1.402*x,z=v-.34413*w-.71414*x,A=v+1.772*w,m[E++]=0>=y?0:y>=p?255:y>>n,m[E++]=0>=z?0:z>=p?255:z>>n,m[E++]=0>=A?0:A>=p?255:A>>n;if(F)for(t=0,E=3;u>t;t++,E+=4)B=J[t],m[E]=q>=B?0:B>=s?255:B+o>>n}else for(h=0;d>h;h++)if(8===c[h].precision){var M=j[h].items;for(n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=q>=C?0:C>=p?255:C+o>>n,E+=d}else{var l=c[h].isSigned,M=j[h].items;if(l)for(E=h,t=0,u=M.length;u>t;t++)m[E]=M[t],E+=d;else{n=c[h].precision-8,o=(128<t;t++)C=M[t],m[E]=Math.max(Math.min(C+o,N),0),E+=d}}e.push(D)}return e}function t(a,b){for(var c=a.SIZ,d=c.Csiz,e=a.tiles[b],f=0;d>f;f++){var g=e.components[f],h=void 0!==a.currentTile.QCC[f]?a.currentTile.QCC[f]:a.currentTile.QCD;g.quantizationParameters=h;var i=void 0!==a.currentTile.COC[f]?a.currentTile.COC[f]:a.currentTile.COD;g.codingStyleParameters=i}e.codingStyleDefaultParameters=a.currentTile.COD}var u={LL:0,LH:1,HL:1,HH:2};a.prototype={parse:function(a){var b=readUint16(a,0);if(65359===b)return void this.parseCodestream(a,0,a.length);for(var c=0,d=a.length;d>c;){var e=8,f=readUint32(a,c),g=readUint32(a,c+4);if(c+=e,1===f&&(f=4294967296*readUint32(a,c)+readUint32(a,c+4),c+=8,e+=8),0===f&&(f=d-c+e),e>f)throw new Error(\"JPX Error: Invalid box field size\");var h=f-e,i=!0;switch(g){case 1785737832:i=!1;break;case 1668246642:var j=a[c];a[c+1],a[c+2];if(1===j){var k=readUint32(a,c+3);switch(k){case 16:case 17:case 18:break;default:warn(\"Unknown colorspace \"+k)}}else 2===j&&info(\"ICC profile not supported\");break;case 1785737827:this.parseCodestream(a,c,c+h);break;case 1783636e3:218793738!==readUint32(a,c)&&warn(\"Invalid JP2 signature\");break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var l=String.fromCharCode(g>>24&255,g>>16&255,g>>8&255,255&g);warn(\"Unsupported header type \"+g+\" (\"+l+\")\")}i&&(c+=h)}},parseImageProperties:function(a){for(var b=a.getByte();b>=0;){var c=b;b=a.getByte();var d=c<<8|b;if(65361===d){a.skip(4);var e=a.getInt32()>>>0,f=a.getInt32()>>>0,g=a.getInt32()>>>0,h=a.getInt32()>>>0;a.skip(16);var i=a.getUint16();return this.width=e-g,this.height=f-h,this.componentsCount=i,void(this.bitsPerComponent=8)}}throw new Error(\"JPX Error: No size marker found in JPX stream\")},parseCodestream:function(a,d,e){var f={};try{for(var g=!1,h=d;e>h+1;){var i=readUint16(a,h);h+=2;var j,k,l,m,n,q,r=0;switch(i){case 65359:f.mainHeader=!0;break;case 65497:break;case 65361:r=readUint16(a,h);var u={};u.Xsiz=readUint32(a,h+4),u.Ysiz=readUint32(a,h+8),u.XOsiz=readUint32(a,h+12),u.YOsiz=readUint32(a,h+16),u.XTsiz=readUint32(a,h+20),u.YTsiz=readUint32(a,h+24),u.XTOsiz=readUint32(a,h+28),u.YTOsiz=readUint32(a,h+32);var v=readUint16(a,h+36);u.Csiz=v;var w=[];j=h+38;for(var x=0;v>x;x++){var y={precision:(127&a[j])+1,isSigned:!!(128&a[j]),XRsiz:a[j+1],YRsiz:a[j+1]};b(y,u),w.push(y)}f.SIZ=u,f.components=w,c(f,w),f.QCC=[],f.COC=[];break;case 65372:r=readUint16(a,h);var z={};switch(j=h+2,k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error(\"JPX Error: Invalid SQcd value \"+k)}for(z.noQuantization=8===m,z.scalarExpounded=n,z.guardBits=k>>5,l=[];r+h>j;){var A={};8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A)}z.SPqcds=l,f.mainHeader?f.QCD=z:(f.currentTile.QCD=z,f.currentTile.QCC=[]);break;case 65373:r=readUint16(a,h);var B={};j=h+2;var C;switch(f.SIZ.Csiz<257?C=a[j++]:(C=readUint16(a,j),j+=2),k=a[j++],31&k){case 0:m=8,n=!0;break;case 1:m=16,n=!1;break;case 2:m=16,n=!0;break;default:throw new Error(\"JPX Error: Invalid SQcd value \"+k)}for(B.noQuantization=8===m,B.scalarExpounded=n,B.guardBits=k>>5,l=[];r+h>j;)A={},8===m?(A.epsilon=a[j++]>>3,A.mu=0):(A.epsilon=a[j]>>3,A.mu=(7&a[j])<<8|a[j+1],j+=2),l.push(A);B.SPqcds=l,f.mainHeader?f.QCC[C]=B:f.currentTile.QCC[C]=B;break;case 65362:r=readUint16(a,h);var D={};j=h+2;var E=a[j++];D.entropyCoderWithCustomPrecincts=!!(1&E),D.sopMarkerUsed=!!(2&E),D.ephMarkerUsed=!!(4&E),D.progressionOrder=a[j++],D.layersCount=readUint16(a,j),j+=2,D.multipleComponentTransform=a[j++],D.decompositionLevelsCount=a[j++],D.xcb=(15&a[j++])+2,D.ycb=(15&a[j++])+2;var F=a[j++];if(D.selectiveArithmeticCodingBypass=!!(1&F),D.resetContextProbabilities=!!(2&F),D.terminationOnEachCodingPass=!!(4&F),D.verticalyStripe=!!(8&F),D.predictableTermination=!!(16&F),D.segmentationSymbolUsed=!!(32&F),D.reversibleTransformation=a[j++],D.entropyCoderWithCustomPrecincts){for(var G=[];r+h>j;){var H=a[j++];G.push({PPx:15&H,PPy:H>>4})}D.precinctsSizes=G}var I=[];if(D.selectiveArithmeticCodingBypass&&I.push(\"selectiveArithmeticCodingBypass\"),D.resetContextProbabilities&&I.push(\"resetContextProbabilities\"),D.terminationOnEachCodingPass&&I.push(\"terminationOnEachCodingPass\"),D.verticalyStripe&&I.push(\"verticalyStripe\"),D.predictableTermination&&I.push(\"predictableTermination\"),I.length>0)throw g=!0,new Error(\"JPX Error: Unsupported COD options (\"+I.join(\", \")+\")\");f.mainHeader?f.COD=D:(f.currentTile.COD=D,f.currentTile.COC=[]);break;case 65424:r=readUint16(a,h),q={},q.index=readUint16(a,h+2),q.length=readUint32(a,h+4),q.dataEnd=q.length+h-2,q.partIndex=a[h+8],q.partsCount=a[h+9],f.mainHeader=!1,0===q.partIndex&&(q.COD=f.COD,q.COC=f.COC.slice(0),q.QCD=f.QCD,q.QCC=f.QCC.slice(0)),f.currentTile=q;break;case 65427:q=f.currentTile,0===q.partIndex&&(t(f,q.index),o(f)),r=q.dataEnd-h,p(f,a,h,r);break;case 65365:case 65367:case 65368:case 65380:r=readUint16(a,h);break;case 65363:throw new Error(\"JPX Error: Codestream code 0xFF53 (COC) is not implemented\");default:throw new Error(\"JPX Error: Unknown codestream code: \"+i.toString(16))}h+=r}}catch(J){if(g||this.failOnCorruptedImage)throw J;warn(\"Trying to recover from \"+J.message)}this.tiles=s(f),this.width=f.SIZ.Xsiz-f.SIZ.XOsiz,this.height=f.SIZ.Ysiz-f.SIZ.YOsiz,this.componentsCount=f.SIZ.Csiz}};var v=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){var e={width:a,height:b,items:[]};this.levels.push(e),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b){for(var c,d=0,e=0;d>=1,b>>=1,d++}d--,c=this.levels[d],c.items[c.index]=e,this.currentLevel=d,delete this.value},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]++},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];return a--,0>a?(this.value=c,!1):(this.currentLevel=a,b=this.levels[a],b.items[b.index]=c,!0)}},a}(),w=function(){function a(a,b){var c=log2(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){for(var e=new Uint8Array(a*b),f=new Uint8Array(a*b),g=0,h=e.length;h>g;g++)e[g]=0,f[g]=0;var i={width:a,height:b,items:e,status:f};this.levels.push(i),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b,c){this.currentStopValue=c;for(var d=0;d>=1,b>>=1,d++}this.currentLevel=this.levels.length-1,this.minValue=this.levels[this.currentLevel].items[0]},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]=a.items[a.index]+1,a.items[a.index]>this.minValue&&(this.minValue=a.items[a.index])},nextLevel:function(){var a=this.currentLevel;if(a--,0>a)return!1;this.currentLevel=a;var b=this.levels[a];return b.items[b.index]this.minValue&&(this.minValue=b.items[b.index]),!0},isLeaf:function(){return 0===this.currentLevel},isAboveThreshold:function(){var a=this.currentLevel,b=this.levels[a];return b.items[b.index]>this.currentStopValue},isKnown:function(){var a=this.currentLevel,b=this.levels[a];return b.status[b.index]>0},setKnown:function(){var a=this.currentLevel,b=this.levels[a];b.status[b.index]=1}},a}(),x=function(){function a(a,b,c,g,h){this.width=a,this.height=b,this.contextLabelTable=\"HH\"===c?f:\"HL\"===c?e:d;var i=a*b;this.neighborsSignificance=new Uint8Array(i),this.coefficentsSign=new Uint8Array(i),this.coefficentsMagnitude=h>14?new Uint32Array(i):h>6?new Uint16Array(i):new Uint8Array(i),this.processingFlags=new Uint8Array(i);var j=new Uint8Array(i);if(0!==g)for(var k=0;i>k;k++)j[k]=g;this.bitsDecoded=j,this.reset()}var b=17,c=18,d=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),e=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),f=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);return a.prototype={setDecoder:function(a){this.decoder=a},reset:function(){this.contexts=new Int8Array(19),this.contexts[0]=8,this.contexts[b]=92,this.contexts[c]=6},setNeighborsSignificance:function(a,b,c){var d,e=this.neighborsSignificance,f=this.width,g=this.height,h=b>0,i=f>b+1;a>0&&(d=c-f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),g>a+1&&(d=c+f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),h&&(e[c-1]+=1),i&&(e[c+1]+=1),e[c]|=128},runSignificancePropogationPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.coefficentsMagnitude,e=this.coefficentsSign,f=this.neighborsSignificance,g=this.processingFlags,h=this.contexts,i=this.contextLabelTable,j=this.bitsDecoded,k=-2,l=1,m=2,n=0;c>n;n+=4)for(var o=0;b>o;o++)for(var p=n*b+o,q=0;4>q;q++,p+=b){var r=n+q;if(r>=c)break;if(g[p]&=k,!d[p]&&f[p]){var s=i[f[p]],t=a.readBit(h,s);if(t){var u=this.decodeSignBit(r,o,p);e[p]=u,d[p]=1,this.setNeighborsSignificance(r,o,p),g[p]|=m}j[p]++,g[p]|=l}}},decodeSignBit:function(a,b,c){var d,e,f,g,h,i,j=this.width,k=this.height,l=this.coefficentsMagnitude,m=this.coefficentsSign;g=b>0&&0!==l[c-1],j>b+1&&0!==l[c+1]?(f=m[c+1],g?(e=m[c-1],d=1-f-e):d=1-f-f):g?(e=m[c-1],d=1-e-e):d=0;var n=3*d;return g=a>0&&0!==l[c-j],k>a+1&&0!==l[c+j]?(f=m[c+j],g?(e=m[c-j],d=1-f-e+n):d=1-f-f+n):g?(e=m[c-j],d=1-e-e+n):d=n,d>=0?(h=9+d,i=this.decoder.readBit(this.contexts,h)):(h=9-d,i=1^this.decoder.readBit(this.contexts,h)),i},runMagnitudeRefinementPass:function(){for(var a,b=this.decoder,c=this.width,d=this.height,e=this.coefficentsMagnitude,f=this.neighborsSignificance,g=this.contexts,h=this.bitsDecoded,i=this.processingFlags,j=1,k=2,l=c*d,m=4*c,n=0;l>n;n=a){a=Math.min(l,n+m);for(var o=0;c>o;o++)for(var p=n+o;a>p;p+=c)if(e[p]&&0===(i[p]&j)){var q=16;if(0!==(i[p]&k)){i[p]^=k;var r=127&f[p];q=0===r?15:14}var s=b.readBit(g,q);e[p]=e[p]<<1|s,h[p]++,i[p]|=j}}},runCleanupPass:function(){for(var a,d=this.decoder,e=this.width,f=this.height,g=this.neighborsSignificance,h=this.coefficentsMagnitude,i=this.coefficentsSign,j=this.contexts,k=this.contextLabelTable,l=this.bitsDecoded,m=this.processingFlags,n=1,o=2,p=e,q=2*e,r=3*e,s=0;f>s;s=a){a=Math.min(s+4,f);for(var t=s*e,u=f>s+3,v=0;e>v;v++){var w,x=t+v,y=u&&0===m[x]&&0===m[x+p]&&0===m[x+q]&&0===m[x+r]&&0===g[x]&&0===g[x+p]&&0===g[x+q]&&0===g[x+r],z=0,A=x,B=s;if(y){var C=d.readBit(j,c);if(!C){l[x]++,l[x+p]++,l[x+q]++,l[x+r]++;continue}z=d.readBit(j,b)<<1|d.readBit(j,b),0!==z&&(B=s+z,A+=z*e),w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o,A=x;for(var D=s;B>=D;D++,A+=e)l[A]++;z++}for(B=s+z;a>B;B++,A+=e)if(!h[A]&&0===(m[A]&n)){var E=k[g[A]],F=d.readBit(j,E);1===F&&(w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o),l[A]++}}}},checkSegmentationSymbol:function(){var a=this.decoder,c=this.contexts,d=a.readBit(c,b)<<3|a.readBit(c,b)<<2|a.readBit(c,b)<<1|a.readBit(c,b);if(10!==d)throw new Error(\"JPX Error: Invalid segmentation symbol\")}},a}(),y=function(){function a(){}return a.prototype.calculate=function(a,b,c){for(var d=a[0],e=1,f=a.length;f>e;e++)d=this.iterate(d,a[e],b,c);return d},a.prototype.extend=function(a,b,c){var d=b-1,e=b+1,f=b+c-2,g=b+c;a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d]=a[e],a[g]=a[f]},a.prototype.iterate=function(a,b,c,d){var e,f,g,h,i,j,k=a.width,l=a.height,m=a.items,n=b.width,o=b.height,p=b.items;for(g=0,e=0;l>e;e++)for(h=2*e*n,f=0;k>f;f++,g++,h+=2)p[h]=m[g];m=a.items=null;var q=4,r=new Float32Array(n+2*q);if(1===n){if(0!==(1&c))for(j=0,g=0;o>j;j++,g+=n)p[g]*=.5}else for(j=0,g=0;o>j;j++,g+=n)r.set(p.subarray(g,g+n),q),this.extend(r,q,n),this.filter(r,q,n),p.set(r.subarray(q,q+n),g);var s=16,t=[];for(e=0;s>e;e++)t.push(new Float32Array(o+2*q));var u,v=0;if(a=q+o,1===o){if(0!==(1&d))for(i=0;n>i;i++)p[i]*=.5}else for(i=0;n>i;i++){if(0===v){for(s=Math.min(n-i,s),g=i,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)t[u][h]=p[g+u];v=s}v--;var w=t[v];if(this.extend(w,q,o),this.filter(w,q,o),0===v)for(g=i-s+1,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)p[g+u]=t[u][h]}return{width:n,height:o,items:p}},a}(),z=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f,g,h,i=-1.586134342059924,j=-.052980118572961,k=.882911075530934,l=.443506852043971,m=1.230174104914001,n=1/m;for(e=b-3,f=d+4;f--;e+=2)a[e]*=n;for(e=b-2,g=l*a[e-1],f=d+3;f--&&(h=l*a[e+1],a[e]=m*a[e]-g-h,f--);e+=2)e+=2,g=l*a[e+1],a[e]=m*a[e]-g-h;for(e=b-1,g=k*a[e-1],f=d+2;f--&&(h=k*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=k*a[e+1],a[e]-=g+h;for(e=b,g=j*a[e-1],f=d+1;f--&&(h=j*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=j*a[e+1],a[e]-=g+h;if(0!==d)for(e=b+1,g=i*a[e-1],f=d;f--&&(h=i*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=i*a[e+1],a[e]-=g+h},a}(),A=function(){function a(){y.call(this)}return a.prototype=Object.create(y.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f;for(e=b,f=d+1;f--;e+=2)a[e]-=a[e-1]+a[e+1]+2>>2;for(e=b+1,f=d;f--;e+=2)a[e]+=a[e-1]+a[e+1]>>1},a}();return a}(),ArithmeticDecoder=function(){function a(a,b,c){this.data=a,this.bp=b,this.dataEnd=c,this.chigh=a[b],this.clow=0,this.byteIn(),this.chigh=this.chigh<<7&65535|this.clow>>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var b=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{\nqe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];return a.prototype={byteIn:function(){var a=this.data,b=this.bp;if(255===a[b]){var c=a[b+1];c>143?(this.clow+=65280,this.ct=8):(b++,this.clow+=a[b]<<9,this.ct=7,this.bp=b)}else b++,this.clow+=b65535&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a,c){var d,e=a[c]>>1,f=1&a[c],g=b[e],h=g.qe,i=this.a-h;if(this.chighi?(i=h,d=f,e=g.nmps):(i=h,d=1^f,1===g.switchFlag&&(f=d),e=g.nlps);else{if(this.chigh-=h,0!==(32768&i))return this.a=i,f;h>i?(d=1^f,1===g.switchFlag&&(f=d),e=g.nlps):(d=f,e=g.nmps)}do 0===this.ct&&this.byteIn(),i<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,this.ct--;while(0===(32768&i));return this.a=i,a[c]=e<<1|f,d}},a}(),globalScope=\"undefined\"==typeof window?this:window,isWorker=\"undefined\"==typeof window,FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0],TextRenderingMode={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},AnnotationType={WIDGET:1,TEXT:2,LINK:3},StreamType={UNKNOWN:0,FLATE:1,LZW:2,DCT:3,JPX:4,JBIG:5,A85:6,AHX:7,CCF:8,RL:9},FontType={UNKNOWN:0,TYPE1:1,TYPE1C:2,CIDFONTTYPE0:3,CIDFONTTYPE0C:4,TRUETYPE:5,CIDFONTTYPE2:6,TYPE3:7,OPENTYPE:8,TYPE0:9,MMTYPE1:10};globalScope.PDFJS||(globalScope.PDFJS={}),globalScope.PDFJS.pdfBug=!1,PDFJS.VERBOSITY_LEVELS={errors:0,warnings:1,infos:5};var OPS=PDFJS.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91},UNSUPPORTED_FEATURES=PDFJS.UNSUPPORTED_FEATURES={unknown:\"unknown\",forms:\"forms\",javaScript:\"javaScript\",smask:\"smask\",shadingPattern:\"shadingPattern\",font:\"font\"},UnsupportedManager=PDFJS.UnsupportedManager=function(){var a=[];return{listen:function(b){a.push(b)},notify:function(b){warn('Unsupported feature \"'+b+'\"');for(var c=0,d=a.length;d>c;c++)a[c](b)}}}();PDFJS.isValidUrl=isValidUrl,PDFJS.shadow=shadow;var PasswordResponses=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},PasswordException=function(){function a(a,b){this.name=\"PasswordException\",this.message=a,this.code=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.PasswordException=PasswordException;var UnknownErrorException=function(){function a(a,b){this.name=\"UnknownErrorException\",this.message=a,this.details=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnknownErrorException=UnknownErrorException;var InvalidPDFException=function(){function a(a){this.name=\"InvalidPDFException\",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.InvalidPDFException=InvalidPDFException;var MissingPDFException=function(){function a(a){this.name=\"MissingPDFException\",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.MissingPDFException=MissingPDFException;var UnexpectedResponseException=function(){function a(a,b){this.name=\"UnexpectedResponseException\",this.message=a,this.status=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnexpectedResponseException=UnexpectedResponseException;var NotImplementedException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name=\"NotImplementedException\",a.constructor=a,a}(),MissingDataException=function(){function a(a,b){this.begin=a,this.end=b,this.message=\"Missing data [\"+a+\", \"+b+\")\"}return a.prototype=new Error,a.prototype.name=\"MissingDataException\",a.constructor=a,a}(),XRefParseException=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name=\"XRefParseException\",a.constructor=a,a}();Object.defineProperty(PDFJS,\"isLittleEndian\",{configurable:!0,get:function(){return shadow(PDFJS,\"isLittleEndian\",isLittleEndian())}}),Object.defineProperty(PDFJS,\"hasCanvasTypedArrays\",{configurable:!0,get:function(){return shadow(PDFJS,\"hasCanvasTypedArrays\",hasCanvasTypedArrays())}});var Uint32ArrayView=function(){function a(a,b){this.buffer=a,this.byteLength=a.length,this.length=void 0===b?this.byteLength>>2:b,c(this.length)}function b(a){return{get:function(){var b=this.buffer,c=a<<2;return(b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24)>>>0},set:function(b){var c=this.buffer,d=a<<2;c[d]=255&b,c[d+1]=b>>8&255,c[d+2]=b>>16&255,c[d+3]=b>>>24&255}}}function c(c){for(;c>d;)Object.defineProperty(a.prototype,d,b(d)),d++}a.prototype=Object.create(null);var d=0;return a}(),IDENTITY_MATRIX=[1,0,0,1,0,0],Util=PDFJS.Util=function(){function a(){}var b=[\"rgb(\",0,\",\",0,\",\",0,\")\"];return a.makeCssRgb=function(a,c,d){return b[1]=a,b[3]=c,b[5]=d,b.join(\"\")},a.transform=function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},a.applyTransform=function(a,b){var c=a[0]*b[0]+a[1]*b[2]+b[4],d=a[0]*b[1]+a[1]*b[3]+b[5];return[c,d]},a.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2],d=(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,e=(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c;return[d,e]},a.getAxialAlignedBoundingBox=function(b,c){var d=a.applyTransform(b,c),e=a.applyTransform(b.slice(2,4),c),f=a.applyTransform([b[0],b[3]],c),g=a.applyTransform([b[2],b[1]],c);return[Math.min(d[0],e[0],f[0],g[0]),Math.min(d[1],e[1],f[1],g[1]),Math.max(d[0],e[0],f[0],g[0]),Math.max(d[1],e[1],f[1],g[1])]},a.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]},a.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]},a.singularValueDecompose2dScale=function(a){var b=[a[0],a[2],a[1],a[3]],c=a[0]*b[0]+a[1]*b[2],d=a[0]*b[1]+a[1]*b[3],e=a[2]*b[0]+a[3]*b[2],f=a[2]*b[1]+a[3]*b[3],g=(c+f)/2,h=Math.sqrt((c+f)*(c+f)-4*(c*f-e*d))/2,i=g+h||1,j=g-h||1;return[Math.sqrt(i),Math.sqrt(j)]},a.normalizeRect=function(a){var b=a.slice(0);return a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]),a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]),b},a.intersect=function(b,c){function d(a,b){return a-b}var e=[b[0],b[2],c[0],c[2]].sort(d),f=[b[1],b[3],c[1],c[3]].sort(d),g=[];return b=a.normalizeRect(b),c=a.normalizeRect(c),e[0]===b[0]&&e[1]===c[0]||e[0]===c[0]&&e[1]===b[0]?(g[0]=e[1],g[2]=e[2],f[0]===b[1]&&f[1]===c[1]||f[0]===c[1]&&f[1]===b[1]?(g[1]=f[1],g[3]=f[2],g):!1):!1},a.sign=function(a){return 0>a?-1:1},a.appendToArray=function(a,b){Array.prototype.push.apply(a,b)},a.prependToArray=function(a,b){Array.prototype.unshift.apply(a,b)},a.extendObj=function(a,b){for(var c in b)a[c]=b[c]},a.getInheritableProperty=function(a,b){for(;a&&!a.has(b);)a=a.get(\"Parent\");return a?a.get(b):null},a.inherit=function(a,b,c){a.prototype=Object.create(b.prototype),a.prototype.constructor=a;for(var d in c)a.prototype[d]=c[d]},a.loadScript=function(a,b){var c=document.createElement(\"script\"),d=!1;c.setAttribute(\"src\",a),b&&(c.onload=function(){d||b(),d=!0}),document.getElementsByTagName(\"head\")[0].appendChild(c)},a}(),PageViewport=PDFJS.PageViewport=function(){function a(a,b,c,d,e,f){this.viewBox=a,this.scale=b,this.rotation=c,this.offsetX=d,this.offsetY=e;var g,h,i,j,k=(a[2]+a[0])/2,l=(a[3]+a[1])/2;switch(c%=360,c=0>c?c+360:c){case 180:g=-1,h=0,i=0,j=1;break;case 90:g=0,h=1,i=1,j=0;break;case 270:g=0,h=-1,i=-1,j=0;break;default:g=1,h=0,i=0,j=-1}f&&(i=-i,j=-j);var m,n,o,p;0===g?(m=Math.abs(l-a[1])*b+d,n=Math.abs(k-a[0])*b+e,o=Math.abs(a[3]-a[1])*b,p=Math.abs(a[2]-a[0])*b):(m=Math.abs(k-a[0])*b+d,n=Math.abs(l-a[1])*b+e,o=Math.abs(a[2]-a[0])*b,p=Math.abs(a[3]-a[1])*b),this.transform=[g*b,h*b,i*b,j*b,m-g*b*k-i*b*l,n-h*b*k-j*b*l],this.width=o,this.height=p,this.fontScale=b}return a.prototype={clone:function(b){b=b||{};var c=\"scale\"in b?b.scale:this.scale,d=\"rotation\"in b?b.rotation:this.rotation;return new a(this.viewBox.slice(),c,d,this.offsetX,this.offsetY,b.dontFlip)},convertToViewportPoint:function(a,b){return Util.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=Util.applyTransform([a[0],a[1]],this.transform),c=Util.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],c[0],c[1]]},convertToPdfPoint:function(a,b){return Util.applyInverseTransform([a,b],this.transform)}},a}(),PDFStringTranslateTable=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];PDFJS.createPromiseCapability=createPromiseCapability,function(){function a(a){this._status=b,this._handlers=[];try{a.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(c){this._reject(c)}}if(globalScope.Promise)return\"function\"!=typeof globalScope.Promise.all&&(globalScope.Promise.all=function(a){var b,c,d=0,e=[],f=new globalScope.Promise(function(a,d){b=a,c=d});return a.forEach(function(a,f){d++,a.then(function(a){e[f]=a,d--,0===d&&b(e)},c)}),0===d&&b(e),f}),\"function\"!=typeof globalScope.Promise.resolve&&(globalScope.Promise.resolve=function(a){return new globalScope.Promise(function(b){b(a)})}),\"function\"!=typeof globalScope.Promise.reject&&(globalScope.Promise.reject=function(a){return new globalScope.Promise(function(b,c){c(a)})}),void(\"function\"!=typeof globalScope.Promise.prototype[\"catch\"]&&(globalScope.Promise.prototype[\"catch\"]=function(a){return globalScope.Promise.prototype.then(void 0,a)}));var b=0,c=1,d=2,e=500,f={handlers:[],running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(a){a._status!==b&&(this.handlers=this.handlers.concat(a._handlers),a._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(var a=1,b=Date.now()+a;this.handlers.length>0;){var e=this.handlers.shift(),f=e.thisPromise._status,g=e.thisPromise._value;try{f===c?\"function\"==typeof e.onResolve&&(g=e.onResolve(g)):\"function\"==typeof e.onReject&&(g=e.onReject(g),f=c,e.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(e.thisPromise))}catch(h){f=d,g=h}if(e.nextPromise._updateStatus(f,g),Date.now()>=b)break}return this.handlers.length>0?void setTimeout(this.runHandlers.bind(this),0):void(this.running=!1)},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var b=0;be){var c=this.unhandledRejections[b].promise._value,d=\"Unhandled rejection: \"+c;c.stack&&(d+=\"\\n\"+c.stack),warn(d),this.unhandledRejections.splice(b),b--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),e))}};a.all=function(b){function c(a){g._status!==d&&(i=[],f(a))}var e,f,g=new a(function(a,b){e=a,f=b}),h=b.length,i=[];if(0===h)return e(i),g;for(var j=0,k=b.length;k>j;++j){var l=b[j],m=function(a){return function(b){g._status!==d&&(i[a]=b,h--,0===h&&e(i))}}(j);a.isPromise(l)?l.then(m,c):m(l)}return g},a.isPromise=function(a){return a&&\"function\"==typeof a.then},a.resolve=function(b){return new a(function(a){a(b)})},a.reject=function(b){return new a(function(a,c){c(b)})},a.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(b,e){if(this._status!==c&&this._status!==d){if(b===c&&a.isPromise(e))return void e.then(this._updateStatus.bind(this,c),this._updateStatus.bind(this,d));this._status=b,this._value=e,b===d&&0===this._handlers.length&&(this._unhandledRejection=!0,f.addUnhandledRejection(this)),f.scheduleHandlers(this)}},_resolve:function(a){this._updateStatus(c,a)},_reject:function(a){this._updateStatus(d,a)},then:function(b,c){var d=new a(function(a,b){this.resolve=a,this.reject=b});return this._handlers.push({thisPromise:this,onResolve:b,onReject:c,nextPromise:d}),f.scheduleHandlers(this),d},\"catch\":function(a){return this.then(void 0,a)}},globalScope.Promise=a}();var StatTimer=function(){function a(a,b,c){for(;a.lengthb;++b){var g=d[b].name;g.length>f&&(f=g.length)}for(b=0,c=d.length;c>b;++b){var h=d[b],i=h.end-h.start;e+=a(h.name,\" \",f)+\" \"+i+\"ms\\n\"}return e}},b}();PDFJS.createBlob=function(a,b){if(\"undefined\"!=typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;return c.append(a),c.getBlob(b)},PDFJS.createObjectURL=function(){var a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return function(b,c){if(!PDFJS.disableCreateObjectURL&&\"undefined\"!=typeof URL&&URL.createObjectURL){var d=PDFJS.createBlob(b,c);return URL.createObjectURL(d)}for(var e=\"data:\"+c+\";base64,\",f=0,g=b.length;g>f;f+=3){var h=255&b[f],i=255&b[f+1],j=255&b[f+2],k=h>>2,l=(3&h)<<4|i>>4,m=g>f+1?(15&i)<<2|j>>6:64,n=g>f+2?63&j:64;e+=a[k]+a[l]+a[m]+a[n]}return e}}(),MessageHandler.prototype={on:function(a,b,c){var d=this.actionHandler;d[a]&&error('There is already an actionName called \"'+a+'\"'),d[a]=[b,c]},send:function(a,b,c){var d={action:a,data:b};this.postMessage(d,c)},sendWithPromise:function(a,b,c){var d=this.callbackIndex++,e={action:a,data:b,callbackId:d},f=createPromiseCapability();this.callbacksCapabilities[d]=f;try{this.postMessage(e,c)}catch(g){f.reject(g)}return f.promise},postMessage:function(a,b){b&&this.postMessageTransfers?this.comObj.postMessage(a,b):this.comObj.postMessage(a)}};\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = JpxImage;\n\n/***/ }),\n\n/***/ \"../codecs/openJPEG-FixedMemory.js\":\n/*!*****************************************!*\\\n !*** ../codecs/openJPEG-FixedMemory.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n/*! OpenJPEG.js - v0.2.0 - 2016-06-07 | (c) 2016 Chris Hafey | https://github.com/chafey/openjpeg */\n\n// Notes:\n// - Had to add export default at the bottom\n// - Had to patch parsejsfunc, see https://github.com/svaarala/duktape/issues/410\nvar OpenJPEG = function(Module) {\n Module = Module || {};\n\nvar Module;if(!Module)Module=(typeof OpenJPEG!==\"undefined\"?OpenJPEG:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window===\"object\";var ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";var ENVIRONMENT_IS_NODE=typeof process===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module[\"print\"])Module[\"print\"]=function print(x){process[\"stdout\"].write(x+\"\\n\")};if(!Module[\"printErr\"])Module[\"printErr\"]=function printErr(x){process[\"stderr\"].write(x+\"\\n\")};var nodeFS=require(\"fs\");var nodePath=require(\"path\");Module[\"read\"]=function read(filename,binary){filename=nodePath[\"normalize\"](filename);var ret=nodeFS[\"readFileSync\"](filename);if(!ret&&filename!=nodePath[\"resolve\"](filename)){filename=path.join(__dirname,\"..\",\"src\",filename);ret=nodeFS[\"readFileSync\"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module[\"load\"]=function load(f){globalEval(read(f))};if(!Module[\"thisProgram\"]){if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\")}else{Module[\"thisProgram\"]=\"unknown-program\"}}Module[\"arguments\"]=process[\"argv\"].slice(2);if(typeof module!==\"undefined\"){module[\"exports\"]=Module}process[\"on\"](\"uncaughtException\",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module[\"inspect\"]=(function(){return\"[Emscripten Module object]\"})}else if(ENVIRONMENT_IS_SHELL){if(!Module[\"print\"])Module[\"print\"]=print;if(typeof printErr!=\"undefined\")Module[\"printErr\"]=printErr;if(typeof read!=\"undefined\"){Module[\"read\"]=read}else{Module[\"read\"]=function read(){throw\"no read() available (jsc?)\"}}Module[\"readBinary\"]=function readBinary(f){if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}var data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module[\"read\"]=function read(url){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments}if(typeof console!==\"undefined\"){if(!Module[\"print\"])Module[\"print\"]=function print(x){console.log(x)};if(!Module[\"printErr\"])Module[\"printErr\"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module[\"print\"])Module[\"print\"]=TRY_USE_DUMP&&typeof dump!==\"undefined\"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module[\"load\"]=importScripts}if(typeof Module[\"setWindowTitle\"]===\"undefined\"){Module[\"setWindowTitle\"]=(function(title){document.title=title})}}else{throw\"Unknown runtime environment. Where are we?\"}function globalEval(x){eval.call(null,x)}if(!Module[\"load\"]&&Module[\"read\"]){Module[\"load\"]=function load(f){globalEval(Module[\"read\"](f))}}if(!Module[\"print\"]){Module[\"print\"]=(function(){})}if(!Module[\"printErr\"]){Module[\"printErr\"]=Module[\"print\"]}if(!Module[\"arguments\"]){Module[\"arguments\"]=[]}if(!Module[\"thisProgram\"]){Module[\"thisProgram\"]=\"./this.program\"}Module.print=Module[\"print\"];Module.printErr=Module[\"printErr\"];Module[\"preRun\"]=[];Module[\"postRun\"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return Runtime.QUANTUM_SIZE}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type===\"double\"||type===\"i64\"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type==\"i64\"||type==\"double\"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module[\"dynCall_\"+sig].apply(null,args)}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i=TOTAL_MEMORY){var success=enlargeMemory();if(!success){DYNAMICTOP=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module[\"Runtime\"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}var globalScope=this;function getCFunc(ident){var func=Module[\"_\"+ident];if(!func){try{func=eval(\"_\"+ident)}catch(e){}}assert(func,\"Cannot call unknown function \"+ident+\" (perhaps LLVM optimizations or closure removed it?)\");return func}var cwrap,ccall;((function(){var JSfuncs={\"stackSave\":(function(){Runtime.stackSave()}),\"stackRestore\":(function(){Runtime.stackRestore()}),\"arrayToC\":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),\"stringToC\":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}Module[\"setValue\"]=setValue;function getValue(ptr,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP32[ptr>>2];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];default:abort(\"invalid type for setValue: \"+type)}return null}Module[\"getValue\"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module[\"ALLOC_NORMAL\"]=ALLOC_NORMAL;Module[\"ALLOC_STACK\"]=ALLOC_STACK;Module[\"ALLOC_STATIC\"]=ALLOC_STATIC;Module[\"ALLOC_DYNAMIC\"]=ALLOC_DYNAMIC;Module[\"ALLOC_NONE\"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab===\"number\"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types===\"string\"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType===\"i8\"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module[\"UTF8ToString\"](ptr)}Module[\"Pointer_stringify\"]=Pointer_stringify;function AsciiToString(ptr){var str=\"\";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module[\"AsciiToString\"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module[\"stringToAscii\"]=stringToAscii;function UTF8ArrayToString(u8Array,idx){var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}Module[\"UTF8ArrayToString\"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module[\"UTF8ToString\"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module[\"stringToUTF8Array\"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module[\"stringToUTF8\"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module[\"lengthBytesUTF8\"]=lengthBytesUTF8;function UTF16ToString(ptr){var i=0;var str=\"\";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module[\"UTF16ToString\"]=UTF16ToString;function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}Module[\"stringToUTF16\"]=stringToUTF16;function lengthBytesUTF16(str){return str.length*2}Module[\"lengthBytesUTF16\"]=lengthBytesUTF16;function UTF32ToString(ptr){var i=0;var str=\"\";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module[\"UTF32ToString\"]=UTF32ToString;function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}Module[\"stringToUTF32\"]=stringToUTF32;function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}Module[\"lengthBytesUTF32\"]=lengthBytesUTF32;function demangle(func){var hasLibcxxabi=!!Module[\"___cxa_demangle\"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module[\"___cxa_demangle\"](buf,0,0,status);if(getValue(status,\"i32\")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={\"v\":\"void\",\"b\":\"bool\",\"c\":\"char\",\"s\":\"short\",\"i\":\"int\",\"l\":\"long\",\"f\":\"float\",\"d\":\"double\",\"w\":\"wchar_t\",\"a\":\"signed char\",\"h\":\"unsigned char\",\"t\":\"unsigned short\",\"j\":\"unsigned int\",\"m\":\"unsigned long\",\"x\":\"long long\",\"y\":\"unsigned long long\",\"z\":\"...\"};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre=\"\";for(var a=0;a\"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case\"P\":list.push(parse(true,1,true)[0]+\"*\");break;case\"R\":list.push(parse(true,1,true)[0]+\"&\");break;case\"L\":{i++;var end=func.indexOf(\"E\",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case\"A\":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!==\"_\")throw\"?\";i++;list.push(parse(true,1,true)[0]+\" [\"+size+\"]\");break};case\"E\":break paramLoop;default:ret+=\"?\"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]===\"void\")list=[];if(rawList){if(ret){list.push(ret+\"?\")}return list}else{return ret+flushList()}}var parsed=func;try{if(func==\"Object._main\"||func==\"_main\"){return\"main()\"}if(typeof func===\"number\")func=Pointer_stringify(func);if(func[0]!==\"_\")return func;if(func[1]!==\"_\")return func;if(func[2]!==\"Z\")return func;switch(func[3]){case\"n\":return\"operator new()\";case\"d\":return\"operator delete()\"}parsed=parse()}catch(e){parsed+=\"?\"}if(parsed.indexOf(\"?\")>=0&&!hasLibcxxabi){Runtime.warnOnce(\"warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling\")}return parsed}function demangleAll(text){return text.replace(/__Z[\\w\\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module[\"stackTrace\"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){if(x%4096>0){x+=4096-x%4096}return x}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function abortOnCannotGrowMemory(){abort(\"Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value \"+TOTAL_MEMORY+\", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 \")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||4e8;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Runtime.dynCall(\"v\",func)}else{Runtime.dynCall(\"vi\",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module[\"addOnPreRun\"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module[\"addOnInit\"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module[\"addOnPreMain\"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module[\"addOnExit\"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module[\"addOnPostRun\"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module[\"intArrayFromString\"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}Module[\"intArrayToString\"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module[\"writeStringToMemory\"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module[\"writeArrayToMemory\"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module[\"writeAsciiToMemory\"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math[\"imul\"]||Math[\"imul\"](4294967295,5)!==-5)Math[\"imul\"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math[\"imul\"];if(!Math[\"clz32\"])Math[\"clz32\"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math[\"clz32\"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}Module[\"addRunDependency\"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"removeRunDependency\"]=removeRunDependency;Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+25664;__ATINIT__.push();allocate([131,192,202,161,69,182,251,63,127,251,58,112,206,136,234,63,127,251,58,112,206,136,234,63,131,192,202,161,69,182,251,63,225,122,20,174,71,225,252,63,94,186,73,12,2,43,249,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,248,63,0,0,0,0,0,0,6,64,0,0,0,0,0,128,21,64,92,143,194,245,40,92,37,64,215,163,112,61,10,87,53,64,246,40,92,143,194,85,69,64,133,235,81,184,30,85,85,64,102,102,102,102,102,86,101,64,205,204,204,204,204,84,117,64,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,207,247,83,227,165,155,240,63,70,182,243,253,212,120,249,63,39,49,8,172,28,90,7,64,29,90,100,59,223,207,22,64,41,92,143,194,245,168,38,64,164,112,61,10,215,163,54,64,0,0,0,0,0,160,70,64,31,133,235,81,184,158,86,64,205,204,204,204,204,156,102,64,0,0,0,0,0,0,0,0,173,250,92,109,197,254,230,63,86,125,174,182,98,127,237,63,199,75,55,137,65,96,249,63,242,210,77,98,16,88,8,64,250,126,106,188,116,19,24,64,133,235,81,184,30,5,40,64,0,0,0,0,0,0,56,64,92,143,194,245,40,252,71,64,236,81,184,30,133,251,87,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,113,61,10,215,163,112,255,63,104,145,237,124,63,181,16,64,117,147,24,4,86,206,32,64,102,102,102,102,102,230,48,64,236,81,184,30,133,235,64,64,92,143,194,245,40,236,80,64,154,153,153,153,153,233,96,64,154,153,153,153,153,233,112,64,51,51,51,51,51,231,128,64,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,147,24,4,86,14,45,0,64,182,243,253,212,120,233,15,64,246,40,92,143,194,181,32,64,10,215,163,112,61,10,49,64,195,245,40,92,143,34,65,64,184,30,133,235,81,40,81,64,154,153,153,153,153,41,97,64,154,153,153,153,153,41,113,64,0,0,0,0,0,40,129,64,0,0,0,0,0,0,0,0,164,112,61,10,215,163,0,64,236,81,184,30,133,235,14,64,119,190,159,26,47,157,32,64,174,71,225,122,20,46,49,64,123,20,174,71,225,90,65,64,246,40,92,143,194,101,81,64,154,153,153,153,153,105,97,64,154,153,153,153,153,105,113,64,154,153,153,153,153,105,129,64,0,0,0,0,0,0,0,0,4,0,0,0,67,80,82,76,0,0,0,0,0,0,0,0,76,82,67,80,0,0,0,0,3,0,0,0,80,67,82,76,0,0,0,0,1,0,0,0,82,76,67,80,0,0,0,0,2,0,0,0,82,80,67,76,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,144,255,0,0,12,0,0,0,1,0,0,0,82,255,0,0,20,0,0,0,2,0,0,0,83,255,0,0,20,0,0,0,3,0,0,0,94,255,0,0,20,0,0,0,4,0,0,0,92,255,0,0,20,0,0,0,5,0,0,0,93,255,0,0,20,0,0,0,6,0,0,0,95,255,0,0,20,0,0,0,7,0,0,0,81,255,0,0,2,0,0,0,8,0,0,0,85,255,0,0,4,0,0,0,9,0,0,0,87,255,0,0,4,0,0,0,10,0,0,0,88,255,0,0,16,0,0,0,11,0,0,0,96,255,0,0,4,0,0,0,12,0,0,0,97,255,0,0,16,0,0,0,13,0,0,0,145,255,0,0,0,0,0,0,0,0,0,0,99,255,0,0,4,0,0,0,14,0,0,0,100,255,0,0,20,0,0,0,15,0,0,0,116,255,0,0,20,0,0,0,16,0,0,0,120,255,0,0,4,0,0,0,17,0,0,0,117,255,0,0,20,0,0,0,18,0,0,0,119,255,0,0,20,0,0,0,19,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,4,0,0,0,8,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,12,0,0,0,32,32,80,106,20,0,0,0,112,121,116,102,21,0,0,0,104,50,112,106,22,0,0,0,114,100,104,105,23,0,0,0,114,108,111,99,24,0,0,0,99,99,112,98,25,0,0,0,114,108,99,112,26,0,0,0,112,97,109,99,27,0,0,0,102,101,100,99,28,0,0,0,1,86,0,0,0,0,0,0,164,4,0,0,180,4,0,0,1,86,0,0,1,0,0,0,180,4,0,0,164,4,0,0,1,52,0,0,0,0,0,0,196,4,0,0,68,5,0,0,1,52,0,0,1,0,0,0,212,4,0,0,84,5,0,0,1,24,0,0,0,0,0,0,228,4,0,0,164,5,0,0,1,24,0,0,1,0,0,0,244,4,0,0,180,5,0,0,193,10,0,0,0,0,0,0,4,5,0,0,4,6,0,0,193,10,0,0,1,0,0,0,20,5,0,0,20,6,0,0,33,5,0,0,0,0,0,0,36,5,0,0,36,8,0,0,33,5,0,0,1,0,0,0,52,5,0,0,52,8,0,0,33,2,0,0,0,0,0,0,68,9,0,0,164,8,0,0,33,2,0,0,1,0,0,0,84,9,0,0,180,8,0,0,1,86,0,0,0,0,0,0,100,5,0,0,84,5,0,0,1,86,0,0,1,0,0,0,116,5,0,0,68,5,0,0,1,84,0,0,0,0,0,0,132,5,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,5,0,0,84,6,0,0,1,72,0,0,0,0,0,0,164,5,0,0,68,6,0,0,1,72,0,0,1,0,0,0,180,5,0,0,84,6,0,0,1,56,0,0,0,0,0,0,196,5,0,0,68,6,0,0,1,56,0,0,1,0,0,0,212,5,0,0,84,6,0,0,1,48,0,0,0,0,0,0,228,5,0,0,164,6,0,0,1,48,0,0,1,0,0,0,244,5,0,0,180,6,0,0,1,36,0,0,0,0,0,0,4,6,0,0,196,6,0,0,1,36,0,0,1,0,0,0,20,6,0,0,212,6,0,0,1,28,0,0,0,0,0,0,36,6,0,0,4,7,0,0,1,28,0,0,1,0,0,0,52,6,0,0,20,7,0,0,1,22,0,0,0,0,0,0,36,8,0,0,36,7,0,0,1,22,0,0,1,0,0,0,52,8,0,0,52,7,0,0,1,86,0,0,0,0,0,0,100,6,0,0,84,6,0,0,1,86,0,0,1,0,0,0,116,6,0,0,68,6,0,0,1,84,0,0,0,0,0,0,132,6,0,0,68,6,0,0,1,84,0,0,1,0,0,0,148,6,0,0,84,6,0,0,1,81,0,0,0,0,0,0,164,6,0,0,100,6,0,0,1,81,0,0,1,0,0,0,180,6,0,0,116,6,0,0,1,72,0,0,0,0,0,0,196,6,0,0,132,6,0,0,1,72,0,0,1,0,0,0,212,6,0,0,148,6,0,0,1,56,0,0,0,0,0,0,228,6,0,0,164,6,0,0,1,56,0,0,1,0,0,0,244,6,0,0,180,6,0,0,1,52,0,0,0,0,0,0,4,7,0,0,196,6,0,0,1,52,0,0,1,0,0,0,20,7,0,0,212,6,0,0,1,48,0,0,0,0,0,0,36,7,0,0,228,6,0,0,1,48,0,0,1,0,0,0,52,7,0,0,244,6,0,0,1,40,0,0,0,0,0,0,68,7,0,0,228,6,0,0,1,40,0,0,1,0,0,0,84,7,0,0,244,6,0,0,1,36,0,0,0,0,0,0,100,7,0,0,4,7,0,0,1,36,0,0,1,0,0,0,116,7,0,0,20,7,0,0,1,34,0,0,0,0,0,0,132,7,0,0,36,7,0,0,1,34,0,0,1,0,0,0,148,7,0,0,52,7,0,0,1,28,0,0,0,0,0,0,164,7,0,0,68,7,0,0,1,28,0,0,1,0,0,0,180,7,0,0,84,7,0,0,1,24,0,0,0,0,0,0,196,7,0,0,100,7,0,0,1,24,0,0,1,0,0,0,212,7,0,0,116,7,0,0,1,22,0,0,0,0,0,0,228,7,0,0,132,7,0,0,1,22,0,0,1,0,0,0,244,7,0,0,148,7,0,0,1,20,0,0,0,0,0,0,4,8,0,0,164,7,0,0,1,20,0,0,1,0,0,0,20,8,0,0,180,7,0,0,1,18,0,0,0,0,0,0,36,8,0,0,196,7,0,0,1,18,0,0,1,0,0,0,52,8,0,0,212,7,0,0,1,17,0,0,0,0,0,0,68,8,0,0,228,7,0,0,1,17,0,0,1,0,0,0,84,8,0,0,244,7,0,0,193,10,0,0,0,0,0,0,100,8,0,0,4,8,0,0,193,10,0,0,1,0,0,0,116,8,0,0,20,8,0,0,193,9,0,0,0,0,0,0,132,8,0,0,36,8,0,0,193,9,0,0,1,0,0,0,148,8,0,0,52,8,0,0,161,8,0,0,0,0,0,0,164,8,0,0,68,8,0,0,161,8,0,0,1,0,0,0,180,8,0,0,84,8,0,0,33,5,0,0,0,0,0,0,196,8,0,0,100,8,0,0,33,5,0,0,1,0,0,0,212,8,0,0,116,8,0,0,65,4,0,0,0,0,0,0,228,8,0,0,132,8,0,0,65,4,0,0,1,0,0,0,244,8,0,0,148,8,0,0,161,2,0,0,0,0,0,0,4,9,0,0,164,8,0,0,161,2,0,0,1,0,0,0,20,9,0,0,180,8,0,0,33,2,0,0,0,0,0,0,36,9,0,0,196,8,0,0,33,2,0,0,1,0,0,0,52,9,0,0,212,8,0,0,65,1,0,0,0,0,0,0,68,9,0,0,228,8,0,0,65,1,0,0,1,0,0,0,84,9,0,0,244,8,0,0,17,1,0,0,0,0,0,0,100,9,0,0,4,9,0,0,17,1,0,0,1,0,0,0,116,9,0,0,20,9,0,0,133,0,0,0,0,0,0,0,132,9,0,0,36,9,0,0,133,0,0,0,1,0,0,0,148,9,0,0,52,9,0,0,73,0,0,0,0,0,0,0,164,9,0,0,68,9,0,0,73,0,0,0,1,0,0,0,180,9,0,0,84,9,0,0,37,0,0,0,0,0,0,0,196,9,0,0,100,9,0,0,37,0,0,0,1,0,0,0,212,9,0,0,116,9,0,0,21,0,0,0,0,0,0,0,228,9,0,0,132,9,0,0,21,0,0,0,1,0,0,0,244,9,0,0,148,9,0,0,9,0,0,0,0,0,0,0,4,10,0,0,164,9,0,0,9,0,0,0,1,0,0,0,20,10,0,0,180,9,0,0,5,0,0,0,0,0,0,0,36,10,0,0,196,9,0,0,5,0,0,0,1,0,0,0,52,10,0,0,212,9,0,0,1,0,0,0,0,0,0,0,36,10,0,0,228,9,0,0,1,0,0,0,1,0,0,0,52,10,0,0,244,9,0,0,1,86,0,0,0,0,0,0,68,10,0,0,68,10,0,0,1,86,0,0,1,0,0,0,84,10,0,0,84,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,11,0,0,12,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,38,94,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,64,4,32,0,32,2,128,0,128,8,16,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,1,0,3,128,4,0,6,128,7,0,9,128,10,0,12,128,13,0,15,128,16,0,18,128,19,0,21,128,22,0,24,128,25,0,27,128,28,0,30,128,31,0,33,128,34,0,36,128,37,0,39,128,40,0,42,128,43,0,45,128,46,0,48,128,49,0,51,128,52,0,54,128,55,0,57,128,58,0,60,128,61,0,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,0,81,128,82,0,84,128,85,0,87,128,88,0,90,128,91,0,93,128,94,0,96,128,97,0,99,128,100,0,102,128,103,0,105,128,106,0,108,128,109,0,111,128,112,0,114,128,115,0,117,128,118,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,128,38,128,39,128,40,128,41,0,43,0,44,0,45,128,46,128,47,0,49,0,50,128,51,128,52,0,54,0,55,128,56,0,58,0,59,128,60,0,62,128,63,128,64,0,66,128,67,0,69,128,70,0,72,128,73,0,75,128,76,0,78,128,79,128,81,0,83,128,84,0,86,0,88,128,89,0,91,0,93,128,94,128,96,0,98,0,100,128,101,128,103,0,105,0,107,0,109,128,110,128,112,128,114,128,116,0,118,0,120,0,122,0,124,0,126,0,24,128,23,0,23,128,22,0,22,128,21,0,21,128,20,0,20,128,19,0,19,128,18,0,18,128,17,0,17,128,16,0,16,128,15,0,15,128,14,0,14,128,13,0,13,128,12,0,12,128,11,0,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,0,5,128,4,0,4,128,3,0,3,128,2,0,2,128,1,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,1,128,1,0,2,128,2,0,3,128,3,0,4,128,4,0,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,0,11,128,11,0,12,128,12,0,13,128,13,0,14,128,14,0,15,128,15,0,16,128,16,0,17,128,17,0,18,128,18,0,19,128,19,0,20,128,20,0,21,128,21,0,22,128,22,0,23,128,23,0,32,0,31,0,30,0,29,0,28,0,27,128,26,128,25,128,24,128,23,0,23,0,22,0,21,128,20,128,19,0,19,0,18,128,17,128,16,0,16,0,15,128,14,0,14,0,13,128,12,0,12,128,11,128,10,0,10,128,9,0,9,128,8,0,8,128,7,0,7,128,6,0,6,128,5,128,5,0,5,128,4,0,4,0,4,128,3,0,3,0,3,128,2,128,2,0,2,0,2,128,1,128,1,0,1,0,1,0,1,128,0,128,0,128,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,128,0,128,0,128,0,0,1,0,1,0,1,128,1,128,1,0,2,0,2,128,2,128,2,0,3,0,3,128,3,0,4,0,4,128,4,0,5,128,5,128,5,0,6,128,6,0,7,128,7,0,8,128,8,0,9,128,9,0,10,128,10,128,11,0,12,128,12,0,13,0,14,128,14,0,15,0,16,128,16,128,17,0,18,0,19,128,19,128,20,0,21,0,22,0,23,128,23,128,24,128,25,128,26,0,27,0,28,0,29,0,30,0,31,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,116,104,101,32,100,101,99,111,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,104,101,97,100,101,114,0,91,69,82,82,79,82,93,32,111,112,106,95,100,101,99,111,109,112,114,101,115,115,58,32,102,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,33,0,91,69,82,82,79,82,93,32,37,115,0,83,116,114,101,97,109,32,114,101,97,99,104,101,100,32,105,116,115,32,101,110,100,32,33,10,0,69,114,114,111,114,32,111,110,32,119,114,105,116,105,110,103,32,115,116,114,101,97,109,33,10,0,83,116,114,101,97,109,32,101,114,114,111,114,33,10,0,50,46,49,46,48,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,115,101,116,117,112,95,100,101,99,111,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,67,111,100,101,99,32,112,114,111,118,105,100,101,100,32,116,111,32,116,104,101,32,111,112,106,95,114,101,97,100,95,104,101,97,100,101,114,32,102,117,110,99,116,105,111,110,32,105,115,32,110,111,116,32,97,32,100,101,99,111,109,112,114,101,115,115,111,114,32,104,97,110,100,108,101,114,46,10,0,119,98,0,114,98,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,44,37,100,93,10,0,68,101,112,114,101,99,97,116,101,100,32,102,105,101,108,100,115,32,99,112,95,99,105,110,101,109,97,32,111,114,32,99,112,95,114,115,105,122,32,97,114,101,32,117,115,101,100,10,80,108,101,97,115,101,32,99,111,110,115,105,100,101,114,32,117,115,105,110,103,32,111,110,108,121,32,116,104,101,32,114,115,105,122,32,102,105,101,108,100,10,83,101,101,32,111,112,101,110,106,112,101,103,46,104,32,100,111,99,117,109,101,110,116,97,116,105,111,110,32,102,111,114,32,109,111,114,101,32,100,101,116,97,105,108,115,10,0,84,104,101,32,100,101,115,105,114,101,100,32,109,97,120,105,109,117,109,32,99,111,100,101,115,116,114,101,97,109,32,115,105,122,101,32,104,97,115,32,108,105,109,105,116,101,100,10,97,116,32,108,101,97,115,116,32,111,110,101,32,111,102,32,116,104,101,32,100,101,115,105,114,101,100,32,113,117,97,108,105,116,121,32,108,97,121,101,114,115,10,0,74,80,69,71,32,50,48,48,48,32,83,99,97,108,97,98,108,101,32,68,105,103,105,116,97,108,32,67,105,110,101,109,97,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,49,32,115,105,110,103,108,101,32,113,117,97,108,105,116,121,32,108,97,121,101,114,45,62,32,78,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,45,62,32,82,97,116,101,32,111,102,32,116,104,101,32,108,97,115,116,32,108,97,121,101,114,32,40,37,51,46,49,102,41,32,119,105,108,108,32,98,101,32,117,115,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,60,61,32,53,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,53,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,49,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,62,61,32,49,32,38,38,32,60,61,32,54,10,45,62,32,78,117,109,98,101,114,32,111,102,32,100,101,99,111,109,112,111,115,105,116,105,111,110,32,108,101,118,101,108,115,32,102,111,114,99,101,100,32,116,111,32,54,32,40,114,97,116,104,101,114,32,116,104,97,110,32,37,100,41,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,51,48,50,48,56,51,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,51,48,50,48,56,51,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,65,115,32,110,111,32,114,97,116,101,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,44,32,116,104,105,115,32,108,105,109,105,116,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,97,110,100,32,52,32,40,50,107,47,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,77,97,120,105,109,117,109,32,49,48,52,49,54,54,54,32,99,111,109,112,114,101,115,115,101,100,32,98,121,116,101,115,32,64,32,50,52,102,112,115,10,45,62,32,83,112,101,99,105,102,105,101,100,32,114,97,116,101,32,101,120,99,101,101,100,115,32,116,104,105,115,32,108,105,109,105,116,46,32,82,97,116,101,32,119,105,108,108,32,98,101,32,102,111,114,99,101,100,32,116,111,32,49,48,52,49,54,54,54,32,98,121,116,101,115,46,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,51,32,99,111,109,112,111,110,101,110,116,115,45,62,32,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,115,105,103,110,101,100,0,117,110,115,105,103,110,101,100,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,80,114,101,99,105,115,105,111,110,32,111,102,32,101,97,99,104,32,99,111,109,112,111,110,101,110,116,32,115,104,97,108,108,32,98,101,32,49,50,32,98,105,116,115,32,117,110,115,105,103,110,101,100,45,62,32,65,116,32,108,101,97,115,116,32,99,111,109,112,111,110,101,110,116,32,37,100,32,111,102,32,105,110,112,117,116,32,105,109,97,103,101,32,40,37,100,32,98,105,116,115,44,32,37,115,41,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,51,32,40,50,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,50,48,52,56,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,49,48,56,48,10,45,62,32,73,110,112,117,116,32,105,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,51,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,114,111,102,105,108,101,45,52,32,40,52,107,32,100,99,32,112,114,111,102,105,108,101,41,32,114,101,113,117,105,114,101,115,58,10,119,105,100,116,104,32,60,61,32,52,48,57,54,32,97,110,100,32,104,101,105,103,104,116,32,60,61,32,50,49,54,48,10,45,62,32,73,109,97,103,101,32,115,105,122,101,32,37,100,32,120,32,37,100,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,10,45,62,32,78,111,110,45,112,114,111,102,105,108,101,45,52,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,98,101,32,103,101,110,101,114,97,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,76,111,110,103,32,84,101,114,109,32,83,116,111,114,97,103,101,32,112,114,111,102,105,108,101,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,66,114,111,97,100,99,97,115,116,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,73,77,70,32,112,114,111,102,105,108,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,74,80,69,71,32,50,48,48,48,32,80,97,114,116,45,50,32,112,114,111,102,105,108,101,32,100,101,102,105,110,101,100,10,98,117,116,32,110,111,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,46,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,85,110,115,117,112,112,111,114,116,101,100,32,80,97,114,116,45,50,32,101,120,116,101,110,115,105,111,110,32,101,110,97,98,108,101,100,10,80,114,111,102,105,108,101,32,115,101,116,32,116,111,32,78,79,78,69,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,117,115,101,114,32,101,110,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,112,121,32,111,102,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,99,111,109,109,101,110,116,32,115,116,114,105,110,103,10,0,37,115,37,115,0,67,114,101,97,116,101,100,32,98,121,32,79,112,101,110,74,80,69,71,32,118,101,114,115,105,111,110,32,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,104,101,99,107,105,110,103,32,116,104,101,32,112,111,99,32,118,97,108,117,101,115,46,10,0,77,105,115,115,105,110,103,32,112,97,99,107,101,116,115,32,112,111,115,115,105,98,108,101,32,108,111,115,115,32,111,102,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,99,111,100,105,110,103,32,112,97,114,97,109,101,116,101,114,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,116,101,109,112,32,98,117,102,102,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,70,97,105,108,101,100,32,116,111,32,105,110,118,101,114,115,101,32,101,110,99,111,100,101,114,32,77,67,84,32,100,101,99,111,100,105,110,103,32,109,97,116,114,105,120,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,108,108,111,99,97,116,101,32,101,110,99,111,100,101,114,32,77,67,84,32,110,111,114,109,115,32,10,0,70,97,105,108,101,100,32,116,111,32,115,101,116,117,112,32,106,50,107,32,109,99,116,32,101,110,99,111,100,105,110,103,10,0,67,97,110,110,111,116,32,112,101,114,102,111,114,109,32,77,67,84,32,111,110,32,99,111,109,112,111,110,101,110,116,115,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,115,105,122,101,115,46,32,68,105,115,97,98,108,105,110,103,32,77,67,84,46,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,10,0,73,110,99,111,110,115,105,115,116,101,110,116,32,109,97,114,107,101,114,32,115,105,122,101,10,0,77,97,114,107,101,114,32,105,115,32,110,111,116,32,99,111,109,112,108,105,97,110,116,32,119,105,116,104,32,105,116,115,32,112,111,115,105,116,105,111,110,10,0,77,97,114,107,101,114,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,104,101,97,100,101,114,10,0,78,111,116,32,115,117,114,101,32,104,111,119,32,116,104,97,116,32,104,97,112,112,101,110,101,100,46,10,0,70,97,105,108,32,116,111,32,114,101,97,100,32,116,104,101,32,99,117,114,114,101,110,116,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,32,40,37,35,120,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,116,108,32,109,97,114,107,101,114,10,0,84,105,108,101,32,112,97,114,116,32,108,101,110,103,116,104,32,115,105,122,101,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,115,116,114,101,97,109,32,108,101,110,103,116,104,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,79,84,32,109,97,114,107,101,114,10,0,111,112,106,95,106,50,107,95,97,112,112,108,121,95,110,98,95,116,105,108,101,95,112,97,114,116,115,95,99,111,114,114,101,99,116,105,111,110,32,101,114,114,111,114,10,0,78,111,110,32,99,111,110,102,111,114,109,97,110,116,32,99,111,100,101,115,116,114,101,97,109,32,84,80,115,111,116,61,61,84,78,115,111,116,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,84,32,109,97,114,107,101,114,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,84,32,100,97,116,97,10,0,67,97,110,110,111,116,32,100,101,99,111,100,101,32,116,105,108,101,44,32,109,101,109,111,114,121,32,101,114,114,111,114,10,0,72,101,97,100,101,114,32,111,102,32,116,105,108,101,32,37,100,32,47,32,37,100,32,104,97,115,32,98,101,101,110,32,114,101,97,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,46,10,0,78,111,32,69,79,67,32,109,97,114,107,101,114,46,32,80,111,115,115,105,98,108,121,32,97,32,116,114,117,110,99,97,116,101,100,32,115,116,114,101,97,109,10,0,83,116,114,101,97,109,32,100,111,101,115,32,110,111,116,32,101,110,100,32,119,105,116,104,32,69,79,67,10,0,83,116,114,101,97,109,32,116,111,111,32,115,104,111,114,116,44,32,101,120,112,101,99,116,101,100,32,83,79,84,10,0,78,101,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,98,101,102,111,114,101,32,98,101,103,105,110,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,99,111,100,101,115,116,114,101,97,109,0,78,111,32,100,101,99,111,100,101,100,32,97,114,101,97,32,112,97,114,97,109,101,116,101,114,115,44,32,115,101,116,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,116,111,32,116,104,101,32,119,104,111,108,101,32,105,109,97,103,101,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,76,101,102,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,85,112,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,48,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,79,115,105,122,61,37,100,41,46,10,0,82,105,103,104,116,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,120,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,88,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,79,115,105,122,61,37,100,41,46,10,0,66,111,116,116,111,109,32,112,111,115,105,116,105,111,110,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,97,114,101,97,32,40,114,101,103,105,111,110,95,121,49,61,37,100,41,32,105,115,32,111,117,116,115,105,100,101,32,116,104,101,32,105,109,97,103,101,32,97,114,101,97,32,40,89,115,105,122,61,37,100,41,46,10,0,83,105,122,101,32,120,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,119,61,37,100,41,46,10,0,83,105,122,101,32,121,32,111,102,32,116,104,101,32,100,101,99,111,100,101,100,32,99,111,109,112,111,110,101,110,116,32,105,109,97,103,101,32,105,115,32,105,110,99,111,114,114,101,99,116,32,40,99,111,109,112,91,37,100,93,46,104,61,37,100,41,46,10,0,83,101,116,116,105,110,103,32,100,101,99,111,100,105,110,103,32,97,114,101,97,32,116,111,32,37,100,44,37,100,44,37,100,44,37,100,10,0,87,114,111,110,103,32,102,108,97,103,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,102,111,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,116,120,48,61,37,100,44,32,116,121,48,61,37,100,10,0,9,32,116,100,120,61,37,100,44,32,116,100,121,61,37,100,10,0,9,32,116,119,61,37,100,44,32,116,104,61,37,100,10,0,125,10,0,67,111,100,101,115,116,114,101,97,109,32,105,110,100,101,120,32,102,114,111,109,32,109,97,105,110,32,104,101,97,100,101,114,58,32,123,10,0,9,32,77,97,105,110,32,104,101,97,100,101,114,32,115,116,97,114,116,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,9,32,77,97,105,110,32,104,101],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([97,100,101,114,32,101,110,100,32,112,111,115,105,116,105,111,110,61,37,108,108,105,10,0,9,32,77,97,114,107,101,114,32,108,105,115,116,58,32,123,10,0,9,9,32,116,121,112,101,61,37,35,120,44,32,112,111,115,61,37,108,108,105,44,32,108,101,110,61,37,100,10,0,9,32,125,10,0,9,32,84,105,108,101,32,105,110,100,101,120,58,32,123,10,0,9,9,32,110,98,32,111,102,32,116,105,108,101,45,112,97,114,116,32,105,110,32,116,105,108,101,32,91,37,100,93,61,37,100,10,0,9,9,9,32,116,105,108,101,45,112,97,114,116,91,37,100,93,58,32,115,116,97,114,95,112,111,115,61,37,108,108,105,44,32,101,110,100,95,104,101,97,100,101,114,61,37,108,108,105,44,32,101,110,100,95,112,111,115,61,37,108,108,105,46,10,0,91,68,69,86,93,32,68,117,109,112,32,97,110,32,105,109,97,103,101,95,104,101,97,100,101,114,32,115,116,114,117,99,116,32,123,10,0,73,109,97,103,101,32,105,110,102,111,32,123,10,0,37,115,32,120,48,61,37,100,44,32,121,48,61,37,100,10,0,37,115,32,120,49,61,37,100,44,32,121,49,61,37,100,10,0,37,115,32,110,117,109,99,111,109,112,115,61,37,100,10,0,37,115,9,32,99,111,109,112,111,110,101,110,116,32,37,100,32,123,10,0,37,115,125,10,0,91,68,69,86,93,32,68,117,109,112,32,97,110,32,105,109,97,103,101,95,99,111,109,112,95,104,101,97,100,101,114,32,115,116,114,117,99,116,32,123,10,0,37,115,32,100,120,61,37,100,44,32,100,121,61,37,100,10,0,37,115,32,112,114,101,99,61,37,100,10,0,37,115,32,115,103,110,100,61,37,100,10,0,87,101,32,110,101,101,100,32,97,110,32,105,109,97,103,101,32,112,114,101,118,105,111,117,115,108,121,32,99,114,101,97,116,101,100,46,10,0,84,105,108,101,32,105,110,100,101,120,32,112,114,111,118,105,100,101,100,32,98,121,32,116,104,101,32,117,115,101,114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,37,100,32,40,109,97,120,32,61,32,37,100,41,32,10,0,82,101,115,111,108,117,116,105,111,110,32,102,97,99,116,111,114,32,105,115,32,103,114,101,97,116,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,114,101,115,111,108,117,116,105,111,110,32,105,110,32,116,104,101,32,99,111,109,112,111,110,101,110,116,46,10,0,84,104,101,32,103,105,118,101,110,32,116,105,108,101,32,105,110,100,101,120,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,46,0,116,105,108,101,32,110,117,109,98,101,114,32,37,100,32,47,32,37,100,10,0,69,114,114,111,114,32,97,108,108,111,99,97,116,105,110,103,32,116,105,108,101,32,99,111,109,112,111,110,101,110,116,32,100,97,116,97,46,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,101,110,99,111,100,101,32,97,108,108,32,116,105,108,101,115,10,0,83,105,122,101,32,109,105,115,109,97,116,99,104,32,98,101,116,119,101,101,110,32,116,105,108,101,32,100,97,116,97,32,97,110,100,32,115,101,110,116,32,100,97,116,97,46,0,70,97,105,108,101,100,32,116,111,32,97,108,108,111,99,97,116,101,32,105,109,97,103,101,32,104,101,97,100,101,114,46,0,69,114,114,111,114,32,119,104,105,108,101,32,111,112,106,95,106,50,107,95,112,114,101,95,119,114,105,116,101,95,116,105,108,101,32,119,105,116,104,32,116,105,108,101,32,105,110,100,101,120,32,61,32,37,100,10,0,69,114,114,111,114,32,119,104,105,108,101,32,111,112,106,95,106,50,107,95,112,111,115,116,95,119,114,105,116,101,95,116,105,108,101,32,119,105,116,104,32,116,105,108,101,32,105,110,100,101,120,32,61,32,37,100,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,105,108,101,32,67,111,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,66,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,84,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,67,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,77,67,79,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,116,104,101,32,67,79,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,80,79,67,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,84,76,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,81,67,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,83,81,99,100,32,83,81,99,99,32,101,108,101,109,101,110,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,79,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,81,67,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,81,67,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,119,114,105,116,101,32,67,79,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,114,105,116,105,110,103,32,67,79,68,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,104,101,32,83,73,90,32,109,97,114,107,101,114,10,0,78,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,105,115,32,116,111,111,32,104,105,103,104,32,105,110,32,99,111,109,112,97,114,105,115,111,110,32,116,111,32,116,104,101,32,115,105,122,101,32,111,102,32,116,105,108,101,115,10,0,67,97,110,110,111,116,32,101,110,99,111,100,101,32,116,105,108,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,111,110,101,32,116,105,108,101,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,115,101,101,107,32,102,117,110,99,116,105,111,110,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,32,37,100,47,37,100,10,0,84,105,108,101,32,37,100,47,37,100,32,104,97,115,32,98,101,101,110,32,100,101,99,111,100,101,100,46,10,0,73,109,97,103,101,32,100,97,116,97,32,104,97,115,32,98,101,101,110,32,117,112,100,97,116,101,100,32,119,105,116,104,32,116,105,108,101,32,37,100,46,10,10,0,84,105,108,101,32,114,101,97,100,44,32,100,101,99,111,100,101,100,32,97,110,100,32,117,112,100,97,116,101,100,32,105,115,32,110,111,116,32,116,104,101,32,100,101,115,105,114,101,100,32,111,110,101,32,40,37,100,32,118,115,32,37,100,41,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,115,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,105,108,101,32,37,100,47,37,100,10,0,9,32,100,101,102,97,117,108,116,32,116,105,108,101,32,123,10,0,9,9,32,99,115,116,121,61,37,35,120,10,0,9,9,32,112,114,103,61,37,35,120,10,0,9,9,32,110,117,109,108,97,121,101,114,115,61,37,100,10,0,9,9,32,109,99,116,61,37,120,10,0,9,9,32,99,111,109,112,32,37,100,32,123,10,0,9,9,9,32,99,115,116,121,61,37,35,120,10,0,9,9,9,32,110,117,109,114,101,115,111,108,117,116,105,111,110,115,61,37,100,10,0,9,9,9,32,99,98,108,107,119,61,50,94,37,100,10,0,9,9,9,32,99,98,108,107,104,61,50,94,37,100,10,0,9,9,9,32,99,98,108,107,115,116,121,61,37,35,120,10,0,9,9,9,32,113,109,102,98,105,100,61,37,100,10,0,9,9,9,32,112,114,101,99,99,105,110,116,115,105,122,101,32,40,119,44,104,41,61,0,40,37,100,44,37,100,41,32,0,9,9,9,32,113,110,116,115,116,121,61,37,100,10,0,9,9,9,32,110,117,109,103,98,105,116,115,61,37,100,10,0,9,9,9,32,115,116,101,112,115,105,122,101,115,32,40,109,44,101,41,61,0,9,9,9,32,114,111,105,115,104,105,102,116,61,37,100,10,0,9,9,32,125,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,79,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,116,114,97,110,115,102,111,114,109,97,116,105,111,110,32,115,116,97,103,101,115,46,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,67,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,100,97,116,97,32,115,112,97,110,110,105,110,103,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,77,67,67,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,99,111,108,108,101,99,116,105,111,110,115,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,111,116,104,101,114,32,116,104,97,110,32,97,114,114,97,121,32,100,101,99,111,114,114,101,108,97,116,105,111,110,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,32,105,110,100,105,120,32,115,104,117,102,102,108,101,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,99,111,108,108,101,99,116,105,111,110,115,32,119,105,116,104,111,117,116,32,115,97,109,101,32,110,117,109,98,101,114,32,111,102,32,105,110,100,105,120,101,115,10,0,67,114,114,111,114,32,114,101,97,100,105,110,103,32,67,66,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,77,67,84,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,99,116,32,100,97,116,97,32,119,105,116,104,105,110,32,109,117,108,116,105,112,108,101,32,77,67,84,32,114,101,99,111,114,100,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,77,67,84,32,109,97,114,107,101,114,10,0,67,97,110,110,111,116,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,109,117,108,116,105,112,108,101,32,77,67,84,32,109,97,114,107,101,114,115,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,82,71,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,84,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,84,32,109,97,114,107,101,114,58,32,112,97,99,107,101,116,32,104,101,97,100,101,114,32,104,97,118,101,32,98,101,101,110,32,112,114,101,118,105,111,117,115,108,121,32,102,111,117,110,100,32,105,110,32,116,104,101,32,109,97,105,110,32,104,101,97,100,101,114,32,40,80,80,77,32,109,97,114,107,101,114,41,46,10,0,90,112,112,116,32,37,117,32,97,108,114,101,97,100,121,32,114,101,97,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,80,77,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,80,80,77,32,109,97,114,107,101,114,10,0,90,112,112,109,32,37,117,32,97,108,114,101,97,100,121,32,114,101,97,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,76,84,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,76,77,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,84,76,77,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,32,115,105,122,101,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,32,105,115,32,105,108,108,101,103,97,108,32,45,62,32,37,100,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,32,105,115,32,110,111,116,32,99,111,109,112,97,116,105,98,108,101,32,119,105,116,104,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,110,117,109,98,101,114,32,111,102,32,112,97,114,97,109,101,116,101,114,115,32,40,32,37,100,32,118,115,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,110,101,103,97,116,105,118,101,32,111,114,32,122,101,114,111,32,105,109,97,103,101,32,115,105,122,101,32,40,37,100,32,120,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,105,110,118,97,108,105,100,32,116,105,108,101,32,115,105,122,101,32,40,116,100,120,58,32,37,100,44,32,116,100,121,58,32,37,100,41,10,0,80,114,101,118,101,110,116,32,98,117,102,102,101,114,32,111,118,101,114,102,108,111,119,32,40,120,49,58,32,37,100,44,32,121,49,58,32,37,100,41,10,0,69,114,114,111,114,32,119,105,116,104,32,83,73,90,32,109,97,114,107,101,114,58,32,105,108,108,101,103,97,108,32,116,105,108,101,32,111,102,102,115,101,116,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,116,97,107,101,32,105,110,32,99,104,97,114,103,101,32,83,73,90,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,118,97,108,117,101,115,32,102,111,114,32,99,111,109,112,32,61,32,37,100,32,58,32,100,120,61,37,117,32,100,121,61,37,117,10,32,40,115,104,111,117,108,100,32,98,101,32,98,101,116,119,101,101,110,32,49,32,97,110,100,32,50,53,53,32,97,99,99,111,114,100,105,110,103,32,116,104,101,32,74,80,69,71,50,48,48,48,32,110,111,114,109,41,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,115,32,58,32,37,117,32,120,32,37,117,32,40,109,97,120,105,109,117,109,32,102,105,120,101,100,32,98,121,32,106,112,101,103,50,48,48,48,32,110,111,114,109,32,105,115,32,54,53,53,51,53,32,116,105,108,101,115,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,80,79,67,32,109,97,114,107,101,114,10,0,84,111,111,32,109,97,110,121,32,80,79,67,115,32,37,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,81,67,67,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,32,110,117,109,98,101,114,58,32,37,100,44,32,114,101,103,97,114,100,105,110,103,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,37,100,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,81,99,100,32,111,114,32,83,81,99,99,32,101,108,101,109,101,110,116,10,0,87,104,105,108,101,32,114,101,97,100,105,110,103,32,67,67,80,95,81,78,84,83,84,89,32,101,108,101,109,101,110,116,32,105,110,115,105,100,101,32,81,67,68,32,111,114,32,81,67,67,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,44,32,110,117,109,98,101,114,32,111,102,32,115,117,98,98,97,110,100,115,32,40,37,100,41,32,105,115,32,103,114,101,97,116,101,114,32,116,111,32,79,80,74,95,74,50,75,95,77,65,88,66,65,78,68,83,32,40,37,100,41,46,32,83,111,32,119,101,32,108,105,109,105,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,101,108,101,109,101,110,116,115,32,115,116,111,114,101,100,32,116,111,32,79,80,74,95,74,50,75,95,77,65,88,66,65,78,68,83,32,40,37,100,41,32,97,110,100,32,115,107,105,112,32,116,104,101,32,114,101,115,116,46,32,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,81,67,68,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,82,71,78,32,109,97,114,107,101,114,10,0,98,97,100,32,99,111,109,112,111,110,101,110,116,32,110,117,109,98,101,114,32,105,110,32,82,71,78,32,40,37,100,32,119,104,101,110,32,116,104,101,114,101,32,97,114,101,32,111,110,108,121,32,37,100,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,67,32,109,97,114,107,101,114,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,67,32,109,97,114,107,101,114,32,40,98,97,100,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,41,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,10,0,73,110,118,97,108,105,100,32,118,97,108,117,101,32,102,111,114,32,110,117,109,114,101,115,111,108,117,116,105,111,110,115,32,58,32,37,100,44,32,109,97,120,32,118,97,108,117,101,32,105,115,32,115,101,116,32,105,110,32,111,112,101,110,106,112,101,103,46,104,32,97,116,32,37,100,10,0,69,114,114,111,114,32,100,101,99,111,100,105,110,103,32,99,111,109,112,111,110,101,110,116,32,37,100,46,10,84,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,116,111,32,114,101,109,111,118,101,32,105,115,32,104,105,103,104,101,114,32,116,104,97,110,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,114,101,115,111,108,117,116,105,111,110,115,32,111,102,32,116,104,105,115,32,99,111,109,112,111,110,101,110,116,10,77,111,100,105,102,121,32,116,104,101,32,99,112,95,114,101,100,117,99,101,32,112,97,114,97,109,101,116,101,114,46,10,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,83,80,67,111,100,32,83,80,67,111,99,32,101,108,101,109,101,110,116,44,32,73,110,118,97,108,105,100,32,99,98,108,107,119,47,99,98,108,107,104,32,99,111,109,98,105,110,97,116,105,111,110,10,0,73,110,118,97,108,105,100,32,112,114,101,99,105,110,99,116,32,115,105,122,101,10,0,67,79,68,32,109,97,114,107,101,114,32,97,108,114,101,97,100,121,32,114,101,97,100,46,32,78,111,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,67,79,68,32,109,97,114,107,101,114,32,112,101,114,32,116,105,108,101,46,10,0,69,114,114,111,114,32,114,101,97,100,105,110,103,32,67,79,68,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,110,32,83,99,111,100,32,118,97,108,117,101,32,105,110,32,67,79,68,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,110,32,112,114,111,103,114,101,115,115,105,111,110,32,111,114,100,101,114,32,105,110,32,67,79,68,32,109,97,114,107,101,114,10,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,108,97,121,101,114,115,32,105,110,32,67,79,68,32,109,97,114,107,101,114,32,58,32,37,100,32,110,111,116,32,105,110,32,114,97,110,103,101,32,91,49,45,54,53,53,51,53,93,10,0,73,110,118,97,108,105,100,32,116,105,108,101,32,110,117,109,98,101,114,32,37,100,10,0,69,109,112,116,121,32,83,79,84,32,109,97,114,107,101,114,32,100,101,116,101,99,116,101,100,58,32,80,115,111,116,61,37,100,46,10,0,80,115,111,116,32,118,97,108,117,101,32,105,115,32,110,111,116,32,99,111,114,114,101,99,116,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,74,80,69,71,50,48,48,48,32,110,111,114,109,58,32,37,100,46,10,0,80,115,111,116,32,118,97,108,117,101,32,111,102,32,116,104,101,32,99,117,114,114,101,110,116,32,116,105,108,101,45,112,97,114,116,32,105,115,32,101,113,117,97,108,32,116,111,32,122,101,114,111,44,32,119,101,32,97,115,115,117,109,105,110,103,32,105,116,32,105,115,32,116,104,101,32,108,97,115,116,32,116,105,108,101,45,112,97,114,116,32,111,102,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,46,10,0,73,110,32,83,79,84,32,109,97,114,107,101,114,44,32,84,80,83,111,116,32,40,37,100,41,32,105,115,32,110,111,116,32,118,97,108,105,100,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,45,112,97,114,116,32,40,37,100,41,44,32,103,105,118,105,110,103,32,117,112,10,0,73,110,32,83,79,84,32,109,97,114,107,101,114,44,32,84,80,83,111,116,32,40,37,100,41,32,105,115,32,110,111,116,32,118,97,108,105,100,32,114,101,103,97,114,100,115,32,116,111,32,116,104,101,32,99,117,114,114,101,110,116,32,110,117,109,98,101,114,32,111,102,32,116,105,108,101,45,112,97,114,116,32,40,104,101,97,100,101,114,41,32,40,37,100,41,44,32,103,105,118,105,110,103,32,117,112,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,97,100,32,83,79,84,32,109,97,114,107,101,114,46,32,84,105,108,101,32,105,110,100,101,120,32,97,108,108,111,99,97,116,105,111,110,32,102,97,105,108,101,100,10,0,83,116,97,114,116,32,116,111,32,114,101,97,100,32,106,50,107,32,109,97,105,110,32,104,101,97,100,101,114,32,40,37,100,41,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,109,104,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,97,32,83,79,67,32,109,97,114,107,101,114,32,10,0,65,32,109,97,114,107,101,114,32,73,68,32,119,97,115,32,101,120,112,101,99,116,101,100,32,40,48,120,102,102,45,45,41,32,105,110,115,116,101,97,100,32,111,102,32,37,46,56,120,10,0,85,110,107,110,111,119,110,32,109,97,114,107,101,114,10,0,85,110,107,110,111,119,32,109,97,114,107,101,114,32,104,97,118,101,32,98,101,101,110,32,100,101,116,101,99,116,101,100,32,97,110,100,32,103,101,110,101,114,97,116,101,100,32,101,114,114,111,114,46,10,0,77,97,114,107,101,114,32,104,97,110,100,108,101,114,32,102,117,110,99,116,105,111,110,32,102,97,105,108,101,100,32,116,111,32,114,101,97,100,32,116,104,101,32,109,97,114,107,101,114,32,115,101,103,109,101,110,116,10,0,114,101,113,117,105,114,101,100,32,83,73,90,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,114,101,113,117,105,114,101,100,32,67,79,68,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,114,101,113,117,105,114,101,100,32,81,67,68,32,109,97,114,107,101,114,32,110,111,116,32,102,111,117,110,100,32,105,110,32,109,97,105,110,32,104,101,97,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,98,121,116,101,115,32,116,111,32,114,101,97,100,32,78,112,112,109,10,0,67,111,114,114,117,112,116,101,100,32,80,80,77,32,109,97,114,107,101,114,115,10,0,70,97,105,108,101,100,32,116,111,32,109,101,114,103,101,32,80,80,77,32,100,97,116,97,10,0,77,97,105,110,32,104,101,97,100,101,114,32,104,97,115,32,98,101,101,110,32,99,111,114,114,101,99,116,108,121,32,100,101,99,111,100,101,100,46,10,0,70,97,105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,32,105,110,32,116,104,101,32,74,80,50,32,102,105,108,101,10,0,73,110,118,97,108,105,100,32,110,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,115,112,101,99,105,102,105,101,100,32,119,104,105,108,101,32,115,101,116,116,105,110,103,32,117,112,32,74,80,50,32,101,110,99,111,100,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,119,104,101,110,32,115,101,116,117,112,32,116,104,101,32,74,80,50,32,101,110,99,111,100,101,114,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,115,112,101,99,105,102,105,101,100,32,98,117,116,32,117,110,107,110,111,119,110,32,101,110,117,109,99,115,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,115,112,101,99,105,102,105,101,100,32,98,117,116,32,110,111,116,32,101,110,111,117,103,104,32,105,109,97,103,101,32,99,111,109,112,111,110,101,110,116,115,32,102,111,114,32,97,110,32,97,117,116,111,109,97,116,105,99,32,99,100,101,102,32,98,111,120,32,99,114,101,97,116,105,111,110,46,10,0,65,108,112,104,97,32,99,104,97,110,110,101,108,32,112,111,115,105,116,105,111,110,32,99,111,110,102,108,105,99,116,115,32,119,105,116,104,32,99,111,108,111,114,32,99,104,97,110,110,101,108,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,77,117,108,116,105,112,108,101,32,97,108,112,104,97,32,99,104,97,110,110,101,108,115,32,115,112,101,99,105,102,105,101,100,46,32,78,111,32,99,100,101,102,32,98,111,120,32,119,105,108,108,32,98,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,115,101,116,117,112,32,116,104,101,32,74,80,50,32,101,110,99,111,100,101,114,10,0,74,80,50,32,98,111,120,32,119,104,105,99,104,32,97,114,101,32,97,102,116,101,114,32,116,104,101,32,99,111,100,101,115,116,114,101,97,109,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,111,108,100,32,74,80,50,32,72,101,97,100,101,114,32,100,97,116,97,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,119,114,105,116,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,102,116,121,112,32,100,97,116,97,10,0,69,114,114,111,114,32,119,104,105,108,101,32,119,114,105,116,105,110,103,32,102,116,121,112,32,100,97,116,97,32,116,111,32,115,116,114,101,97,109,10,0,70,97,105,108,101,100,32,116,111,32,115,101,101,107,32,105,110,32,116,104,101,32,115,116,114,101,97,109,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,106,112,101,103,50,48,48,48,32,102,105,108,101,32,104,101,97,100,101,114,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,115,105,122,101,115,32,104,105,103,104,101,114,32,116,104,97,110,32,50,94,51,50,10,0,98,97,100,32,112,108,97,99,101,100,32,106,112,101,103,32,99,111,100,101,115,116,114,101,97,109,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,111,102,32,117,110,100,101,102,105,110,101,100,32,115,105,122,101,115,10,0,105,110,118,97,108,105,100,32,98,111,120,32,115,105,122,101,32,37,100,32,40,37,120,41,10,0,70,111,117,110,100,32,97,32,109,105,115,112,108,97,99,101,100,32,39,37,99,37,99,37,99,37,99,39,32,98,111,120,32,111,117,116,115,105,100,101,32,106,112,50,104,32,98,111,120,10,0,74,80,69,71,50,48,48,48,32,72,101,97,100,101,114,32,98,111,120,32,110,111,116,32,114,101,97,100,32,121,101,116,44,32,39,37,99,37,99,37,99,37,99,39,32,98,111,120,32,119,105,108,108,32,98,101,32,105,103,110,111,114,101,100,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,115,107,105,112,112,105,110,103,32,74,80,69,71,50,48,48,48,32,98,111,120,44,32,115,116,114,101,97,109,32,101,114,114,111,114,10,0,73,110,118,97,108,105,100,32,98,111,120,32,115,105,122,101,32,37,100,32,102,111,114,32,98,111,120,32,39,37,99,37,99,37,99,37,99,39,46,32,78,101,101,100,32,37,100,32,98,121,116,101,115,44,32,37,100,32,98,121,116,101,115,32,114,101,109,97,105,110,105,110,103,32,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,106,112,101,103,50,48,48,48,32,98,111,120,10,0,80,114,111,98,108,101,109,32,119,105,116,104,32,114,101,97,100,105,110,103,32,74,80,69,71,50,48,48,48,32,98,111,120,44,32,115,116,114,101,97,109,32,101,114,114,111,114,10,0,77,97,108,102,111,114,109,101,100,32,74,80,50,32,102,105,108,101,32,102,111,114,109,97,116,58,32,102,105,114,115,116,32,98,111,120,32,109,117,115,116,32,98,101,32,74,80,69,71,32,50,48,48,48,32,115,105,103,110,97,116,117,114,101,32,98,111,120,10,0,77,97,108,102,111,114,109,101,100,32,74,80,50,32,102,105,108,101,32,102,111,114,109,97,116,58,32,115,101,99,111,110,100,32,98,111,120,32,109,117,115,116,32,98,101,32,102,105,108,101,32,116,121,112,101,32,98,111,120,10,0,73,110,115,117,102,102,105,99,105,101,110,116,32,100,97,116,97,32,102,111,114,32,67,68,69,70,32,98,111,120,46,10,0,78,117,109,98,101,114,32,111,102,32,99,104,97,110,110,101,108,32,100,101,115,99,114,105,112,116,105,111,110,32,105,115,32,101,113,117,97,108,32,116,111,32,122,101,114,111,32,105,110,32,67,68,69,70,32,98,111,120,46,10,0,78,101,101,100,32,116,111,32,114,101,97,100,32,97,32,80,67,76,82,32,98,111,120,32,98,101,102,111,114,101,32,116,104,101,32,67,77,65,80,32,98,111,120,46,10,0,79,110,108,121,32,111,110,101,32,67,77,65,80,32,98,111,120,32,105,115,32,97,108,108,111,119,101,100,46,10,0,73,110,115,117,102,102,105,99,105,101,110,116,32,100,97,116,97,32,102,111,114,32,67,77,65,80,32,98,111,120,46,10,0,73,110,118,97,108,105,100,32,80,67,76,82,32,98,111,120,46,32,82,101,112,111,114,116,115,32,37,100,32,101,110,116,114,105,101,115,10,0,73,110,118,97,108,105,100,32,80,67,76,82,32,98,111,120,46,32,82,101,112,111,114,116,115,32,48,32,112,97,108,101,116,116,101,32,99,111,108,117,109,110,115,10,0,65,32,66,80,67,67,32,104,101,97,100,101,114,32,98,111,120,32,105,115,32,97,118,97,105,108,97,98,108,101,32,97,108,116,104,111,117,103,104,32,66,80,67,32,103,105,118,101,110,32,98,121,32,116,104,101,32,73,72,68,82,32,98,111,120,32,40,37,100,41,32,105,110,100,105,99,97,116,101,32,99,111,109,112,111,110,101,110,116,115,32,98,105,116,32,100,101,112,116,104,32,105,115,32,99,111,110,115,116,97,110,116,10,0,66,97,100,32,66,80,67,67,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,65,32,99,111,110,102,111,114,109,105,110,103,32,74,80,50,32,114,101,97,100,101,114,32,115,104,97,108,108,32,105,103,110,111,114,101,32,97,108,108,32,67,111,108,111,117,114,32,83,112,101,99,105,102,105,99,97,116,105,111,110,32,98,111,120,101,115,32,97,102,116,101,114,32,116,104,101,32,102,105,114,115,116,44,32,115,111,32,119,101,32,105,103,110,111,114,101,32,116,104,105,115,32,111,110,101,46,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,58,32,37,100,41,10,0,66,97,100,32,67,79,76,82,32,104,101,97,100,101,114,32,98,111,120,32,40,67,73,69,76,97,98,44,32,98,97,100,32,115,105,122,101,58,32,37,100,41,10,0,67,79,76,82,32,66,79,88,32,109,101,116,104,32,118,97,108,117,101,32,105,115,32,110,111,116,32,97,32,114,101,103,117,108,97,114,32,118,97,108,117,101,32,40,37,100,41,44,32,115,111,32,119,101,32,119,105,108,108,32,105,103,110,111,114,101,32,116,104,101,32,101,110,116,105,114,101,32,67,111,108,111,117,114,32,83,112,101,99,105,102,105,99,97,116,105,111,110,32,98,111,120,46,32,10,0,66,97,100,32,105,109,97,103,101,32,104,101,97,100,101,114,32,98,111,120,32,40,98,97,100,32,115,105,122,101,41,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,105,109,97,103,101,32,104,101,97,100,101,114,32,40,105,104,100,114,41,10,0,74,80,50,32,73,72,68,82,32,98,111,120,58,32,99,111,109,112,114,101,115,115,105,111,110,32,116,121,112,101,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,102,105,108,101,32,105,115,32,110,111,116,32,97,32,99,111,110,102,111,114,109,105,110,103,32,74,80,50,32,102,105,108,101,32,40,37,100,41,32,10,0,84,104,101,32,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,102,105,114,115,116,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,98,111,120,32,111,102,32,108,101,115,115,32,116,104,97,110,32,56,32,98,121,116,101,115,10,0,67,97,110,110,111,116,32,104,97,110,100,108,101,32,88,76,32,98,111,120,32,111,102,32,108,101,115,115,32,116,104,97,110,32,49,54,32,98,121,116,101,115,10,0,66,111,120,32,108,101,110,103,116,104,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,46,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,58,32,98,111,120,32,108,101,110,103,116,104,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,46,10,0,83,116,114,101,97,109,32,101,114,114,111,114,32,119,104,105,108,101,32,114,101,97,100,105,110,103,32,74,80,50,32,72,101,97,100,101,114,32,98,111,120,58,32,110,111,32,39,105,104,100,114,39,32,98,111,120,46,10,0,84,104,101,32,102,116,121,112,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,115,101,99,111,110,100,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,69,114,114,111,114,32,119,105,116,104,32,70,84,89,80,32,115,105,103,110,97,116,117,114,101,32,66,111,120,32,115,105,122,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,119,105,116,104,32,70,84,89,80,32,66,111,120,10,0,84,104,101,32,115,105,103,110,97,116,117,114,101,32,98,111,120,32,109,117,115,116,32,98,101,32,116,104,101,32,102,105,114,115,116,32,98,111,120,32,105,110,32,116,104,101,32,102,105,108,101,46,10,0,69,114,114,111,114,32,119,105,116,104,32,74,80,32,115,105,103,110,97,116,117,114,101,32,66,111,120,32,115,105,122,101,10,0,69,114,114,111,114,32,119,105,116,104,32,74,80,32,83,105,103,110,97,116,117,114,101,32,58,32,98,97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,10,0,111,112,106,95,106,112,50,95,97,112,112,108,121,95,99,100,101,102,58,32,99,110,61,37,100,44,32,110,117,109,99,111,109,112,115,61,37,100,10,0,111,112,106,95,106,112,50,95,97,112,112,108,121,95,99,100,101,102,58,32,97,99,110,61,37,100,44,32,110,117,109,99,111,109,112,115,61,37,100,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,32,105,110,100,101,120,32,37,100,32,40,62,61,32,37,100,41,46,10,0,73,110,99,111,109,112,108,101,116,101,32,99,104,97,110,110,101,108,32,100,101,102,105,110,105,116,105,111,110,115,46,10,0,85,110,101,120,112,101,99,116,101,100,32,79,79,77,46,10,0,73,110,118,97,108,105,100,32,99,111,109,112,111,110,101,110,116,47,112,97,108,101,116,116,101,32,105,110,100,101,120,32,102,111,114,32,100,105,114,101,99,116,32,109,97,112,112,105,110,103,32,37,100,46,10,0,67,111,109,112,111,110,101,110,116,32,37,100,32,105,115,32,109,97,112,112,101,100,32,116,119,105,99,101,46,10,0,68,105,114,101,99,116,32,117,115,101,32,97,116,32,35,37,100,32,104,111,119,101,118,101,114,32,112,99,111,108,61,37,100,46,10,0,67,111,109,112,111,110,101,110,116,32,37,100,32,100,111,101,115,110,39,116,32,104,97,118,101,32,97,32,109,97,112,112,105,110,103,46,10,0,67,111,109,112,111,110,101,110,116,32,109,97,112,112,105,110,103,32,115,101,101,109,115,32,119,114,111,110,103,46,32,84,114,121,105,110,103,32,116,111,32,99,111,114,114,101,99,116,46,10,0,84,105,108,101,115,32,100,111,110,39,116,32,97,108,108,32,104,97,118,101,32,116,104,101,32,115,97,109,101,32,100,105,109,101,110,115,105,111,110,46,32,83,107,105,112,32,116,104,101,32,77,67,84,32,115,116,101,112,46,10,0,78,117,109,98,101,114,32,111,102,32,99,111,109,112,111,110,101,110,116,115,32,40,37,100,41,32,105,115,32,105,110,99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,32,97,32,77,67,84,46,32,83,107,105,112,32,116,104,101,32,77,67,84,32,115,116,101,112,46,10,0,116,105,108,101,115,32,114,101,113,117,105,114,101,32,97,116,32,108,101,97,115,116,32,111,110,101,32,114,101,115,111,108,117,116,105,111,110,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,105,108,101,32,100,97,116,97,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,116,105,108,101,32,114,101,115,111,108,117,116,105,111,110,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,104,97,110,100,108,101,32,98,97,110,100,32,112,114,101,99,105,110,116,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,102,111,114,32,99,117,114,114,101,110,116,32,112,114,101,99,105,110,99,116,32,99,111,100,101,98,108,111,99,107,32,101,108,101,109,101,110,116,10,0,78,111,32,105,110,99,108,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,32,105,109,115,98,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,97,103,45,116,114,101,101,10,0,116,103,116,95,99,114,101,97,116,101,32,116,114,101,101,45,62,110,117,109,110,111,100,101,115,32,61,61,32,48,44,32,110,111,32,116,114,101,101,32,99,114,101,97,116,101,100,46,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,99,114,101,97,116,101,32,84,97,103,45,116,114,101,101,32,110,111,100,101,115,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,114,101,105,110,105,116,105,97,108,105,122,101,32,116,104,101,32,116,97,103,32,116,114,101,101,10,0,78,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,32,116,111,32,97,100,100,32,97,32,110,101,119,32,118,97,108,105,100,97,116,105,111,110,32,112,114,111,99,101,100,117,114,101,10,0,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,3,3,6,3,6,6,8,3,6,6,8,6,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,1,4,4,7,4,7,7,8,4,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,2,5,5,7,5,7,7,8,5,7,7,8,7,8,8,8,9,10,12,13,10,10,13,13,12,13,12,13,13,13,13,13,9,10,12,11,10,9,13,12,12,11,12,11,13,12,13,12,9,10,12,11,10,10,11,11,12,13,9,10,13,13,10,10,9,10,12,13,10,9,11,12,12,11,9,10,13,12,10,9,9,10,12,13,10,9,11,12,12,13,12,13,11,12,11,12,9,10,12,11,10,10,11,11,12,11,12,11,11,11,11,11,9,10,12,11,10,9,13,12,12,13,9,10,11,12,10,9,9,10,12,13,10,10,13,13,12,11,9,10,11,11,10,10,9,10,12,13,10,10,13,13,12,11,9,10,11,11,10,10,9,10,12,11,10,9,13,12,12,13,9,10,11,12,10,9,9,10,12,11,10,10,11,11,12,11,12,11,11,11,11,11,9,10,12,13,10,9,11,12,12,13,12,13,11,12,11,12,9,10,12,13,10,9,11,12,12,11,9,10,13,12,10,9,9,10,12,11,10,10,11,11,12,13,9,10,13,13,10,10,9,10,12,11,10,9,13,12,12,11,12,11,13,12,13,12,9,10,12,13,10,10,13,13,12,13,12,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,114,101,97,100,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,109,97,120,32,40,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,114,101,97,100,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,99,117,114,114,101,110,116,32,115,105,122,101,32,40,37,100,32,62,32,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,115,107,105,112,58,32,115,101,103,109,101,110,116,32,116,111,111,32,108,111,110,103,32,40,37,100,41,32,119,105,116,104,32,109,97,120,32,40,37,100,41,32,102,111,114,32,99,111,100,101,98,108,111,99,107,32,37,100,32,40,112,61,37,100,44,32,98,61,37,100,44,32,114,61,37,100,44,32,99,61,37,100,41,10,0,78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,102,111,114,32,101,120,112,101,99,116,101,100,32,83,79,80,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,83,79,80,32,109,97,114,107,101,114,10,0,78,111,116,32,101,110,111,117,103,104,32,115,112,97,99,101,32,102,111,114,32,101,120,112,101,99,116,101,100,32,69,80,72,32,109,97,114,107,101,114,10,0,69,120,112,101,99,116,101,100,32,69,80,72,32,109,97,114,107,101,114,10,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,114,119,97],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,46,0],\"i8\",ALLOC_NONE,Runtime.GLOBAL_BASE+25118);var tempDoublePtr=Runtime.alignMemory(allocate(12,\"i8\",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}Module[\"_i64Subtract\"]=_i64Subtract;var _floorf=Math_floor;Module[\"_bitshift64Ashr\"]=_bitshift64Ashr;var _SItoF=true;Module[\"_memset\"]=_memset;var _BDtoILow=true;var _ceilf=Math_ceil;Module[\"_bitshift64Shl\"]=_bitshift64Shl;function _abort(){Module[\"abort\"]()}function ___lock(){}function ___unlock(){}Module[\"_i64Add\"]=_i64Add;var _floor=Math_floor;var _sqrt=Math_sqrt;var PATH=undefined;function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){setTimeout(Browser.mainLoop.runner,value)};Browser.mainLoop.method=\"timeout\"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method=\"rAF\"}else if(mode==2){if(!window[\"setImmediate\"]){var setImmediates=[];var emscriptenMainLoopMessageId=\"__emcc\";function Browser_setImmediate_messageHandler(event){if(event.source===window&&event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}}window.addEventListener(\"message\",Browser_setImmediate_messageHandler,true);window[\"setImmediate\"]=function Browser_emulated_setImmediate(func){setImmediates.push(func);window.postMessage(emscriptenMainLoopMessageId,\"*\")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){window[\"setImmediate\"](Browser.mainLoop.runner)};Browser.mainLoop.method=\"immediate\"}return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg,noSetTiming){Module[\"noExitRuntime\"]=true;assert(!Browser.mainLoop.func,\"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.\");Browser.mainLoop.func=func;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker \"'+blocker.name+'\" took '+(Date.now()-start)+\" ms\");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}if(Browser.mainLoop.method===\"timeout\"&&Module.ctx){Module.printErr(\"Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!\");Browser.mainLoop.method=\"\"}Browser.mainLoop.runIter((function(){if(typeof arg!==\"undefined\"){Runtime.dynCall(\"vi\",func,[arg])}else{Runtime.dynCall(\"v\",func)}}));if(thisMainLoopId0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw\"SimulateInfiniteLoop\"}}var Browser={mainLoop:{scheduler:null,method:\"\",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:(function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++}),resume:(function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;_emscripten_set_main_loop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()}),updateStatus:(function(){if(Module[\"setStatus\"]){var message=Module[\"statusMessage\"]||\"Please wait...\";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src=\"data:audio/x-\"+name.substr(-3)+\";base64,\"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module[\"preloadPlugins\"].push(audioPlugin);var canvas=Module[\"canvas\"];function pointerLockChange(){Browser.pointerLock=document[\"pointerLockElement\"]===canvas||document[\"mozPointerLockElement\"]===canvas||document[\"webkitPointerLockElement\"]===canvas||document[\"msPointerLockElement\"]===canvas}if(canvas){canvas.requestPointerLock=canvas[\"requestPointerLock\"]||canvas[\"mozRequestPointerLock\"]||canvas[\"webkitRequestPointerLock\"]||canvas[\"msRequestPointerLock\"]||(function(){});canvas.exitPointerLock=document[\"exitPointerLock\"]||document[\"mozExitPointerLock\"]||document[\"webkitExitPointerLock\"]||document[\"msExitPointerLock\"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener(\"pointerlockchange\",pointerLockChange,false);document.addEventListener(\"mozpointerlockchange\",pointerLockChange,false);document.addEventListener(\"webkitpointerlockchange\",pointerLockChange,false);document.addEventListener(\"mspointerlockchange\",pointerLockChange,false);if(Module[\"elementPointerLock\"]){canvas.addEventListener(\"click\",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}canvas.style.backgroundColor=\"black\"}else{ctx=canvas.getContext(\"2d\")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx===\"undefined\",\"cannot set in module if GLctx is used, but we are a non-GL context that would replace it\");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas,vrDevice){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;Browser.vrDevice=vrDevice;if(typeof Browser.lockPointer===\"undefined\")Browser.lockPointer=true;if(typeof Browser.resizeCanvas===\"undefined\")Browser.resizeCanvas=false;if(typeof Browser.vrDevice===\"undefined\")Browser.vrDevice=null;var canvas=Module[\"canvas\"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document[\"webkitFullScreenElement\"]||document[\"webkitFullscreenElement\"]||document[\"mozFullScreenElement\"]||document[\"mozFullscreenElement\"]||document[\"fullScreenElement\"]||document[\"fullscreenElement\"]||document[\"msFullScreenElement\"]||document[\"msFullscreenElement\"]||document[\"webkitCurrentFullScreenElement\"])===canvasContainer){canvas.cancelFullScreen=document[\"cancelFullScreen\"]||document[\"mozCancelFullScreen\"]||document[\"webkitCancelFullScreen\"]||document[\"msExitFullscreen\"]||document[\"exitFullscreen\"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module[\"onFullScreen\"])Module[\"onFullScreen\"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener(\"fullscreenchange\",fullScreenChange,false);document.addEventListener(\"mozfullscreenchange\",fullScreenChange,false);document.addEventListener(\"webkitfullscreenchange\",fullScreenChange,false);document.addEventListener(\"MSFullscreenChange\",fullScreenChange,false)}var canvasContainer=document.createElement(\"div\");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer[\"requestFullScreen\"]||canvasContainer[\"mozRequestFullScreen\"]||canvasContainer[\"msRequestFullscreen\"]||(canvasContainer[\"webkitRequestFullScreen\"]?(function(){canvasContainer[\"webkitRequestFullScreen\"](Element[\"ALLOW_KEYBOARD_INPUT\"])}):null);if(vrDevice){canvasContainer.requestFullScreen({vrDisplay:vrDevice})}else{canvasContainer.requestFullScreen()}}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window===\"undefined\"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window[\"requestAnimationFrame\"]||window[\"mozRequestAnimationFrame\"]||window[\"webkitRequestAnimationFrame\"]||window[\"msRequestAnimationFrame\"]||window[\"oRequestAnimationFrame\"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),allowAsyncCallbacks:true,queuedAsyncCallbacks:[],pauseAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=false}),resumeAsyncCallbacks:(function(){Browser.allowAsyncCallbacks=true;if(Browser.queuedAsyncCallbacks.length>0){var callbacks=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[];callbacks.forEach((function(func){func()}))}}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}))}),safeSetTimeout:(function(func,timeout){Module[\"noExitRuntime\"]=true;return setTimeout((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}else{Browser.queuedAsyncCallbacks.push(func)}}),timeout)}),safeSetInterval:(function(func,timeout){Module[\"noExitRuntime\"]=true;return setInterval((function(){if(ABORT)return;if(Browser.allowAsyncCallbacks){func()}}),timeout)}),getMimetype:(function(name){return{\"jpg\":\"image/jpeg\",\"jpeg\":\"image/jpeg\",\"png\":\"image/png\",\"bmp\":\"image/bmp\",\"ogg\":\"audio/ogg\",\"wav\":\"audio/wav\",\"mp3\":\"audio/mpeg\"}[name.substr(name.lastIndexOf(\".\")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator[\"getUserMedia\"]||navigator[\"mozGetUserMedia\"]}window.getUserMedia(func)}),getMovementX:(function(event){return event[\"movementX\"]||event[\"mozMovementX\"]||event[\"webkitMovementX\"]||0}),getMovementY:(function(event){return event[\"movementY\"]||event[\"mozMovementY\"]||event[\"webkitMovementY\"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case\"DOMMouseScroll\":delta=event.detail;break;case\"mousewheel\":delta=event.wheelDelta;break;case\"wheel\":delta=event[\"deltaY\"];break;default:throw\"unrecognized mouse wheel event: \"+event.type}return delta}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!=\"mousemove\"&&\"mozMovementX\"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!=\"undefined\"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module[\"canvas\"].getBoundingClientRect();var cw=Module[\"canvas\"].width;var ch=Module[\"canvas\"].height;var scrollX=typeof window.scrollX!==\"undefined\"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!==\"undefined\"?window.scrollY:window.pageYOffset;if(event.type===\"touchstart\"||event.type===\"touchend\"||event.type===\"touchmove\"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type===\"touchstart\"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type===\"touchend\"||event.type===\"touchmove\"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file \"'+url+'\" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency(\"al \"+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file \"'+url+'\" failed.'}}));if(!noRunDep)addRunDependency(\"al \"+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module[\"canvas\"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module[\"canvas\"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!=\"undefined\"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module[\"forcedAspectRatio\"]&&Module[\"forcedAspectRatio\"]>0){if(w/h>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator===\"object\")return navigator[\"hardwareConcurrency\"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}Module[\"_bitshift64Lshr\"]=_bitshift64Lshr;var _BDtoIHigh=true;function _pthread_cleanup_push(routine,arg){__ATEXIT__.push((function(){Runtime.dynCall(\"vi\",routine,[arg])}));_pthread_cleanup_push.level=__ATEXIT__.length}function _pthread_cleanup_pop(){assert(_pthread_cleanup_push.level==__ATEXIT__.length,\"cannot pop if something else added meanwhile!\");__ATEXIT__.pop();_pthread_cleanup_push.level=__ATEXIT__.length}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module[\"_memcpy\"]=_memcpy;function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var _llvm_pow_f64=Math_pow;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort(\"cannot dynamically allocate, sbrk now has control\")})}var ret=DYNAMICTOP;if(bytes!=0){var success=self.alloc(bytes);if(!success)return-1>>>0}return ret}var _BItoD=true;function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}function _pthread_self(){return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;assert(offset_high===0);FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer)___syscall146.buffer=[];var buffer=___syscall146.buffer;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>1]=2;return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module[\"requestFullScreen\"]=function Module_requestFullScreen(lockPointer,resizeCanvas,vrDevice){Browser.requestFullScreen(lockPointer,resizeCanvas,vrDevice)};Module[\"requestAnimationFrame\"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module[\"setCanvasSize\"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module[\"pauseMainLoop\"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module[\"resumeMainLoop\"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module[\"getUserMedia\"]=function Module_getUserMedia(){Browser.getUserMedia()};Module[\"createContext\"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>2]=d;if((c[a+8>>2]|0)==16)k=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else k=c[a+12>>2]|0;g=(c[a+80>>2]|0)+16|0;h=(c[g>>2]|0)>>>0<257?1:2;j=h+1|0;if(j>>>0>d>>>0){Ub(e,1,14585,m)|0;e=0;i=m;return e|0}c[f>>2]=d-j;qb(b,l,h);d=c[l>>2]|0;if(d>>>0>=(c[g>>2]|0)>>>0){Ub(e,1,14611,m+8|0)|0;e=0;i=m;return e|0}qb(b+h|0,(c[k+5584>>2]|0)+(d*1080|0)|0,1);if(!(Fe(a,c[l>>2]|0,b+j|0,f,e)|0)){Ub(e,1,14585,m+16|0)|0;e=0;i=m;return e|0}if(!(c[f>>2]|0)){e=1;i=m;return e|0}Ub(e,1,14585,m+24|0)|0;e=0;i=m;return e|0}function ge(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k+8|0;f=k+20|0;h=c[(c[a+80>>2]|0)+16>>2]|0;g=h>>>0<257?1:2;if((g+2|0)!=(d|0)){Ub(e,1,14502,k)|0;j=0;i=k;return j|0}if((c[a+8>>2]|0)==16)a=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else a=c[a+12>>2]|0;qb(b,f,g);qb(b+g|0,k+16|0,1);d=c[f>>2]|0;if(d>>>0>>0){qb(b+(g+1)|0,(c[a+5584>>2]|0)+(d*1080|0)+808|0,1);j=1;i=k;return j|0}else{c[j>>2]=d;c[j+4>>2]=h;Ub(e,1,14528,j)|0;j=0;i=k;return j|0}return 0}function he(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;f=h+12|0;c[f>>2]=d;if(!(Ee(a,0,b,f,e)|0)){Ub(e,1,14476,h)|0;g=0;i=h;return g|0}if(c[f>>2]|0){Ub(e,1,14476,h+8|0)|0;g=0;i=h;return g|0}if((c[a+8>>2]|0)==16)f=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else f=c[a+12>>2]|0;f=c[f+5584>>2]|0;d=a+80|0;if((c[(c[d>>2]|0)+16>>2]|0)>>>0<=1){g=1;i=h;return g|0}e=f+24|0;a=f+804|0;g=f+28|0;b=1;while(1){c[f+1104>>2]=c[e>>2];c[f+1884>>2]=c[a>>2];Ui(f+1108|0,g|0,776)|0;b=b+1|0;if(b>>>0>=(c[(c[d>>2]|0)+16>>2]|0)>>>0){f=1;break}else f=f+1080|0}i=h;return f|0}function ie(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+48|0;n=o+32|0;m=o+24|0;l=o+16|0;g=o+8|0;f=o;k=o+40|0;h=o+36|0;c[k>>2]=d;j=a+80|0;do if((c[(c[j>>2]|0)+16>>2]|0)>>>0<257){if(d){qb(b,h,1);g=b+1|0;b=d+-1|0;break}Ub(e,1,14129,f)|0;n=0;i=o;return n|0}else{if(d>>>0>=2){qb(b,h,2);g=b+2|0;b=d+-2|0;break}Ub(e,1,14129,g)|0;n=0;i=o;return n|0}while(0);c[k>>2]=b;f=c[h>>2]|0;b=c[(c[j>>2]|0)+16>>2]|0;if(f>>>0>=b>>>0){c[l>>2]=f;c[l+4>>2]=b;Ub(e,1,14155,l)|0;n=0;i=o;return n|0}if(!(Ee(a,f,g,k,e)|0)){Ub(e,1,14129,m)|0;n=0;i=o;return n|0}if(!(c[k>>2]|0)){n=1;i=o;return n|0}Ub(e,1,14129,n)|0;n=0;i=o;return n|0}function je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+16|0;h=t+8|0;s=t+12|0;r=c[(c[b+80>>2]|0)+16>>2]|0;q=r>>>0<257?1:2;p=(q<<1)+5|0;g=(e>>>0)/(p>>>0)|0;if((g|0)==0|((e>>>0)%(p>>>0)|0|0)!=0){Ub(f,1,14085,t)|0;s=0;i=t;return s|0}if((c[b+8>>2]|0)==16)p=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else p=c[b+12>>2]|0;e=p+5636|0;b=a[e>>0]|0;if(!(b&4))o=0;else o=(c[p+420>>2]|0)+1|0;n=o+g|0;if(n>>>0>31){c[h>>2]=n;Ub(f,1,14111,h)|0;s=0;i=t;return s|0}a[e>>0]=b|4;if(o>>>0>>0){f=q+1|0;m=p+8|0;h=q+3|0;j=q|4;k=j+q|0;l=k+1|0;b=d;g=o;e=p+424+(o*148|0)|0;while(1){qb(b,e,1);qb(b+1|0,e+4|0,q);d=e+8|0;qb(b+f|0,d,2);u=c[d>>2]|0;o=c[m>>2]|0;c[d>>2]=u>>>0>>0?u:o;qb(b+h|0,e+12|0,1);d=e+16|0;qb(b+j|0,d,q);qb(b+k|0,s,1);c[e+36>>2]=c[s>>2];o=c[d>>2]|0;c[d>>2]=o>>>0>>0?o:r;g=g+1|0;if(g>>>0>=n>>>0)break;else{b=b+l|0;e=e+148|0}}}c[p+420>>2]=n+-1;u=1;i=t;return u|0}function ke(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=i;i=i+144|0;L=M+128|0;H=M+120|0;G=M+112|0;F=M+104|0;E=M+96|0;D=M+88|0;A=M+72|0;t=M+64|0;r=M+56|0;q=M+48|0;p=M+40|0;s=M+32|0;l=M+24|0;j=M+16|0;h=M+136|0;w=M+132|0;J=c[d+80>>2]|0;K=d+88|0;if(f>>>0<36){Ub(g,1,13440,M)|0;g=0;i=M;return g|0}I=f+-36|0;o=(I>>>0)/3|0;if((I>>>0)%3|0){Ub(g,1,13440,M+8|0)|0;g=0;i=M;return g|0}qb(e,h,2);b[K>>1]=c[h>>2];x=J+8|0;qb(e+2|0,x,4);B=J+12|0;qb(e+6|0,B,4);qb(e+10|0,J,4);n=J+4|0;qb(e+14|0,n,4);v=d+100|0;qb(e+18|0,v,4);z=d+104|0;qb(e+22|0,z,4);u=d+92|0;qb(e+26|0,u,4);y=d+96|0;qb(e+30|0,y,4);qb(e+34|0,h,2);k=e+36|0;f=c[h>>2]|0;if(f>>>0>=16385){c[j>>2]=f;Ub(g,1,13468,j)|0;g=0;i=M;return g|0}f=f&65535;I=J+16|0;c[I>>2]=f;if((f|0)!=(o|0)){c[l>>2]=f;c[l+4>>2]=o;Ub(g,1,13529,l)|0;g=0;i=M;return g|0}l=c[J>>2]|0;m=c[x>>2]|0;if(m>>>0>l>>>0){f=c[n>>2]|0;e=c[B>>2]|0;if(f>>>0>>0){h=c[v>>2]|0;j=c[z>>2]|0;if(!(_(j,h)|0)){c[p>>2]=h;c[p+4>>2]=j;Ub(g,1,13705,p)|0;g=0;i=M;return g|0}s=Zi(e|0,0,m|0,0)|0;if(!((s|0)==(_(e,m)|0)&(C|0)==0)){c[q>>2]=m;c[q+4>>2]=e;Ub(g,1,13766,q)|0;g=0;i=M;return g|0}m=c[u>>2]|0;p=Si(m|0,0,h|0,0)|0;q=C;n=c[y>>2]|0;s=Si(n|0,0,j|0,0)|0;if(m>>>0<=l>>>0?n>>>0<=f>>>0&(p|0-q)>>>0>l>>>0&(s|0-C)>>>0>f>>>0:0){e=Qc(o,52)|0;o=J+24|0;c[o>>2]=e;if(!e){c[I>>2]=0;Ub(g,1,13852,t)|0;g=0;i=M;return g|0}a:do if(c[I>>2]|0){l=d+168|0;f=0;j=e;while(1){qb(k,w,1);c[j+24>>2]=(c[w>>2]&127)+1;c[j+32>>2]=(c[w>>2]|0)>>>7;qb(k+1|0,w,1);c[j>>2]=c[w>>2];qb(k+2|0,w,1);h=c[w>>2]|0;c[j+4>>2]=h;e=c[j>>2]|0;if((h+-1|0)>>>0>254|(e+-1|0)>>>0>254)break;c[j+36>>2]=0;c[j+40>>2]=c[l>>2];f=f+1|0;if(f>>>0>=(c[I>>2]|0)>>>0)break a;else{k=k+3|0;j=j+52|0}}c[A>>2]=f;c[A+4>>2]=e;c[A+8>>2]=h;Ub(g,1,13900,A)|0;g=0;i=M;return g|0}while(0);m=c[u>>2]|0;l=c[v>>2]|0;k=((c[x>>2]|0)+-1-m+l|0)/(l|0)|0;c[d+112>>2]=k;j=c[y>>2]|0;h=c[z>>2]|0;e=((c[B>>2]|0)+-1-j+h|0)/(h|0)|0;c[d+116>>2]=e;if(!((e|0)==0|(k|0)==0)?k>>>0<=(65535/(e>>>0)|0)>>>0:0){n=_(k,e)|0;f=d+28|0;if(!(a[d+76>>0]&2)){c[f>>2]=0;c[d+32>>2]=0;c[d+36>>2]=k;c[d+40>>2]=e}else{c[f>>2]=(((c[f>>2]|0)-m|0)>>>0)/(l>>>0)|0;D=d+32|0;c[D>>2]=(((c[D>>2]|0)-j|0)>>>0)/(h>>>0)|0;D=d+36|0;c[D>>2]=((c[D>>2]|0)+-1-m+l|0)/(l|0)|0;D=d+40|0;c[D>>2]=((c[D>>2]|0)+-1-j+h|0)/(h|0)|0}D=Qc(n,5640)|0;k=d+164|0;c[k>>2]=D;if(!D){Ub(g,1,13852,E)|0;g=0;i=M;return g|0}E=Qc(c[I>>2]|0,1080)|0;e=d+12|0;c[(c[e>>2]|0)+5584>>2]=E;if(!E){Ub(g,1,13852,F)|0;g=0;i=M;return g|0}F=Qc(10,20)|0;f=c[e>>2]|0;c[f+5612>>2]=F;if(!F){Ub(g,1,13852,G)|0;g=0;i=M;return g|0}c[f+5620>>2]=10;G=Qc(10,20)|0;f=c[e>>2]|0;c[f+5624>>2]=G;if(!G){Ub(g,1,13852,H)|0;g=0;i=M;return g|0}c[f+5632>>2]=10;j=c[I>>2]|0;if(j){h=c[o>>2]|0;f=f+5584|0;e=0;do{if(!(c[h+(e*52|0)+32>>2]|0))c[(c[f>>2]|0)+(e*1080|0)+1076>>2]=1<<(c[h+(e*52|0)+24>>2]|0)+-1;e=e+1|0}while(e>>>0>>0)}b:do if(n){f=c[k>>2]|0;H=Qc(j,1080)|0;c[f+5584>>2]=H;if(H){e=0;while(1){e=e+1|0;if(e>>>0>=n>>>0)break b;H=Qc(c[I>>2]|0,1080)|0;c[f+11224>>2]=H;if(!H)break;else f=f+5640|0}}Ub(g,1,13852,L)|0;g=0;i=M;return g|0}while(0);c[d+8>>2]=4;_b(J,K);g=1;i=M;return g|0}c[D>>2]=k;c[D+4>>2]=e;Ub(g,1,14002,D)|0;g=0;i=M;return g|0}Ub(g,1,13808,r)|0;g=0;i=M;return g|0}}else{e=c[B>>2]|0;f=c[n>>2]|0}c[s>>2]=m-l;c[s+4>>2]=e-f;Ub(g,1,13643,s)|0;g=0;i=M;return g|0}function le(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;i=i+32|0;a=f+12|0;if(d>>>0<2){Ub(e,1,13414,f)|0;e=0;i=f;return e|0}qb(b,f+16|0,1);qb(b+1|0,a,1);b=c[a>>2]|0;if(!(((d+-2|0)>>>0)%(((b>>>5&2)+2+(b>>>4&3)|0)>>>0)|0)){e=1;i=f;return e|0}Ub(e,1,13414,f+8|0)|0;e=0;i=f;return e|0}function me(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=i;i=i+16|0;if(!c){Ub(d,1,13388,a)|0;b=0}else b=1;i=a;return b|0}function ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+32|0;j=k+8|0;h=k+12|0;if(!d){Ub(e,1,13362,k)|0;e=0;i=k;return e|0}qb(b,k+16|0,1);f=d+-1|0;if(!f){e=1;i=k;return e|0}else{g=0;a=0}do{b=b+1|0;qb(b,h,1);d=c[h>>2]|0;if(!(d&128))a=0;else a=(d&127|a)<<7;g=g+1|0}while((g|0)!=(f|0));if(!a){e=1;i=k;return e|0}Ub(e,1,13362,j)|0;e=0;i=k;return e|0}function oe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+48|0;o=p+32|0;l=p+24|0;h=p+16|0;g=p+8|0;n=p+36|0;if(e>>>0<2){Ub(f,1,13276,p)|0;o=0;i=p;return o|0}m=b+184|0;a[m>>0]=a[m>>0]|1;qb(d,n,1);m=d+1|0;k=e+-1|0;j=b+124|0;e=c[j>>2]|0;do if(e){g=b+120|0;d=c[n>>2]|0;if((c[g>>2]|0)>>>0<=d>>>0){b=d+1|0;d=Tc(e,b<<3)|0;if(d){c[j>>2]=d;e=c[g>>2]|0;Qi(d+(e<<3)|0,0,b-e<<3|0)|0;c[g>>2]=b;e=c[j>>2]|0;break}Ub(f,1,13302,h)|0;o=0;i=p;return o|0}}else{d=(c[n>>2]|0)+1|0;e=Qc(d,8)|0;c[j>>2]=e;if(e){c[b+120>>2]=d;break}Ub(f,1,13302,g)|0;o=0;i=p;return o|0}while(0);d=c[n>>2]|0;if(c[e+(d<<3)>>2]|0){c[l>>2]=d;Ub(f,1,13340,l)|0;o=0;i=p;return o|0}l=Pc(k)|0;e=c[n>>2]|0;d=c[j>>2]|0;c[d+(e<<3)>>2]=l;if(!l){Ub(f,1,13302,o)|0;o=0;i=p;return o|0}else{c[d+(e<<3)+4>>2]=k;Ui(c[d+(c[n>>2]<<3)>>2]|0,m|0,k|0)|0;o=1;i=p;return o|0}return 0}function pe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;q=r+40|0;o=r+32|0;k=r+24|0;j=r+16|0;p=r+44|0;if(e>>>0<2){Ub(f,1,13127,r)|0;q=0;i=r;return q|0}if(a[b+184>>0]&1){Ub(f,1,13153,r+8|0)|0;q=0;i=r;return q|0}h=c[b+200>>2]|0;g=c[b+164>>2]|0;n=g+(h*5640|0)+5636|0;a[n>>0]=a[n>>0]|2;qb(d,p,1);n=d+1|0;m=e+-1|0;l=g+(h*5640|0)+5164|0;d=c[l>>2]|0;do if(d){g=g+(h*5640|0)+5160|0;b=c[p>>2]|0;if((c[g>>2]|0)>>>0<=b>>>0){e=b+1|0;b=Tc(d,e<<3)|0;if(b){c[l>>2]=b;d=c[g>>2]|0;Qi(b+(d<<3)|0,0,e-d<<3|0)|0;c[g>>2]=e;d=c[l>>2]|0;break}Ub(f,1,8775,k)|0;q=0;i=r;return q|0}}else{b=(c[p>>2]|0)+1|0;d=Qc(b,8)|0;c[l>>2]=d;if(d){c[g+(h*5640|0)+5160>>2]=b;break}Ub(f,1,8775,j)|0;q=0;i=r;return q|0}while(0);b=c[p>>2]|0;if(c[d+(b<<3)>>2]|0){c[o>>2]=b;Ub(f,1,13254,o)|0;q=0;i=r;return q|0}o=Pc(m)|0;d=c[p>>2]|0;b=c[l>>2]|0;c[b+(d<<3)>>2]=o;if(!o){Ub(f,1,8775,q)|0;q=0;i=r;return q|0}else{c[b+(d<<3)+4>>2]=m;Ui(c[b+(c[p>>2]<<3)>>2]|0,n|0,m|0)|0;q=1;i=r;return q|0}return 0}function qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=i;i=i+16|0;if((c[(c[a+80>>2]|0)+16>>2]<<2|0)==(d|0)){e=1;i=b;return e|0}Ub(e,1,13101,b)|0;e=0;i=b;return e|0}function re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 1}function se(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+48|0;r=s+40|0;q=s+32|0;l=s+24|0;p=s+44|0;if((c[a+8>>2]|0)==16)j=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else j=c[a+12>>2]|0;if(d>>>0<2){Ub(e,1,12933,s)|0;r=0;i=s;return r|0}qb(b,p,2);if(c[p>>2]|0){Ub(e,2,12959,s+8|0)|0;r=1;i=s;return r|0}if(d>>>0<7){Ub(e,1,12933,s+16|0)|0;r=0;i=s;return r|0}qb(b+2|0,p,2);n=b+4|0;o=c[p>>2]&255;k=j+5612|0;f=c[k>>2]|0;m=j+5616|0;a=c[m>>2]|0;a:do if(!a){g=0;h=f}else{g=0;h=f;do{if((c[h+8>>2]|0)==(o|0))break a;h=h+20|0;g=g+1|0}while(g>>>0>>0)}while(0);if((g|0)==(a|0)){g=j+5620|0;do if((a|0)==(c[g>>2]|0)){a=a+10|0;c[g>>2]=a;a=Tc(f,a*20|0)|0;if(a){c[k>>2]=a;f=c[m>>2]|0;Qi(a+(f*20|0)|0,0,((c[g>>2]|0)-f|0)*20|0)|0;f=c[k>>2]|0;a=c[m>>2]|0;break}Uc(c[k>>2]|0);c[k>>2]=0;c[g>>2]=0;c[m>>2]=0;Ub(e,1,13019,l)|0;r=0;i=s;return r|0}while(0);c[m>>2]=a+1;h=f+(a*20|0)|0}g=h+12|0;a=c[g>>2]|0;if(a){Uc(a);c[g>>2]=0}c[h+8>>2]=o;o=c[p>>2]|0;c[h+4>>2]=o>>>8&3;c[h>>2]=o>>>10&3;qb(n,p,2);if(c[p>>2]|0){Ub(e,2,13057,q)|0;r=1;i=s;return r|0}a=d+-6|0;f=Pc(a)|0;c[g>>2]=f;if(!f){Ub(e,1,12933,r)|0;r=0;i=s;return r|0}else{Ui(f|0,b+6|0,a|0)|0;c[h+16>>2]=a;r=1;i=s;return r|0}return 0}function te(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+32|0;f=j+16|0;h=j+12|0;a=a+80|0;g=c[(c[a>>2]|0)+16>>2]|0;if((g+2|0)!=(d|0)){Ub(e,1,12907,j)|0;h=0;i=j;return h|0}qb(b,f,2);if((c[f>>2]|0)!=(g|0)){Ub(e,1,12907,j+8|0)|0;h=0;i=j;return h|0}if(!g){h=1;i=j;return h|0}f=b+2|0;b=0;a=c[(c[a>>2]|0)+24>>2]|0;while(1){qb(f,h,1);c[a+32>>2]=(c[h>>2]|0)>>>7&1;c[a+24>>2]=(c[h>>2]&127)+1;b=b+1|0;if((b|0)==(g|0)){a=1;break}else{f=f+1|0;a=a+52|0}}i=j;return a|0}function ue(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=i;i=i+144|0;I=J+120|0;H=J+112|0;G=J+104|0;F=J+96|0;E=J+88|0;D=J+80|0;C=J+72|0;B=J+64|0;A=J+56|0;z=J+48|0;p=J+40|0;o=J+32|0;m=J+24|0;x=J+136|0;u=J+132|0;v=J+128|0;w=J+124|0;if((c[b+8>>2]|0)==16)q=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else q=c[b+12>>2]|0;if(e>>>0<2){Ub(f,1,12567,J)|0;I=0;i=J;return I|0}qb(d,x,2);if(c[x>>2]|0){Ub(f,2,12593,J+8|0)|0;I=1;i=J;return I|0}if(e>>>0<7){Ub(f,1,12567,J+16|0)|0;I=0;i=J;return I|0}qb(d+2|0,u,1);n=d+3|0;l=q+5624|0;g=c[l>>2]|0;y=q+5628|0;b=c[y>>2]|0;a:do if(!b){j=0;h=g}else{k=c[u>>2]|0;j=0;h=g;do{if((c[h>>2]|0)==(k|0))break a;h=h+20|0;j=j+1|0}while(j>>>0>>0)}while(0);if((j|0)==(b|0)){h=q+5632|0;do if((b|0)==(c[h>>2]|0)){b=b+10|0;c[h>>2]=b;b=Tc(g,b*20|0)|0;if(b){c[l>>2]=b;g=c[y>>2]|0;Qi(b+(g*20|0)|0,0,((c[h>>2]|0)-g|0)*20|0)|0;g=c[l>>2]|0;b=c[y>>2]|0;break}Uc(c[l>>2]|0);c[l>>2]=0;c[h>>2]=0;c[y>>2]=0;Ub(f,1,12639,m)|0;I=0;i=J;return I|0}while(0);h=g+(b*20|0)|0}c[h>>2]=c[u>>2];qb(n,x,2);if(c[x>>2]|0){Ub(f,2,12593,o)|0;I=1;i=J;return I|0}qb(d+5|0,v,2);g=c[v>>2]|0;if(g>>>0>1){Ub(f,2,12677,p)|0;I=1;i=J;return I|0}b=e+-7|0;b:do if(g){r=h+4|0;s=h+16|0;t=h+8|0;e=h+12|0;p=q+5612|0;o=q+5616|0;m=d+7|0;n=0;c:while(1){if(b>>>0<3){g=27;break}qb(m,x,1);if((c[x>>2]|0)!=1){g=29;break}qb(m+1|0,w,2);g=b+-3|0;j=c[w>>2]|0;k=(j>>>15)+1|0;j=j&32767;c[r>>2]=j;h=(_(k,j)|0)+2|0;if(g>>>0>>0){g=31;break}b=m+3|0;l=g-h|0;if(j){g=0;do{qb(b,x,k);if((c[x>>2]|0)!=(g|0)){g=34;break c}b=b+k|0;g=g+1|0}while(g>>>0<(c[r>>2]|0)>>>0)}qb(b,w,2);g=b+2|0;h=c[w>>2]|0;j=(h>>>15)+1|0;h=h&32767;c[w>>2]=h;if((h|0)!=(c[r>>2]|0)){g=37;break}b=(_(j,h)|0)+3|0;if(l>>>0>>0){g=39;break}b=l-b|0;if(h){h=0;do{qb(g,x,j);if((c[x>>2]|0)!=(h|0)){g=42;break c}g=g+j|0;h=h+1|0}while(h>>>0<(c[r>>2]|0)>>>0)}qb(g,x,3);m=g+3|0;a[s>>0]=((c[x>>2]|0)>>>16^1)&1|a[s>>0]&-2;c[t>>2]=0;c[e>>2]=0;l=c[x>>2]|0;h=l&255;c[u>>2]=h;if(h){j=c[o>>2]|0;if(!j){g=50;break}k=0;g=c[p>>2]|0;while(1){if((c[g+8>>2]|0)==(h|0))break;k=k+1|0;if(k>>>0>=j>>>0){g=50;break c}else g=g+20|0}c[t>>2]=g}h=l>>>8&255;c[u>>2]=h;if(h){j=c[o>>2]|0;if(!j){g=57;break}k=0;g=c[p>>2]|0;while(1){if((c[g+8>>2]|0)==(h|0))break;k=k+1|0;if(k>>>0>=j>>>0){g=57;break c}else g=g+20|0}c[e>>2]=g}n=n+1|0;if(n>>>0>=(c[v>>2]|0)>>>0)break b}if((g|0)==27){Ub(f,1,12567,z)|0;I=0;i=J;return I|0}else if((g|0)==29){Ub(f,2,12721,A)|0;I=1;i=J;return I|0}else if((g|0)==31){Ub(f,1,12567,B)|0;I=0;i=J;return I|0}else if((g|0)==34){Ub(f,2,12787,C)|0;I=1;i=J;return I|0}else if((g|0)==37){Ub(f,2,12841,D)|0;I=1;i=J;return I|0}else if((g|0)==39){Ub(f,1,12567,E)|0;I=0;i=J;return I|0}else if((g|0)==42){Ub(f,2,12787,F)|0;I=1;i=J;return I|0}else if((g|0)==50){Ub(f,1,12567,G)|0;I=0;i=J;return I|0}else if((g|0)==57){Ub(f,1,12567,H)|0;I=0;i=J;return I|0}}while(0);if(!b){c[y>>2]=(c[y>>2]|0)+1;I=1;i=J;return I|0}else{Ub(f,1,12567,I)|0;I=0;i=J;return I|0}return 0}function ve(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+32|0;r=s+24|0;q=s+20|0;n=a+80|0;f=c[n>>2]|0;if((c[a+8>>2]|0)==16)g=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else g=c[a+12>>2]|0;if(!d){Ub(e,1,12486,s)|0;r=0;i=s;return r|0}qb(b,q,1);a=c[q>>2]|0;if(a>>>0>1){Ub(e,2,12512,s+8|0)|0;r=1;i=s;return r|0}if((a+1|0)!=(d|0)){Ub(e,2,12486,s+16|0)|0;r=0;i=s;return r|0}m=g+5584|0;a=c[f+16>>2]|0;if(a){d=0;e=c[m>>2]|0;while(1){c[e+1076>>2]=0;d=d+1|0;if(d>>>0>=a>>>0)break;else e=e+1080|0}}l=g+5604|0;a=c[l>>2]|0;if(a){Uc(a);c[l>>2]=0}if(!(c[q>>2]|0)){r=1;i=s;return r|0}k=g+5624|0;h=g+5628|0;j=0;while(1){b=b+1|0;qb(b,r,1);a=c[n>>2]|0;f=c[k>>2]|0;g=c[h>>2]|0;if(((g|0)!=0?!((g|0)==0?1:(c[f>>2]|0)!=(c[r>>2]|0)):0)?(o=c[f+4>>2]|0,p=a+16|0,(o|0)==(c[p>>2]|0)):0){a=c[f+8>>2]|0;if(a){d=_(o,o)|0;g=_(c[1036+(c[a>>2]<<2)>>2]|0,d)|0;if((c[a+16>>2]|0)!=(g|0)){a=0;d=32;break}e=Pc(d<<2)|0;c[l>>2]=e;if(!e){a=0;d=32;break}Xa[c[1052+(c[a>>2]<<2)>>2]&15](c[a+12>>2]|0,e,d)}a=c[f+12>>2]|0;if(a){d=c[p>>2]|0;g=_(d,c[1036+(c[a>>2]<<2)>>2]|0)|0;if((c[a+16>>2]|0)!=(g|0)){a=0;d=32;break}g=Pc(d<<2)|0;if(!g){a=0;d=32;break}Xa[c[1068+(c[a>>2]<<2)>>2]&15](c[a+12>>2]|0,g,d);a=c[p>>2]|0;if(a){d=0;e=g;f=c[m>>2]|0;while(1){c[f+1076>>2]=c[e>>2];d=d+1|0;if((d|0)==(a|0))break;else{e=e+4|0;f=f+1080|0}}}Uc(g)}}j=j+1|0;if(j>>>0>=(c[q>>2]|0)>>>0){a=1;d=32;break}}if((d|0)==32){i=s;return a|0}return 0}function we(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){qb(a,f,2);c[b>>2]=c[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+2|0}}i=g;return}function xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){qb(a,f,4);c[b>>2]=c[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=g;return}function ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=i;i=i+16|0;f=h;if(!d){i=h;return}e=0;while(1){ub(a,f);c[b>>2]=~~+g[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=h;return}function ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){sb(a,f);c[b>>2]=~~+h[f>>3];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+8|0}}i=g;return}function Ae(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=i;i=i+16|0;f=h;if(!d){i=h;return}e=0;while(1){qb(a,f,2);g[b>>2]=+((c[f>>2]|0)>>>0);e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+2|0}}i=h;return}function Be(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=i;i=i+16|0;f=h;if(!d){i=h;return}e=0;while(1){qb(a,f,4);g[b>>2]=+((c[f>>2]|0)>>>0);e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=h;return}function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=i;i=i+16|0;f=g;if(!d){i=g;return}e=0;while(1){ub(a,f);c[b>>2]=c[f>>2];e=e+1|0;if((e|0)==(d|0))break;else{b=b+4|0;a=a+4|0}}i=g;return}function De(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=i;i=i+16|0;e=f;if(!c){i=f;return}d=0;while(1){sb(a,e);g[b>>2]=+h[e>>3];d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+8|0}}i=f;return}function Ee(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+32|0;h=n+8|0;k=n+20|0;if((c[a+8>>2]|0)==16)a=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else a=c[a+12>>2]|0;m=c[a+5584>>2]|0;a=c[e>>2]|0;if(!a){Ub(f,1,14224,n)|0;b=0;i=n;return b|0}c[e>>2]=a+-1;qb(d,k,1);d=d+1|0;g=c[k>>2]&31;j=m+(b*1080|0)+24|0;c[j>>2]=g;c[m+(b*1080|0)+804>>2]=(c[k>>2]|0)>>>5;do if((g|0)==1){a=1;l=8}else{a=(c[e>>2]|0)>>>((g|0)!=0&1);if(a>>>0>97){c[h>>2]=a;c[h+4>>2]=97;c[h+8>>2]=97;Ub(f,2,14260,h)|0;g=c[j>>2]|0}f=(a|0)==0;if(g)if(f){a=0;l=20;break}else{l=8;break}if(!f){g=0;while(1){qb(d,k,1);if(g>>>0<97){c[m+(b*1080|0)+28+(g<<3)>>2]=(c[k>>2]|0)>>>3;c[m+(b*1080|0)+28+(g<<3)+4>>2]=0}g=g+1|0;if((g|0)==(a|0))break;else d=d+1|0}}a=(c[e>>2]|0)-a|0}while(0);if((l|0)==8){g=0;while(1){qb(d,k,2);if(g>>>0<97){c[m+(b*1080|0)+28+(g<<3)>>2]=(c[k>>2]|0)>>>11;c[m+(b*1080|0)+28+(g<<3)+4>>2]=c[k>>2]&2047}g=g+1|0;if((g|0)==(a|0)){l=20;break}else d=d+2|0}}if((l|0)==20)a=(c[e>>2]|0)-(a<<1)|0;c[e>>2]=a;if((c[j>>2]|0)!=1){b=1;i=n;return b|0}a=m+(b*1080|0)+28|0;d=m+(b*1080|0)+32|0;g=1;do{e=(c[a>>2]|0)-(((g+-1|0)>>>0)/3|0)|0;c[m+(b*1080|0)+28+(g<<3)>>2]=(e|0)>0?e:0;c[m+(b*1080|0)+28+(g<<3)+4>>2]=c[d>>2];g=g+1|0}while((g|0)!=97);a=1;i=n;return a|0}function Fe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+48|0;p=r+40|0;l=r+32|0;k=r+16|0;j=r+8|0;o=r+44|0;h=a+8|0;if((c[h>>2]|0)==16)g=(c[a+164>>2]|0)+((c[a+200>>2]|0)*5640|0)|0;else g=c[a+12>>2]|0;m=c[g+5584>>2]|0;if((c[e>>2]|0)>>>0<5){Ub(f,1,14664,r)|0;e=0;i=r;return e|0}n=m+(b*1080|0)+4|0;qb(d,n,1);g=(c[n>>2]|0)+1|0;c[n>>2]=g;if(g>>>0>33){c[j>>2]=g;c[j+4>>2]=33;Ub(f,1,14699,j)|0;e=0;i=r;return e|0}if((c[a+168>>2]|0)>>>0>=g>>>0){c[k>>2]=b;Ub(f,1,14776,k)|0;c[h>>2]=c[h>>2]|32768;e=0;i=r;return e|0}j=m+(b*1080|0)+8|0;qb(d+1|0,j,1);c[j>>2]=(c[j>>2]|0)+2;a=m+(b*1080|0)+12|0;qb(d+2|0,a,1);k=(c[a>>2]|0)+2|0;c[a>>2]=k;j=c[j>>2]|0;if(j>>>0>10|k>>>0>10|(j+k|0)>>>0>12){Ub(f,1,14934,r+24|0)|0;e=0;i=r;return e|0}qb(d+3|0,m+(b*1080|0)+16|0,1);qb(d+4|0,m+(b*1080|0)+20|0,1);h=(c[e>>2]|0)+-5|0;c[e>>2]=h;g=c[n>>2]|0;if(!(c[m+(b*1080|0)>>2]&1)){if(!g){e=1;i=r;return e|0}else g=0;do{c[m+(b*1080|0)+812+(g<<2)>>2]=15;c[m+(b*1080|0)+944+(g<<2)>>2]=15;g=g+1|0}while(g>>>0<(c[n>>2]|0)>>>0);g=1;i=r;return g|0}if(h>>>0>>0){Ub(f,1,14664,l)|0;e=0;i=r;return e|0}do if(!g)g=0;else{a=0;h=d+5|0;while(1){qb(h,o,1);h=h+1|0;g=c[o>>2]|0;if((a|0)!=0?g>>>0<16|(g&15|0)==0:0)break;c[m+(b*1080|0)+812+(a<<2)>>2]=g&15;c[m+(b*1080|0)+944+(a<<2)>>2]=(c[o>>2]|0)>>>4;a=a+1|0;g=c[n>>2]|0;if(a>>>0>=g>>>0){q=22;break}}if((q|0)==22){h=c[e>>2]|0;break}Ub(f,1,15002,p)|0;e=0;i=r;return e|0}while(0);c[e>>2]=h-g;e=1;i=r;return e|0}function Ge(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){pb(b,~~+g[a>>2]>>>0,2);d=d+1|0;if((d|0)==(c|0))break;else{b=b+2|0;a=a+4|0}}return}function He(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){pb(b,~~+g[a>>2]>>>0,4);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}return}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){tb(b,+g[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{b=b+4|0;a=a+4|0}}return}function Je(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)return;d=0;while(1){rb(b,+g[a>>2]);d=d+1|0;if((d|0)==(c|0))break;else{b=b+8|0;a=a+4|0}}return}function Ke(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;if(!d){d=0;i=j;return d|0}if(!(ld(c[a>>2]|0,b,d,e)|0)){Ub(e,1,16303,j)|0;d=0;i=j;return d|0}if(c[a+128>>2]|0){d=1;i=j;return d|0}h=a+108|0;if(!(bf(d,h,e)|0)){d=0;i=j;return d|0}b=c[a+48>>2]|0;a:do switch(b|0){case 16:{c[d+20>>2]=1;break}case 17:{c[d+20>>2]=2;break}case 18:{c[d+20>>2]=3;break}case 24:{c[d+20>>2]=4;break}default:{f=d+20|0;if((b|0)==12){c[f>>2]=5;break a}else{c[f>>2]=-1;break a}}}while(0);g=a+120|0;b=c[g>>2]|0;do if(b){if(c[b+12>>2]|0){cf(d,h);break}Uc(c[b+4>>2]|0);Uc(c[(c[g>>2]|0)+8>>2]|0);Uc(c[c[g>>2]>>2]|0);b=c[g>>2]|0;f=c[b+12>>2]|0;if(f){Uc(f);b=c[g>>2]|0}Uc(b);c[g>>2]=0}while(0);if(c[a+116>>2]|0)df(d,h,e);b=c[h>>2]|0;if(!b){d=1;i=j;return d|0}c[d+28>>2]=b;c[d+32>>2]=c[a+112>>2];c[h>>2]=0;d=1;i=j;return d|0}function Le(b,d){b=b|0;d=d|0;Wc(c[b>>2]|0,d);a[b+124>>0]=0;c[b+128>>2]=c[d+8248>>2]&1;return}function Me(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+80|0;v=w+64|0;s=w+56|0;o=w+48|0;r=w+40|0;q=w+32|0;p=w+24|0;if(!((a|0)!=0&(d|0)!=0&(e|0)!=0)){d=0;i=w;return d|0}t=e+16|0;if(((c[t>>2]|0)+-1|0)>>>0>16383){Ub(f,1,16352,w)|0;d=0;i=w;return d|0}if(!(Zc(c[a>>2]|0,d,e,f)|0)){d=0;i=w;return d|0}c[a+56>>2]=1785737760;c[a+60>>2]=0;c[a+64>>2]=1;g=Pc(4)|0;h=a+68|0;c[h>>2]=g;if(!g){c[h>>2]=0;Ub(f,1,16421,w+8|0)|0;d=0;i=w;return d|0}c[g>>2]=1785737760;l=c[t>>2]|0;c[a+20>>2]=l;l=Pc(l*12|0)|0;g=a+72|0;c[g>>2]=l;if(!l){c[g>>2]=0;Ub(f,1,16421,w+16|0)|0;d=0;i=w;return d|0}c[a+16>>2]=(c[e+12>>2]|0)-(c[e+4>>2]|0);c[a+12>>2]=(c[e+8>>2]|0)-(c[e>>2]|0);u=e+24|0;m=c[u>>2]|0;j=c[m+24>>2]|0;k=c[m+32>>2]|0;g=a+24|0;c[g>>2]=j+-1+(k<<7);n=c[t>>2]|0;if(n>>>0>1){h=1;do{if((j|0)!=(c[m+(h*52|0)+24>>2]|0))c[g>>2]=255;h=h+1|0}while(h>>>0>>0)}c[a+28>>2]=7;c[a+32>>2]=0;c[a+36>>2]=0;h=(n|0)==0;if(!h?(c[l+8>>2]=j+-1+(k<<7),n>>>0>1):0){g=1;do{c[l+(g*12|0)+8>>2]=(c[m+(g*52|0)+24>>2]|0)+-1+(c[m+(g*52|0)+32>>2]<<7);g=g+1|0}while(g>>>0>>0)}g=a+40|0;a:do if(!(c[e+32>>2]|0)){c[g>>2]=1;switch(c[e+20>>2]|0){case 1:{c[a+48>>2]=16;break a}case 2:{c[a+48>>2]=17;break a}case 3:{c[a+48>>2]=18;break a}default:break a}}else{c[g>>2]=2;c[a+48>>2]=0}while(0);b:do if(!h){h=0;g=0;j=0;do{e=(b[m+(j*52|0)+48>>1]|0)==0;g=(e&1^1)+g|0;h=e?h:j;j=j+1|0}while(j>>>0>>0);j=h;if((g|0)!=1){if(g>>>0<=1)break;Ub(f,2,16717,o)|0;break}switch(c[a+48>>2]|0){case 18:case 16:{h=3;break}case 17:{h=1;break}default:{Ub(f,2,16467,p)|0;break b}}if(n>>>0<(h+1|0)>>>0){Ub(f,2,16541,q)|0;break}if(j>>>0>>0){Ub(f,2,16634,r)|0;break}r=Pc(8)|0;g=a+116|0;c[g>>2]=r;if(!r){Ub(f,1,16782,s)|0;d=0;i=w;return d|0}s=Pc((c[t>>2]|0)*6|0)|0;e=c[g>>2]|0;c[e>>2]=s;if(!s){Ub(f,1,16782,v)|0;d=0;i=w;return d|0}l=c[t>>2]|0;b[e+4>>1]=l;k=c[e>>2]|0;g=0;do{b[k+(g*6|0)>>1]=g;b[k+(g*6|0)+2>>1]=0;v=g;g=g+1|0;b[k+(v*6|0)+4>>1]=g}while((g|0)!=(h|0));if(h>>>0>>0){j=c[u>>2]|0;do{v=(b[j+(h*52|0)+48>>1]|0)==0;b[k+(h*6|0)>>1]=h;g=k+(h*6|0)+2|0;if(v){b[g>>1]=-1;b[k+(h*6|0)+4>>1]=-1}else{b[g>>1]=1;b[(c[e>>2]|0)+(h*6|0)+4>>1]=0}h=h+1|0}while(h>>>0>>0)}}while(0);c[a+52>>2]=0;c[a+44>>2]=0;c[a+96>>2]=c[d+18692>>2];d=1;i=w;return d|0}function Ne(a,b,d){a=a|0;b=b|0;d=d|0;return od(c[a>>2]|0,b,d)|0}function Oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+8|0;if(!(sg(c[e>>2]|0,52,d)|0)){d=0;return d|0}g=c[e>>2]|0;h=tg(g)|0;e=ug(g)|0;if(h){i=0;f=1;while(1){if(!f)f=0;else f=(Ra[c[e>>2]&63](a,b,d)|0)!=0;i=i+1|0;if((i|0)==(h|0))break;else{e=e+4|0;f=f&1}}vg(g);if(!f){d=0;return d|0}}else vg(g);d=$c(c[a>>2]|0,b,d)|0;return d|0}function Pe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=a+8|0;if(!(sg(c[e>>2]|0,53,d)|0)){d=0;return d|0}if(!(pd(c[a>>2]|0,b,d)|0)){d=0;return d|0}i=c[e>>2]|0;g=tg(i)|0;e=ug(i)|0;if(!g)e=1;else{h=0;f=e;e=1;while(1){if(!e)e=0;else e=(Ra[c[f>>2]&63](a,b,d)|0)!=0;e=e&1;h=h+1|0;if((h|0)==(g|0))break;else f=f+4|0}}vg(i);d=e;return d|0}function Qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a+4|0;if(!(sg(c[f>>2]|0,54,e)|0)){b=0;return b|0}h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](a,b,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){b=0;return b|0}}else vg(h);f=a+8|0;if(!(sg(c[f>>2]|0,55,e)|0)){b=0;return b|0}if(!(sg(c[f>>2]|0,56,e)|0)){b=0;return b|0}if(!(sg(c[f>>2]|0,57,e)|0)){b=0;return b|0}if((c[a+96>>2]|0)!=0?(sg(c[f>>2]|0,58,e)|0)==0:0){b=0;return b|0}if(!(sg(c[f>>2]|0,59,e)|0)){b=0;return b|0}h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](a,b,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){b=0;return b|0}}else vg(h);b=qd(c[a>>2]|0,b,d,e)|0;return b|0}function Re(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+8|0;if(!(sg(c[k>>2]|0,52,e)|0)){a=0;return a|0}h=c[b+4>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){a=0;return a|0}}else vg(h);h=c[k>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){a=0;return a|0}}else vg(h);a=ad(a,c[b>>2]|0,d,e)|0;return a|0}function Se(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return cd(c[a>>2]|0,b,d,e,f,g,h,i,j,k,l)|0}function Te(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;return rd(c[a>>2]|0,b,d,e,f,g)|0}function Ue(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;return dd(c[a>>2]|0,b,d,e,f,g)|0}function Ve(a){a=a|0;var b=0,d=0,e=0;if(!a)return;Yc(c[a>>2]|0);c[a>>2]=0;b=a+72|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+68|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+108|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}e=a+116|0;b=c[e>>2]|0;if(b){d=c[b>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b>>2]=0}Uc(b);c[e>>2]=0}e=a+120|0;b=c[e>>2]|0;if(b){d=c[b+12>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b+12>>2]=0}d=c[b+4>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b+4>>2]=0}d=c[b+8>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b+8>>2]=0}d=c[b>>2]|0;if(d){Uc(d);b=c[e>>2]|0;c[b>>2]=0}Uc(b);c[e>>2]=0}b=a+4|0;d=c[b>>2]|0;if(d){rg(d);c[b>>2]=0}b=a+8|0;d=c[b>>2]|0;if(d){rg(d);c[b>>2]=0}Uc(a);return}function We(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ed(c[a>>2]|0,b,d,e,f,g,h)|0}function Xe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;if(!d){a=0;i=j;return a|0}Ub(e,2,16826,j)|0;if(!(md(c[a>>2]|0,b,d,e,f)|0)){Ub(e,1,16303,j+8|0)|0;a=0;i=j;return a|0}h=a+108|0;if(!(bf(d,h,e)|0)){a=0;i=j;return a|0}f=c[a+48>>2]|0;a:do switch(f|0){case 16:{c[d+20>>2]=1;break}case 17:{c[d+20>>2]=2;break}case 18:{c[d+20>>2]=3;break}case 24:{c[d+20>>2]=4;break}default:{b=d+20|0;if((f|0)==12){c[b>>2]=5;break a}else{c[b>>2]=-1;break a}}}while(0);g=a+120|0;b=c[g>>2]|0;do if(b){if(c[b+12>>2]|0){cf(d,h);break}Uc(c[b+4>>2]|0);Uc(c[(c[g>>2]|0)+8>>2]|0);Uc(c[c[g>>2]>>2]|0);b=c[g>>2]|0;f=c[b+12>>2]|0;if(f){Uc(f);b=c[g>>2]|0}Uc(b);c[g>>2]=0}while(0);if(c[a+116>>2]|0)df(d,h,e);b=c[h>>2]|0;if(!b){a=1;i=j;return a|0}c[d+28>>2]=b;c[d+32>>2]=c[a+112>>2];c[h>>2]=0;a=1;i=j;return a|0}function Ye(b){b=b|0;var d=0;d=Qc(1,136)|0;if(!d)return d|0;if(!b){b=Xc()|0;c[d>>2]=b}else{b=fd()|0;c[d>>2]=b}if(!b){Ve(d);d=0;return d|0}b=d+108|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;a[b+16>>0]=0;b=qg()|0;c[d+4>>2]=b;if(!b){Ve(d);d=0;return d|0}b=qg()|0;c[d+8>>2]=b;if(b)return d|0;Ve(d);d=0;return d|0}function Ze(a,b,d){a=a|0;b=b|0;d=d|0;gd(c[a>>2]|0,b,d);return}function _e(a){a=a|0;return kd(c[a>>2]|0)|0}function $e(a){a=a|0;return jd(c[a>>2]|0)|0}function af(a,b,d){a=a|0;b=b|0;d=d|0;return nd(c[a>>2]|0,b,d)|0}function bf(f,g,h){f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+80|0;A=B+72|0;z=B+64|0;y=B+56|0;x=B+48|0;w=B+40|0;v=B+32|0;u=B+24|0;s=B+16|0;o=B+8|0;n=B;j=c[g+8>>2]|0;a:do if(j){r=c[j>>2]|0;q=b[j+4>>1]|0;j=c[f+16>>2]|0;p=c[g+12>>2]|0;if((p|0)!=0?(c[p+12>>2]|0)!=0:0)g=d[p+18>>0]|0;else g=j;m=q<<16>>16==0;b:do if(!m){l=0;c:while(1){k=l&65535;j=e[r+(k*6|0)>>1]|0;if(j>>>0>=g>>>0){k=15;break}j=b[r+(k*6|0)+4>>1]|0;switch(j<<16>>16){case 0:case -1:break;default:{j=(j&65535)+-1|0;if(j>>>0>=g>>>0){k=18;break c}}}l=l+1<<16>>16;if((l&65535)>=(q&65535))break b}if((k|0)==15){c[n>>2]=j;c[n+4>>2]=g;Ub(h,1,19343,n)|0;h=0;i=B;return h|0}else if((k|0)==18){c[o>>2]=j;c[o+4>>2]=g;Ub(h,1,19343,o)|0;h=0;i=B;return h|0}}while(0);if(!g)j=p;else{d:do if(!m)while(1){g=g+-1|0;j=0;do{if((e[r+((j&65535)*6|0)>>1]|0)==(g|0))break;j=j+1<<16>>16}while((j&65535)<(q&65535));if(j<<16>>16==q<<16>>16)break d;if(!g){j=p;break a}}while(0);Ub(h,1,19380,s)|0;h=0;i=B;return h|0}}else j=c[g+12>>2]|0;while(0);if(!j){h=1;i=B;return h|0}t=c[j+12>>2]|0;if(!t){h=1;i=B;return h|0}p=a[j+18>>0]|0;s=p&255;r=p<<24>>24==0;if(r)j=1;else{l=f+16|0;g=0;m=0;j=1;do{g=e[t+(g<<2)>>1]|0;k=c[l>>2]|0;if(g>>>0>=k>>>0){c[u>>2]=g;c[u+4>>2]=k;Ub(h,1,19343,u)|0;j=0}m=m+1<<16>>16;g=m&65535}while(g>>>0>>0)}q=Qc(s,4)|0;if(!q){Ub(h,1,19413,v)|0;h=0;i=B;return h|0}if(!r){n=0;o=0;do{k=a[t+(n<<2)+3>>0]|0;l=k&255;do if((k&255)<(p&255)){m=q+(l<<2)|0;g=a[t+(n<<2)+2>>0]|0;if((c[m>>2]|0)!=0&g<<24>>24==1){c[x>>2]=l;Ub(h,1,19486,x)|0;j=0;break}if(g<<24>>24!=0|k<<24>>24==0){c[m>>2]=1;break}else{c[y>>2]=n;c[y+4>>2]=l;Ub(h,1,19517,y)|0;j=0;break}}else{c[w>>2]=l;Ub(h,1,19430,w)|0;j=0}while(0);o=o+1<<16>>16;n=o&65535}while(n>>>0>>0);if(!r){g=0;k=0;do{if((c[q+(g<<2)>>2]|0)==0?(a[t+(g<<2)+2>>0]|0)!=0:0){c[z>>2]=g;Ub(h,1,19553,z)|0;j=0}k=k+1<<16>>16;g=k&65535}while(g>>>0>>0)}}if(!j){Uc(q);h=0;i=B;return h|0}e:do if(!((c[f+16>>2]|0)!=1|r)){j=0;g=0;while(1){g=g+1<<16>>16;if(!(c[q+(j<<2)>>2]|0))break;j=g&65535;if(j>>>0>=s>>>0)break e}c[A>>2]=j;Ub(h,2,19591,A)|0;if(!r){j=0;g=0;do{a[t+(j<<2)+2>>0]=1;a[t+(j<<2)+3>>0]=g;g=g+1<<16>>16;j=g&65535}while(j>>>0>>0)}}while(0);Uc(q);h=1;i=B;return h|0}function cf(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=g+12|0;g=c[w>>2]|0;m=c[g+8>>2]|0;o=c[g+4>>2]|0;q=c[g>>2]|0;r=c[g+12>>2]|0;g=a[g+18>>0]|0;s=f+24|0;t=c[s>>2]|0;u=g&255;v=Pc(u*52|0)|0;if(!v)return;n=g<<24>>24==0;if(!n){k=0;l=0;do{g=b[r+(k<<2)>>1]|0;if(!(a[r+(k<<2)+2>>0]|0)){g=g&65535;h=v+(k*52|0)|0;i=t+(g*52|0)|0;j=h+52|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}else{g=g&65535;h=v+((d[r+(k<<2)+3>>0]|0)*52|0)|0;i=t+(g*52|0)|0;j=h+52|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}j=Pc(_(c[t+(g*52|0)+8>>2]<<2,c[t+(g*52|0)+12>>2]|0)|0)|0;c[v+(k*52|0)+44>>2]=j;if(!j){p=7;break}c[v+(k*52|0)+24>>2]=d[m+k>>0];c[v+(k*52|0)+32>>2]=d[o+k>>0];l=l+1<<16>>16;k=l&65535}while(k>>>0>>0);if((p|0)==7){Uc(v);return}m=(e[(c[w>>2]|0)+16>>1]|0)+-1|0;if(!n){g=0;l=0;do{j=c[t+((e[r+(g<<2)>>1]|0)*52|0)+44>>2]|0;i=d[r+(g<<2)+3>>0]|0;k=_(c[v+(i*52|0)+12>>2]|0,c[v+(i*52|0)+8>>2]|0)|0;if(!(a[r+(g<<2)+2>>0]|0)){g=c[v+(g*52|0)+44>>2]|0;if(k){h=0;do{c[g+(h<<2)>>2]=c[j+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0))}}else{g=c[v+(i*52|0)+44>>2]|0;if(k){h=0;do{p=c[j+(h<<2)>>2]|0;c[g+(h<<2)>>2]=c[q+((_((p|0)<0?0:(p|0)>(m|0)?m:p,u)|0)+i<<2)>>2];h=h+1|0}while((h|0)!=(k|0))}}l=l+1<<16>>16;g=l&65535}while(g>>>0>>0)}}h=f+16|0;i=c[h>>2]|0;if(i){g=0;j=0;do{g=c[t+(g*52|0)+44>>2]|0;if(g)Uc(g);j=j+1<<16>>16;g=j&65535}while(g>>>0>>0)}Uc(t);c[s>>2]=v;c[h>>2]=u;Uc(c[(c[w>>2]|0)+4>>2]|0);Uc(c[(c[w>>2]|0)+8>>2]|0);Uc(c[c[w>>2]>>2]|0);g=c[w>>2]|0;h=c[g+12>>2]|0;if(h){Uc(h);g=c[w>>2]|0}Uc(g);c[w>>2]=0;return}function df(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+80|0;w=y+8|0;v=y;u=y+16|0;x=d+8|0;f=c[x>>2]|0;d=c[f>>2]|0;t=b[f+4>>1]|0;if(t<<16>>16){s=a+16|0;o=a+24|0;q=1;r=0;while(1){p=b[d+(r*6|0)>>1]|0;n=p&65535;a=c[s>>2]|0;a:do if(n>>>0>>0){f=b[d+(r*6|0)+4>>1]|0;switch(f<<16>>16){case -1:case 0:{b[(c[o>>2]|0)+(n*52|0)+48>>1]=b[d+(r*6|0)+2>>1]|0;break a}default:{}}k=(f&65535)+65535|0;m=k&65535;k=k&65535;if(k>>>0>=a>>>0){c[w>>2]=k;c[w+4>>2]=a;Ub(e,2,19302,w)|0;break}l=d+(r*6|0)+2|0;if((n|0)!=(k|0)?(b[l>>1]|0)==0:0){f=c[o>>2]|0;a=f+(n*52|0)|0;g=u;h=a;j=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));g=a;h=f+(k*52|0)|0;j=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));g=(c[o>>2]|0)+(k*52|0)|0;h=u;j=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(j|0));if((r+1&65535)<(t&65535)){g=q;do{f=d+(g*6|0)|0;a=b[f>>1]|0;if(a<<16>>16!=p<<16>>16){if(a<<16>>16==m<<16>>16)b[f>>1]=p}else b[f>>1]=m;g=g+1|0}while((g&65535)<<16>>16!=t<<16>>16)}}b[(c[o>>2]|0)+(n*52|0)+48>>1]=b[l>>1]|0}else{c[v>>2]=n;c[v+4>>2]=a;Ub(e,2,19262,v)|0}while(0);r=r+1|0;if((r&65535)<<16>>16==t<<16>>16)break;else q=q+1|0}d=c[x>>2]|0;f=d;d=c[d>>2]|0}if(!d){w=f;Uc(w);c[x>>2]=0;i=y;return}else{Uc(d);w=c[x>>2]|0;Uc(w);c[x>>2]=0;i=y;return}}function ef(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+192|0;y=I+152|0;x=I+144|0;w=I+136|0;v=I+128|0;u=I+120|0;E=I+88|0;s=I+80|0;q=I+64|0;p=I+48|0;G=I+40|0;z=I+32|0;F=I+24|0;t=I+16|0;r=I+8|0;n=I+176|0;o=I+168|0;D=I+156|0;e=Qc(1,1024)|0;if(!e){Ub(d,1,17098,I)|0;H=0;i=I;return H|0}m=n+4|0;A=D+4|0;B=a+100|0;l=1024;a:while(1){if((Mb(b,n,8,d)|0)!=8)break;while(1){qb(n,D,4);qb(m,A,4);switch(c[D>>2]|0){case 0:{f=Qb(b)|0;k=C;if((k|0)>0|(k|0)==0&f>>>0>4294967287){H=6;break a}c[D>>2]=f+8;j=8;break}case 1:{if((Mb(b,n,8,d)|0)!=8)break a;qb(n,o,4);if(c[o>>2]|0){H=10;break a}qb(m,D,4);j=16;break}default:j=8}g=c[A>>2]|0;if((g|0)==1785737827){H=13;break a}f=c[D>>2]|0;if(!f){H=17;break a}if(f>>>0>>0){H=19;break a}if((g|0)==1783636e3){h=1084;g=j;H=22;break}if((g|0)==1718909296){h=1092;g=j;H=22;break}k=(g|0)==1785737832;b:do if((g|0)!=1768449138)if((g|0)!=1668246642)if((g|0)!=1651532643)if((g|0)!=1885564018)if((g|0)!=1668112752){h=(g|0)==1667523942?1148:0;f=f-j|0;if((g|0)<1785737832)switch(g|0){case 1667523942:{H=30;break b}default:{}}else switch(g|0){case 1785737832:{H=30;break b}default:{}}g=c[B>>2]|0;if(!(g&1)){H=45;break a}if(!(g&2)){H=47;break a}c[B>>2]=g|2147483647;k=Rb(b,f,0,d)|0;if(!((k|0)==(f|0)&(C|0)==0)){H=50;break a}}else{h=1140;H=28}else{h=1132;H=28}else{h=1124;H=28}else{h=1116;H=28}else{h=1108;H=28}while(0);if((H|0)==28){f=f-j|0;H=30}if((H|0)==30){H=0;if(k){h=1100;break}c[p>>2]=g>>>24;c[p+4>>2]=g>>>16&255;c[p+8>>2]=g>>>8&255;c[p+12>>2]=g&255;Ub(d,2,17282,p)|0;if(c[B>>2]&4)break;k=c[A>>2]|0;c[q>>2]=k>>>24;c[q+4>>2]=k>>>16&255;c[q+8>>2]=k>>>8&255;c[q+12>>2]=k&255;Ub(d,2,17333,q)|0;c[B>>2]=c[B>>2]|2147483647;k=Rb(b,f,0,d)|0;if(!((k|0)==(f|0)&(C|0)==0)){H=33;break a}}if((Mb(b,n,8,d)|0)!=8)break a}if((H|0)==22){H=0;f=f-g|0}k=Qb(b)|0;j=C;if(0>(j|0)|0==(j|0)&f>>>0>k>>>0){H=35;break}if(f>>>0>l>>>0){g=Tc(e,f)|0;if(!g){H=38;break}else{e=g;g=f}}else g=l;if((Mb(b,e,f,d)|0)!=(f|0)){H=40;break}if(!(Za[c[h+4>>2]&63](a,e,f,d)|0)){H=43;break}else l=g}switch(H|0){case 6:{Ub(d,1,17148,r)|0;break}case 10:{Ub(d,1,17148,t)|0;break}case 13:{f=c[B>>2]|0;if(!(f&4)){Ub(d,1,17190,F)|0;Uc(e);H=0;i=I;return H|0}else{c[B>>2]=f|8;Uc(e);H=1;i=I;return H|0}}case 17:{Ub(d,1,17218,z)|0;Uc(e);H=0;i=I;return H|0}case 19:{c[G>>2]=f;c[G+4>>2]=g;Ub(d,1,17256,G)|0;Uc(e);H=0;i=I;return H|0}case 33:{Ub(d,1,17399,s)|0;Uc(e);H=0;i=I;return H|0}case 35:{F=c[D>>2]|0;G=c[A>>2]|0;H=Qb(b)|0;c[E>>2]=F;c[E+4>>2]=G>>>24;c[E+8>>2]=G>>>16&255;c[E+12>>2]=G>>>8&255;c[E+16>>2]=G&255;c[E+20>>2]=f;c[E+24>>2]=H;Ub(d,1,17449,E)|0;Uc(e);H=0;i=I;return H|0}case 38:{Uc(e);Ub(d,1,17525,u)|0;H=0;i=I;return H|0}case 40:{Ub(d,1,17567,v)|0;Uc(e);H=0;i=I;return H|0}case 43:{Uc(e);H=0;i=I;return H|0}case 45:{Ub(d,1,17616,w)|0;Uc(e);H=0;i=I;return H|0}case 47:{Ub(d,1,17686,x)|0;Uc(e);H=0;i=I;return H|0}case 50:{Ub(d,1,17399,y)|0;Uc(e);H=0;i=I;return H|0}}Uc(e);H=1;i=I;return H|0}function ff(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;h=i;i=i+32|0;g=h+24|0;e=Pb(b)|0;f=C;a=a+80|0;j=a;j=Oi(e|0,f|0,c[j>>2]|0,c[j+4>>2]|0)|0;pb(g,j,4);pb(g+4|0,1785737827,4);if(!(Sb(b,c[a>>2]|0,c[a+4>>2]|0,d)|0)){Ub(d,1,17067,h)|0;j=0;i=h;return j|0}if((Nb(b,g,8,d)|0)!=8){Ub(d,1,17067,h+8|0)|0;j=0;i=h;return j|0}if(Sb(b,e,f,d)|0){j=1;i=h;return j|0}Ub(d,1,17067,h+16|0)|0;j=0;i=h;return j|0}function gf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;d=((c[a>>2]|0)!=0?(c[a+104>>2]|c[a+100>>2]|0)==0:0)&(c[a+8>>2]|0)!=0&(c[a+4>>2]|0)!=0&(c[a+64>>2]|0)!=0&(c[a+16>>2]|0)!=0&(c[a+12>>2]|0)!=0&1;e=c[a+20>>2]|0;if(!e){g=d;a=a+40|0;a=c[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Tb(b)|0;b=b&g;a=b&a;return a|0}f=c[a+72>>2]|0;g=0;do{d=(c[f+(g*12|0)+8>>2]&126)>>>0<38&d;g=g+1|0}while(g>>>0>>0);a=a+40|0;a=c[a>>2]|0;a=a+-1|0;a=a>>>0<2;a=a&1;b=Tb(b)|0;b=b&d;a=b&a;return a|0}function hf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=i;i=i+16|0;d=a;pb(d,12,4);pb(d+4|0,1783636e3,4);pb(d+8|0,218793738,4);c=(Nb(b,d,12,c)|0)==12&1;i=a;return c|0}function jf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;k=l+8|0;f=a+64|0;h=(c[f>>2]<<2)+16|0;j=Qc(1,h)|0;if(!j){Ub(d,1,16987,l)|0;k=0;i=l;return k|0}pb(j,h,4);pb(j+4|0,1718909296,4);pb(j+8|0,c[a+56>>2]|0,4);pb(j+12|0,c[a+60>>2]|0,4);g=j+16|0;if(c[f>>2]|0){a=a+68|0;e=0;do{pb(g,c[(c[a>>2]|0)+(e<<2)>>2]|0,4);e=e+1|0}while(e>>>0<(c[f>>2]|0)>>>0)}a=(Nb(b,j,h,d)|0)==(h|0);if(!a)Ub(d,1,17026,k)|0;Uc(j);k=a&1;i=l;return k|0}function kf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=i;i=i+80|0;o=q+16|0;m=q+8|0;k=q;f=q+24|0;l=q+72|0;e=f;g=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(g|0));p=(c[a+24>>2]|0)==255;c[f>>2]=2;e=f+12|0;if(p){c[e>>2]=3;c[f+24>>2]=4;e=3}else{c[e>>2]=4;e=2}if(!(c[a+116>>2]|0))p=e;else{c[f+(e*12|0)>>2]=5;p=e+1|0}pb(l+4|0,1785737832,4);h=0;j=f;e=8;while(1){g=j+8|0;r=_a[c[j>>2]&7](a,g)|0;c[j+4>>2]=r;if(!r){n=8;break}e=(c[g>>2]|0)+e|0;h=h+1|0;if((h|0)>=(p|0))break;else j=j+12|0}if((n|0)==8){Ub(d,1,16901,k)|0;g=0;while(1){e=c[f+4>>2]|0;if(e)Uc(e);g=g+1|0;if((g|0)>=(p|0)){e=0;break}else f=f+12|0}i=q;return e|0}pb(l,e,4);a:do if((Nb(b,l,8,d)|0)==8){e=0;g=f;while(1){r=g+8|0;n=Nb(b,c[g+4>>2]|0,c[r>>2]|0,d)|0;if((n|0)!=(c[r>>2]|0))break;e=e+1|0;if((e|0)>=(p|0)){e=1;break a}else g=g+12|0}Ub(d,1,16944,o)|0;e=0}else{Ub(d,1,16944,m)|0;e=0}while(0);h=0;while(1){g=c[f+4>>2]|0;if(g)Uc(g);h=h+1|0;if((h|0)>=(p|0))break;else f=f+12|0}i=q;return e|0}function lf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Pb(b)|0;a=a+88|0;c[a>>2]=e;c[a+4>>2]=C;b=Rb(b,24,0,d)|0;return (b|0)==24&(C|0)==0&1|0}function mf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Pb(b)|0;a=a+80|0;c[a>>2]=e;c[a+4>>2]=C;b=Rb(b,8,0,d)|0;return (b|0)==8&(C|0)==0&1|0}function nf(a,b){a=a|0;b=b|0;var d=0;d=Qc(1,22)|0;if(!d){b=0;return b|0}pb(d,22,4);pb(d+4|0,1768449138,4);pb(d+8|0,c[a+16>>2]|0,4);pb(d+12|0,c[a+12>>2]|0,4);pb(d+16|0,c[a+20>>2]|0,2);pb(d+18|0,c[a+24>>2]|0,1);pb(d+19|0,c[a+28>>2]|0,1);pb(d+20|0,c[a+32>>2]|0,1);pb(d+21|0,c[a+36>>2]|0,1);c[b>>2]=22;b=d;return b|0}function of(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=a+20|0;g=(c[f>>2]|0)+8|0;h=Qc(1,g)|0;if(!h){b=0;return b|0}pb(h,g,4);pb(h+4|0,1651532643,4);if(c[f>>2]|0){a=a+72|0;d=0;e=h+8|0;while(1){pb(e,c[(c[a>>2]|0)+(d*12|0)+8>>2]|0,1);d=d+1|0;if(d>>>0>=(c[f>>2]|0)>>>0)break;else e=e+1|0}}c[b>>2]=g;b=h;return b|0}function pf(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=a+40|0;switch(c[e>>2]|0){case 1:{j=15;break}case 2:{j=(c[a+112>>2]|0)+11|0;break}default:{b=0;return b|0}}i=Qc(1,j)|0;if(!i){b=0;return b|0}pb(i,j,4);pb(i+4|0,1668246642,4);pb(i+8|0,c[e>>2]|0,1);pb(i+9|0,c[a+52>>2]|0,1);pb(i+10|0,c[a+44>>2]|0,1);g=i+11|0;switch(c[e>>2]|0){case 1:{pb(g,c[a+48>>2]|0,4);break}case 2:{h=a+112|0;if(c[h>>2]|0){a=a+108|0;f=0;e=g;while(1){pb(e,d[(c[a>>2]|0)+f>>0]|0,1);f=f+1|0;if(f>>>0>=(c[h>>2]|0)>>>0)break;else e=e+1|0}}break}default:{}}c[b>>2]=j;b=i;return b|0}function qf(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=a+116|0;j=((e[(c[i>>2]|0)+4>>1]|0)*6|0)+10|0;k=Pc(j)|0;if(!k){d=0;return d|0}pb(k,j,4);pb(k+4|0,1667523942,4);pb(k+8|0,e[(c[i>>2]|0)+4>>1]|0,2);a=c[i>>2]|0;if(b[a+4>>1]|0){g=0;f=0;h=k+10|0;while(1){pb(h,e[(c[a>>2]|0)+(g*6|0)>>1]|0,2);pb(h+2|0,e[(c[c[i>>2]>>2]|0)+(g*6|0)+2>>1]|0,2);pb(h+4|0,e[(c[c[i>>2]>>2]|0)+(g*6|0)+4>>1]|0,2);f=f+1<<16>>16;a=c[i>>2]|0;if((f&65535)>=(e[a+4>>1]|0))break;else{g=f&65535;h=h+6|0}}}c[d>>2]=j;d=k;return d|0}function rf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+32|0;f=g+16|0;if((d|0)!=14){Ub(e,1,18507,g)|0;f=0;i=g;return f|0}qb(b,a+16|0,4);qb(b+4|0,a+12|0,4);d=a+20|0;qb(b+8|0,d,2);d=Qc(c[d>>2]|0,12)|0;c[a+72>>2]=d;if(!d){Ub(e,1,18540,g+8|0)|0;f=0;i=g;return f|0}qb(b+10|0,a+24|0,1);d=a+28|0;qb(b+11|0,d,1);d=c[d>>2]|0;if((d|0)!=7){c[f>>2]=d;Ub(e,4,18589,f)|0}qb(b+12|0,a+32|0,1);qb(b+13|0,a+36|0,1);f=1;i=g;return f|0}function sf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=i;i=i+80|0;j=x+40|0;t=x+32|0;l=x+24|0;k=x+16|0;u=x+72|0;s=x+68|0;p=x+64|0;q=x+60|0;n=x+56|0;r=x+52|0;o=x+48|0;m=x+44|0;if(e>>>0<3){Ub(f,1,18180,x)|0;w=0;i=x;return w|0}v=b+108|0;w=b+124|0;if(a[w>>0]|0){Ub(f,4,18212,x+8|0)|0;w=1;i=x;return w|0}h=b+40|0;qb(d,h,1);qb(d+1|0,b+52|0,1);qb(d+2|0,b+44|0,1);g=d+3|0;h=c[h>>2]|0;switch(h|0){case 1:{if(e>>>0<7){c[k>>2]=e;Ub(f,1,18321,k)|0;w=0;i=x;return w|0}h=b+48|0;if(e>>>0>7?(c[h>>2]|0)!=14:0){c[l>>2]=e;Ub(f,2,18321,l)|0}qb(g,h,4);if((c[h>>2]|0)==14){g=Pc(36)|0;c[g>>2]=14;c[o>>2]=0;c[n>>2]=0;c[p>>2]=0;c[r>>2]=0;c[q>>2]=0;c[s>>2]=0;c[m>>2]=4470064;h=g+4|0;c[h>>2]=1145390592;switch(e|0){case 35:{qb(d+7|0,s,4);qb(d+11|0,p,4);qb(d+15|0,q,4);qb(d+19|0,n,4);qb(d+23|0,r,4);qb(d+27|0,o,4);qb(d+31|0,m,4);c[h>>2]=0;break}case 7:break;default:{c[t>>2]=e;Ub(f,2,18357,t)|0}}c[g+8>>2]=c[s>>2];c[g+16>>2]=c[q>>2];c[g+24>>2]=c[r>>2];c[g+12>>2]=c[p>>2];c[g+20>>2]=c[n>>2];c[g+28>>2]=c[o>>2];c[g+32>>2]=c[m>>2];c[v>>2]=g;c[b+112>>2]=0}a[w>>0]=1;w=1;i=x;return w|0}case 2:{j=e+-3|0;h=b+112|0;c[h>>2]=j;b=Qc(1,j)|0;c[v>>2]=b;if(!b){c[h>>2]=0;w=0;i=x;return w|0}if((e|0)>3){h=0;while(1){qb(g,u,1);a[(c[v>>2]|0)+h>>0]=c[u>>2];h=h+1|0;if((h|0)==(j|0))break;else g=g+1|0}}a[w>>0]=1;w=1;i=x;return w|0}default:{if(h>>>0<=2){w=1;i=x;return w|0}c[j>>2]=h;Ub(f,4,18401,j)|0;w=1;i=x;return w|0}}return 0}function tf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+16|0;g=j;f=c[a+24>>2]|0;if((f|0)!=255){c[g>>2]=f;Ub(e,2,18034,g)|0}h=a+20|0;if((c[h>>2]|0)!=(d|0)){Ub(e,1,18148,j+8|0)|0;h=0;i=j;return h|0}if(!d){h=1;i=j;return h|0}g=a+72|0;f=0;while(1){qb(b,(c[g>>2]|0)+(f*12|0)+8|0,1);f=f+1|0;if(f>>>0>=(c[h>>2]|0)>>>0){b=1;break}else b=b+1|0}i=j;return b|0}function uf(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+16|0;j=r;q=r+12|0;k=e+120|0;if(g>>>0<3|(c[k>>2]|0)!=0){g=0;i=r;return g|0}qb(f,q,2);l=c[q>>2]|0;p=l&65535;if((p+-1|0)>>>0>1023){c[j>>2]=p;Ub(h,1,17951,j)|0;g=0;i=r;return g|0}qb(f+2|0,q,1);o=c[q>>2]&65535;if(!o){Ub(h,1,17989,r+8|0)|0;g=0;i=r;return g|0}if((o+3|0)>>>0>g>>>0){g=0;i=r;return g|0}j=Pc(_(p<<2,o)|0)|0;if(!j){g=0;i=r;return g|0}n=Pc(o)|0;if(!n){Uc(j);g=0;i=r;return g|0}m=Pc(o)|0;if(!m){Uc(j);Uc(n);g=0;i=r;return g|0}e=Pc(20)|0;if(!e){Uc(j);Uc(n);Uc(m);g=0;i=r;return g|0}c[e+4>>2]=m;c[e+8>>2]=n;c[e>>2]=j;b[e+16>>1]=l;a[e+18>>0]=c[q>>2];c[e+12>>2]=0;c[k>>2]=e;e=f+3|0;h=0;k=0;do{qb(e,q,1);e=e+1|0;a[n+h>>0]=(c[q>>2]&127)+1;a[m+h>>0]=(c[q>>2]|0)>>>7&1;k=k+1<<16>>16;h=k&65535}while(h>>>0>>0);if(!p){g=1;i=r;return g|0}h=0;a:while(1){l=0;k=j;m=0;while(1){j=((d[n+l>>0]|0)+7|0)>>>3;j=j>>>0>4?4:j;if((e-f+j|0)>(g|0)){e=0;j=22;break a}qb(e,q,j);e=e+j|0;c[k>>2]=c[q>>2];j=k+4|0;m=m+1<<16>>16;l=m&65535;if(l>>>0>=o>>>0)break;else k=j}h=h+1<<16>>16;if((h&65535)>>>0>=p>>>0){e=1;j=22;break}}if((j|0)==22){i=r;return e|0}return 0}function vf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+20|0;j=d+120|0;d=c[j>>2]|0;if(!d){Ub(g,1,17841,l)|0;k=0;i=l;return k|0}if(c[d+12>>2]|0){Ub(g,1,17887,l+8|0)|0;k=0;i=l;return k|0}h=a[d+18>>0]|0;d=(h&255)<<2;if(d>>>0>f>>>0){Ub(g,1,17918,l+16|0)|0;k=0;i=l;return k|0}g=Pc(d)|0;if(!g){k=0;i=l;return k|0}if(h<<24>>24){d=e;f=0;while(1){qb(d,k,2);b[g+(f<<2)>>1]=c[k>>2];qb(d+2|0,k,1);a[g+(f<<2)+2>>0]=c[k>>2];qb(d+3|0,k,1);a[g+(f<<2)+3>>0]=c[k>>2];f=f+1|0;if((f&255)<<24>>24==h<<24>>24)break;else d=d+4|0}}c[(c[j>>2]|0)+12>>2]=g;k=1;i=l;return k|0}function wf(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;l=i;i=i+32|0;k=l+20|0;j=a+116|0;if(c[j>>2]|0){k=0;i=l;return k|0}if(f>>>0<2){Ub(g,1,17747,l)|0;k=0;i=l;return k|0}qb(d,k,2);a=c[k>>2]|0;h=a&65535;if(!h){Ub(g,1,17780,l+8|0)|0;k=0;i=l;return k|0}if(((h*6|0)+2|0)>>>0>f>>>0){Ub(g,1,17747,l+16|0)|0;k=0;i=l;return k|0}f=Pc(a*6|0)|0;if(!f){k=0;i=l;return k|0}a=Pc(8)|0;c[j>>2]=a;if(!a){Uc(f);k=0;i=l;return k|0}c[a>>2]=f;g=c[k>>2]&65535;b[a+4>>1]=g;if(!(g<<16>>16)){k=1;i=l;return k|0}else{h=0;a=d}do{d=h&65535;qb(a+2|0,k,2);b[f+(d*6|0)>>1]=c[k>>2];qb(a+4|0,k,2);a=a+6|0;b[f+(d*6|0)+2>>1]=c[k>>2];qb(a,k,2);b[f+(d*6|0)+4>>1]=c[k>>2];h=h+1<<16>>16}while((h&65535)<(e[(c[j>>2]|0)+4>>1]|0));a=1;i=l;return a|0}function xf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+32|0;f=g+20|0;a=a+100|0;if(c[a>>2]|0){Ub(e,1,19130,g)|0;e=0;i=g;return e|0}if((d|0)!=4){Ub(e,1,19184,g+8|0)|0;e=0;i=g;return e|0}qb(b,f,4);if((c[f>>2]|0)==218793738){c[a>>2]=c[a>>2]|1;e=1;i=g;return e|0}else{Ub(e,1,19218,g+16|0)|0;e=0;i=g;return e|0}return 0}function yf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+32|0;g=j+24|0;h=a+100|0;if((c[h>>2]|0)!=1){Ub(e,1,19011,j)|0;h=0;i=j;return h|0}if(d>>>0<8){Ub(e,1,19061,j+8|0)|0;h=0;i=j;return h|0}qb(b,a+56|0,4);qb(b+4|0,a+60|0,4);b=b+8|0;d=d+-8|0;if(d&3){Ub(e,1,19061,j+16|0)|0;h=0;i=j;return h|0}d=d>>>2;f=a+64|0;c[f>>2]=d;if(d){d=Qc(d,4)|0;c[a+68>>2]=d;if(!d){Ub(e,1,19097,g)|0;h=0;i=j;return h|0}if(c[f>>2]|0){a=a+68|0;d=0;while(1){qb(b,(c[a>>2]|0)+(d<<2)|0,4);d=d+1|0;if(d>>>0>=(c[f>>2]|0)>>>0)break;else b=b+4|0}}}c[h>>2]=c[h>>2]|2;h=1;i=j;return h|0}function zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+96|0;y=A+72|0;s=A+64|0;r=A+56|0;q=A+48|0;w=A+40|0;v=A+32|0;u=A+24|0;t=A+16|0;p=A+8|0;n=A+80|0;o=A+76|0;x=a+100|0;if(!(c[x>>2]&2)){Ub(e,1,18679,A)|0;z=0;i=A;return z|0}m=a+104|0;c[m>>2]=0;do if(d){k=b;b=0;a:while(1){if(d>>>0<8){z=6;break}qb(k,n,4);f=c[n>>2]|0;qb(k+4|0,n,4);j=c[n>>2]|0;switch(f|0){case 0:{z=14;break a}case 1:{if(d>>>0<16){z=9;break a}qb(k+8|0,o,4);if(c[o>>2]|0){z=11;break a}qb(k+12|0,n,4);f=c[n>>2]|0;if(!f){z=13;break a}else g=16;break}default:g=8}if(f>>>0>>0){z=16;break}if(d>>>0>>0){z=19;break}h=(j|0)==1768449138;if(!h)if((j|0)!=1668246642)if((j|0)!=1651532643)if((j|0)!=1885564018)if((j|0)!=1668112752)if((j|0)==1667523942){l=1148;z=26}else c[m>>2]=c[m>>2]|2147483647;else{l=1140;z=26}else{l=1132;z=26}else{l=1124;z=26}else{l=1116;z=26}else{l=1108;z=26}if((z|0)==26?(z=0,(Za[c[l+4>>2]&63](a,k+g|0,f-g|0,e)|0)==0):0){b=0;z=32;break}b=h?1:b;if((d|0)==(f|0)){z=29;break}else{k=k+f|0;d=d-f|0}}if((z|0)==6)Ub(e,1,18724,p)|0;else if((z|0)==9)Ub(e,1,18764,t)|0;else if((z|0)==11)Ub(e,1,17148,u)|0;else if((z|0)==13)Ub(e,1,17218,v)|0;else if((z|0)==14)Ub(e,1,17218,w)|0;else if((z|0)==16)Ub(e,1,18808,q)|0;else if((z|0)==19){Ub(e,1,18880,s)|0;z=0;i=A;return z|0}else if((z|0)==29){if(!b)break;c[x>>2]=c[x>>2]|4;z=1;i=A;return z|0}else if((z|0)==32){i=A;return b|0}Ub(e,1,18837,r)|0;z=0;i=A;return z|0}while(0);Ub(e,1,18952,y)|0;z=0;i=A;return z|0}function Af(){return 8}function Bf(){return 32}function Cf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!e)return;else f=0;do{l=a+(f<<2)|0;i=c[l>>2]|0;j=b+(f<<2)|0;h=c[j>>2]|0;g=d+(f<<2)|0;k=c[g>>2]|0;c[l>>2]=(h<<1)+i+k>>2;c[j>>2]=k-h;c[g>>2]=i-h;f=f+1|0}while((f|0)!=(e|0));return}function Df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!e)return;else f=0;do{k=a+(f<<2)|0;j=b+(f<<2)|0;h=c[j>>2]|0;g=d+(f<<2)|0;l=c[g>>2]|0;i=(c[k>>2]|0)-(l+h>>2)|0;c[k>>2]=i+l;c[j>>2]=i;c[g>>2]=i+h;f=f+1|0}while((f|0)!=(e|0));return}function Ef(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!e)return;else f=0;do{o=a+(f<<2)|0;u=c[o>>2]|0;k=b+(f<<2)|0;t=c[k>>2]|0;g=d+(f<<2)|0;s=c[g>>2]|0;j=((u|0)<0)<<31>>31;q=Zi(u|0,j|0,2449,0)|0;q=Si(q|0,C|0,4096,0)|0;q=Ti(q|0,C|0,13)|0;i=((t|0)<0)<<31>>31;r=Zi(t|0,i|0,4809,0)|0;r=Si(r|0,C|0,4096,0)|0;r=Ti(r|0,C|0,13)|0;h=((s|0)<0)<<31>>31;p=Zi(s|0,h|0,934,0)|0;p=Si(p|0,C|0,4096,0)|0;p=Ti(p|0,C|0,13)|0;l=Zi(u|0,j|0,1382,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=Zi(t|0,i|0,2714,0)|0;m=Si(m|0,C|0,4096,0)|0;m=Ti(m|0,C|0,13)|0;n=Ri(s|0,h|0,12)|0;n=Si(n|0,C|0,4096,0)|0;n=Ti(n|0,C|0,13)|0;j=Ri(u|0,j|0,12)|0;j=Si(j|0,C|0,4096,0)|0;j=Ti(j|0,C|0,13)|0;i=Zi(t|0,i|0,3430,0)|0;i=Si(i|0,C|0,4096,0)|0;i=Ti(i|0,C|0,13)|0;h=Zi(s|0,h|0,666,0)|0;h=Si(h|0,C|0,4096,0)|0;h=Ti(h|0,C|0,13)|0;c[o>>2]=r+q+p;c[k>>2]=n-(m+l);c[g>>2]=j-i-h;f=f+1|0}while((f|0)!=(e|0));return}function Ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0.0,i=0.0,j=0,k=0.0,l=0;if(!d)return;else e=0;do{l=a+(e<<2)|0;i=+g[l>>2];j=b+(e<<2)|0;h=+g[j>>2];f=c+(e<<2)|0;k=+g[f>>2];g[l>>2]=i+k*1.4019999504089355;g[j>>2]=i-h*.3441300094127655-k*.714139997959137;g[f>>2]=i+h*1.7719999551773071;e=e+1|0}while((e|0)!=(d|0));return}function Gf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=_(e,e)|0;o=Pc(h+e<<2)|0;if(!o){e=0;return e|0}if(h){i=0;f=a;while(1){c[o+(i+e<<2)>>2]=~~(+g[f>>2]*8192.0);i=i+1|0;if((i|0)==(h|0))break;else f=f+4|0}}if(b){m=(e|0)==0;n=0;do{if(!m){f=0;do{c[o+(f<<2)>>2]=c[c[d+(f<<2)>>2]>>2];f=f+1|0}while((f|0)!=(e|0));if(!m){a=0;k=o;do{k=k+(e<<2)|0;h=d+(a<<2)|0;f=c[h>>2]|0;c[f>>2]=0;i=0;j=0;l=k;while(1){p=c[l>>2]|0;q=c[o+(j<<2)>>2]|0;p=Zi(q|0,((q|0)<0)<<31>>31|0,p|0,((p|0)<0)<<31>>31|0)|0;p=Si(p|0,C|0,4096,0)|0;p=Ti(p|0,C|0,13)|0;i=p+i|0;c[f>>2]=i;j=j+1|0;if((j|0)==(e|0))break;else l=l+4|0}c[h>>2]=f+4;a=a+1|0}while((a|0)!=(e|0))}}n=n+1|0}while((n|0)!=(b|0))}Uc(o);q=1;return q|0}function Hf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Pc(e<<3)|0;if(!m){e=0;return e|0}if(b){n=(e|0)==0;o=0;do{if(!n){f=0;do{c[m+(f<<2)>>2]=c[c[d+(f<<2)>>2]>>2];f=f+1|0}while((f|0)!=(e|0));if(!n){k=0;l=a;while(1){f=m+(k+e<<2)|0;g[f>>2]=0.0;h=0.0;i=0;j=l;while(1){h=h+ +g[j>>2]*+g[m+(i<<2)>>2];g[f>>2]=h;i=i+1|0;if((i|0)==(e|0))break;else j=j+4|0}i=d+(k<<2)|0;j=c[i>>2]|0;c[i>>2]=j+4;g[j>>2]=h;k=k+1|0;if((k|0)==(e|0))break;else l=l+(e<<2)|0}}}o=o+1|0}while((o|0)!=(b|0))}Uc(m);e=1;return e|0}function If(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0,i=0,j=0,k=0.0;if(!b)return;else j=0;do{i=a+(j<<3)|0;h[i>>3]=0.0;d=0.0;e=0;f=j;while(1){k=+g[c+(f<<2)>>2];d=d+k*k;e=e+1|0;if((e|0)==(b|0))break;else f=f+b|0}h[i>>3]=+O(+d);j=j+1|0}while((j|0)!=(b|0));return}function Jf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=i;i=i+32|0;B=F+28|0;w=F+24|0;x=F+20|0;y=F+16|0;z=F+12|0;A=F+8|0;k=F+4|0;l=F;f=d+76|0;D=c[f>>2]|0;C=D+(e*5640|0)+420|0;E=(c[C>>2]|0)+1|0;m=b+16|0;v=Pc((c[m>>2]|0)*528|0)|0;if(!v){E=0;i=F;return E|0}u=Pc(c[m>>2]<<2)|0;if(!u){Uc(v);E=0;i=F;return E|0}f=Pf(b,c[f>>2]|0,e)|0;if(!f){Uc(v);Uc(u);E=0;i=F;return E|0}g=c[m>>2]|0;if(g){h=0;j=v;while(1){c[u+(h<<2)>>2]=j;h=h+1|0;if(h>>>0>=g>>>0)break;else j=j+528|0}}Qf(b,d,e,x,y,z,A,k,l,w,B,u);s=c[w>>2]|0;q=_(c[m>>2]|0,s)|0;r=_(c[B>>2]|0,q)|0;t=D+(e*5640|0)+8|0;p=Qc(_((c[t>>2]|0)+1|0,r)|0,2)|0;h=f+4|0;c[h>>2]=p;if(!p){Uc(v);Uc(u);g=c[h>>2]|0;if(g){Uc(g);c[h>>2]=0}if(E){b=f;n=0;while(1){m=b+196|0;g=c[m>>2]|0;if(g){d=b+192|0;h=c[d>>2]|0;if(h){l=0;while(1){j=g+12|0;k=c[j>>2]|0;if(k){Uc(k);c[j>>2]=0;h=c[d>>2]|0}l=l+1|0;if(l>>>0>=h>>>0)break;else g=g+16|0}g=c[m>>2]|0}Uc(g);c[m>>2]=0}n=n+1|0;if((n|0)==(E|0))break;else b=b+232|0}}Uc(f);E=0;i=F;return E|0}g=c[f+196>>2]|0;p=c[b+24>>2]|0;c[f+200>>2]=c[x>>2];c[f+204>>2]=c[z>>2];c[f+208>>2]=c[y>>2];c[f+212>>2]=c[A>>2];c[f+20>>2]=1;c[f+16>>2]=s;c[f+12>>2]=q;c[f+8>>2]=r;m=c[f+192>>2]|0;if(m){b=0;d=p;while(1){j=c[g+12>>2]|0;h=c[u+(b<<2)>>2]|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];l=c[g+8>>2]|0;if(l){k=0;while(1){c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];k=k+1|0;if(k>>>0>=l>>>0)break;else{h=h+16|0;j=j+16|0}}}b=b+1|0;if(b>>>0>=m>>>0)break;else{g=g+16|0;d=d+52|0}}}if(E>>>0>1){m=f;o=1;do{g=c[m+428>>2]|0;c[m+432>>2]=c[x>>2];c[m+436>>2]=c[z>>2];c[m+440>>2]=c[y>>2];c[m+444>>2]=c[A>>2];c[m+252>>2]=1;c[m+248>>2]=s;c[m+244>>2]=q;c[m+240>>2]=r;b=c[m+424>>2]|0;if(b){n=0;d=p;while(1){j=c[g+12>>2]|0;h=c[u+(n<<2)>>2]|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];l=c[g+8>>2]|0;if(l){k=0;while(1){c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];k=k+1|0;if(k>>>0>=l>>>0)break;else{h=h+16|0;j=j+16|0}}}n=n+1|0;if(n>>>0>=b>>>0)break;else{g=g+16|0;d=d+52|0}}}c[m+236>>2]=c[m+4>>2];m=m+232|0;o=o+1|0}while((o|0)!=(E|0))}Uc(v);Uc(u);m=c[w>>2]|0;if(!(a[D+(e*5640|0)+5636>>0]&4)){d=c[B>>2]|0;l=(c[C>>2]|0)+1|0;if(!l){E=f;i=F;return E|0}k=c[D+(e*5640|0)+4>>2]|0;g=c[t>>2]|0;h=f;j=0;while(1){c[h+80>>2]=k;c[h+40>>2]=1;c[h+44>>2]=0;c[h+48>>2]=0;c[h+64>>2]=0;c[h+68>>2]=0;c[h+56>>2]=d;c[h+60>>2]=c[h+192>>2];c[h+52>>2]=g;c[h+72>>2]=m;j=j+1|0;if((j|0)==(l|0))break;else h=h+232|0}i=F;return f|0}else{j=(c[C>>2]|0)+1|0;if(!j){E=f;i=F;return E|0}k=f;g=D+(e*5640|0)+424|0;h=0;while(1){c[k+80>>2]=c[g+36>>2];c[k+40>>2]=1;c[k+44>>2]=c[g>>2];c[k+48>>2]=c[g+4>>2];c[k+64>>2]=0;c[k+68>>2]=0;c[k+56>>2]=c[g+12>>2];c[k+60>>2]=c[g+16>>2];c[k+52>>2]=c[g+8>>2];c[k+72>>2]=m;h=h+1|0;if((h|0)==(j|0))break;else{k=k+232|0;g=g+148|0}}i=F;return f|0}return 0}function Kf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!a)return;d=a+4|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0}if(b){k=a;l=0;while(1){j=k+196|0;d=c[j>>2]|0;if(d){i=k+192|0;e=c[i>>2]|0;if(e){h=0;while(1){f=d+12|0;g=c[f>>2]|0;if(g){Uc(g);c[f>>2]=0;e=c[i>>2]|0}h=h+1|0;if(h>>>0>=e>>>0)break;else d=d+16|0}d=c[j>>2]|0}Uc(d);c[j>>2]=0}l=l+1|0;if((l|0)==(b|0))break;else k=k+232|0}}Uc(a);return}function Lf(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=i;i=i+32|0;G=L+28|0;F=L+24|0;B=L+20|0;C=L+16|0;D=L+12|0;E=L+8|0;H=L+4|0;I=L;J=f+76|0;x=c[J>>2]|0;K=(c[x+(g*5640|0)+420>>2]|0)+1|0;A=e+16|0;z=Pc((c[A>>2]|0)*528|0)|0;if(!z){g=0;i=L;return g|0}y=Pc(c[A>>2]<<2)|0;if(!y){Uc(z);g=0;i=L;return g|0}j=Pf(e,c[J>>2]|0,g)|0;if(!j){Uc(z);Uc(y);g=0;i=L;return g|0}k=c[A>>2]|0;if(k){l=0;m=z;while(1){c[y+(l<<2)>>2]=m;l=l+1|0;if(l>>>0>=k>>>0)break;else m=m+528|0}}Qf(e,f,g,B,C,D,E,H,I,F,G,y);u=c[F>>2]|0;v=_(c[A>>2]|0,u)|0;w=_(c[G>>2]|0,v)|0;a[j>>0]=(d[f+93>>0]|0)>>>3&1;t=Qc(_(c[x+(g*5640|0)+8>>2]|0,w)|0,2)|0;l=j+4|0;c[l>>2]=t;if(!t){Uc(z);Uc(y);k=c[l>>2]|0;if(k){Uc(k);c[l>>2]=0}if(K){q=j;r=0;while(1){p=q+196|0;k=c[p>>2]|0;if(k){o=q+192|0;l=c[o>>2]|0;if(l){n=0;while(1){m=k+12|0;e=c[m>>2]|0;if(e){Uc(e);c[m>>2]=0;l=c[o>>2]|0}n=n+1|0;if(n>>>0>=l>>>0)break;else k=k+16|0}k=c[p>>2]|0}Uc(k);c[p>>2]=0}r=r+1|0;if((r|0)==(K|0))break;else q=q+232|0}}Uc(j);g=0;i=L;return g|0}k=c[j+196>>2]|0;t=c[e+24>>2]|0;c[j+200>>2]=c[B>>2];c[j+204>>2]=c[D>>2];c[j+208>>2]=c[C>>2];c[j+212>>2]=c[E>>2];c[j+224>>2]=c[H>>2];c[j+228>>2]=c[I>>2];c[j+20>>2]=1;c[j+16>>2]=u;c[j+12>>2]=v;c[j+8>>2]=w;p=c[j+192>>2]|0;if(p){q=0;o=t;while(1){m=c[k+12>>2]|0;l=c[y+(q<<2)>>2]|0;c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];n=c[k+8>>2]|0;if(n){e=0;while(1){c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];e=e+1|0;if(e>>>0>=n>>>0)break;else{l=l+16|0;m=m+16|0}}}q=q+1|0;if(q>>>0>=p>>>0)break;else{k=k+16|0;o=o+52|0}}}if(K>>>0>1){p=j;s=1;do{k=c[p+428>>2]|0;c[p+432>>2]=c[B>>2];c[p+436>>2]=c[D>>2];c[p+440>>2]=c[C>>2];c[p+444>>2]=c[E>>2];c[p+456>>2]=c[H>>2];c[p+460>>2]=c[I>>2];c[p+252>>2]=1;c[p+248>>2]=u;c[p+244>>2]=v;c[p+240>>2]=w;q=c[p+424>>2]|0;if(q){r=0;o=t;while(1){m=c[k+12>>2]|0;l=c[y+(r<<2)>>2]|0;c[k>>2]=c[o>>2];c[k+4>>2]=c[o+4>>2];n=c[k+8>>2]|0;if(n){e=0;while(1){c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];e=e+1|0;if(e>>>0>=n>>>0)break;else{l=l+16|0;m=m+16|0}}}r=r+1|0;if(r>>>0>=q>>>0)break;else{k=k+16|0;o=o+52|0}}}c[p+236>>2]=c[p+4>>2];p=p+232|0;s=s+1|0}while((s|0)!=(K|0))}Uc(z);Uc(y);do if(a[x+(g*5640|0)+5636>>0]&4){k=b[f>>1]|0;if((k&65535)>2){if(!((h|0)==1|(k&65535)<7))break}else if((h|0)!=1)break;Rf(c[J>>2]|0,g,c[B>>2]|0,c[C>>2]|0,c[D>>2]|0,c[E>>2]|0,c[F>>2]|0,c[H>>2]|0,c[I>>2]|0);g=j;i=L;return g|0}while(0);w=c[A>>2]|0;v=c[B>>2]|0;u=c[C>>2]|0;t=c[D>>2]|0;s=c[E>>2]|0;r=c[F>>2]|0;q=c[G>>2]|0;p=c[H>>2]|0;o=c[I>>2]|0;k=c[J>>2]|0;m=(c[k+(g*5640|0)+420>>2]|0)+1|0;if(!m){g=j;i=L;return g|0}e=c[k+(g*5640|0)+8>>2]|0;n=c[k+(g*5640|0)+4>>2]|0;k=k+(g*5640|0)+424|0;l=0;while(1){c[k+76>>2]=0;c[k+92>>2]=w;c[k+72>>2]=0;c[k+88>>2]=q;c[k+68>>2]=0;c[k+84>>2]=e;c[k+36>>2]=n;c[k+80>>2]=0;c[k+96>>2]=r;c[k+100>>2]=v;c[k+104>>2]=u;c[k+108>>2]=t;c[k+112>>2]=s;c[k+116>>2]=p;c[k+120>>2]=o;l=l+1|0;if((l|0)==(m|0))break;else k=k+148|0}i=L;return j|0}function Mf(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;Q=c[e+76>>2]|0;R=Q+(f*5640|0)+424+(g*148|0)+36|0;S=Vc(c[R>>2]|0)|0;c[d+(g*232|0)+40>>2]=1;T=d+(g*232|0)+44|0;c[d+(g*232|0)+80>>2]=c[R>>2];do if(a[e+93>>0]&8){k=b[e>>1]|0;if((k&65535)>2){if(!((j|0)==1&(k&65535)>6|(k+-3&65535)<4))break}else if(!((j|0)==1|(k+-3&65535)<4))break;k=i+1|0;a:do if((k|0)<4){j=Q+(f*5640|0)+424+(g*148|0)+72|0;l=Q+(f*5640|0)+424+(g*148|0)+88|0;m=d+(g*232|0)+56|0;n=Q+(f*5640|0)+424+(g*148|0)+76|0;o=d+(g*232|0)+48|0;p=Q+(f*5640|0)+424+(g*148|0)+92|0;q=d+(g*232|0)+60|0;r=Q+(f*5640|0)+424+(g*148|0)+68|0;s=d+(g*232|0)+64|0;t=Q+(f*5640|0)+424+(g*148|0)+84|0;u=d+(g*232|0)+52|0;v=Q+(f*5640|0)+424+(g*148|0)+80|0;w=d+(g*232|0)+68|0;x=Q+(f*5640|0)+424+(g*148|0)+96|0;y=d+(g*232|0)+72|0;z=Q+(f*5640|0)+424+(g*148|0)+100|0;A=d+(g*232|0)+96|0;B=Q+(f*5640|0)+424+(g*148|0)+108|0;C=d+(g*232|0)+104|0;D=Q+(f*5640|0)+424+(g*148|0)+104|0;E=d+(g*232|0)+100|0;F=Q+(f*5640|0)+424+(g*148|0)+112|0;G=d+(g*232|0)+108|0;while(1){b:do switch(a[S+k>>0]|0){case 82:{c[T>>2]=c[j>>2];c[m>>2]=c[l>>2];break}case 67:{c[o>>2]=c[n>>2];c[q>>2]=c[p>>2];break}case 76:{c[s>>2]=c[r>>2];c[u>>2]=c[t>>2];break}case 80:if((c[R>>2]|0)>>>0<2){c[w>>2]=c[v>>2];c[y>>2]=c[x>>2];break b}else{c[A>>2]=c[z>>2];c[C>>2]=c[B>>2];c[E>>2]=c[D>>2];c[G>>2]=c[F>>2];break b}default:{}}while(0);k=k+1|0;if((k|0)==4)break a}}while(0);k=(i|0)>-1;if(!h){if(!k)return;m=Q+(f*5640|0)+424+(g*148|0)+76|0;n=Q+(f*5640|0)+424+(g*148|0)+132|0;o=d+(g*232|0)+48|0;p=d+(g*232|0)+60|0;q=Q+(f*5640|0)+424+(g*148|0)+72|0;r=Q+(f*5640|0)+424+(g*148|0)+128|0;s=d+(g*232|0)+56|0;t=Q+(f*5640|0)+424+(g*148|0)+68|0;u=Q+(f*5640|0)+424+(g*148|0)+124|0;v=d+(g*232|0)+64|0;w=d+(g*232|0)+52|0;x=Q+(f*5640|0)+424+(g*148|0)+80|0;y=Q+(f*5640|0)+424+(g*148|0)+136|0;z=d+(g*232|0)+68|0;A=d+(g*232|0)+72|0;B=Q+(f*5640|0)+424+(g*148|0)+100|0;C=Q+(f*5640|0)+424+(g*148|0)+140|0;D=Q+(f*5640|0)+424+(g*148|0)+108|0;E=Q+(f*5640|0)+424+(g*148|0)+144|0;F=d+(g*232|0)+96|0;G=Q+(f*5640|0)+424+(g*148|0)+116|0;h=d+(g*232|0)+100|0;H=d+(g*232|0)+104|0;l=Q+(f*5640|0)+424+(g*148|0)+120|0;j=d+(g*232|0)+108|0;k=i;while(1){c:do switch(a[S+k>>0]|0){case 67:{g=c[m>>2]|0;c[o>>2]=g;g=g+1|0;c[p>>2]=g;c[n>>2]=g;break}case 82:{g=c[q>>2]|0;c[T>>2]=g;g=g+1|0;c[s>>2]=g;c[r>>2]=g;break}case 76:{g=c[t>>2]|0;c[v>>2]=g;g=g+1|0;c[w>>2]=g;c[u>>2]=g;break}case 80:if((c[R>>2]|0)>>>0<2){g=c[x>>2]|0;c[z>>2]=g;g=g+1|0;c[A>>2]=g;c[y>>2]=g;break c}else{g=c[B>>2]|0;i=c[D>>2]|0;c[F>>2]=g;f=c[G>>2]|0;f=f+g-((g>>>0)%(f>>>0)|0)|0;c[h>>2]=f;c[H>>2]=i;g=c[l>>2]|0;g=g+i-((i>>>0)%(g>>>0)|0)|0;c[j>>2]=g;c[C>>2]=f;c[E>>2]=g;break c}default:{}}while(0);if((k|0)>0)k=k+-1|0;else break}return}if(!k)return;L=Q+(f*5640|0)+424+(g*148|0)+128|0;M=Q+(f*5640|0)+424+(g*148|0)+88|0;N=Q+(f*5640|0)+424+(g*148|0)+72|0;O=d+(g*232|0)+56|0;P=Q+(f*5640|0)+424+(g*148|0)+132|0;p=Q+(f*5640|0)+424+(g*148|0)+92|0;q=Q+(f*5640|0)+424+(g*148|0)+76|0;r=d+(g*232|0)+48|0;s=d+(g*232|0)+60|0;t=Q+(f*5640|0)+424+(g*148|0)+124|0;u=Q+(f*5640|0)+424+(g*148|0)+84|0;v=Q+(f*5640|0)+424+(g*148|0)+68|0;w=d+(g*232|0)+64|0;x=d+(g*232|0)+52|0;y=Q+(f*5640|0)+424+(g*148|0)+136|0;z=Q+(f*5640|0)+424+(g*148|0)+96|0;A=Q+(f*5640|0)+424+(g*148|0)+80|0;B=d+(g*232|0)+68|0;C=d+(g*232|0)+72|0;D=Q+(f*5640|0)+424+(g*148|0)+140|0;E=Q+(f*5640|0)+424+(g*148|0)+104|0;F=d+(g*232|0)+96|0;G=Q+(f*5640|0)+424+(g*148|0)+116|0;h=d+(g*232|0)+100|0;H=Q+(f*5640|0)+424+(g*148|0)+144|0;I=Q+(f*5640|0)+424+(g*148|0)+112|0;J=d+(g*232|0)+104|0;K=Q+(f*5640|0)+424+(g*148|0)+120|0;n=d+(g*232|0)+108|0;o=Q+(f*5640|0)+424+(g*148|0)+100|0;m=Q+(f*5640|0)+424+(g*148|0)+108|0;l=i;k=1;while(1){j=S+l|0;d:do switch(a[j>>0]|0){case 67:{i=c[P>>2]|0;c[r>>2]=i+-1;c[s>>2]=i;break}case 82:{i=c[L>>2]|0;c[T>>2]=i+-1;c[O>>2]=i;break}case 76:{i=c[t>>2]|0;c[w>>2]=i+-1;c[x>>2]=i;break}case 80:if((c[R>>2]|0)>>>0<2){i=c[y>>2]|0;c[B>>2]=i+-1;c[C>>2]=i;break d}else{i=c[D>>2]|0;Q=c[G>>2]|0;c[F>>2]=i-Q-((i>>>0)%(Q>>>0)|0);c[h>>2]=i;i=c[H>>2]|0;Q=c[K>>2]|0;c[J>>2]=i-Q-((i>>>0)%(Q>>>0)|0);c[n>>2]=i;break d}default:{}}while(0);e:do if((k|0)==1)switch(a[j>>0]|0){case 82:{k=c[L>>2]|0;if((k|0)!=(c[M>>2]|0)){c[T>>2]=k;k=k+1|0;c[O>>2]=k;c[L>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[N>>2]|0;c[T>>2]=k;k=k+1|0;c[O>>2]=k;c[L>>2]=k;k=1;break e}case 67:{k=c[P>>2]|0;if((k|0)!=(c[p>>2]|0)){c[r>>2]=k;k=k+1|0;c[s>>2]=k;c[P>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[q>>2]|0;c[r>>2]=k;k=k+1|0;c[s>>2]=k;c[P>>2]=k;k=1;break e}case 76:{k=c[t>>2]|0;if((k|0)!=(c[u>>2]|0)){c[w>>2]=k;k=k+1|0;c[x>>2]=k;c[t>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[v>>2]|0;c[w>>2]=k;k=k+1|0;c[x>>2]=k;c[t>>2]=k;k=1;break e}case 80:{if((c[R>>2]|0)>>>0<2){k=c[y>>2]|0;if((k|0)!=(c[z>>2]|0)){c[B>>2]=k;k=k+1|0;c[C>>2]=k;c[y>>2]=k;k=0;break e}if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}k=c[A>>2]|0;c[B>>2]=k;k=k+1|0;c[C>>2]=k;c[y>>2]=k;k=1;break e}k=c[D>>2]|0;if(k>>>0<(c[E>>2]|0)>>>0){c[F>>2]=k;i=c[G>>2]|0;k=i+k-((k>>>0)%(i>>>0)|0)|0;c[h>>2]=k;c[D>>2]=k;k=0;break e}j=c[H>>2]|0;if(j>>>0<(c[I>>2]|0)>>>0){c[J>>2]=j;i=c[K>>2]|0;k=0;j=i+j-((j>>>0)%(i>>>0)|0)|0}else{if(!(Sf(l+-1|0,e,f,g,S)|0)){k=0;break e}i=c[m>>2]|0;c[H>>2]=i;c[J>>2]=i;j=c[K>>2]|0;k=1;j=j+i-((i>>>0)%(j>>>0)|0)|0}c[n>>2]=j;c[H>>2]=j;Q=c[o>>2]|0;c[F>>2]=Q;i=c[G>>2]|0;i=i+Q-((Q>>>0)%(i>>>0)|0)|0;c[h>>2]=i;c[D>>2]=i;break e}default:{k=1;break e}}while(0);if((l|0)>0)l=l+-1|0;else break}return}while(0);c[T>>2]=c[Q+(f*5640|0)+424+(g*148|0)+72>>2];c[d+(g*232|0)+56>>2]=c[Q+(f*5640|0)+424+(g*148|0)+88>>2];c[d+(g*232|0)+48>>2]=c[Q+(f*5640|0)+424+(g*148|0)+76>>2];c[d+(g*232|0)+60>>2]=c[Q+(f*5640|0)+424+(g*148|0)+92>>2];c[d+(g*232|0)+64>>2]=c[Q+(f*5640|0)+424+(g*148|0)+68>>2];c[d+(g*232|0)+52>>2]=c[Q+(f*5640|0)+424+(g*148|0)+84>>2];c[d+(g*232|0)+68>>2]=c[Q+(f*5640|0)+424+(g*148|0)+80>>2];c[d+(g*232|0)+72>>2]=c[Q+(f*5640|0)+424+(g*148|0)+96>>2];c[d+(g*232|0)+96>>2]=c[Q+(f*5640|0)+424+(g*148|0)+100>>2];c[d+(g*232|0)+104>>2]=c[Q+(f*5640|0)+424+(g*148|0)+108>>2];c[d+(g*232|0)+100>>2]=c[Q+(f*5640|0)+424+(g*148|0)+104>>2];c[d+(g*232|0)+108>>2]=c[Q+(f*5640|0)+424+(g*148|0)+112>>2];return}function Nf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;I=c[d+76>>2]|0;K=c[d+24>>2]|0;N=(e>>>0)%(K>>>0)|0;K=(e>>>0)/(K>>>0)|0;L=c[d+4>>2]|0;H=c[d+12>>2]|0;G=(_(H,N)|0)+L|0;M=c[b>>2]|0;M=(G|0)>(M|0)?G:M;L=(_(H,N+1|0)|0)+L|0;N=c[b+8>>2]|0;N=(L|0)<(N|0)?L:N;L=c[d+8>>2]|0;H=c[d+16>>2]|0;G=(_(H,K)|0)+L|0;J=c[b+4>>2]|0;J=(G|0)>(J|0)?G:J;L=(_(H,K+1|0)|0)+L|0;K=c[b+12>>2]|0;K=(L|0)<(K|0)?L:K;L=c[b+16>>2]|0;if(!L){l=0;k=2147483647;j=2147483647;i=0}else{D=K+-1|0;E=N+-1|0;F=J+-1|0;G=M+-1|0;l=0;k=2147483647;j=2147483647;i=0;H=0;A=c[b+24>>2]|0;B=c[I+(e*5640|0)+5584>>2]|0;while(1){x=c[A>>2]|0;y=c[A+4>>2]|0;z=c[B+4>>2]|0;i=z>>>0>i>>>0?z:i;if(z){v=(D+y|0)/(y|0)|0;t=(E+x|0)/(x|0)|0;r=(F+y|0)/(y|0)|0;p=(G+x|0)/(x|0)|0;p=Si(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;q=C;r=Si(r|0,((r|0)<0)<<31>>31|0,-1,-1)|0;s=C;t=Si(t|0,((t|0)<0)<<31>>31|0,-1,-1)|0;u=C;v=Si(v|0,((v|0)<0)<<31>>31|0,-1,-1)|0;w=C;d=0;o=0;while(1){m=c[B+812+(o<<2)>>2]|0;n=c[B+944+(o<<2)>>2]|0;g=d+-1+z|0;h=x<>>0>>0?k:h;j=j>>>0>>0?j:O;O=Ri(1,0,g|0)|0;h=C;d=Si(p|0,q|0,O|0,h|0)|0;d=Pi(d|0,C|0,g|0)|0;f=Si(r|0,s|0,O|0,h|0)|0;f=Pi(f|0,C|0,g|0)|0;b=Si(t|0,u|0,O|0,h|0)|0;b=Pi(b|0,C|0,g|0)|0;h=Si(v|0,w|0,O|0,h|0)|0;g=Pi(h|0,C|0,g|0)|0;h=Ri(1,0,n|0)|0;h=Si(h|0,C|0,-1,-1)|0;h=Si(h|0,C|0,g|0,((g|0)<0)<<31>>31|0)|0;h=Pi(h|0,C|0,n|0)|0;if((d|0)==(b|0))d=0;else{O=Ri(1,0,m|0)|0;O=Si(O|0,C|0,-1,-1)|0;O=Si(O|0,C|0,b|0,((b|0)<0)<<31>>31|0)|0;O=Pi(O|0,C|0,m|0)|0;d=(O<>m<>m}b=_(d,(f|0)==(g|0)?0:(h<>n<>n)|0;l=b>>>0>l>>>0?b:l;b=o+1|0;if(b>>>0>>0){d=~o;o=b}else break}}H=H+1|0;if(H>>>0>=L>>>0)break;else{A=A+52|0;B=B+1080|0}}}if(a[I+(e*5640|0)+5636>>0]&4){Rf(I,e,M,N,J,K,l,k,j);return}f=(c[I+(e*5640|0)+420>>2]|0)+1|0;if(!f)return;g=c[I+(e*5640|0)+8>>2]|0;h=c[I+(e*5640|0)+4>>2]|0;d=I+(e*5640|0)+424|0;b=0;while(1){c[d+76>>2]=0;c[d+92>>2]=L;c[d+72>>2]=0;c[d+88>>2]=i;c[d+68>>2]=0;c[d+84>>2]=g;c[d+36>>2]=h;c[d+80>>2]=0;c[d+96>>2]=l;c[d+100>>2]=M;c[d+104>>2]=N;c[d+108>>2]=J;c[d+112>>2]=K;c[d+116>>2]=k;c[d+120>>2]=j;b=b+1|0;if((b|0)==(f|0))break;else d=d+148|0}return}function Of(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;switch(c[d+80>>2]|0){case 0:{e=d+40|0;if(!(c[e>>2]|0)){E=d+32|0;l=E;E=c[E>>2]|0;f=18}else{c[e>>2]=0;t=c[d+64>>2]|0;c[d+36>>2]=t;f=5}while(1){if((f|0)==5){if(t>>>0>=(c[d+52>>2]|0)>>>0){nb=0;f=153;break}z=c[d+44>>2]|0;c[d+28>>2]=z;f=7}else if((f|0)==18){j=E+1|0;c[l>>2]=j;h=l;f=14}while(1){if((f|0)==7){f=0;if(z>>>0>=(c[d+56>>2]|0)>>>0){f=21;break}A=c[d+48>>2]|0;p=d+24|0;c[p>>2]=A}else if((f|0)==14){if(j>>>0<(c[d+72>>2]|0)>>>0){f=16;break}F=d+24|0;n=F;F=c[F>>2]|0;f=19}while(1){if((f|0)==19){f=0;A=F+1|0;c[n>>2]=A;p=n}if(A>>>0>=(c[d+60>>2]|0)>>>0){f=20;break}B=c[d+196>>2]|0;C=c[d+28>>2]|0;if(C>>>0<(c[B+(A<<4)+8>>2]|0)>>>0)break;else{n=p;F=A;f=19}}if((f|0)==20){f=d+28|0;z=(c[f>>2]|0)+1|0;c[f>>2]=z;f=7;continue}e=c[B+(A<<4)+12>>2]|0;if(!(a[d>>0]|0))c[d+72>>2]=_(c[e+(C<<4)+12>>2]|0,c[e+(C<<4)+8>>2]|0)|0;j=c[d+68>>2]|0;h=d+32|0;c[h>>2]=j;f=14}if((f|0)==16){f=0;D=_(c[d+8>>2]|0,c[d+36>>2]|0)|0;D=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+D|0;D=D+(_(c[d+16>>2]|0,c[d+24>>2]|0)|0)|0;D=D+(_(c[d+20>>2]|0,j)|0)|0;D=(c[d+4>>2]|0)+(D<<1)|0;if(!(b[D>>1]|0))break;else{l=h;E=j;f=18;continue}}else if((f|0)==21){f=d+36|0;t=(c[f>>2]|0)+1|0;c[f>>2]=t;f=5;continue}}if((f|0)==153)return nb|0;b[D>>1]=1;d=1;return d|0}case 1:{e=d+40|0;if(!(c[e>>2]|0)){x=d+32|0;k=x;x=c[x>>2]|0;f=38}else{c[e>>2]=0;G=c[d+44>>2]|0;c[d+28>>2]=G;f=25}while(1){if((f|0)==25){if(G>>>0>=(c[d+56>>2]|0)>>>0){nb=0;f=153;break}r=c[d+64>>2]|0;c[d+36>>2]=r;f=27}else if((f|0)==38){i=x+1|0;c[k>>2]=i;g=k;f=34}while(1){if((f|0)==27){f=0;if(r>>>0>=(c[d+52>>2]|0)>>>0){f=41;break}s=c[d+48>>2]|0;o=d+24|0;c[o>>2]=s}else if((f|0)==34){if(i>>>0<(c[d+72>>2]|0)>>>0){f=36;break}y=d+24|0;m=y;y=c[y>>2]|0;f=39}while(1){if((f|0)==39){f=0;s=y+1|0;c[m>>2]=s;o=m}if(s>>>0>=(c[d+60>>2]|0)>>>0){f=40;break}u=c[d+196>>2]|0;v=c[d+28>>2]|0;if(v>>>0<(c[u+(s<<4)+8>>2]|0)>>>0)break;else{m=o;y=s;f=39}}if((f|0)==40){f=d+36|0;r=(c[f>>2]|0)+1|0;c[f>>2]=r;f=27;continue}e=c[u+(s<<4)+12>>2]|0;if(!(a[d>>0]|0))c[d+72>>2]=_(c[e+(v<<4)+12>>2]|0,c[e+(v<<4)+8>>2]|0)|0;i=c[d+68>>2]|0;g=d+32|0;c[g>>2]=i;f=34}if((f|0)==36){f=0;w=_(c[d+8>>2]|0,c[d+36>>2]|0)|0;w=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+w|0;w=w+(_(c[d+16>>2]|0,c[d+24>>2]|0)|0)|0;w=w+(_(c[d+20>>2]|0,i)|0)|0;w=(c[d+4>>2]|0)+(w<<1)|0;if(!(b[w>>1]|0))break;else{k=g;x=i;f=38;continue}}else if((f|0)==41){f=d+28|0;G=(c[f>>2]|0)+1|0;c[f>>2]=G;f=25;continue}}if((f|0)==153)return nb|0;b[w>>1]=1;d=1;return d|0}case 2:{e=d+40|0;if(!(c[e>>2]|0)){lb=d+36|0;Ta=lb;lb=c[lb>>2]|0;f=75}else{c[e>>2]=0;o=d+224|0;c[o>>2]=0;p=d+228|0;c[p>>2]=0;q=c[d+192>>2]|0;if(q){r=c[d+196>>2]|0;e=0;f=0;s=0;do{j=c[r+(s<<4)+8>>2]|0;if(j){k=c[r+(s<<4)+12>>2]|0;l=c[r+(s<<4)>>2]|0;m=c[r+(s<<4)+4>>2]|0;n=j+-1|0;g=0;i=0;while(1){h=n+g|0;Sa=l<>2]|0);h=m<<(c[k+(i<<4)+4>>2]|0)+h;e=(e|0)==0?Sa:e>>>0>>0?e:Sa;f=(f|0)==0?h:f>>>0>>0?f:h;h=i+1|0;if((h|0)==(j|0))break;else{g=~i;i=h}}c[o>>2]=e;c[p>>2]=f}s=s+1|0}while((s|0)!=(q|0))}if(!(a[d>>0]|0)){c[d+104>>2]=c[d+204>>2];c[d+96>>2]=c[d+200>>2];c[d+108>>2]=c[d+212>>2];c[d+100>>2]=c[d+208>>2]}J=c[d+44>>2]|0;c[d+28>>2]=J;f=54}while(1){if((f|0)==54){if(J>>>0>=(c[d+56>>2]|0)>>>0){nb=0;f=153;break}Xa=c[d+104>>2]|0;c[d+220>>2]=Xa;f=56}else if((f|0)==75){jb=lb+1|0;c[Ta>>2]=jb;Ua=Ta;f=71}while(1){if((f|0)==56){if((Xa|0)>=(c[d+108>>2]|0)){f=79;break}Ya=c[d+96>>2]|0;c[d+216>>2]=Ya;f=58}else if((f|0)==71){if(jb>>>0<(c[d+52>>2]|0)>>>0){f=73;break}mb=d+24|0;Va=mb;mb=c[mb>>2]|0;f=76}while(1){if((f|0)==58){if((Ya|0)>=(c[d+100>>2]|0)){f=78;break}Za=c[d+48>>2]|0;Wa=d+24|0;c[Wa>>2]=Za}else if((f|0)==76){Za=mb+1|0;c[Va>>2]=Za;Wa=Va}if(Za>>>0>=(c[d+60>>2]|0)>>>0){Ya=c[d+224>>2]|0;f=d+216|0;Sa=c[f>>2]|0;Ya=Sa+Ya-((Sa|0)%(Ya|0)|0)|0;c[f>>2]=Ya;f=58;continue}f=c[d+196>>2]|0;m=c[d+28>>2]|0;e=c[f+(Za<<4)+8>>2]|0;if(m>>>0>=e>>>0){Va=Wa;mb=Za;f=76;continue}n=c[f+(Za<<4)+12>>2]|0;i=e+~m|0;j=c[d+200>>2]|0;k=c[f+(Za<<4)>>2]|0;_a=k<>2]|0;Sa=c[f+(Za<<4)+4>>2]|0;ab=Sa<>2]|0)|0)/(_a|0)|0;db=ab+-1|0;f=(db+(c[d+212>>2]|0)|0)/(ab|0)|0;eb=c[n+(m<<4)>>2]|0;g=eb+i|0;fb=c[n+(m<<4)+4>>2]|0;h=fb+i|0;gb=c[d+220>>2]|0;if((gb|0)%(Sa<>2]|0;if((hb|0)%(k<>2]|0;if(!ib){Va=Wa;mb=Za;f=76;continue}if((bb|0)==(f|0)|(($a|0)==(e|0)?1:(c[n+(m<<4)+12>>2]|0)==0)){Va=Wa;mb=Za;f=76}else{f=70;break}}if((f|0)==70){c[d+32>>2]=(((cb+hb|0)/(_a|0)|0)>>eb)-($a>>eb)+(_((((db+gb|0)/(ab|0)|0)>>fb)-(bb>>fb)|0,ib)|0);jb=c[d+64>>2]|0;Ua=d+36|0;c[Ua>>2]=jb;f=71;continue}else if((f|0)==78){Xa=c[d+228>>2]|0;f=d+220|0;Sa=c[f>>2]|0;Xa=Sa+Xa-((Sa|0)%(Xa|0)|0)|0;c[f>>2]=Xa;f=56;continue}}if((f|0)==73){f=0;kb=_(c[d+8>>2]|0,jb)|0;kb=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+kb|0;kb=kb+(_(c[d+16>>2]|0,c[d+24>>2]|0)|0)|0;kb=kb+(_(c[d+20>>2]|0,c[d+32>>2]|0)|0)|0;kb=(c[d+4>>2]|0)+(kb<<1)|0;if(!(b[kb>>1]|0))break;else{Ta=Ua;lb=jb;f=75;continue}}else if((f|0)==79){f=d+28|0;J=(c[f>>2]|0)+1|0;c[f>>2]=J;f=54;continue}}if((f|0)==153)return nb|0;b[kb>>1]=1;d=1;return d|0}case 3:{f=d+40|0;if(!(c[f>>2]|0)){Ra=c[d+24>>2]|0;Ka=d+36|0;pa=Ka;Ka=c[Ka>>2]|0;Na=Ra;Ra=(c[d+196>>2]|0)+(Ra<<4)|0;f=113}else{c[f>>2]=0;o=d+224|0;c[o>>2]=0;p=d+228|0;c[p>>2]=0;q=c[d+192>>2]|0;if(q){r=c[d+196>>2]|0;e=0;f=0;s=0;do{j=c[r+(s<<4)+8>>2]|0;if(j){k=c[r+(s<<4)+12>>2]|0;l=c[r+(s<<4)>>2]|0;m=c[r+(s<<4)+4>>2]|0;n=j+-1|0;g=0;i=0;while(1){h=n+g|0;mb=l<>2]|0);h=m<<(c[k+(i<<4)+4>>2]|0)+h;e=(e|0)==0?mb:e>>>0>>0?e:mb;f=(f|0)==0?h:f>>>0>>0?f:h;h=i+1|0;if((h|0)==(j|0))break;else{g=~i;i=h}}c[o>>2]=e;c[p>>2]=f}s=s+1|0}while((s|0)!=(q|0))}if(!(a[d>>0]|0)){e=c[d+204>>2]|0;c[d+104>>2]=e;c[d+96>>2]=c[d+200>>2];c[d+108>>2]=c[d+212>>2];c[d+100>>2]=c[d+208>>2]}else e=c[d+104>>2]|0;c[d+220>>2]=e;f=93}while(1){if((f|0)==93){if((e|0)>=(c[d+108>>2]|0)){nb=0;f=153;break}ta=c[d+96>>2]|0;c[d+216>>2]=ta;f=95}else if((f|0)==113){Ha=Ka+1|0;c[pa>>2]=Ha;qa=pa;Ia=Na;Qa=Ra;f=109}while(1){if((f|0)==95){if((ta|0)>=(c[d+100>>2]|0)){f=117;break}ua=c[d+48>>2]|0;c[d+24>>2]=ua;f=97}else if((f|0)==109){if(Ha>>>0<(c[d+52>>2]|0)>>>0){f=111;break}La=d+28|0;ra=La;La=c[La>>2]|0;Oa=Ia;Sa=Qa;f=114}while(1){if((f|0)==97){if(ua>>>0>=(c[d+60>>2]|0)>>>0){f=116;break}Pa=(c[d+196>>2]|0)+(ua<<4)|0;va=c[d+44>>2]|0;sa=d+28|0;c[sa>>2]=va;Ma=ua}else if((f|0)==114){va=La+1|0;c[ra>>2]=va;sa=ra;Ma=Oa;Pa=Sa}mb=c[d+56>>2]|0;f=c[Pa+8>>2]|0;if(va>>>0>=(mb>>>0>>0?mb:f)>>>0){ua=Ma+1|0;c[d+24>>2]=ua;f=97;continue}n=c[Pa+12>>2]|0;f=f+~va|0;g=c[d+200>>2]|0;h=c[Pa>>2]|0;wa=h<>2]|0;mb=c[Pa+4>>2]|0;ya=mb<>2]|0)|0)/(wa|0)|0;Ba=ya+-1|0;k=(Ba+(c[d+212>>2]|0)|0)/(ya|0)|0;Ca=c[n+(va<<4)>>2]|0;l=Ca+f|0;Da=c[n+(va<<4)+4>>2]|0;m=Da+f|0;Ea=c[d+220>>2]|0;if((Ea|0)%(mb<>2]|0;if((Fa|0)%(h<>2]|0;if(!Ga){ra=sa;La=va;Oa=Ma;Sa=Pa;f=114;continue}if((za|0)==(k|0)|((xa|0)==(j|0)?1:(c[n+(va<<4)+12>>2]|0)==0)){ra=sa;La=va;Oa=Ma;Sa=Pa;f=114}else{f=108;break}}if((f|0)==108){c[d+32>>2]=(((Aa+Fa|0)/(wa|0)|0)>>Ca)-(xa>>Ca)+(_((((Ba+Ea|0)/(ya|0)|0)>>Da)-(za>>Da)|0,Ga)|0);Ha=c[d+64>>2]|0;qa=d+36|0;c[qa>>2]=Ha;Ia=Ma;Qa=Pa;f=109;continue}else if((f|0)==116){ta=c[d+224>>2]|0;f=d+216|0;mb=c[f>>2]|0;ta=mb+ta-((mb|0)%(ta|0)|0)|0;c[f>>2]=ta;f=95;continue}}if((f|0)==111){f=0;Ja=_(c[d+8>>2]|0,Ha)|0;Ja=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+Ja|0;Ja=Ja+(_(c[d+16>>2]|0,Ia)|0)|0;Ja=Ja+(_(c[d+20>>2]|0,c[d+32>>2]|0)|0)|0;Ja=(c[d+4>>2]|0)+(Ja<<1)|0;if(!(b[Ja>>1]|0))break;else{pa=qa;Ka=Ha;Na=Ia;Ra=Qa;f=113;continue}}else if((f|0)==117){e=c[d+228>>2]|0;f=d+220|0;mb=c[f>>2]|0;e=mb+e-((mb|0)%(e|0)|0)|0;c[f>>2]=e;f=93;continue}}if((f|0)==153)return nb|0;b[Ja>>1]=1;d=1;return d|0}case 4:{e=d+40|0;if(!(c[e>>2]|0)){na=c[d+24>>2]|0;ea=d+36|0;K=ea;ea=c[ea>>2]|0;ga=na;na=(c[d+196>>2]|0)+(na<<4)|0;f=148}else{c[e>>2]=0;O=c[d+48>>2]|0;c[d+24>>2]=O;f=121}while(1){if((f|0)==121){if(O>>>0>=(c[d+60>>2]|0)>>>0){nb=0;f=153;break}e=c[d+196>>2]|0;q=e+(O<<4)|0;o=d+224|0;c[o>>2]=0;p=d+228|0;c[p>>2]=0;l=c[e+(O<<4)+8>>2]|0;if(l){m=c[e+(O<<4)+12>>2]|0;n=c[q>>2]|0;h=c[e+(O<<4)+4>>2]|0;i=l+-1|0;f=0;e=0;g=0;k=0;while(1){j=i+g|0;mb=n<>2]|0);j=h<<(c[m+(k<<4)+4>>2]|0)+j;f=(f|0)==0?mb:f>>>0>>0?f:mb;e=(e|0)==0?j:e>>>0>>0?e:j;j=k+1|0;if((j|0)==(l|0))break;else{g=~k;k=j}}c[o>>2]=f;c[p>>2]=e}if(!(a[d>>0]|0)){e=c[d+204>>2]|0;c[d+104>>2]=e;c[d+96>>2]=c[d+200>>2];c[d+108>>2]=c[d+212>>2];c[d+100>>2]=c[d+208>>2]}else e=c[d+104>>2]|0;c[d+220>>2]=e;H=e;I=O;f=130}else if((f|0)==148){ba=ea+1|0;c[K>>2]=ba;L=K;ca=ga;ma=na;f=144}while(1){if((f|0)==130){if((H|0)>=(c[d+108>>2]|0)){f=152;break}P=c[d+96>>2]|0;c[d+216>>2]=P;ha=I;ka=q;f=132}else if((f|0)==144){if(ba>>>0<(c[d+52>>2]|0)>>>0){f=146;break}fa=d+28|0;M=fa;fa=c[fa>>2]|0;ja=ca;oa=ma;f=149}while(1){if((f|0)==132){if((P|0)>=(c[d+100>>2]|0)){f=151;break}Q=c[d+44>>2]|0;N=d+28|0;c[N>>2]=Q;ia=ha;la=ka}else if((f|0)==149){Q=fa+1|0;c[M>>2]=Q;N=M;ia=ja;la=oa}mb=c[d+56>>2]|0;e=c[la+8>>2]|0;if(Q>>>0>=(mb>>>0>>0?mb:e)>>>0){P=c[d+224>>2]|0;ha=d+216|0;ka=c[ha>>2]|0;P=ka+P-((ka|0)%(P|0)|0)|0;c[ha>>2]=P;ha=ia;ka=la;f=132;continue}m=c[la+12>>2]|0;e=e+~Q|0;f=c[d+200>>2]|0;g=c[la>>2]|0;R=g<>2]|0;mb=c[la+4>>2]|0;T=mb<>2]|0)|0)/(R|0)|0;W=T+-1|0;j=(W+(c[d+212>>2]|0)|0)/(T|0)|0;X=c[m+(Q<<4)>>2]|0;k=X+e|0;Y=c[m+(Q<<4)+4>>2]|0;l=Y+e|0;Z=c[d+220>>2]|0;if((Z|0)%(mb<>2]|0;if(($|0)%(g<>2]|0;if(!aa){M=N;fa=Q;ja=ia;oa=la;f=149;continue}if((U|0)==(j|0)|((S|0)==(i|0)?1:(c[m+(Q<<4)+12>>2]|0)==0)){M=N;fa=Q;ja=ia;oa=la;f=149}else{f=143;break}}if((f|0)==143){c[d+32>>2]=(((V+$|0)/(R|0)|0)>>X)-(S>>X)+(_((((W+Z|0)/(T|0)|0)>>Y)-(U>>Y)|0,aa)|0);ba=c[d+64>>2]|0;L=d+36|0;c[L>>2]=ba;ca=ia;ma=la;f=144;continue}else if((f|0)==151){H=c[d+228>>2]|0;I=d+220|0;q=c[I>>2]|0;H=q+H-((q|0)%(H|0)|0)|0;c[I>>2]=H;I=ha;q=ka;f=130;continue}}if((f|0)==146){f=0;da=_(c[d+8>>2]|0,ba)|0;da=(_(c[d+12>>2]|0,c[d+28>>2]|0)|0)+da|0;da=da+(_(c[d+16>>2]|0,ca)|0)|0;da=da+(_(c[d+20>>2]|0,c[d+32>>2]|0)|0)|0;da=(c[d+4>>2]|0)+(da<<1)|0;if(!(b[da>>1]|0))break;else{K=L;ea=ba;ga=ca;na=ma;f=148;continue}}else if((f|0)==152){O=I+1|0;c[d+24>>2]=O;f=121;continue}}if((f|0)==153)return nb|0;b[da>>1]=1;d=1;return d|0}default:{d=0;return d|0}}return 0}function Pf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=(c[b+(d*5640|0)+420>>2]|0)+1|0;e=Qc(l,232)|0;if(!e){l=0;return l|0}if(!l){l=e;return l|0}j=a+16|0;g=b+(d*5640|0)+5584|0;a=c[j>>2]|0;h=e;i=0;a:while(1){b=Qc(a,16)|0;f=h+196|0;c[f>>2]=b;if(!b){a=5;break}k=c[j>>2]|0;c[h+192>>2]=k;b:do if(!k)a=0;else{a=(c[g>>2]|0)+4|0;k=Qc(c[a>>2]|0,16)|0;c[b+12>>2]=k;if(!k){a=18;break a}else d=0;while(1){c[b+(d<<4)+8>>2]=c[a>>2];d=d+1|0;a=c[j>>2]|0;if(d>>>0>=a>>>0)break b;b=c[f>>2]|0;a=(c[g>>2]|0)+(d*1080|0)+4|0;k=Qc(c[a>>2]|0,16)|0;c[b+(d<<4)+12>>2]=k;if(!k){a=18;break a}}}while(0);i=i+1|0;if(i>>>0>=l>>>0){a=32;break}else h=h+232|0}if((a|0)==5){a=e+4|0;b=c[a>>2]|0;if(!b){j=e;k=0}else{Uc(b);c[a>>2]=0;j=e;k=0}while(1){i=j+196|0;a=c[i>>2]|0;if(a){h=j+192|0;b=c[h>>2]|0;if(b){g=0;while(1){d=a+12|0;f=c[d>>2]|0;if(f){Uc(f);c[d>>2]=0;b=c[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=c[i>>2]|0}Uc(a);c[i>>2]=0}k=k+1|0;if((k|0)==(l|0))break;else j=j+232|0}Uc(e);l=0;return l|0}else if((a|0)==18){a=e+4|0;b=c[a>>2]|0;if(!b){j=e;k=0}else{Uc(b);c[a>>2]=0;j=e;k=0}while(1){i=j+196|0;a=c[i>>2]|0;if(a){h=j+192|0;b=c[h>>2]|0;if(b){g=0;while(1){d=a+12|0;f=c[d>>2]|0;if(f){Uc(f);c[d>>2]=0;b=c[h>>2]|0}g=g+1|0;if(g>>>0>=b>>>0)break;else a=a+16|0}a=c[i>>2]|0}Uc(a);c[i>>2]=0}k=k+1|0;if((k|0)==(l|0))break;else j=j+232|0}Uc(e);l=0;return l|0}else if((a|0)==32)return e|0;return 0}function Qf(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;o=c[(c[b+76>>2]|0)+(d*5640|0)+5584>>2]|0;n=c[a+24>>2]|0;I=c[b+24>>2]|0;H=b+12|0;G=(_(c[H>>2]|0,(d>>>0)%(I>>>0)|0)|0)+(c[b+4>>2]|0)|0;F=c[a>>2]|0;c[e>>2]=G>>>0>F>>>0?G:F;G=Si(c[H>>2]|0,0,G|0,0)|0;G=G|0-C;H=c[a+8>>2]|0;c[f>>2]=G>>>0>>0?G:H;H=b+16|0;I=(_(c[H>>2]|0,(d>>>0)/(I>>>0)|0)|0)+(c[b+8>>2]|0)|0;G=c[a+4>>2]|0;c[g>>2]=I>>>0>G>>>0?I:G;I=Si(c[H>>2]|0,0,I|0,0)|0;I=I|0-C;H=c[a+12>>2]|0;c[h>>2]=I>>>0>>0?I:H;c[k>>2]=0;c[l>>2]=0;c[i>>2]=2147483647;c[j>>2]=2147483647;H=a+16|0;if(!(c[H>>2]|0))return;else I=0;while(1){r=c[m+(I<<2)>>2]|0;p=c[n>>2]|0;a=((c[e>>2]|0)+-1+p|0)/(p|0)|0;F=n+4|0;q=c[F>>2]|0;d=((c[g>>2]|0)+-1+q|0)/(q|0)|0;p=(p+-1+(c[f>>2]|0)|0)/(p|0)|0;q=(q+-1+(c[h>>2]|0)|0)/(q|0)|0;G=o+4|0;b=c[G>>2]|0;if(b>>>0>(c[l>>2]|0)>>>0){c[l>>2]=b;b=c[G>>2]|0}if(b){D=Si(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;E=C;A=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;B=C;y=Si(p|0,((p|0)<0)<<31>>31|0,-1,-1)|0;z=C;w=Si(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;x=C;v=0;while(1){b=b+-1|0;p=c[o+812+(v<<2)>>2]|0;u=c[o+944+(v<<2)>>2]|0;c[r>>2]=p;c[r+4>>2]=u;s=c[n>>2]<>2]<>2]|0;c[i>>2]=(a|0)<(s|0)?a:s;s=c[j>>2]|0;c[j>>2]=(s|0)<(J|0)?s:J;J=Ri(1,0,b|0)|0;s=C;a=Si(D|0,E|0,J|0,s|0)|0;a=Pi(a|0,C|0,b|0)|0;q=Si(A|0,B|0,J|0,s|0)|0;q=Pi(q|0,C|0,b|0)|0;d=Si(y|0,z|0,J|0,s|0)|0;d=Pi(d|0,C|0,b|0)|0;s=Si(w|0,x|0,J|0,s|0)|0;s=Pi(s|0,C|0,b|0)|0;J=Ri(1,0,u|0)|0;t=C;K=Si(s|0,((s|0)<0)<<31>>31|0,-1,-1)|0;t=Si(K|0,C|0,J|0,t|0)|0;t=Pi(t|0,C|0,u|0)|0;if((a|0)==(d|0))a=0;else{d=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;J=C;K=Ri(1,0,p|0)|0;K=Si(d|0,J|0,K|0,C|0)|0;K=Pi(K|0,C|0,p|0)|0;a=(K<>p<>p}K=(q|0)==(s|0)?0:(t<>u<>u;c[r+8>>2]=a;c[r+12>>2]=K;a=_(a,K)|0;if(a>>>0>(c[k>>2]|0)>>>0)c[k>>2]=a;v=v+1|0;if(v>>>0>=(c[G>>2]|0)>>>0)break;else r=r+16|0}}I=I+1|0;if(I>>>0>=(c[H>>2]|0)>>>0)break;else{n=n+52|0;o=o+1080|0}}return}function Rf(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;k=(c[a+(b*5640|0)+420>>2]|0)+1|0;c[a+(b*5640|0)+500>>2]=c[a+(b*5640|0)+428>>2];c[a+(b*5640|0)+516>>2]=c[a+(b*5640|0)+440>>2];c[a+(b*5640|0)+496>>2]=c[a+(b*5640|0)+424>>2];c[a+(b*5640|0)+512>>2]=c[a+(b*5640|0)+436>>2];c[a+(b*5640|0)+508>>2]=c[a+(b*5640|0)+432>>2];c[a+(b*5640|0)+492>>2]=0;c[a+(b*5640|0)+460>>2]=c[a+(b*5640|0)+456>>2];c[a+(b*5640|0)+504>>2]=0;c[a+(b*5640|0)+520>>2]=h;c[a+(b*5640|0)+524>>2]=d;c[a+(b*5640|0)+528>>2]=e;c[a+(b*5640|0)+532>>2]=f;c[a+(b*5640|0)+536>>2]=g;c[a+(b*5640|0)+540>>2]=i;c[a+(b*5640|0)+544>>2]=j;if(k>>>0<=1)return;a=a+(b*5640|0)+572|0;b=1;while(1){c[a+76>>2]=c[a+4>>2];c[a+92>>2]=c[a+16>>2];c[a+72>>2]=c[a>>2];c[a+88>>2]=c[a+12>>2];l=c[a+8>>2]|0;c[a+84>>2]=l;c[a+36>>2]=c[a+32>>2];c[a+80>>2]=0;c[a+68>>2]=l>>>0>(c[a+-64>>2]|0)>>>0?l:0;c[a+96>>2]=h;c[a+100>>2]=d;c[a+104>>2]=e;c[a+108>>2]=f;c[a+112>>2]=g;c[a+116>>2]=i;c[a+120>>2]=j;b=b+1|0;if((b|0)==(k|0))break;else a=a+148|0}return}function Sf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=c[d+76>>2]|0;if((b|0)>-1)h=b;else{e=0;return e|0}a:while(1){switch(a[g+h>>0]|0){case 82:{i=3;break a}case 67:{i=5;break a}case 76:{i=7;break a}case 80:{i=9;break a}default:{}}h=h+-1|0}if((i|0)==3)if((c[j+(e*5640|0)+424+(f*148|0)+128>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+88>>2]|0))return (Sf(b+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}else if((i|0)==5)if((c[j+(e*5640|0)+424+(f*148|0)+132>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+92>>2]|0))return (Sf(b+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}else if((i|0)==7)if((c[j+(e*5640|0)+424+(f*148|0)+124>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+84>>2]|0))return (Sf(b+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}else if((i|0)==9){if((c[j+(e*5640|0)+424+(f*148|0)+36>>2]|0)>>>0<2)if((c[j+(e*5640|0)+424+(f*148|0)+136>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+96>>2]|0))return (Sf(h+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}if((c[j+(e*5640|0)+424+(f*148|0)+140>>2]|0)!=(c[j+(e*5640|0)+424+(f*148|0)+104>>2]|0)){e=1;return e|0}if((c[j+(e*5640|0)+424+(f*148|0)+144>>2]|0)==(c[j+(e*5640|0)+424+(f*148|0)+112>>2]|0))return (Sf(h+-1|0,d,e,f,g)|0)!=0|0;else{e=1;return e|0}}return 0}function Tf(b){b=b|0;var d=0,e=0;d=Qc(1,44)|0;if(!d){b=0;return b|0}e=d+40|0;a[e>>0]=a[e>>0]&-2|(b|0)!=0;b=Qc(1,4)|0;c[d+20>>2]=b;if(b){e=d;return e|0}Uc(d);e=0;return e|0}function Uf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;O=i;i=i+1200|0;N=O;e=c[c[a+20>>2]>>2]|0;M=e+16|0;f=c[M>>2]|0;if(!f){i=O;return}J=e+20|0;K=(c[a+32>>2]|0)+8|0;L=(c[a+28>>2]|0)+88|0;H=a+24|0;I=(b|0)==0;F=(d|0)==0;G=b+-1|0;e=f;E=0;do{j=c[J>>2]|0;k=c[K>>2]|0;C=c[j+(E*52|0)+16>>2]|0;if(k){if(C){a=c[L>>2]|0;g=+((c[(c[(c[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)>>>0)*.0625;f=0;do{d=_(C,f)|0;h=0;do{D=(d+h|0)*3|0;c[N+(f*120|0)+(h*12|0)>>2]=~~(+(c[a+(D<<2)>>2]|0)*g);c[N+(f*120|0)+(h*12|0)+4>>2]=~~(+(c[a+(D+1<<2)>>2]|0)*g);c[N+(f*120|0)+(h*12|0)+8>>2]=~~(+(c[a+(D+2<<2)>>2]|0)*g);h=h+1|0}while(h>>>0>>0);f=f+1|0}while(f>>>0>>0);D=9}}else D=9;if((D|0)==9){D=0;if(C){w=j+(E*52|0)+24|0;B=0;do{x=c[w>>2]|0;y=x+(B*136|0)+24|0;e=c[y>>2]|0;if(e){z=x+(B*136|0)+16|0;A=x+(B*136|0)+20|0;a=c[A>>2]|0;d=c[z>>2]|0;v=0;do{if(_(a,d)|0){s=x+(B*136|0)+28+(v*36|0)+20|0;t=N+(b*120|0)+(B*12|0)+(v<<2)|0;u=N+(G*120|0)+(B*12|0)+(v<<2)|0;r=0;do{e=c[s>>2]|0;q=_(c[e+(r*40|0)+20>>2]|0,c[e+(r*40|0)+16>>2]|0)|0;if(q){m=e+(r*40|0)+24|0;n=c[t>>2]|0;p=0;do{k=c[m>>2]|0;l=k+(p*52|0)|0;o=c[k+(p*52|0)+4>>2]|0;e=(c[(c[(c[H>>2]|0)+24>>2]|0)+(E*52|0)+24>>2]|0)-(c[k+(p*52|0)+28>>2]|0)|0;if(!I){a=c[u>>2]|0;d=n-a|0;if((a|0)<=(e|0)){d=d+(a-e)|0;d=(d|0)<0?0:d}}else{c[k+(p*52|0)+44>>2]=0;d=(n|0)>(e|0)?n-e|0:0}j=k+(p*52|0)+44|0;f=c[j>>2]|0;h=(f|0)==0;if(h)if(!d)d=0;else d=(d*3|0)+-2|0;else d=(d*3|0)+f|0;c[o+(b*24|0)>>2]=d-f;do if((d|0)!=(f|0)){a=c[k+(p*52|0)+8>>2]|0;e=c[a+((d+-1|0)*24|0)>>2]|0;if(h)c[o+(b*24|0)+16>>2]=c[l>>2];else{k=c[a+((f+-1|0)*24|0)>>2]|0;c[o+(b*24|0)+16>>2]=(c[l>>2]|0)+k;e=e-k|0}c[o+(b*24|0)+4>>2]=e;if(F)break;c[j>>2]=d}while(0);p=p+1|0}while(p>>>0>>0);a=c[A>>2]|0;d=c[z>>2]|0}r=r+1|0}while(r>>>0<(_(a,d)|0)>>>0);e=c[y>>2]|0}v=v+1|0}while(v>>>0>>0)}B=B+1|0}while(B>>>0>>0);e=c[M>>2]|0}}E=E+1|0}while(E>>>0>>0);i=O;return}function Vf(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a=c[c[a+20>>2]>>2]|0;G=a+40+(b<<3)|0;h[G>>3]=0.0;H=a+16|0;f=c[H>>2]|0;if(!f)return;E=a+20|0;F=(b|0)==0;D=(e|0)==0;a=f;C=0;do{f=c[E>>2]|0;B=c[f+(C*52|0)+16>>2]|0;if(B){v=f+(C*52|0)+24|0;A=0;do{w=c[v>>2]|0;x=w+(A*136|0)+24|0;a=c[x>>2]|0;if(a){y=w+(A*136|0)+16|0;z=w+(A*136|0)+20|0;f=c[z>>2]|0;e=c[y>>2]|0;u=0;do{if(_(f,e)|0){t=w+(A*136|0)+28+(u*36|0)+20|0;s=0;do{a=c[t>>2]|0;r=_(c[a+(s*40|0)+20>>2]|0,c[a+(s*40|0)+16>>2]|0)|0;if(r){n=a+(s*40|0)+24|0;q=0;do{k=c[n>>2]|0;l=k+(q*52|0)|0;o=c[k+(q*52|0)+4>>2]|0;p=k+(q*52|0)+44|0;if(F){c[p>>2]=0;m=0}else m=c[p>>2]|0;e=c[k+(q*52|0)+48>>2]|0;if(m>>>0>>0){i=c[k+(q*52|0)+8>>2]|0;a=m;j=m;do{f=c[i+(j*24|0)>>2]|0;g=+h[i+(j*24|0)+8>>3];if(a){J=a+-1|0;g=g-+h[i+(J*24|0)+8>>3];f=f-(c[i+(J*24|0)>>2]|0)|0}do if(!f){if(!(g!=0.0))break;a=j+1|0}else{if(!(d-g/+(f>>>0)<2.220446049250313e-16))break;a=j+1|0}while(0);j=j+1|0}while(j>>>0>>0);i=a;c[o+(b*24|0)>>2]=i-m;if((i|0)!=(m|0)){e=i+-1|0;f=c[k+(q*52|0)+8>>2]|0;a=c[f+(e*24|0)>>2]|0;if(!m){c[o+(b*24|0)+16>>2]=c[l>>2];g=+h[f+(e*24|0)+8>>3]}else{m=m+-1|0;J=c[f+(m*24|0)>>2]|0;c[o+(b*24|0)+16>>2]=(c[l>>2]|0)+J;g=+h[f+(e*24|0)+8>>3]-+h[f+(m*24|0)+8>>3];a=a-J|0}c[o+(b*24|0)+4>>2]=a;h[o+(b*24|0)+8>>3]=g;h[G>>3]=g+ +h[G>>3];if(!D)c[p>>2]=i}else I=26}else{c[o+(b*24|0)>>2]=0;I=26}if((I|0)==26){I=0;h[o+(b*24|0)+8>>3]=0.0}q=q+1|0}while(q>>>0>>0);f=c[z>>2]|0;e=c[y>>2]|0}s=s+1|0}while(s>>>0<(_(f,e)|0)>>>0);a=c[x>>2]|0}u=u+1|0}while(u>>>0>>0)}A=A+1|0}while(A>>>0>>0);a=c[H>>2]|0}C=C+1|0}while(C>>>0>>0);return}function Wf(d,e,f,j,k){d=d|0;e=e|0;f=f|0;j=j|0;k=k|0;var l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;W=i;i=i+800|0;V=W;S=c[d+28>>2]|0;T=c[c[d+20>>2]>>2]|0;U=c[d+32>>2]|0;O=T+24|0;c[O>>2]=0;Q=c[T+16>>2]|0;if(!Q){l=0;J=0.0;n=0.0;p=1797693134862315708145274.0e284}else{M=c[T+20>>2]|0;N=c[(c[d+24>>2]|0)+24>>2]|0;l=0;R=0;o=0.0;n=0.0;p=1797693134862315708145274.0e284;do{I=M+(R*52|0)+48|0;c[I>>2]=0;K=c[M+(R*52|0)+16>>2]|0;if(!K)m=0;else{L=c[M+(R*52|0)+24>>2]|0;m=0;H=0;do{E=c[L+(H*136|0)+24>>2]|0;if(E){F=_(c[L+(H*136|0)+20>>2]|0,c[L+(H*136|0)+16>>2]|0)|0;G=(F|0)==0;D=0;do{if(!G){C=c[L+(H*136|0)+28+(D*36|0)+20>>2]|0;B=0;do{z=_(c[C+(B*40|0)+20>>2]|0,c[C+(B*40|0)+16>>2]|0)|0;if(z){A=c[C+(B*40|0)+24>>2]|0;y=0;do{v=c[A+(y*52|0)+48>>2]|0;if(v){w=c[A+(y*52|0)+8>>2]|0;u=0;do{t=c[w+(u*24|0)>>2]|0;q=+h[w+(u*24|0)+8>>3];if(u){X=u+-1|0;q=q-+h[w+(X*24|0)+8>>3];t=t-(c[w+(X*24|0)>>2]|0)|0}do if(t){q=q/+(t|0);p=qo))break;o=q}while(0);u=u+1|0}while(u>>>0>>0)}X=_((c[A+(y*52|0)+24>>2]|0)-(c[A+(y*52|0)+16>>2]|0)|0,(c[A+(y*52|0)+20>>2]|0)-(c[A+(y*52|0)+12>>2]|0)|0)|0;l=X+l|0;m=X+m|0;y=y+1|0}while(y>>>0>>0);c[O>>2]=l;c[I>>2]=m}B=B+1|0}while(B>>>0>>0)}D=D+1|0}while(D>>>0>>0)}H=H+1|0}while(H>>>0>>0)}J=+(1<>2]|0)+-1.0;n=n+ +(m|0)*(J*J);R=R+1|0}while(R>>>0>>0);J=o}I=(k|0)!=0;if(I){R=c[d+36>>2]|0;Q=c[k+88>>2]|0;c[Q+(R*592|0)+552>>2]=l;h[Q+(R*592|0)+560>>3]=+h[T+32>>3];l=U+8|0;X=Pc(c[l>>2]<<3)|0;c[Q+(R*592|0)>>2]=X;if(!X){X=0;i=W;return X|0}}else l=U+8|0;if(!(c[l>>2]|0)){X=1;i=W;return X|0}z=T+32|0;A=S+93|0;B=d+36|0;C=k+88|0;D=T+40|0;E=d+24|0;F=d+8|0;G=d+16|0;H=0;while(1){o=+g[U+20+(H<<2)>>2];if(o!=0.0){w=~~+Z(+o)>>>0;w=w>>>0>>0?w:j}else w=j;s=+g[U+5184+(H<<2)>>2];x=+h[z>>3]-n/+P(10.0,+(s/10.0));X=a[A>>0]|0;if(!((X&1)!=0&o>0.0)?!((X&4)!=0&s>0.0):0)o=p;else{y=dh(c[E>>2]|0,S)|0;if(!y){l=0;m=57;break}v=H+1|0;m=V+(H+-1<<3)|0;t=T+40+(H<<3)|0;if(!H){r=J;m=0;s=p;q=0.0;do{o=(s+r)*.5;Vf(d,0,o,0);do if(a[A>>0]&4){if(((b[S>>1]|0)+-3&65535)>=4){X=+h[D>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0))s=o;else{X=+h[D>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0)==0;r=X?r:o;s=X?o:s;q=X?q:o}while(0);m=m+1|0}while((m|0)!=128)}else{r=J;u=0;s=p;q=0.0;do{o=(s+r)*.5;Vf(d,H,o,0);do if(a[A>>0]&4){if(((b[S>>1]|0)+-3&65535)>=4){X=+h[m>>3]+ +h[t>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0))s=o;else{X=+h[m>>3]+ +h[t>>3]>2]|0,T,v,e,f,w,k,c[F>>2]|0,c[d>>2]|0,c[G>>2]|0,0)|0)==0;r=X?r:o;s=X?o:s;q=X?q:o}while(0);u=u+1|0}while((u|0)!=128)}eh(y);o=q==0.0?o:q}if(I)h[(c[(c[C>>2]|0)+((c[B>>2]|0)*592|0)>>2]|0)+(H<<3)>>3]=o;Vf(d,H,o,1);if(!H)o=+h[D>>3];else o=+h[V+(H+-1<<3)>>3]+ +h[T+40+(H<<3)>>3];h[V+(H<<3)>>3]=o;H=H+1|0;if(H>>>0>=(c[l>>2]|0)>>>0){l=1;m=57;break}}if((m|0)==57){i=W;return l|0}return 0}function Xf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;c[a+24>>2]=b;c[a+28>>2]=d;f=Qc(1,848)|0;e=a+20|0;c[c[e>>2]>>2]=f;if(!f){a=0;return a|0}f=b+16|0;g=Qc(c[f>>2]|0,52)|0;b=c[c[e>>2]>>2]|0;c[b+20>>2]=g;if(!g){g=0;return g|0}c[b+16>>2]=c[f>>2];c[a>>2]=c[d+84>>2];g=1;return g|0}function Yf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if(!b)return;s=b+20|0;d=c[s>>2]|0;do if(d){r=(a[b+40>>0]&1)==0?3:4;e=c[d>>2]|0;if(e){o=e+20|0;k=e+16|0;if(c[k>>2]|0){m=0;n=c[o>>2]|0;while(1){l=n+24|0;d=c[l>>2]|0;if(d){i=c[n+28>>2]|0;j=(i>>>0)/136|0;if(i>>>0>135){i=0;while(1){h=d+48|0;e=c[h>>2]|0;if(e){f=c[d+52>>2]|0;g=(f>>>0)/40|0;if(f>>>0>39){f=0;while(1){t=e+32|0;mg(c[t>>2]|0);c[t>>2]=0;t=e+36|0;mg(c[t>>2]|0);c[t>>2]=0;Ta[r&7](e);f=f+1|0;if(f>>>0>=g>>>0)break;else e=e+40|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}h=d+84|0;e=c[h>>2]|0;if(e){t=c[d+88>>2]|0;g=(t>>>0)/40|0;if(t>>>0>39){f=0;while(1){t=e+32|0;mg(c[t>>2]|0);c[t>>2]=0;t=e+36|0;mg(c[t>>2]|0);c[t>>2]=0;Ta[r&7](e);f=f+1|0;if(f>>>0>=g>>>0)break;else e=e+40|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}h=d+120|0;e=c[h>>2]|0;if(e){t=c[d+124>>2]|0;g=(t>>>0)/40|0;if(t>>>0>39){f=0;while(1){t=e+32|0;mg(c[t>>2]|0);c[t>>2]=0;t=e+36|0;mg(c[t>>2]|0);c[t>>2]=0;Ta[r&7](e);f=f+1|0;if(f>>>0>=g>>>0)break;else e=e+40|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}i=i+1|0;if(i>>>0>=j>>>0)break;else d=d+136|0}d=c[l>>2]|0}Uc(d);c[l>>2]=0}if((c[n+36>>2]|0)!=0?(p=n+32|0,q=c[p>>2]|0,(q|0)!=0):0){Sc(q);c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0}m=m+1|0;if(m>>>0>=(c[k>>2]|0)>>>0)break;else n=n+52|0}}Uc(c[o>>2]|0);c[o>>2]=0;Uc(c[c[s>>2]>>2]|0);d=c[s>>2]|0;c[d>>2]=0;if(!d)break}Uc(d);c[s>>2]=0}while(0);Uc(b);return}function Zf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=a+32|0;f=c[e>>2]|0;b=a+40|0;d=c[b>>2]|0;if(f){g=a+44|0;if(d>>>0<=(c[g>>2]|0)>>>0){a=1;return a|0}if(c[a+36>>2]|0){Sc(f);f=Rc(c[b>>2]|0)|0;c[e>>2]=f;if(!f){c[g>>2]=0;c[b>>2]=0;c[a+36>>2]=0;a=0;return a|0}else{c[g>>2]=c[b>>2];c[a+36>>2]=1;a=1;return a|0}}}g=Rc(d)|0;c[e>>2]=g;if(!g){a=0;return a|0}c[a+44>>2]=c[b>>2];c[a+36>>2]=1;a=1;return a|0}function _f(a,b,c){a=a|0;b=b|0;c=c|0;return ig(a,b,1,1.0,52,c)|0}function $f(a,b,c){a=a|0;b=b|0;c=c|0;return ig(a,b,0,.5,56,c)|0}function ag(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;d=c[a+24>>2]|0;f=c[d+16>>2]|0;if(!f){g=0;return g|0}g=0;b=0;e=c[d+24>>2]|0;d=c[(c[c[a+20>>2]>>2]|0)+20>>2]|0;while(1){i=c[e+24>>2]|0;i=((i&7|0)!=0&1)+(i>>>3)|0;h=c[d+24>>2]|0;a=(c[d+20>>2]|0)+-1|0;b=(_(_((i|0)==3?4:i,(c[h+(a*136|0)+8>>2]|0)-(c[h+(a*136|0)>>2]|0)|0)|0,(c[h+(a*136|0)+12>>2]|0)-(c[h+(a*136|0)+4>>2]|0)|0)|0)+b|0;g=g+1|0;if(g>>>0>=f>>>0)break;else{e=e+52|0;d=d+52|0}}return b|0}function bg(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=i;i=i+16|0;w=y;if(!(c[b+8>>2]|0)){c[b+36>>2]=d;u=b+28|0;j=c[(c[u>>2]|0)+76>>2]|0;x=b+32|0;c[x>>2]=j+(d*5640|0);v=(h|0)==0;t=b+20|0;if(!v){k=c[(c[c[t>>2]>>2]|0)+20>>2]|0;o=c[j+(d*5640|0)+5584>>2]|0;p=k+16|0;if(!(c[p>>2]|0)){k=h+88|0;j=0}else{l=c[k+24>>2]|0;k=h+88|0;m=c[k>>2]|0;n=0;j=0;do{s=l+(n*136|0)+16|0;c[m+(d*592|0)+20+(n<<2)>>2]=c[s>>2];r=l+(n*136|0)+20|0;c[m+(d*592|0)+152+(n<<2)>>2]=c[r>>2];j=(_(c[r>>2]|0,c[s>>2]|0)|0)+j|0;c[m+(d*592|0)+284+(n<<2)>>2]=c[o+812+(n<<2)>>2];c[m+(d*592|0)+416+(n<<2)>>2]=c[o+944+(n<<2)>>2];n=n+1|0}while(n>>>0<(c[p>>2]|0)>>>0)}s=Qc(_(_(c[h+52>>2]|0,j)|0,c[h+56>>2]|0)|0,32)|0;c[(c[k>>2]|0)+(d*592|0)+548>>2]=s;if(!s){b=0;i=y;return b|0}}j=c[c[t>>2]>>2]|0;s=j+16|0;if(!(c[s>>2]|0)){n=c[x>>2]|0;l=0;k=c[j+20>>2]|0}else{n=c[x>>2]|0;k=c[j+20>>2]|0;d=0;q=c[n+5584>>2]|0;r=k;while(1){o=c[r+32>>2]|0;p=_((c[r+12>>2]|0)-(c[r+4>>2]|0)|0,(c[r+8>>2]|0)-(c[r>>2]|0)|0)|0;j=(p|0)==0;if((c[q+20>>2]|0)==1){if(!j){l=q+1076|0;m=0;j=o;while(1){c[j>>2]=(c[j>>2]|0)-(c[l>>2]|0);m=m+1|0;if((m|0)==(p|0))break;else j=j+4|0}}}else if(!j){l=q+1076|0;m=0;j=o;while(1){c[j>>2]=(c[j>>2]|0)-(c[l>>2]|0)<<11;m=m+1|0;if((m|0)==(p|0))break;else j=j+4|0}}d=d+1|0;l=c[s>>2]|0;if(d>>>0>=l>>>0)break;else{q=q+1080|0;r=r+52|0}}}o=_((c[k+12>>2]|0)-(c[k+4>>2]|0)|0,(c[k+8>>2]|0)-(c[k>>2]|0)|0)|0;a:do switch(c[n+16>>2]|0){case 0:break;case 2:{if(c[n+5608>>2]|0){m=Pc(l<<2)|0;if(!m){b=0;i=y;return b|0}j=c[s>>2]|0;if(!j)j=0;else{l=0;while(1){c[m+(l<<2)>>2]=c[k+32>>2];l=l+1|0;if((l|0)==(j|0))break;else k=k+52|0}}s=(Gf(c[(c[x>>2]|0)+5608>>2]|0,o,m,j,c[(c[(c[b+24>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Uc(m);if(s){b=0;i=y;return b|0}}break}default:{l=c[k+32>>2]|0;m=c[k+84>>2]|0;j=c[k+136>>2]|0;if(!(c[(c[n+5584>>2]|0)+20>>2]|0)){Ef(l,m,j,o);break a}else{Cf(l,m,j,o);break a}}}while(0);j=c[c[t>>2]>>2]|0;k=j+16|0;b:do if(c[k>>2]|0){l=0;m=c[(c[x>>2]|0)+5584>>2]|0;j=c[j+20>>2]|0;c:while(1){switch(c[m+20>>2]|0){case 1:{if(!(Fg(j)|0)){j=0;k=54;break c}break}case 0:{if(!(Jg(j)|0)){j=0;k=54;break c}break}default:{}}l=l+1|0;if(l>>>0>=(c[k>>2]|0)>>>0)break b;else{m=m+1080|0;j=j+52|0}}if((k|0)==54){i=y;return j|0}}while(0);j=c[x>>2]|0;k=Wg(1)|0;if(!k){b=0;i=y;return b|0}do if((c[j+16>>2]|0)==1)if(!(c[(c[j+5584>>2]|0)+20>>2]|0)){l=Bf()|0;m=3;break}else{l=Af()|0;m=3;break}else{l=c[j+5600>>2]|0;m=c[(c[b+24>>2]|0)+16>>2]|0}while(0);t=Zg(k,c[c[t>>2]>>2]|0,j,l,m)|0;Xg(k);if(!t){b=0;i=y;return b|0}j=c[u>>2]|0;c[w>>2]=0;if(!v)c[h+12>>2]=0;if(!(a[j+93>>0]&5)){if(c[(c[x>>2]|0)+8>>2]|0){j=0;do{Uf(b,j,1);j=j+1|0}while(j>>>0<(c[(c[x>>2]|0)+8>>2]|0)>>>0)}}else if(!(Wf(b,e,w,g,h)|0)){b=0;i=y;return b|0}}if(h)c[h+12>>2]=1;j=dh(c[b+24>>2]|0,c[b+28>>2]|0)|0;if(!j)j=1;else{b=bh(j,c[b+36>>2]|0,c[c[b+20>>2]>>2]|0,c[(c[b+32>>2]|0)+8>>2]|0,e,f,g,h,c[b+4>>2]|0,c[b>>2]|0,c[b+16>>2]|0,1)|0;eh(j);j=(b|0)==0}b=j&1^1;i=y;return b|0}function cg(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+16|0;m=u+8|0;l=u;k=u+12|0;j=a+36|0;c[j>>2]=e;t=c[a+28>>2]|0;p=a+32|0;c[p>>2]=(c[t+76>>2]|0)+(e*5640|0);c[k>>2]=0;o=a+24|0;e=dh(c[o>>2]|0,t)|0;if(!e){t=0;i=u;return t|0}n=a+20|0;t=ch(e,c[j>>2]|0,c[c[n>>2]>>2]|0,b,k,d,f,h)|0;eh(e);if(!t){t=0;i=u;return t|0}e=c[c[n>>2]>>2]|0;a=c[(c[p>>2]|0)+5584>>2]|0;j=c[e+20>>2]|0;d=Wg(0)|0;if(!d){t=0;i=u;return t|0}k=e+16|0;a:do if(c[k>>2]|0){f=0;e=j;while(1){if(!(Yg(d,e,a)|0))break;f=f+1|0;if(f>>>0>=(c[k>>2]|0)>>>0)break a;else{a=a+1080|0;e=e+52|0}}Xg(d);t=0;i=u;return t|0}while(0);Xg(d);e=c[c[n>>2]>>2]|0;j=e+16|0;do if(c[j>>2]|0){k=0;f=c[(c[o>>2]|0)+24>>2]|0;d=c[(c[p>>2]|0)+5584>>2]|0;a=c[e+20>>2]|0;while(1){e=(c[f+36>>2]|0)+1|0;if((c[d+20>>2]|0)==1){if(!(Gg(a,e)|0)){e=0;a=49;break}}else if(!(Ng(a,e)|0)){e=0;a=49;break}k=k+1|0;if(k>>>0>=(c[j>>2]|0)>>>0){a=14;break}else{f=f+52|0;d=d+1080|0;a=a+52|0}}if((a|0)==14){e=c[c[n>>2]>>2]|0;break}else if((a|0)==49){i=u;return e|0}}while(0);k=c[p>>2]|0;a=c[e+20>>2]|0;j=c[k+16>>2]|0;do if(j){b=_((c[a+12>>2]|0)-(c[a+4>>2]|0)|0,(c[a+8>>2]|0)-(c[a>>2]|0)|0)|0;d=e+16|0;e=c[d>>2]|0;if(e>>>0<=2){c[m>>2]=e;Ub(h,1,19703,m)|0;break}if((_((c[a+64>>2]|0)-(c[a+56>>2]|0)|0,(c[a+60>>2]|0)-(c[a+52>>2]|0)|0)|0)>=(b|0)?(_((c[a+116>>2]|0)-(c[a+108>>2]|0)|0,(c[a+112>>2]|0)-(c[a+104>>2]|0)|0)|0)>=(b|0):0){if((j|0)!=2){e=c[a+32>>2]|0;if((c[(c[k+5584>>2]|0)+20>>2]|0)==1){Df(e,c[a+84>>2]|0,c[a+136>>2]|0,b);break}else{Ff(e,c[a+84>>2]|0,c[a+136>>2]|0,b);break}}f=k+5604|0;if(!(c[f>>2]|0))break;k=Pc(e<<2)|0;if(!k){t=0;i=u;return t|0}e=c[d>>2]|0;if(!e)e=0;else{j=0;while(1){c[k+(j<<2)>>2]=c[a+32>>2];j=j+1|0;if((j|0)==(e|0))break;else a=a+52|0}}t=(Hf(c[f>>2]|0,b,k,e,c[(c[(c[o>>2]|0)+24>>2]|0)+32>>2]|0)|0)==0;Uc(k);if(t)e=0;else break;i=u;return e|0}Ub(h,1,19642,l)|0;t=0;i=u;return t|0}while(0);e=c[c[n>>2]>>2]|0;s=e+16|0;if(!(c[s>>2]|0)){t=1;i=u;return t|0}t=0;r=c[(c[o>>2]|0)+24>>2]|0;q=c[(c[p>>2]|0)+5584>>2]|0;p=c[e+20>>2]|0;while(1){o=c[p+24>>2]|0;h=c[r+36>>2]|0;j=c[o+(h*136|0)+8>>2]|0;k=c[o+(h*136|0)>>2]|0;n=j-k|0;f=c[o+(h*136|0)+12>>2]|0;h=c[o+(h*136|0)+4>>2]|0;o=(c[p+8>>2]|0)-(c[p>>2]|0)-n|0;e=c[r+24>>2]|0;if(!(c[r+32>>2]|0)){e=1<>2]|0;a=(f|0)==(h|0);if((c[q+20>>2]|0)==1){if(!a){d=(j|0)==(k|0);b=q+1076|0;k=f-h|0;f=0;while(1){if(!d){a=0;j=e;while(1){h=(c[b>>2]|0)+(c[j>>2]|0)|0;c[j>>2]=(h|0)<(m|0)?m:(h|0)>(l|0)?l:h;a=a+1|0;if((a|0)==(n|0))break;else j=j+4|0}e=e+(n<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else e=e+(o<<2)|0}}}else if(!a){d=(j|0)==(k|0);b=q+1076|0;k=f-h|0;f=0;while(1){if(!d){a=0;j=e;while(1){h=Hh(+g[j>>2])|0;h=(c[b>>2]|0)+h|0;c[j>>2]=(h|0)<(m|0)?m:(h|0)>(l|0)?l:h;a=a+1|0;if((a|0)==(n|0))break;else j=j+4|0}e=e+(n<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else e=e+(o<<2)|0}}t=t+1|0;if(t>>>0>=(c[s>>2]|0)>>>0){e=1;break}else{r=r+52|0;q=q+1080|0;p=p+52|0}}i=u;return e|0}function dg(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d+24|0;m=c[q>>2]|0;h=c[m+16>>2]|0;l=(h|0)==0;if(l){q=1;return q|0}i=0;g=0;j=c[m+24>>2]|0;k=c[(c[c[d+20>>2]>>2]|0)+20>>2]|0;while(1){n=c[j+24>>2]|0;n=((n&7|0)!=0&1)+(n>>>3)|0;o=c[k+24>>2]|0;p=(c[k+20>>2]|0)+-1|0;g=(_(_((n|0)==3?4:n,(c[o+(p*136|0)+8>>2]|0)-(c[o+(p*136|0)>>2]|0)|0)|0,(c[o+(p*136|0)+12>>2]|0)-(c[o+(p*136|0)+4>>2]|0)|0)|0)+g|0;i=i+1|0;if((i|0)==(h|0))break;else{j=j+52|0;k=k+52|0}}g=g>>>0>f>>>0;if(g|l){q=g&1^1;return q|0}p=0;o=c[m+24>>2]|0;n=c[(c[c[d+20>>2]>>2]|0)+20>>2]|0;while(1){l=c[o+24>>2]|0;d=c[n+24>>2]|0;f=c[o+36>>2]|0;i=c[d+(f*136|0)+8>>2]|0;j=c[d+(f*136|0)>>2]|0;m=i-j|0;k=c[d+(f*136|0)+12>>2]|0;f=c[d+(f*136|0)+4>>2]|0;d=(c[n+8>>2]|0)-(c[n>>2]|0)-m|0;l=((l&7|0)!=0&1)+(l>>>3)|0;a:do switch(((l|0)==3?4:l)|0){case 1:{g=c[n+32>>2]|0;h=(k|0)==(f|0);if(!(c[o+32>>2]|0)){if(h)break a;l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+m|0;i=0;h=g;while(1){a[e>>0]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+1|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}else{if(h)break a;l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+m|0;i=0;h=g;while(1){a[e>>0]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+1|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}break}case 2:{g=c[n+32>>2]|0;h=(k|0)==(f|0);if(!(c[o+32>>2]|0)){if(!h){l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+(m<<1)|0;i=0;h=g;while(1){b[e>>1]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+2|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}}else if(!h){l=(i|0)==(j|0);k=k-f|0;f=0;while(1){if(!l){j=e+(m<<1)|0;i=0;h=g;while(1){b[e>>1]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+2|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}break}case 4:{if((k|0)!=(f|0)){l=(i|0)==(j|0);k=k-f|0;f=0;g=c[n+32>>2]|0;while(1){if(!l){j=e+(m<<2)|0;i=0;h=g;while(1){c[e>>2]=c[h>>2];i=i+1|0;if((i|0)==(m|0))break;else{e=e+4|0;h=h+4|0}}e=j;g=g+(m<<2)|0}f=f+1|0;if((f|0)==(k|0))break;else g=g+(d<<2)|0}}break}default:{}}while(0);p=p+1|0;if(p>>>0>=(c[(c[q>>2]|0)+16>>2]|0)>>>0){e=1;break}else{o=o+52|0;n=n+52|0}}return e|0}function eg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;d=c[a+24>>2]|0;f=c[d+16>>2]|0;if(!f){g=0;return g|0}g=0;b=0;e=c[d+24>>2]|0;d=c[(c[c[a+20>>2]>>2]|0)+20>>2]|0;while(1){a=c[e+24>>2]|0;a=((a&7|0)!=0&1)+(a>>>3)|0;b=(_(_((c[d+12>>2]|0)-(c[d+4>>2]|0)|0,(c[d+8>>2]|0)-(c[d>>2]|0)|0)|0,(a|0)==3?4:a)|0)+b|0;g=g+1|0;if(g>>>0>=f>>>0)break;else{e=e+52|0;d=d+52|0}}return b|0}function fg(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=c[f+24>>2]|0;q=o+16|0;j=c[q>>2]|0;n=(j|0)==0;if(n)i=0;else{k=0;i=0;l=c[o+24>>2]|0;m=c[(c[c[f+20>>2]>>2]|0)+20>>2]|0;while(1){p=c[l+24>>2]|0;p=((p&7|0)!=0&1)+(p>>>3)|0;i=(_(_((c[m+12>>2]|0)-(c[m+4>>2]|0)|0,(c[m+8>>2]|0)-(c[m>>2]|0)|0)|0,(p|0)==3?4:p)|0)+i|0;k=k+1|0;if((k|0)==(j|0))break;else{l=l+52|0;m=m+52|0}}}i=(i|0)!=(h|0);if(i|n){q=i&1^1;return q|0}p=0;n=c[o+24>>2]|0;h=c[(c[c[f+20>>2]>>2]|0)+20>>2]|0;while(1){f=c[n+24>>2]|0;i=(c[h+8>>2]|0)-(c[h>>2]|0)|0;j=(c[h+12>>2]|0)-(c[h+4>>2]|0)|0;m=_(j,i)|0;f=((f&7|0)!=0&1)+(f>>>3)|0;a:do switch(((f|0)==3?4:f)|0){case 1:{j=c[h+32>>2]|0;i=(m|0)==0;if(!(c[n+32>>2]|0)){if(i)break a;else{k=0;i=j;j=g}while(1){c[i>>2]=d[j>>0];k=k+1|0;if((k|0)==(m|0))break;else{i=i+4|0;j=j+1|0}}g=g+m|0;break a}else{if(i)break a;else{k=0;i=j;j=g}while(1){c[i>>2]=a[j>>0];k=k+1|0;if((k|0)==(m|0))break;else{i=i+4|0;j=j+1|0}}g=g+m|0;break a}}case 2:{l=c[h+32>>2]|0;k=(m|0)==0;if(!(c[n+32>>2]|0)){if(!k){k=g+(_(j<<1,i)|0)|0;j=0;i=l;while(1){c[i>>2]=e[g>>1];j=j+1|0;if((j|0)==(m|0))break;else{i=i+4|0;g=g+2|0}}g=k}}else if(!k){k=g+(_(j<<1,i)|0)|0;j=0;i=l;while(1){c[i>>2]=b[g>>1];j=j+1|0;if((j|0)==(m|0))break;else{i=i+4|0;g=g+2|0}}g=k}break}case 4:{if(m){k=g+(_(j<<2,i)|0)|0;i=0;j=c[h+32>>2]|0;while(1){c[j>>2]=c[g>>2];i=i+1|0;if((i|0)==(m|0))break;else{j=j+4|0;g=g+4|0}}g=k}break}default:{}}while(0);p=p+1|0;if(p>>>0>=(c[q>>2]|0)>>>0){g=1;break}else{n=n+52|0;h=h+52|0}}return g|0}function gg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+24|0;b=c[g>>2]|0;if(!b)return;f=c[a+28>>2]|0;e=(f>>>0)/52|0;if(f>>>0>51){f=0;while(1){a=c[b>>2]|0;if(a){Uc(a+-1|0);c[b>>2]=0}a=b+4|0;d=c[a>>2]|0;if(d){Uc(d);c[a>>2]=0}a=b+8|0;d=c[a>>2]|0;if(d){Uc(d);c[a>>2]=0}f=f+1|0;if(f>>>0>=e>>>0)break;else b=b+52|0}b=c[g>>2]|0}Uc(b);c[g>>2]=0;return}function hg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=a+24|0;b=c[g>>2]|0;if(!b)return;f=c[a+28>>2]|0;e=(f>>>0)/56|0;if(f>>>0>55){f=0;while(1){a=c[b>>2]|0;if(a){Uc(a);c[b>>2]=0}d=b+4|0;a=c[d>>2]|0;if(a){Uc(a);c[d>>2]=0}f=f+1|0;if(f>>>0>=e>>>0)break;else b=b+56|0}b=c[g>>2]|0}Uc(b);c[g>>2]=0;return}function ig(b,d,e,f,h,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0.0;Sa=i;i=i+80|0;La=Sa+64|0;Ka=Sa+56|0;Na=Sa+48|0;Pa=Sa+40|0;Oa=Sa+32|0;Qa=Sa+24|0;Ma=Sa+16|0;Ja=Sa+8|0;k=c[b+28>>2]|0;Ia=c[c[b+20>>2]>>2]|0;p=c[(c[k+76>>2]|0)+(d*5640|0)+5584>>2]|0;q=c[Ia+20>>2]|0;n=c[b+24>>2]|0;o=c[n+24>>2]|0;Fa=c[k+24>>2]|0;m=c[k+12>>2]|0;Ha=(_(m,(d>>>0)%(Fa>>>0)|0)|0)+(c[k+4>>2]|0)|0;l=c[n>>2]|0;l=Ha>>>0>l>>>0?Ha:l;c[Ia>>2]=l;Ha=Si(m|0,0,Ha|0,0)|0;Ha=Ha|0-C;m=c[n+8>>2]|0;m=Ha>>>0>>0?Ha:m;Ha=Ia+8|0;c[Ha>>2]=m;Ga=c[k+16>>2]|0;Fa=(_(Ga,(d>>>0)/(Fa>>>0)|0)|0)+(c[k+8>>2]|0)|0;d=c[n+4>>2]|0;d=Fa>>>0>d>>>0?Fa:d;Ea=Ia+4|0;c[Ea>>2]=d;Fa=Si(Ga|0,0,Fa|0,0)|0;Fa=Fa|0-C;n=c[n+12>>2]|0;n=Fa>>>0>>0?Fa:n;Fa=Ia+12|0;c[Fa>>2]=n;if(!(c[p+4>>2]|0)){Ub(j,1,19777,Sa)|0;Ra=0;i=Sa;return Ra|0}Ga=Ia+16|0;if(!(c[Ga>>2]|0)){Ra=1;i=Sa;return Ra|0}Da=k+80|0;Ca=b+40|0;Ba=(e|0)==0;k=d;Aa=0;a:while(1){c[o+36>>2]=0;va=c[o>>2]|0;d=(l+-1+va|0)/(va|0)|0;c[q>>2]=d;wa=c[o+4>>2]|0;k=(k+-1+wa|0)/(wa|0)|0;za=q+4|0;c[za>>2]=k;va=(m+-1+va|0)/(va|0)|0;ya=q+8|0;c[ya>>2]=va;wa=(n+-1+wa|0)/(wa|0)|0;xa=q+12|0;c[xa>>2]=wa;d=va-d|0;k=wa-k|0;if((4294967295/(d>>>0)|0)>>>0>>0){Ra=6;break}d=_(k,d)|0;if(d>>>0>1073741823){Ra=8;break}m=d<<2;va=c[p+4>>2]|0;wa=q+16|0;c[wa>>2]=va;b=c[Da>>2]|0;c[q+20>>2]=va>>>0>>0?1:va-b|0;b=q+40|0;c[b>>2]=m;do if(a[Ca>>0]&1){e=q+32|0;l=c[e>>2]|0;if(l){k=q+44|0;if(m>>>0<=(c[k>>2]|0)>>>0)break;d=q+36|0;if(c[d>>2]|0){Sc(l);va=Rc(c[b>>2]|0)|0;c[e>>2]=va;if(!va){Ra=16;break a}c[k>>2]=c[b>>2];c[d>>2]=1;break}}va=Rc(m)|0;c[e>>2]=va;if(!va)break a;c[q+44>>2]=c[b>>2];c[q+36>>2]=1}while(0);e=(c[wa>>2]|0)*136|0;k=q+24|0;b=c[k>>2]|0;if(b){d=q+28|0;if(e>>>0>(c[d>>2]|0)>>>0){b=Tc(b,e)|0;if(!b){Ra=24;break}c[k>>2]=b;va=c[d>>2]|0;Qi(b+va|0,0,e-va|0)|0;c[d>>2]=e}}else{d=Pc(e)|0;c[k>>2]=d;if(!d){d=0;Ra=87;break}c[q+28>>2]=e;Qi(d|0,0,e|0)|0}d=c[wa>>2]|0;va=(c[p+20>>2]|0)==0?7:8;if(d){ra=p+8|0;sa=p+12|0;ta=o+24|0;ua=p+804|0;qa=c[k>>2]|0;k=p+28|0;b=0;while(1){oa=d;pa=d+-1|0;la=c[q>>2]|0;ma=Ri(1,0,pa|0)|0;ma=Si(ma|0,C|0,-1,-1)|0;na=C;la=Si(ma|0,na|0,la|0,((la|0)<0)<<31>>31|0)|0;la=Pi(la|0,C|0,pa|0)|0;c[qa>>2]=la;e=c[za>>2]|0;e=Si(ma|0,na|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Pi(e|0,C|0,pa|0)|0;c[qa+4>>2]=e;d=c[ya>>2]|0;d=Si(ma|0,na|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,pa|0)|0;c[qa+8>>2]=d;l=c[xa>>2]|0;l=Si(ma|0,na|0,l|0,((l|0)<0)<<31>>31|0)|0;l=Pi(l|0,C|0,pa|0)|0;c[qa+12>>2]=l;r=c[p+812+(b<<2)>>2]|0;n=c[p+944+(b<<2)>>2]|0;s=la>>r<>n<>31|0)|0;m=Pi(m|0,C|0,n|0)|0;if((la|0)==(d|0))d=0;else{la=Ri(1,0,r|0)|0;la=Si(la|0,C|0,-1,-1)|0;d=Si(la|0,C|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,r|0)|0;d=(d<>r}la=qa+16|0;c[la>>2]=d;ia=(e|0)==(l|0)?0:(m<>n;c[qa+20>>2]=ia;ia=_(ia,d)|0;ja=ia*40|0;ka=(b|0)==0;if(ka)d=1;else{s=Si(s|0,((s|0)<0)<<31>>31|0,1,0)|0;s=Ti(s|0,C|0,1)|0;t=Si(t|0,((t|0)<0)<<31>>31|0,1,0)|0;t=Ti(t|0,C|0,1)|0;d=3;n=n+-1|0;r=r+-1|0}ha=qa+24|0;c[ha>>2]=d;S=c[ra>>2]|0;S=S>>>0>>0?S:r;T=c[sa>>2]|0;T=T>>>0>>0?T:n;U=(ia|0)!=0;V=(ia|0)==0;W=1<>2]|0;d=Si(ma|0,na|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,pa|0)|0;k=c[za>>2]|0;k=Si(ma|0,na|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Pi(k|0,C|0,pa|0)|0;e=c[ya>>2]|0;e=Si(ma|0,na|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Pi(e|0,C|0,pa|0)|0;m=c[xa>>2]|0;m=Si(ma|0,na|0,m|0,((m|0)<0)<<31>>31|0)|0;m=Pi(m|0,C|0,pa|0)|0;l=0}else{l=fa+1|0;d=c[q>>2]|0;O=Ri(l&1|0,0,pa|0)|0;O=Oi(da|0,ea|0,O|0,C|0)|0;m=C;d=Si(O|0,m|0,d|0,((d|0)<0)<<31>>31|0)|0;d=Pi(d|0,C|0,oa|0)|0;k=c[za>>2]|0;P=Ri(l>>>1|0,0,pa|0)|0;P=Oi(da|0,ea|0,P|0,C|0)|0;Q=C;k=Si(P|0,Q|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Pi(k|0,C|0,oa|0)|0;e=c[ya>>2]|0;e=Si(O|0,m|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Pi(e|0,C|0,oa|0)|0;m=c[xa>>2]|0;m=Si(P|0,Q|0,m|0,((m|0)<0)<<31>>31|0)|0;m=Pi(m|0,C|0,oa|0)|0}c[ga+16>>2]=l;c[ga>>2]=d;Q=ga+4|0;c[Q>>2]=k;P=ga+8|0;c[P>>2]=e;O=ga+12|0;c[O>>2]=m;k=Wa[va&15](l)|0;Ta=+(c[R+4>>2]|0)*.00048828125+1.0;g[ga+32>>2]=+Gh(1.0,(c[ta>>2]|0)+k-(c[R>>2]|0)|0)*Ta*f;c[ga+28>>2]=(c[R>>2]|0)+-1+(c[ua>>2]|0);k=ga+20|0;e=c[k>>2]|0;if(!(U&(e|0)==0)){d=ga+24|0;if((c[d>>2]|0)>>>0>>0){e=Tc(e,ja)|0;if(!e){Ra=41;break a}c[k>>2]=e;N=c[d>>2]|0;Qi(e+N|0,0,ja-N|0)|0;c[d>>2]=ja}}else{d=Pc(ja)|0;c[k>>2]=d;if(!d){d=0;Ra=87;break a}Qi(d|0,0,ja|0)|0;c[ga+24>>2]=ja}if(!V){M=c[k>>2]|0;N=0;while(1){F=c[la>>2]|0;J=(((N>>>0)%(F>>>0)|0)<>>0)/(F>>>0)|0)<>2]|0;I=(J|0)>(I|0)?J:I;c[M>>2]=I;J=c[Q>>2]|0;J=(F|0)>(J|0)?F:J;F=M+4|0;c[F>>2]=J;L=c[P>>2]|0;L=(G|0)<(L|0)?G:L;G=M+8|0;c[G>>2]=L;l=c[O>>2]|0;l=(H|0)<(l|0)?H:l;H=M+12|0;c[H>>2]=l;I=I>>S<>T<>31|0)|0;L=Pi(L|0,C|0,S|0)|0;l=Si($|0,aa|0,l|0,((l|0)<0)<<31>>31|0)|0;l=Pi(l|0,C|0,T|0)|0;L=(L<>S;K=M+16|0;c[K>>2]=L;l=(l<>T;u=M+20|0;c[u>>2]=l;L=_(l,L)|0;l=_(L,h)|0;k=M+24|0;e=c[k>>2]|0;do if((e|0)==0&(L|0)!=0){d=Pc(l)|0;c[k>>2]=d;if(!d){d=0;Ra=87;break a}Qi(d|0,0,l|0)|0;c[M+28>>2]=l}else{d=M+28|0;if(l>>>0<=(c[d>>2]|0)>>>0)break;e=Tc(e,l)|0;if(!e){Ra=50;break a}c[k>>2]=e;E=c[d>>2]|0;Qi(e+E|0,0,l-E|0)|0;c[d>>2]=l}while(0);m=M+32|0;d=c[m>>2]|0;e=c[K>>2]|0;l=c[u>>2]|0;if(!d)d=jg(e,l,j)|0;else d=lg(d,e,l,j)|0;c[m>>2]=d;if(!d)Ub(j,2,19990,Ka)|0;m=M+36|0;e=c[m>>2]|0;l=c[K>>2]|0;d=c[u>>2]|0;if(!e)d=jg(l,d,j)|0;else d=lg(e,l,d,j)|0;c[m>>2]=d;if(!d)Ub(j,2,20012,La)|0;if(L){E=0;do{A=c[K>>2]|0;z=(((E>>>0)%(A>>>0)|0)<>>0)/(A>>>0)|0)<>2]|0;e=d+(E*56|0)|0;l=c[e>>2]|0;if(!l){y=Pc(8192)|0;c[e>>2]=y;if(!y){d=0;Ra=87;break a}c[d+(E*56|0)+32>>2]=8192;y=Qc(10,32)|0;c[d+(E*56|0)+4>>2]=y;if(!y){d=0;Ra=87;break a}c[d+(E*56|0)+52>>2]=10}else{m=d+(E*56|0)+32|0;u=c[m>>2]|0;v=d+(E*56|0)+4|0;w=c[v>>2]|0;x=e;y=x+52|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));c[e>>2]=l;c[m>>2]=u;c[v>>2]=w}y=c[M>>2]|0;c[d+(E*56|0)+8>>2]=(z|0)>(y|0)?z:y;z=c[F>>2]|0;c[d+(E*56|0)+12>>2]=(A|0)>(z|0)?A:z;A=c[G>>2]|0;c[d+(E*56|0)+16>>2]=(B|0)<(A|0)?B:A;B=c[H>>2]|0;c[d+(E*56|0)+20>>2]=(D|0)<(B|0)?D:B}else{e=c[k>>2]|0;d=e+(E*52|0)+4|0;if((c[d>>2]|0)==0?(y=Qc(100,24)|0,c[d>>2]=y,(y|0)==0):0){d=0;Ra=87;break a}d=e+(E*52|0)+8|0;if((c[d>>2]|0)==0?(y=Qc(100,24)|0,c[d>>2]=y,(y|0)==0):0){d=0;Ra=87;break a}m=c[M>>2]|0;m=(z|0)>(m|0)?z:m;c[e+(E*52|0)+12>>2]=m;d=c[F>>2]|0;A=(A|0)>(d|0)?A:d;c[e+(E*52|0)+16>>2]=A;d=c[G>>2]|0;d=(B|0)<(d|0)?B:d;c[e+(E*52|0)+20>>2]=d;B=c[H>>2]|0;D=(D|0)<(B|0)?D:B;c[e+(E*52|0)+24>>2]=D;m=_(D-A|0,d-m<<2)|0;d=e+(E*52|0)+36|0;if(m>>>0<=(c[d>>2]|0)>>>0)break;l=e+(E*52|0)|0;e=c[l>>2]|0;if(e)Uc(e+-1|0);e=Pc(m|1)|0;c[l>>2]=e;if(!e){Ra=74;break a}c[d>>2]=m;a[e>>0]=0;c[l>>2]=(c[l>>2]|0)+1}while(0);E=E+1|0}while(E>>>0>>0)}N=N+1|0;if(N>>>0>=ia>>>0)break;else M=M+40|0}}k=R+8|0;fa=fa+1|0;if(fa>>>0>=(c[ha>>2]|0)>>>0)break;else{ga=ga+36|0;R=k}}b=b+1|0;if(b>>>0<(c[wa>>2]|0)>>>0){d=pa;qa=qa+136|0}else break}}d=Aa+1|0;if(d>>>0>=(c[Ga>>2]|0)>>>0){d=1;Ra=87;break}l=c[Ia>>2]|0;k=c[Ea>>2]|0;m=c[Ha>>2]|0;n=c[Fa>>2]|0;Aa=d;o=o+52|0;p=p+1080|0;q=q+52|0}if((Ra|0)==6){Ub(j,1,19816,Ja)|0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==8){Ub(j,1,19816,Ma)|0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==16){c[k>>2]=0;c[b>>2]=0;c[d>>2]=0}else if((Ra|0)==24){Ub(j,1,19849,Oa)|0;Uc(c[k>>2]|0);c[k>>2]=0;c[d>>2]=0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==41){Ub(j,1,19889,Pa)|0;Uc(c[k>>2]|0);c[k>>2]=0;c[d>>2]=0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==50){Uc(c[k>>2]|0);c[k>>2]=0;c[d>>2]=0;Ub(j,1,19932,Na)|0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==74){c[d>>2]=0;Ra=0;i=Sa;return Ra|0}else if((Ra|0)==87){i=Sa;return d|0}Ub(j,1,19816,Qa)|0;Ra=0;i=Sa;return Ra|0}function jg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=i;i=i+288|0;l=v+16|0;j=v+8|0;t=v+152|0;u=v+24|0;e=Qc(1,20)|0;if(!e){Ub(d,1,20034,v)|0;u=0;i=v;return u|0}c[e>>2]=a;m=e+4|0;c[m>>2]=b;c[t>>2]=a;c[u>>2]=b;k=e+8|0;c[k>>2]=0;f=0;h=0;while(1){s=_(b,a)|0;a=(a+1|0)/2|0;g=h+1|0;c[t+(g<<2)>>2]=a;b=(b+1|0)/2|0;c[u+(g<<2)>>2]=b;f=f+s|0;if(s>>>0<=1)break;else h=g}c[k>>2]=f;if(!f){Uc(e);Ub(d,2,20072,j)|0;u=0;i=v;return u|0}f=Qc(f,16)|0;c[e+12>>2]=f;if(!f){Ub(d,1,20122,l)|0;Uc(e);u=0;i=v;return u|0}s=c[k>>2]|0;c[e+16>>2]=s<<4;b=f+((_(c[m>>2]|0,c[e>>2]|0)|0)<<4)|0;if(!h)b=f;else{r=0;g=b;a=b;b=f;do{p=c[u+(r<<2)>>2]|0;a:do if((p|0)>0){q=c[t+(r<<2)>>2]|0;if((q|0)<=0){k=p+-1|0;d=0;while(1){o=(d&1|0)!=0|(d|0)==(k|0);j=o?g:a;a=o?g:a+(q<<4)|0;d=d+1|0;if((d|0)>=(p|0)){g=j;break a}else g=j}}o=((q+2+((q|0)<2?~q:-3)|0)>>>1)+1|0;m=p+-1|0;n=0;do{d=q;l=g;while(1){c[b>>2]=l;j=b+16|0;k=d;d=d+-2|0;if((d|0)>-1){c[j>>2]=l;b=b+32|0}else b=j;if((k|0)<=2)break;else l=l+16|0}l=g+(o<<4)|0;d=(n&1|0)!=0|(n|0)==(m|0);g=d?l:a;a=d?l:a+(q<<4)|0;n=n+1|0}while((n|0)<(p|0))}while(0);r=r+1|0}while((r|0)!=(h|0))}c[b>>2]=0;if(!s){u=e;i=v;return u|0}else b=0;while(1){c[f+4>>2]=999;c[f+8>>2]=0;c[f+12>>2]=0;b=b+1|0;if((b|0)==(s|0))break;else f=f+16|0}i=v;return e|0}function kg(a){a=a|0;var b=0,d=0;if(!a)return;b=c[a+8>>2]|0;if(!b)return;d=0;a=c[a+12>>2]|0;while(1){c[a+4>>2]=999;c[a+8>>2]=0;c[a+12>>2]=0;d=d+1|0;if(d>>>0>=b>>>0)break;else a=a+16|0}return}\nfunction bb(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function cb(){return i|0}function db(a){a=a|0;i=a}function eb(a,b){a=a|0;b=b|0;i=a;j=b}function fb(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function gb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function hb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function ib(a){a=a|0;C=a}function jb(){return C|0}function kb(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+8272|0;k=o+16|0;m=o+12|0;j=o;c[m>>2]=0;if((c[a>>2]|0)==1375686655)n=gc(0)|0;else n=gc(2)|0;bc(n,1,0)|0;cc(n,2,0)|0;dc(n,3,0)|0;hc(k);c[j>>2]=a;c[j+4>>2]=a;c[j+8>>2]=b;l=ec(j,1)|0;if(!(ic(n,k)|0)){mi(4476)|0;Fb(l);zc(n);g=1;i=o;return g|0}if(!(jc(l,n,m)|0)){mi(4528)|0;Fb(l);zc(n);Zb(c[m>>2]|0);g=1;i=o;return g|0}if(!(oc(n,l,c[m>>2]|0,c[k+8228>>2]|0)|0)){mi(4578)|0;zc(n);Fb(l);Zb(c[m>>2]|0);g=1;i=o;return g|0}j=c[m>>2]|0;c[f>>2]=c[j+8>>2];c[g>>2]=c[j+12>>2];a=c[j+16>>2]|0;c[h>>2]=a;a=_(_(a<<2,c[f>>2]|0)|0,c[g>>2]|0)|0;c[e>>2]=a;e=Fi(a)|0;c[d>>2]=e;switch(c[h>>2]|0){case 1:{Ui(e|0,c[(c[j+24>>2]|0)+44>>2]|0,a|0)|0;break}case 3:{if((_(c[g>>2]|0,c[f>>2]|0)|0)>0){b=c[j+24>>2]|0;j=c[b+44>>2]|0;a=c[b+96>>2]|0;b=c[b+148>>2]|0;k=0;do{h=k*3|0;c[e+(h<<2)>>2]=c[j+(k<<2)>>2];c[e+(h+1<<2)>>2]=c[a+(k<<2)>>2];c[e+(h+2<<2)>>2]=c[b+(k<<2)>>2];k=k+1|0}while((k|0)<(_(c[g>>2]|0,c[f>>2]|0)|0))}break}default:{}}Fb(l);zc(n);Zb(c[m>>2]|0);g=0;i=o;return g|0}function lb(){return fc()|0}function mb(a,b){a=a|0;b=b|0;return}function nb(a,b){a=a|0;b=b|0;return}function ob(a,b){a=a|0;b=b|0;var d=0;b=i;i=i+16|0;d=b;c[d>>2]=a;li(4625,d)|0;i=b;return}function pb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;i=i+16|0;g=h;c[g>>2]=d;if(!e){i=h;return}d=b;f=0;b=g+(e+-1)|0;while(1){a[d>>0]=a[b>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else{d=d+1|0;b=b+-1|0}}i=h;return}function qb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;c[d>>2]=0;if(!e)return;f=0;d=d+(e+-1)|0;while(1){a[d>>0]=a[b>>0]|0;f=f+1|0;if((f|0)==(e|0))break;else{b=b+1|0;d=d+-1|0}}return}function rb(b,d){b=b|0;d=+d;var e=0,f=0,g=0,j=0,l=0;e=i;i=i+16|0;j=e;h[j>>3]=d;j=j+8|0;h[k>>3]=d;f=c[k>>2]|0;g=c[k+4>>2]|0;l=Ti(f|0,g|0,56)|0;a[b>>0]=l;l=Ti(f|0,g|0,48)|0;a[b+1>>0]=l;l=Ti(f|0,g|0,40)|0;a[b+2>>0]=l;a[b+3>>0]=g;a[b+4>>0]=a[j+-5>>0]|0;a[b+5>>0]=a[j+-6>>0]|0;g=Ti(f|0,g|0,8)|0;a[b+6>>0]=g;a[b+7>>0]=f;i=e;return}function sb(b,c){b=b|0;c=c|0;var d=0;d=c+8|0;a[d+-1>>0]=a[b>>0]|0;a[d+-2>>0]=a[b+1>>0]|0;a[d+-3>>0]=a[b+2>>0]|0;a[d+-4>>0]=a[b+3>>0]|0;a[d+-5>>0]=a[b+4>>0]|0;a[d+-6>>0]=a[b+5>>0]|0;a[d+-7>>0]=a[b+6>>0]|0;a[c>>0]=a[b+7>>0]|0;return}function tb(b,d){b=b|0;d=+d;var e=0;e=(g[k>>2]=d,c[k>>2]|0);a[b>>0]=e>>>24;a[b+1>>0]=e>>>16;a[b+2>>0]=e>>>8;a[b+3>>0]=e;return}function ub(b,c){b=b|0;c=c|0;var d=0;d=c+4|0;a[d+-1>>0]=a[b>>0]|0;a[d+-2>>0]=a[b+1>>0]|0;a[d+-3>>0]=a[b+2>>0]|0;a[c>>0]=a[b+3>>0]|0;return}function vb(a,b){a=a|0;b=b|0;var d=0,e=0;e=Qc(1,72)|0;if(!e){b=0;return b|0}c[e+64>>2]=a;a=Pc(a)|0;c[e+32>>2]=a;if(!a){Uc(e);b=0;return b|0}c[e+36>>2]=a;a=e+68|0;d=c[a>>2]|0;if(!b){c[a>>2]=d|1;c[e+40>>2]=31;c[e+44>>2]=32}else{c[a>>2]=d|2;c[e+40>>2]=29;c[e+44>>2]=30}c[e+16>>2]=4;c[e+20>>2]=5;c[e+24>>2]=6;c[e+28>>2]=7;b=e;return b|0}function wb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;m=n;f=a+48|0;g=c[f>>2]|0;if(g>>>0>=b>>>0){m=a+36|0;c[m>>2]=(c[m>>2]|0)+b;c[f>>2]=g-b;m=a+56|0;a=m;a=Si(c[a>>2]|0,c[a+4>>2]|0,b|0,d|0)|0;c[m>>2]=a;c[m+4>>2]=C;m=d;a=b;C=m;i=n;return a|0}l=a+68|0;if(c[l>>2]&4){m=a+36|0;c[m>>2]=(c[m>>2]|0)+g;c[f>>2]=0;a=a+56|0;m=a;m=Si(c[m>>2]|0,c[m+4>>2]|0,g|0,0)|0;c[a>>2]=m;c[a+4>>2]=C;a=(g|0)!=0;m=a?0:-1;a=a?g:-1;C=m;i=n;return a|0}if(!g){g=0;f=0}else{c[a+36>>2]=c[a+32>>2];b=Oi(b|0,d|0,g|0,0)|0;c[f>>2]=0;f=0;d=C}a:do if((d|0)>0|(d|0)==0&b>>>0>0){k=a+24|0;while(1){h=Ra[c[k>>2]&63](b,d,c[a>>2]|0)|0;j=C;if((h|0)==-1&(j|0)==-1)break;b=Oi(b|0,d|0,h|0,j|0)|0;d=C;g=Si(h|0,j|0,g|0,f|0)|0;f=C;if(!((d|0)>0|(d|0)==0&b>>>0>0))break a}Ub(e,4,4636,m)|0;c[l>>2]=c[l>>2]|4;a=a+56|0;m=a;m=Si(c[m>>2]|0,c[m+4>>2]|0,g|0,f|0)|0;c[a>>2]=m;c[a+4>>2]=C;a=(g|0)!=0|(f|0)!=0;m=a?f:-1;a=a?g:-1;C=m;i=n;return a|0}while(0);m=a+56|0;a=m;a=Si(c[a>>2]|0,c[a+4>>2]|0,g|0,f|0)|0;c[m>>2]=a;c[m+4>>2]=C;m=f;a=g;C=m;i=n;return a|0}function xb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;c[a+36>>2]=c[a+32>>2];c[a+48>>2]=0;g=(Ra[c[a+28>>2]&63](b,d,c[a>>2]|0)|0)==0;e=a+68|0;f=c[e>>2]|0;if(g){c[e>>2]=f|4;g=0;return g|0}else{c[e>>2]=f&-5;g=a+56|0;c[g>>2]=b;c[g+4>>2]=d;g=1;return g|0}return 0}function yb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=i;i=i+16|0;q=r+8|0;m=r;p=a+68|0;if(c[p>>2]&8){q=-1;a=-1;C=q;i=r;return a|0}k=a+32|0;f=c[k>>2]|0;o=a+36|0;c[o>>2]=f;l=a+48|0;g=c[l>>2]|0;do if(g){j=a+20|0;while(1){h=Ra[c[j>>2]&63](f,g,c[a>>2]|0)|0;if((h|0)==-1)break;f=(c[o>>2]|0)+h|0;c[o>>2]=f;s=c[l>>2]|0;g=s-h|0;c[l>>2]=g;if((s|0)==(h|0)){n=6;break}}if((n|0)==6){f=c[k>>2]|0;break}c[p>>2]=c[p>>2]|8;Ub(e,4,4662,m)|0;c[p>>2]=c[p>>2]|8;c[l>>2]=0;a=-1;s=-1;C=a;i=r;return s|0}while(0);c[o>>2]=f;a:do if((d|0)>0|(d|0)==0&b>>>0>0){k=a+24|0;g=0;f=0;while(1){h=Ra[c[k>>2]&63](b,d,c[a>>2]|0)|0;j=C;if((h|0)==-1&(j|0)==-1)break;b=Oi(b|0,d|0,h|0,j|0)|0;d=C;g=Si(h|0,j|0,g|0,f|0)|0;f=C;if(!((d|0)>0|(d|0)==0&b>>>0>0))break a}Ub(e,4,4688,q)|0;c[p>>2]=c[p>>2]|8;s=a+56|0;a=s;a=Si(c[a>>2]|0,c[a+4>>2]|0,g|0,f|0)|0;c[s>>2]=a;c[s+4>>2]=C;s=(g|0)!=0|(f|0)!=0;a=s?f:-1;s=s?g:-1;C=a;i=r;return s|0}else{g=0;f=0}while(0);a=a+56|0;s=a;s=Si(c[s>>2]|0,c[s+4>>2]|0,g|0,f|0)|0;c[a>>2]=s;c[a+4>>2]=C;a=f;s=g;C=a;i=r;return s|0}function zb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=i;i=i+16|0;k=p;m=a+32|0;f=c[m>>2]|0;n=a+36|0;c[n>>2]=f;o=a+48|0;g=c[o>>2]|0;do if(!g)g=a;else{j=a+20|0;while(1){h=Ra[c[j>>2]&63](f,g,c[a>>2]|0)|0;if((h|0)==-1)break;f=(c[n>>2]|0)+h|0;c[n>>2]=f;q=c[o>>2]|0;g=q-h|0;c[o>>2]=g;if((q|0)==(h|0)){l=6;break}}if((l|0)==6){g=a;f=c[m>>2]|0;break}q=a+68|0;c[q>>2]=c[q>>2]|8;Ub(e,4,4662,k)|0;c[q>>2]=c[q>>2]|8;q=0;i=p;return q|0}while(0);c[n>>2]=f;c[o>>2]=0;if(!(Ra[c[a+28>>2]&63](b,d,c[g>>2]|0)|0)){q=a+68|0;c[q>>2]=c[q>>2]|8;q=0;i=p;return q|0}else{q=a+56|0;c[q>>2]=b;c[q+4>>2]=d;q=1;i=p;return q|0}return 0}function Ab(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function Bb(a,b,c){a=a|0;b=b|0;c=c|0;return -1}function Cb(a,b,c){a=a|0;b=b|0;c=c|0;C=-1;return -1}function Db(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Eb(a){a=a|0;var b=0,d=0,e=0;e=Qc(1,72)|0;if(!e){a=0;return a|0}c[e+64>>2]=1048576;b=Pc(1048576)|0;c[e+32>>2]=b;if(!b){Uc(e);a=0;return a|0}c[e+36>>2]=b;b=e+68|0;d=c[b>>2]|0;if(!a){c[b>>2]=d|1;c[e+40>>2]=31;c[e+44>>2]=32}else{c[b>>2]=d|2;c[e+40>>2]=29;c[e+44>>2]=30}c[e+16>>2]=4;c[e+20>>2]=5;c[e+24>>2]=6;c[e+28>>2]=7;a=e;return a|0}function Fb(a){a=a|0;var b=0;if(!a)return;b=c[a+4>>2]|0;if(b)Ta[b&7](c[a>>2]|0);b=a+32|0;Uc(c[b>>2]|0);c[b>>2]=0;Uc(a);return}function Gb(a,b){a=a|0;b=b|0;if(!a)return;if(!(c[a+68>>2]&2))return;c[a+16>>2]=b;return}function Hb(a,b){a=a|0;b=b|0;if(!a)return;c[a+28>>2]=b;return}function Ib(a,b){a=a|0;b=b|0;if(!a)return;if(!(c[a+68>>2]&1))return;c[a+20>>2]=b;return}function Jb(a,b){a=a|0;b=b|0;if(!a)return;c[a+24>>2]=b;return}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;if(!a)return;c[a>>2]=b;c[a+4>>2]=d;return}function Lb(a,b,d){a=a|0;b=b|0;d=d|0;if(!a)return;a=a+8|0;c[a>>2]=b;c[a+4>>2]=d;return}function Mb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;s=w+8|0;r=w;v=a+48|0;f=c[v>>2]|0;if(f>>>0>=d>>>0){u=a+36|0;Ui(b|0,c[u>>2]|0,d|0)|0;c[u>>2]=(c[u>>2]|0)+d;c[v>>2]=(c[v>>2]|0)-d;v=a+56|0;u=v;u=Si(c[u>>2]|0,c[u+4>>2]|0,d|0,0)|0;c[v>>2]=u;c[v+4>>2]=C;v=d;i=w;return v|0}t=a+68|0;if(c[t>>2]&4){u=a+36|0;Ui(b|0,c[u>>2]|0,f|0)|0;e=c[v>>2]|0;c[u>>2]=(c[u>>2]|0)+e;u=a+56|0;t=u;e=Si(c[t>>2]|0,c[t+4>>2]|0,e|0,0)|0;c[u>>2]=e;c[u+4>>2]=C;c[v>>2]=0;v=(f|0)!=0?f:-1;i=w;return v|0}if(!f){o=a+32|0;g=c[o>>2]|0;p=a+36|0;c[p>>2]=g;q=p;u=a+56|0;f=0}else{p=a+36|0;Ui(b|0,c[p>>2]|0,f|0)|0;o=a+32|0;g=c[o>>2]|0;c[p>>2]=g;q=c[v>>2]|0;u=a+56|0;m=u;m=Si(c[m>>2]|0,c[m+4>>2]|0,q|0,0)|0;n=u;c[n>>2]=m;c[n+4>>2]=C;c[v>>2]=0;d=d-q|0;b=b+q|0;q=p}m=a+64|0;n=a+16|0;l=b;h=g;while(1){b=c[m>>2]|0;g=c[n>>2]|0;if(d>>>0>>0){g=Ra[g&63](h,b,c[a>>2]|0)|0;c[v>>2]=g;if((g|0)==-1){g=11;break}if(g>>>0>=d>>>0){b=l;g=14;break}Ui(l|0,c[q>>2]|0,g|0)|0;h=c[o>>2]|0;c[p>>2]=h;b=c[v>>2]|0;j=u;j=Si(c[j>>2]|0,c[j+4>>2]|0,b|0,0)|0;k=C;f=g+f|0}else{b=Ra[g&63](l,d,c[a>>2]|0)|0;c[v>>2]=b;if((b|0)==-1){g=16;break}f=b+f|0;if(b>>>0>=d>>>0){g=20;break}h=c[o>>2]|0;c[p>>2]=h;j=u;j=Si(c[j>>2]|0,c[j+4>>2]|0,b|0,0)|0;k=C}g=u;c[g>>2]=j;c[g+4>>2]=k;c[v>>2]=0;d=d-b|0;l=l+b|0}if((g|0)==11){Ub(e,4,4636,r)|0;c[v>>2]=0;c[t>>2]=c[t>>2]|4;v=(f|0)!=0?f:-1;i=w;return v|0}else if((g|0)==14){Ui(b|0,c[q>>2]|0,d|0)|0;c[q>>2]=(c[q>>2]|0)+d;c[v>>2]=(c[v>>2]|0)-d;e=u;e=Si(c[e>>2]|0,c[e+4>>2]|0,d|0,0)|0;v=u;c[v>>2]=e;c[v+4>>2]=C;v=f+d|0;i=w;return v|0}else if((g|0)==16){Ub(e,4,4636,s)|0;c[v>>2]=0;c[t>>2]=c[t>>2]|4;v=(f|0)!=0?f:-1;i=w;return v|0}else if((g|0)==20){e=u;e=Si(c[e>>2]|0,c[e+4>>2]|0,b|0,0)|0;c[u>>2]=e;c[u+4>>2]=C;c[p>>2]=c[o>>2];c[v>>2]=0;v=f;i=w;return v|0}return 0}function Nb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=i;i=i+16|0;r=u;n=a+68|0;if(c[n>>2]&8){t=-1;i=u;return t|0}q=a+64|0;f=c[q>>2]|0;t=a+48|0;k=c[t>>2]|0;g=f-k|0;do if(g>>>0>>0){o=a+32|0;h=a+36|0;p=a+20|0;j=a+56|0;l=f;m=g;f=0;a:while(1){if((l|0)==(k|0))g=c[o>>2]|0;else{Ui(c[h>>2]|0,b|0,m|0)|0;g=c[o>>2]|0;c[h>>2]=g;k=(c[t>>2]|0)+m|0;c[t>>2]=k;v=j;v=Si(c[v>>2]|0,c[v+4>>2]|0,m|0,0)|0;l=j;c[l>>2]=v;c[l+4>>2]=C;d=d-m|0;b=b+m|0;f=m+f|0}c[h>>2]=g;if(!k)k=0;else{do{l=Ra[c[p>>2]&63](g,k,c[a>>2]|0)|0;if((l|0)==-1)break a;g=(c[h>>2]|0)+l|0;c[h>>2]=g;v=c[t>>2]|0;k=v-l|0;c[t>>2]=k}while((v|0)!=(l|0));g=c[o>>2]|0}c[h>>2]=g;l=c[q>>2]|0;m=l-k|0;if(d>>>0<=m>>>0){s=5;break}}if((s|0)==5)break;c[n>>2]=c[n>>2]|8;Ub(e,4,4662,r)|0;v=-1;i=u;return v|0}else{g=a+36|0;j=a+56|0;h=g;g=c[g>>2]|0;f=0}while(0);Ui(g|0,b|0,d|0)|0;c[h>>2]=(c[h>>2]|0)+d;c[t>>2]=(c[t>>2]|0)+d;t=j;t=Si(c[t>>2]|0,c[t+4>>2]|0,d|0,0)|0;v=j;c[v>>2]=t;c[v+4>>2]=C;v=f+d|0;i=u;return v|0}function Ob(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+16|0;k=n;g=a+32|0;d=c[g>>2]|0;m=a+36|0;c[m>>2]=d;h=a+48|0;e=c[h>>2]|0;do if(e){j=a+20|0;while(1){f=Ra[c[j>>2]&63](d,e,c[a>>2]|0)|0;if((f|0)==-1)break;d=(c[m>>2]|0)+f|0;c[m>>2]=d;o=c[h>>2]|0;e=o-f|0;c[h>>2]=e;if((o|0)==(f|0)){l=6;break}}if((l|0)==6){d=c[g>>2]|0;break}o=a+68|0;c[o>>2]=c[o>>2]|8;Ub(b,4,4662,k)|0;o=0;i=n;return o|0}while(0);c[m>>2]=d;o=1;i=n;return o|0}function Pb(a){a=a|0;a=a+56|0;C=c[a+4>>2]|0;return c[a>>2]|0}function Qb(a){a=a|0;var b=0,d=0;d=a+8|0;b=c[d>>2]|0;d=c[d+4>>2]|0;if((b|0)==0&(d|0)==0){d=0;a=0;C=d;return a|0}a=a+56|0;a=Oi(b|0,d|0,c[a>>2]|0,c[a+4>>2]|0)|0;d=C;C=d;return a|0}function Rb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=Za[c[a+40>>2]&63](a,b,d,e)|0;return a|0}function Sb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return Za[c[a+44>>2]&63](a,b,d,e)|0}function Tb(a){a=a|0;return (c[a+28>>2]|0)!=7|0}function Ub(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;j=i;i=i+528|0;g=j;h=j+16|0;a:do if(a){switch(b|0){case 1:{b=a;f=a+12|0;break}case 2:{b=a+4|0;f=a+16|0;break}case 4:{b=a+8|0;f=a+20|0;break}default:{b=0;break a}}a=c[b>>2]|0;b=c[f>>2]|0;if(b)if(!d)b=1;else{Qi(h|0,0,512)|0;c[g>>2]=e;pi(h,512,d,g)|0;Ua[b&7](h,a);b=1}else b=0}else b=0;while(0);i=j;return b|0}function Vb(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=4;c[a+20>>2]=4;c[a+16>>2]=4;return}function Wb(a,b){a=a|0;b=b|0;return}function Xb(){return Qc(1,36)|0}function Yb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=Qc(1,36)|0;if(!e){i=e;return i|0}c[e+20>>2]=d;h=e+16|0;c[h>>2]=a;d=Qc(1,a*52|0)|0;i=e+24|0;c[i>>2]=d;if(!d){d=c[e+28>>2]|0;if(d)Uc(d);Uc(e);i=0;return i|0}if(!a){i=e;return i|0}f=0;while(1){c[d+(f*52|0)>>2]=c[b+(f*36|0)>>2];c[d+(f*52|0)+4>>2]=c[b+(f*36|0)+4>>2];j=c[b+(f*36|0)+8>>2]|0;c[d+(f*52|0)+8>>2]=j;k=c[b+(f*36|0)+12>>2]|0;c[d+(f*52|0)+12>>2]=k;c[d+(f*52|0)+16>>2]=c[b+(f*36|0)+16>>2];c[d+(f*52|0)+20>>2]=c[b+(f*36|0)+20>>2];c[d+(f*52|0)+24>>2]=c[b+(f*36|0)+24>>2];c[d+(f*52|0)+28>>2]=c[b+(f*36|0)+28>>2];c[d+(f*52|0)+32>>2]=c[b+(f*36|0)+32>>2];j=Qc(_(k,j)|0,4)|0;c[d+(f*52|0)+44>>2]=j;f=f+1|0;if(!j)break;if(f>>>0>=a>>>0){g=22;break}d=c[i>>2]|0}if((g|0)==22)return e|0;d=c[i>>2]|0;if(d){f=c[h>>2]|0;if(f){b=0;while(1){d=c[d+(b*52|0)+44>>2]|0;if(d){Uc(d);f=c[h>>2]|0}b=b+1|0;if(b>>>0>=f>>>0)break;d=c[i>>2]|0}d=c[i>>2]|0}Uc(d)}d=c[e+28>>2]|0;if(d)Uc(d);Uc(e);k=0;return k|0}function Zb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if(!a)return;f=a+24|0;b=c[f>>2]|0;if(b){g=a+16|0;d=c[g>>2]|0;if(d){e=0;while(1){b=c[b+(e*52|0)+44>>2]|0;if(b){Uc(b);d=c[g>>2]|0}e=e+1|0;if(e>>>0>=d>>>0)break;b=c[f>>2]|0}b=c[f>>2]|0}Uc(b)}b=c[a+28>>2]|0;if(b)Uc(b);Uc(a);return}function _b(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=c[b+4>>2]|0;e=c[a>>2]|0;g=c[b+8>>2]|0;h=c[a+4>>2]|0;f=c[b+12>>2]|0;l=(_((c[b+24>>2]|0)+-1|0,f)|0)+d|0;i=c[b+16>>2]|0;j=(_((c[b+28>>2]|0)+-1|0,i)|0)+g|0;b=Si(l|0,0,f|0,0)|0;b=b|0-C;f=c[a+8>>2]|0;i=Si(j|0,0,i|0,0)|0;i=i|0-C;j=c[a+12>>2]|0;l=c[a+16>>2]|0;if(!l)return;k=(d>>>0>e>>>0?d:e)+-1|0;g=(g>>>0>h>>>0?g:h)+-1|0;f=(b>>>0>>0?b:f)+-1|0;d=(i>>>0>>0?i:j)+-1|0;e=0;b=c[a+24>>2]|0;while(1){h=c[b>>2]|0;j=((k+h|0)>>>0)/(h>>>0)|0;o=c[b+4>>2]|0;a=((g+o|0)>>>0)/(o>>>0)|0;i=c[b+40>>2]|0;n=Ri(1,0,i|0)|0;m=C;h=Si((((f+h|0)>>>0)/(h>>>0)|0)-j|0,0,-1,-1)|0;h=Si(h|0,C|0,n|0,m|0)|0;h=Ti(h|0,C|0,i|0)|0;o=Si((((d+o|0)>>>0)/(o>>>0)|0)-a|0,0,-1,-1)|0;m=Si(o|0,C|0,n|0,m|0)|0;i=Ti(m|0,C|0,i|0)|0;c[b+8>>2]=h;c[b+12>>2]=i;c[b+16>>2]=j;c[b+20>>2]=a;e=e+1|0;if(e>>>0>=l>>>0)break;else b=b+52|0}return}function $b(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];j=b+24|0;e=c[j>>2]|0;i=b+16|0;if(!e)d=j;else{d=c[i>>2]|0;if(!d)d=j;else{f=0;while(1){e=c[e+(f*52|0)+44>>2]|0;if(e){Uc(e);d=c[i>>2]|0}f=f+1|0;if(f>>>0>=d>>>0)break;e=c[j>>2]|0}d=j;e=c[j>>2]|0}Uc(e);c[j>>2]=0}e=c[a+16>>2]|0;c[i>>2]=e;e=Pc(e*52|0)|0;c[d>>2]=e;if(!e){c[j>>2]=0;c[i>>2]=0;return}if(c[i>>2]|0){h=a+24|0;g=0;do{d=e+(g*52|0)|0;e=(c[h>>2]|0)+(g*52|0)|0;f=d+52|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));e=c[j>>2]|0;c[e+(g*52|0)+44>>2]=0;g=g+1|0}while(g>>>0<(c[i>>2]|0)>>>0)}c[b+20>>2]=c[a+20>>2];f=a+32|0;d=c[f>>2]|0;g=b+32|0;c[g>>2]=d;if(!d){c[b+28>>2]=0;return}e=Pc(d)|0;d=b+28|0;c[d>>2]=e;if(!e){c[d>>2]=0;c[g>>2]=0;return}else{Ui(e|0,c[a+28>>2]|0,c[f>>2]|0)|0;return}}function ac(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Qc(1,36)|0;if(!e){a=e;return a|0}c[e+20>>2]=d;c[e+16>>2]=a;d=Qc(a,52)|0;c[e+24>>2]=d;if(!d){d=c[e+28>>2]|0;if(d)Uc(d);Uc(e);a=0;return a|0}else{if(!a){a=e;return a|0}else f=0;do{c[d+(f*52|0)>>2]=c[b+(f*36|0)>>2];c[d+(f*52|0)+4>>2]=c[b+(f*36|0)+4>>2];c[d+(f*52|0)+8>>2]=c[b+(f*36|0)+8>>2];c[d+(f*52|0)+12>>2]=c[b+(f*36|0)+12>>2];c[d+(f*52|0)+16>>2]=c[b+(f*36|0)+16>>2];c[d+(f*52|0)+20>>2]=c[b+(f*36|0)+20>>2];c[d+(f*52|0)+24>>2]=c[b+(f*36|0)+24>>2];c[d+(f*52|0)+32>>2]=c[b+(f*36|0)+32>>2];c[d+(f*52|0)+44>>2]=0;f=f+1|0}while((f|0)!=(a|0));return e|0}return 0}function bc(a,b,d){a=a|0;b=b|0;d=d|0;if(!a){d=0;return d|0}c[a+64>>2]=b;c[a+52>>2]=d;d=1;return d|0}function cc(a,b,d){a=a|0;b=b|0;d=d|0;if(!a){d=0;return d|0}c[a+60>>2]=b;c[a+48>>2]=d;d=1;return d|0}function dc(a,b,d){a=a|0;b=b|0;d=d|0;if(!a){d=0;return d|0}c[a+56>>2]=b;c[a+44>>2]=d;d=1;return d|0}function ec(a,b){a=a|0;b=b|0;var d=0;if(!a){a=0;return a|0}d=Eb(b)|0;if(!d){a=0;return a|0}Kb(d,a,0);Lb(d,c[a+8>>2]|0,0);if(!b)Ib(d,9);else Gb(d,8);Jb(d,1);Hb(d,10);a=d;return a|0}function fc(){return 4703}function gc(a){a=a|0;var b=0;b=Qc(1,84)|0;if(!b){a=0;return a|0}c[b+68>>2]=1;switch(a|0){case 0:{c[b+72>>2]=13;c[b+76>>2]=2;c[b+80>>2]=3;c[b+4>>2]=33;c[b+16>>2]=11;c[b>>2]=34;c[b+20>>2]=1;c[b+24>>2]=5;c[b+8>>2]=1;c[b+12>>2]=1;c[b+28>>2]=1;c[b+32>>2]=1;c[b+36>>2]=12;a=fd()|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}case 2:{c[b+72>>2]=14;c[b+76>>2]=4;c[b+80>>2]=5;c[b+4>>2]=35;c[b+16>>2]=13;c[b>>2]=36;c[b+8>>2]=2;c[b+12>>2]=2;c[b+20>>2]=2;c[b+24>>2]=6;c[b+28>>2]=2;c[b+32>>2]=2;c[b+36>>2]=14;a=Ye(1)|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}default:{Uc(b);a=0;return a|0}}Vb(b+44|0);a=b;return a|0}function hc(a){a=a|0;if(!a)return;Qi(a|0,0,8248)|0;c[a+8200>>2]=-1;c[a+8204>>2]=-1;c[a+8248>>2]=0;return}function ic(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;if(!((a|0)!=0&(b|0)!=0)){b=0;i=d;return b|0}if(!(c[a+68>>2]|0)){Ub(a+44|0,1,4709,d)|0;b=0;i=d;return b|0}else{Ua[c[a+24>>2]&7](c[a+40>>2]|0,b);b=1;i=d;return b|0}return 0}function jc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=i;i=i+16|0;if(!((a|0)!=0&(b|0)!=0)){a=0;i=e;return a|0}if(!(c[b+68>>2]|0)){Ub(b+44|0,1,4790,e)|0;a=0;i=e;return a|0}else{a=Za[c[b>>2]&63](a,c[b+40>>2]|0,d,b+44|0)|0;i=e;return a|0}return 0}function kc(a,b,d){a=a|0;b=b|0;d=d|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(!(c[a+68>>2]|0)){b=0;return b|0}b=Za[c[a+4>>2]&63](c[a+40>>2]|0,b,d,a+44|0)|0;return b|0}function lc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!a){e=0;return e|0}if(!(c[a+68>>2]|0)){e=0;return e|0}e=Qa[c[a+28>>2]&3](c[a+40>>2]|0,b,d,e,f,g,a+44|0)|0;return e|0}function mc(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;if(!((d|0)!=0&((a|0)!=0&(b|0)!=0&(e|0)!=0))){i=0;return i|0}if(!(c[a+68>>2]|0)){i=0;return i|0}i=Ya[c[a+8>>2]&3](c[a+40>>2]|0,d,e,f,g,h,i,j,k,b,a+44|0)|0;return i|0}function nc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!((a|0)!=0&(d|0)!=0&(f|0)!=0)){b=0;return b|0}if(!(c[a+68>>2]|0)){b=0;return b|0}b=Va[c[a+12>>2]&7](c[a+40>>2]|0,b,d,e,f,a+44|0)|0;return b|0}function oc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(!((a|0)!=0&(b|0)!=0)){e=0;return e|0}if(!(c[a+68>>2]|0)){e=0;return e|0}e=$a[c[a+32>>2]&3](c[a+40>>2]|0,b,d,a+44|0,e)|0;return e|0}function pc(a,b){a=a|0;b=b|0;if(!a){b=0;return b|0}b=Ra[c[a+36>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function qc(a){a=a|0;var b=0;b=Qc(1,84)|0;if(!b){a=0;return a|0}c[b+68>>2]=0;switch(a|0){case 0:{c[b+4>>2]=15;c[b+12>>2]=16;c[b>>2]=37;c[b+8>>2]=3;c[b+16>>2]=1;c[b+20>>2]=38;a=Xc()|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}case 2:{c[b+4>>2]=17;c[b+12>>2]=18;c[b>>2]=39;c[b+8>>2]=4;c[b+16>>2]=2;c[b+20>>2]=40;a=Ye(0)|0;c[b+40>>2]=a;if(!a){Uc(b);a=0;return a|0}break}default:{Uc(b);a=0;return a|0}}Vb(b+44|0);a=b;return a|0}function rc(b){b=b|0;if(!b)return;Qi(b|0,0,18708)|0;c[b+5592>>2]=6;c[b+18684>>2]=0;c[b+5596>>2]=64;c[b+5600>>2]=64;c[b+44>>2]=0;c[b+5612>>2]=-1;c[b+18188>>2]=1;c[b+18192>>2]=1;a[b+18688>>0]=0;c[b+18196>>2]=-1;c[b+18200>>2]=-1;g[b+4792>>2]=0.0;c[b+4788>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;c[b+18692>>2]=0;return}function sc(a,b,d){a=a|0;b=b|0;d=d|0;if(!((a|0)!=0&(b|0)!=0&(d|0)!=0)){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Za[c[a+20>>2]&63](c[a+40>>2]|0,b,d,a+44|0)|0;return b|0}function tc(a,b,d){a=a|0;b=b|0;d=d|0;if(!((a|0)!=0&(d|0)!=0)){d=0;return d|0}if(c[a+68>>2]|0){d=0;return d|0}d=Za[c[a>>2]&63](c[a+40>>2]|0,d,b,a+44|0)|0;return d|0}function uc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Ra[c[a+4>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function vc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Ra[c[a+12>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function wc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0)){b=0;return b|0}if(!(c[a+68>>2]|0)){b=0;return b|0}b=Ra[c[a+16>>2]&63](c[a+40>>2]|0,b,a+44|0)|0;return b|0}function xc(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;k=h<<2;i=_(k,h)|0;j=d+18704|0;h=e[j>>1]|0;b[j>>1]=(h&32768|0)==0?-32512:(h|256)&65535;c[d+5608>>2]=1;a[d+18690>>0]=2;j=Pc(i+k|0)|0;h=d+18696|0;c[h>>2]=j;if(!j){g=0;return g|0}Ui(j|0,f|0,i|0)|0;Ui((c[h>>2]|0)+i|0,g|0,k|0)|0;g=1;return g|0}function yc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(!((d|0)!=0&((a|0)!=0&(f|0)!=0))){b=0;return b|0}if(c[a+68>>2]|0){b=0;return b|0}b=Va[c[a+8>>2]&7](c[a+40>>2]|0,b,d,e,f,a+44|0)|0;return b|0}function zc(a){a=a|0;var b=0,d=0;if(!a)return;b=a+40|0;d=c[b>>2]|0;if(!(c[a+68>>2]|0))Ta[c[a+16>>2]&7](d);else Ta[c[a+20>>2]&7](d);c[b>>2]=0;Uc(a);return}function Ac(a,b,d){a=a|0;b=b|0;d=d|0;if(!a)return;Xa[c[a+72>>2]&15](c[a+40>>2]|0,b,d);return}function Bc(a){a=a|0;if(!a){a=0;return a|0}a=Wa[c[a+76>>2]&15](c[a+40>>2]|0)|0;return a|0}function Cc(a){a=a|0;var b=0,d=0;if(!a)return;b=c[a>>2]|0;d=c[b+48>>2]|0;if(d){Uc(d);b=c[a>>2]|0}Uc(b);c[a>>2]=0;return}function Dc(a){a=a|0;if(!a){a=0;return a|0}a=Wa[c[a+80>>2]&15](c[a+40>>2]|0)|0;return a|0}function Ec(a){a=a|0;var b=0;b=c[a>>2]|0;if(!b)return;bd(b);c[a>>2]=0;return}function Fc(a,b){a=a|0;b=b|0;return Gc(a,1048576,b)|0}function Gc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!a){b=0;return b|0}d=_h(a,(c|0)==0?4869:4872)|0;if(!d){b=0;return b|0}a=vb(b,c)|0;if(!a){Yh(d)|0;b=0;return b|0}else{Kb(a,d,6);fi(d,0,2)|0;b=ii(d)|0;fi(d,0,0)|0;Lb(a,b,((b|0)<0)<<31>>31);Gb(a,19);Ib(a,20);Jb(a,21);Hb(a,22);b=a;return b|0}return 0}function Hc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(c[d>>2]|0)+(c[d+8>>2]|0)|0;d=d+4|0;e=c[d>>2]|0;f=g-e|0;if((g|0)==(e|0)){g=-1;return g|0}g=f>>>0>b>>>0?b:f;Ui(a|0,e|0,g|0)|0;c[d>>2]=(c[d>>2]|0)+g;return g|0}function Ic(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=d+4|0;e=c[k>>2]|0;i=d+8|0;g=c[i>>2]|0;j=e-(c[d>>2]|0)|0;f=(g|0)==0?1:g;while(1)if((f-j|0)>>>0>>0)f=f<<1;else{h=f;break}if((h|0)!=(g|0)){e=Pc(h)|0;if(!e){b=-1;return b|0}f=c[d>>2]|0;if(f){Ui(e|0,f|0,j|0)|0;Uc(c[d>>2]|0)}c[d>>2]=e;e=e+j|0;c[k>>2]=e;c[i>>2]=h}Ui(e|0,a|0,b|0)|0;c[k>>2]=(c[k>>2]|0)+b;return b|0}function Jc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=(c[b>>2]|0)+(c[b+8>>2]|0)|0;b=b+4|0;d=c[b>>2]|0;e=f-d|0;if((f|0)==(d|0)){f=-1;return f|0}c[b>>2]=d+a;f=e>>>0>a>>>0?a:e;return f|0}function Kc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[d+8>>2]|0;c[d+4>>2]=(c[d>>2]|0)+(0>(b|0)|0==(b|0)&e>>>0>a>>>0?a:e);return 1}function Lc(a,b,c){a=a|0;b=b|0;c=c|0;b=ci(a,1,b,c)|0;return ((b|0)!=0?b:-1)|0}function Mc(a,b,c){a=a|0;b=b|0;c=c|0;return ki(a,1,b,c)|0}function Nc(a,b,c){a=a|0;b=b|0;c=c|0;c=(fi(c,a,1)|0)==0;C=c?b:-1;return (c?a:-1)|0}function Oc(a,b,c){a=a|0;b=b|0;c=c|0;return (fi(c,a,0)|0)==0|0}function Pc(a){a=a|0;if(!a)a=0;else a=Fi(a)|0;return a|0}function Qc(a,b){a=a|0;b=b|0;if(!b)a=0;else a=Hi(a,b)|0;return a|0}function Rc(a){a=a|0;var b=0,d=0;d=i;i=i+16|0;b=d;do if(a)if(!(Ji(b,16,a)|0)){b=c[b>>2]|0;break}else{c[b>>2]=0;b=0;break}else b=0;while(0);i=d;return b|0}function Sc(a){a=a|0;Gi(a);return}function Tc(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Ii(a,b)|0;return b|0}function Uc(a){a=a|0;Gi(a);return}function Vc(a){a=a|0;var b=0,d=0;b=696;while(1){d=c[b>>2]|0;if((d|0)==-1|(d|0)==(a|0))break;else b=b+12|0}return b+4|0}function Wc(a,b){a=a|0;b=b|0;if(!((a|0)!=0&(b|0)!=0))return;c[a+172>>2]=c[b+4>>2];c[a+168>>2]=c[b>>2];return}function Xc(){var b=0,d=0;b=Qc(1,208)|0;if(!b){b=0;return b|0}c[b>>2]=0;d=b+184|0;a[d>>0]=a[d>>0]&-3;d=Pc(1e3)|0;c[b+44>>2]=d;if(!d){Yc(b);d=0;return d|0}c[b+48>>2]=1e3;d=qg()|0;c[b+192>>2]=d;if(!d){Yc(b);d=0;return d|0}d=qg()|0;c[b+188>>2]=d;if(d){d=b;return d|0}Yc(b);d=0;return d|0}function Yc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;if(!(c[b>>2]|0)){d=b+36|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0}d=b+24|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0;c[b+28>>2]=0}d=b+44|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0;c[b+48>>2]=0}}else{d=b+12|0;e=c[d>>2]|0;if(e){sd(e);Uc(c[d>>2]|0);c[d>>2]=0}d=b+16|0;e=c[d>>2]|0;if(e){Uc(e);c[d>>2]=0;c[b+20>>2]=0}}Yf(c[b+204>>2]|0);d=b+88|0;h=b+164|0;e=c[h>>2]|0;if(e){f=_(c[b+112>>2]|0,c[b+116>>2]|0)|0;if(f){g=0;while(1){sd(e);g=g+1|0;if((g|0)==(f|0))break;else e=e+5640|0}e=c[h>>2]|0}Uc(e);c[h>>2]=0}h=b+124|0;e=c[h>>2]|0;if(e){i=b+120|0;f=c[i>>2]|0;if(f){g=0;while(1){e=c[e+(g<<3)>>2]|0;if(e){Uc(e);f=c[i>>2]|0}g=g+1|0;if(g>>>0>=f>>>0)break;e=c[h>>2]|0}e=c[h>>2]|0}c[i>>2]=0;Uc(e);c[h>>2]=0}i=b+144|0;Uc(c[i>>2]|0);c[i>>2]=0;c[b+128>>2]=0;i=b+108|0;Uc(c[i>>2]|0);c[i>>2]=0;if(!(a[b+184>>0]&2)){i=b+176|0;Uc(c[i>>2]|0);c[i>>2]=0}e=d+100|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));i=b+188|0;rg(c[i>>2]|0);c[i>>2]=0;rg(c[b+192>>2]|0);c[i>>2]=0;i=b+196|0;bd(c[i>>2]|0);c[i>>2]=0;i=b+80|0;Zb(c[i>>2]|0);c[i>>2]=0;i=b+84|0;Zb(c[i>>2]|0);c[i>>2]=0;Uc(b);return}function Zc(d,e,f,j){d=d|0;e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0;ka=i;i=i+320|0;fa=ka+296|0;ea=ka+288|0;ja=ka+280|0;ia=ka+272|0;ha=ka+264|0;ga=ka+256|0;da=ka+248|0;ca=ka+240|0;W=ka+232|0;U=ka+224|0;T=ka+216|0;S=ka+208|0;R=ka+200|0;Q=ka+192|0;P=ka+184|0;v=ka+176|0;u=ka+168|0;t=ka+160|0;s=ka+152|0;q=ka+144|0;I=ka+136|0;H=ka+128|0;N=ka+112|0;G=ka+104|0;F=ka+96|0;E=ka+88|0;C=ka+80|0;B=ka+72|0;A=ka+64|0;z=ka+56|0;y=ka+48|0;x=ka+32|0;w=ka+24|0;p=ka+16|0;m=ka+8|0;l=ka;K=ka+309|0;L=ka+300|0;if(!((d|0)!=0&(e|0)!=0&(f|0)!=0)){j=0;i=ka;return j|0}ba=e+5592|0;k=c[ba>>2]|0;if((k+-1|0)>>>0>32){c[l>>2]=k;c[l+4>>2]=33;Ub(j,1,4875,l)|0;j=0;i=ka;return j|0}$=d+112|0;c[$>>2]=1;aa=d+116|0;c[aa>>2]=1;J=e+18704|0;do if(!(b[J>>1]|0)){switch(c[e+18676>>2]|0){case 1:{b[J>>1]=3;c[e+18700>>2]=1302083;c[e+18680>>2]=1041666;l=1;break}case 2:{b[J>>1]=3;c[e+18700>>2]=651041;c[e+18680>>2]=520833;l=1;break}case 3:{b[J>>1]=4;c[e+18700>>2]=1302083;c[e+18680>>2]=1041666;l=1;break}default:l=0}k=c[e+18684>>2]|0;a:do if((k|0)>=4)if((k|0)<33024){switch(k|0){case 4:break;default:{Z=13;break a}}b[J>>1]=4;break}else{switch(k|0){case 33024:break;default:{Z=13;break a}}b[J>>1]=-32512;break}else{switch(k|0){case 3:break;default:{Z=13;break a}}b[J>>1]=3}while(0);if((Z|0)==13?(l|0)==0:0)break;Ub(j,2,4931,m)|0}while(0);D=e+18700|0;k=c[D>>2]|0;do if((k|0)<1){r=+g[e+4792+((c[e+4788>>2]|0)+-1<<2)>>2];if(r>0.0){X=c[f+24>>2]|0;p=_(c[X+8>>2]|0,c[f+16>>2]|0)|0;p=_(p,c[X+12>>2]|0)|0;la=+((_(p,c[X+24>>2]|0)|0)>>>0);c[D>>2]=~~+M(+(la/(r*8.0*+((c[X>>2]|0)>>>0)*+((c[X+4>>2]|0)>>>0))));break}else{c[D>>2]=0;break}}else{o=c[f+24>>2]|0;X=_(c[o+8>>2]|0,c[f+16>>2]|0)|0;X=_(X,c[o+12>>2]|0)|0;r=+((_(X,c[o+24>>2]|0)|0)>>>0);k=_(k<<3,c[o>>2]|0)|0;r=r/+((_(k,c[o+4>>2]|0)|0)>>>0);o=e+4788|0;k=c[o>>2]|0;if(k){m=k;k=0;n=0;while(1){l=e+4792+(n<<2)|0;if(+g[l>>2]>2]=r;l=c[o>>2]|0;k=1}else l=m;n=n+1|0;if(n>>>0>=l>>>0)break;else m=l}if(k)Ub(j,2,5068,p)|0}}while(0);k=b[J>>1]|0;b:do if((k+-3&65535)>=4){if(k<<16>>16==7){Ub(j,2,7228,q)|0;b[J>>1]=0;k=0;break}if((k+-256&65535)<524){Ub(j,2,7283,s)|0;b[J>>1]=0;k=0;break}if((k+-1024&65535)<1180){Ub(j,2,7331,t)|0;b[J>>1]=0;k=0;break}if(k<<16>>16<=-1)switch(k<<16>>16){case -32512:{k=-32512;break b}case -32768:{Ub(j,2,7373,u)|0;b[J>>1]=0;k=0;break b}default:{Ub(j,2,7461,v)|0;b[J>>1]=0;k=0;break b}}}else{if((k+-5&65535)<2){Ub(j,2,5160,w)|0;b[J>>1]=0;k=0;break}c[e>>2]=0;c[e+12>>2]=1;c[e+16>>2]=1;a[e+18689>>0]=67;a[e+18688>>0]=1;c[e+4>>2]=0;c[e+8>>2]=0;c[e+18180>>2]=0;c[e+18184>>2]=0;c[e+5596>>2]=32;c[e+5600>>2]=32;c[e+5604>>2]=0;c[e+5612>>2]=-1;c[e+18188>>2]=1;c[e+18192>>2]=1;c[e+5608>>2]=1;l=e+4788|0;m=c[l>>2]|0;if((m|0)>1){la=+g[e+4792+(m+-1<<2)>>2];c[x>>2]=m;h[x+8>>3]=la;Ub(j,2,5222,x)|0;c[e+4792>>2]=c[e+4792+((c[l>>2]|0)+-1<<2)>>2];c[l>>2]=1;k=b[J>>1]|0}c:do switch(k&65535|0){case 3:{k=c[ba>>2]|0;if((k|0)>6){c[y>>2]=k+1;Ub(j,2,5395,y)|0;c[ba>>2]=6;k=6}break}case 4:{k=c[ba>>2]|0;if((k|0)<2){c[z>>2]=k+1;Ub(j,2,5541,z)|0;c[ba>>2]=1;k=1;break c}if((k|0)>7){c[A>>2]=k+1;Ub(j,2,5695,A)|0;c[ba>>2]=7;k=7}break}default:k=c[ba>>2]|0}while(0);l=e+40|0;c[l>>2]=c[l>>2]|1;l=e+5620|0;c[l>>2]=k+-1;if((k|0)>1){k=0;do{c[e+5624+(k<<2)>>2]=256;c[e+5756+(k<<2)>>2]=256;k=k+1|0}while((k|0)<(c[l>>2]|0))}c[e+44>>2]=4;if((b[J>>1]|0)==4){k=c[ba>>2]|0;c[e+96>>2]=1;c[e+48>>2]=0;c[e+52>>2]=0;c[e+56>>2]=1;X=k+-1|0;c[e+60>>2]=X;c[e+64>>2]=3;c[e+80>>2]=4;c[e+244>>2]=1;c[e+196>>2]=X;c[e+200>>2]=0;c[e+204>>2]=1;c[e+208>>2]=k;c[e+212>>2]=3;c[e+228>>2]=4;k=2}else k=0;c[e+4784>>2]=k;c[e+20>>2]=1;k=c[D>>2]|0;if((k|0)>=1){if((k|0)>1302083){Ub(j,2,5998,C)|0;c[D>>2]=1302083}}else{c[D>>2]=1302083;Ub(j,2,5849,B)|0}k=e+18680|0;l=c[k>>2]|0;if((l|0)>=1){if((l|0)>1041666){Ub(j,2,6320,F)|0;c[k>>2]=1041666}}else{c[k>>2]=1041666;Ub(j,2,6171,E)|0}l=c[f+16>>2]|0;n=c[f+24>>2]|0;o=c[n+8>>2]|0;k=_(o,l)|0;p=c[n+12>>2]|0;k=_(k,p)|0;la=+((_(k,c[n+24>>2]|0)|0)>>>0);k=_(c[D>>2]<<3,c[n>>2]|0)|0;g[e+4792>>2]=la/+((_(k,c[n+4>>2]|0)|0)>>>0);k=b[J>>1]|0;d:do if((l|0)==3){l=n+28|0;m=n+32|0;if(!((c[l>>2]|0)!=12|c[m>>2])){l=n+80|0;m=n+84|0;if(!((c[l>>2]|0)!=12|c[m>>2])){l=n+132|0;m=n+136|0;if(!((c[l>>2]|0)!=12|c[m>>2])){switch(k&65535|0){case 3:{if(p>>>0>1080|o>>>0>2048){c[H>>2]=o;c[H+4>>2]=p;Ub(j,2,6892,H)|0;break d}break}case 4:{if(p>>>0>2160|o>>>0>4096){c[I>>2]=o;c[I+4>>2]=p;Ub(j,2,7063,I)|0;break d}break}default:{}}break b}else{p=l;k=m;l=2}}else{p=l;k=m;l=1}}else{p=l;k=m;l=0};a[K>>0]=a[6659]|0;a[K+1>>0]=a[6660]|0;a[K+2>>0]=a[6661]|0;a[K+3>>0]=a[6662]|0;a[K+4>>0]=a[6663]|0;a[K+5>>0]=a[6664]|0;a[K+6>>0]=a[6665]|0;m=L;n=6666;o=m+9|0;do{a[m>>0]=a[n>>0]|0;m=m+1|0;n=n+1|0}while((m|0)<(o|0));X=(c[k>>2]|0)!=0?K:L;L=c[p>>2]|0;c[N>>2]=l;c[N+4>>2]=L;c[N+8>>2]=X;Ub(j,2,6675,N)|0}else{c[G>>2]=l;Ub(j,2,6493,G)|0}while(0);b[J>>1]=0;k=0}while(0);c[d+168>>2]=c[e+18680>>2];X=d+88|0;b[X>>1]=k;N=d+181|0;K=a[N>>0]&-2|c[e+20>>2]&1;a[N>>0]=K;L=e+24|0;K=(c[L>>2]&255)<<1&2|K&-3;a[N>>0]=K;a[N>>0]=K&-5|(c[e+28>>2]&255)<<2&4;do if((c[L>>2]|0)!=0?(O=e+32|0,(c[O>>2]|0)!=0):0){k=_((c[e+4788>>2]|0)*12|0,c[ba>>2]|0)|0;l=Pc(k)|0;c[d+176>>2]=l;if(l){Ui(l|0,c[O>>2]|0,k|0)|0;break}Ub(j,1,7520,P)|0;j=0;i=ka;return j|0}while(0);n=d+100|0;c[n>>2]=c[e+12>>2];o=d+104|0;c[o>>2]=c[e+16>>2];m=d+92|0;c[m>>2]=c[e+4>>2];p=d+96|0;c[p>>2]=c[e+8>>2];l=e+36|0;k=c[l>>2]|0;do if(!k){k=fc()|0;l=Pc((wi(k)|0)+29|0)|0;c[d+108>>2]=l;if(l){c[S>>2]=7697;c[S+4>>2]=k;ni(l,7692,S)|0;break}Ub(j,1,7646,R)|0;j=0;i=ka;return j|0}else{k=Pc((wi(k)|0)+1|0)|0;c[d+108>>2]=k;if(k){vi(k,c[l>>2]|0)|0;break}Ub(j,1,7592,Q)|0;j=0;i=ka;return j|0}while(0);k=(c[f+8>>2]|0)-(c[m>>2]|0)|0;l=c[f+12>>2]|0;if(!(c[e>>2]|0)){c[n>>2]=k;c[o>>2]=l-(c[p>>2]|0)}else{S=c[n>>2]|0;c[$>>2]=(k+-1+S|0)/(S|0)|0;S=c[o>>2]|0;c[aa>>2]=(l+-1-(c[p>>2]|0)+S|0)/(S|0)|0}if(a[e+18688>>0]|0){a[d+180>>0]=a[e+18689>>0]|0;a[N>>0]=a[N>>0]|8}S=Qc(_(c[aa>>2]|0,c[$>>2]|0)|0,5640)|0;L=d+164|0;c[L>>2]=S;if(!S){Ub(j,1,7726,T)|0;j=0;i=ka;return j|0}K=e+4784|0;A=c[K>>2]|0;do if(A){w=e+48|0;B=c[ba>>2]|0;C=c[f+16>>2]|0;D=c[e+4788>>2]|0;E=_(C,B)|0;F=Qc(_(E,D)|0,4)|0;if(!F){Ub(j,1,7780,U)|0;break}m=c[w>>2]|0;s=e+60|0;k=c[s>>2]|0;if(m>>>0>>0){q=_(m,C)|0;t=e+52|0;u=e+64|0;v=e+56|0;l=c[u>>2]|0;while(1){n=c[t>>2]|0;if(n>>>0>>0){k=c[v>>2]|0;p=n;o=n+q|0;while(1){if(!k)k=0;else{l=o;n=0;while(1){c[F+(l<<2)>>2]=1;n=n+1|0;k=c[v>>2]|0;if(n>>>0>=k>>>0)break;else l=l+E|0}l=c[u>>2]|0}p=p+1|0;if(p>>>0>=l>>>0)break;else o=o+1|0}k=c[s>>2]|0}m=m+1|0;if(m>>>0>=k>>>0)break;else q=q+C|0}}if(A>>>0>1){z=1;do{k=w;w=w+148|0;v=c[k+8>>2]|0;u=k+156|0;n=c[u>>2]|0;v=n>>>0>v>>>0?v:0;o=c[w>>2]|0;x=k+160|0;l=c[x>>2]|0;if(o>>>0>>0){q=_(o,C)|0;y=k+152|0;s=k+164|0;t=_(v,E)|0;m=c[s>>2]|0;k=n;while(1){n=c[y>>2]|0;if(n>>>0>>0){p=n;n=n+q|0;while(1){if(v>>>0>>0){l=n+t|0;m=v;while(1){c[F+(l<<2)>>2]=1;m=m+1|0;k=c[u>>2]|0;if(m>>>0>=k>>>0)break;else l=l+E|0}m=c[s>>2]|0}p=p+1|0;if(p>>>0>=m>>>0)break;else n=n+1|0}l=c[x>>2]|0}o=o+1|0;if(o>>>0>=l>>>0)break;else q=q+C|0}}z=z+1|0}while((z|0)!=(A|0))}if((D|0)!=0?(V=(C|0)==0,(B|0)!=0):0){l=0;q=0;k=0;do{if(!V){p=l;o=0;while(1){m=0;n=p;while(1){k=(c[F+(n<<2)>>2]|0)!=1|k;m=m+1|0;if((m|0)==(C|0))break;else n=n+1|0}o=o+1|0;if((o|0)==(B|0))break;else p=p+C|0}l=E+l|0}q=q+1|0}while((q|0)!=(D|0));if(k)Ub(j,1,7828,W)|0}Uc(F)}while(0);e:do if(_(c[aa>>2]|0,c[$>>2]|0)|0){w=e+4788|0;x=e+40|0;y=e+44|0;z=e+18690|0;A=f+16|0;l=e+18696|0;B=f+24|0;C=e+5596|0;D=e+5600|0;E=e+5604|0;F=e+5608|0;G=e+5612|0;H=e+5616|0;I=e+5620|0;J=0;f:while(1){q=c[L>>2]|0;s=q+(J*5640|0)|0;W=c[w>>2]|0;k=q+(J*5640|0)+8|0;c[k>>2]=W;if(W){m=((b[X>>1]|0)+-3&65535)<4;o=0;do{n=(a[N>>0]&4)==0;do if(!m)if(n){c[q+(J*5640|0)+20+(o<<2)>>2]=c[e+4792+(o<<2)>>2];break}else{c[q+(J*5640|0)+5184+(o<<2)>>2]=c[e+5192+(o<<2)>>2];break}else{if(!n)c[q+(J*5640|0)+5184+(o<<2)>>2]=c[e+5192+(o<<2)>>2];c[q+(J*5640|0)+20+(o<<2)>>2]=c[e+4792+(o<<2)>>2]}while(0);o=o+1|0}while(o>>>0<(c[k>>2]|0)>>>0)}c[s>>2]=c[x>>2];c[q+(J*5640|0)+4>>2]=c[y>>2];p=q+(J*5640|0)+16|0;c[p>>2]=a[z>>0];k=q+(J*5640|0)+5636|0;m=a[k>>0]|0;a[k>>0]=m&-5;if(!(c[K>>2]|0))c[q+(J*5640|0)+420>>2]=0;else{a[k>>0]=m|4;m=c[K>>2]|0;if(!m)k=0;else{n=J+1|0;o=0;k=0;do{if((n|0)==(c[e+48+(o*148|0)+48>>2]|0)){c[q+(J*5640|0)+424+(k*148|0)>>2]=c[e+48+(k*148|0)>>2];c[q+(J*5640|0)+424+(k*148|0)+4>>2]=c[e+48+(k*148|0)+4>>2];c[q+(J*5640|0)+424+(k*148|0)+8>>2]=c[e+48+(k*148|0)+8>>2];c[q+(J*5640|0)+424+(k*148|0)+12>>2]=c[e+48+(k*148|0)+12>>2];c[q+(J*5640|0)+424+(k*148|0)+16>>2]=c[e+48+(k*148|0)+16>>2];c[q+(J*5640|0)+424+(k*148|0)+32>>2]=c[e+48+(k*148|0)+32>>2];c[q+(J*5640|0)+424+(k*148|0)+48>>2]=c[e+48+(k*148|0)+48>>2];k=k+1|0}o=o+1|0}while(o>>>0>>0)}c[q+(J*5640|0)+420>>2]=k+-1}W=Qc(c[A>>2]|0,1080)|0;v=q+(J*5640|0)+5584|0;c[v>>2]=W;if(!W){Z=149;break}do if(!(c[l>>2]|0)){g:do if((c[p>>2]|0)==1){k=c[A>>2]|0;if(k>>>0<=2){n=k;break}m=c[B>>2]|0;k=c[m>>2]|0;do if((k|0)==(c[m+52>>2]|0)){if((k|0)!=(c[m+104>>2]|0))break;k=c[m+4>>2]|0;if((k|0)!=(c[m+56>>2]|0))break;if((k|0)==(c[m+108>>2]|0)){Z=175;break g}}while(0);Ub(j,2,8224,fa)|0;c[p>>2]=0;Z=175}else Z=175;while(0);if((Z|0)==175){Z=0;n=c[A>>2]|0}if(!n)break;k=c[B>>2]|0;m=0;do{if(!(c[k+(m*52|0)+32>>2]|0))c[(c[v>>2]|0)+(m*1080|0)+1076>>2]=1<<(c[k+(m*52|0)+24>>2]|0)+-1;m=m+1|0}while(m>>>0>>0);Y=n;Z=166}else{n=c[A>>2]|0;n=_(n<<2,n)|0;k=Pc(n)|0;o=(c[l>>2]|0)+n|0;if(!k){Z=152;break f}c[p>>2]=2;m=Pc(n)|0;c[q+(J*5640|0)+5608>>2]=m;if(!m){Z=154;break f}Ui(m|0,c[l>>2]|0,n|0)|0;Ui(k|0,c[l>>2]|0,n|0)|0;m=Pc(n)|0;n=q+(J*5640|0)+5604|0;c[n>>2]=m;if(!m){Z=156;break f}if(!(Vg(k,m,c[A>>2]|0)|0)){Z=158;break f}m=Pc(c[A>>2]<<3)|0;c[q+(J*5640|0)+5600>>2]=m;if(!m){Z=160;break f}If(m,c[A>>2]|0,c[n>>2]|0);Uc(k);k=c[A>>2]|0;if(k){m=c[v>>2]|0;n=0;do{c[m+(n*1080|0)+1076>>2]=c[o+(n<<2)>>2];n=n+1|0}while(n>>>0>>0)}if(!(_c(s,f)|0)){Z=167;break f}Y=c[A>>2]|0;Z=166}while(0);if((Z|0)==166?(Z=0,(Y|0)!=0):0){u=0;do{s=c[v>>2]|0;t=s+(u*1080|0)|0;c[t>>2]=c[x>>2]&1;n=c[ba>>2]|0;o=s+(u*1080|0)+4|0;c[o>>2]=n;k=c[C>>2]|0;if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+8>>2]=k;k=c[D>>2]|0;if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+12>>2]=k;c[s+(u*1080|0)+16>>2]=c[E>>2];W=c[F>>2]|0;c[s+(u*1080|0)+20>>2]=(W|0)==0&1;c[s+(u*1080|0)+24>>2]=(W|0)!=0?2:0;c[s+(u*1080|0)+804>>2]=2;if((u|0)==(c[G>>2]|0))k=c[H>>2]|0;else k=0;c[s+(u*1080|0)+808>>2]=k;do if(!(c[x>>2]&1)){if(!n)break;else k=0;do{c[s+(u*1080|0)+812+(k<<2)>>2]=15;c[s+(u*1080|0)+944+(k<<2)>>2]=15;k=k+1|0}while(k>>>0<(c[o>>2]|0)>>>0)}else{if((n|0)>0){o=n;q=0}else break;while(1){p=o;o=o+-1|0;k=c[I>>2]|0;do if((q|0)<(k|0)){k=c[e+5624+(q<<2)>>2]|0;if((k|0)<1)c[s+(u*1080|0)+812+(o<<2)>>2]=1;else{if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+812+(o<<2)>>2]=k}k=c[e+5756+(q<<2)>>2]|0;if((k|0)<1){c[s+(u*1080|0)+944+(o<<2)>>2]=1;break}if((k|0)>1){m=0;do{k=k>>1;m=m+1|0}while((k|0)>1);k=m}else k=0;c[s+(u*1080|0)+944+(o<<2)>>2]=k}else{W=k+-1|0;m=q-W|0;k=c[e+5624+(W<<2)>>2]>>m;m=c[e+5756+(W<<2)>>2]>>m;if((k|0)<1)c[s+(u*1080|0)+812+(o<<2)>>2]=1;else{if((k|0)>1){n=0;do{k=k>>1;n=n+1|0}while((k|0)>1);k=n}else k=0;c[s+(u*1080|0)+812+(o<<2)>>2]=k}if((m|0)<1){c[s+(u*1080|0)+944+(o<<2)>>2]=1;break}if((m|0)>1){k=0;do{m=m>>1;k=k+1|0}while((m|0)>1)}else k=0;c[s+(u*1080|0)+944+(o<<2)>>2]=k}while(0);if((p|0)<=1)break;else q=q+1|0}}while(0);Mg(t,c[(c[B>>2]|0)+(u*52|0)+24>>2]|0);u=u+1|0}while(u>>>0<(c[A>>2]|0)>>>0)}J=J+1|0;if(J>>>0>=(_(c[aa>>2]|0,c[$>>2]|0)|0)>>>0)break e}if((Z|0)==149){Ub(j,1,7867,ca)|0;j=0;i=ka;return j|0}else if((Z|0)==152){Ub(j,1,7931,da)|0;j=0;i=ka;return j|0}else if((Z|0)==154){Uc(k);Ub(j,1,7974,ga)|0;j=0;i=ka;return j|0}else if((Z|0)==156){Uc(k);Ub(j,1,8032,ha)|0;j=0;i=ka;return j|0}else if((Z|0)==158){Uc(k);Ub(j,1,8092,ia)|0;j=0;i=ka;return j|0}else if((Z|0)==160){Uc(k);Ub(j,1,8140,ja)|0;j=0;i=ka;return j|0}else if((Z|0)==167){Ub(j,1,8190,ea)|0;j=0;i=ka;return j|0}}else l=e+18696|0;while(0);k=c[l>>2]|0;if(!k){j=1;i=ka;return j|0}Uc(k);c[l>>2]=0;j=1;i=ka;return j|0}function _c(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((c[b+16>>2]|0)!=2){b=1;return b|0}m=b+5604|0;r=b+5616|0;e=c[r>>2]|0;n=b+5620|0;do if(c[m>>2]|0){do if((e|0)==(c[n>>2]|0)){e=e+10|0;c[n>>2]=e;f=b+5612|0;e=Tc(c[f>>2]|0,e*20|0)|0;if(e){c[f>>2]=e;q=c[r>>2]|0;Qi(e+(q*20|0)|0,0,((c[n>>2]|0)-q|0)*20|0)|0;e=c[r>>2]|0;break}Uc(c[f>>2]|0);c[f>>2]=0;c[n>>2]=0;c[r>>2]=0;b=0;return b|0}else f=b+5612|0;while(0);k=c[f>>2]|0;i=k+(e*20|0)|0;l=k+(e*20|0)+12|0;f=c[l>>2]|0;if(f){Uc(f);c[l>>2]=0}c[k+(e*20|0)+8>>2]=1;c[k+(e*20|0)+4>>2]=1;c[i>>2]=2;f=c[d+16>>2]|0;f=_(f,f)|0;h=f<<2;j=Pc(h)|0;c[l>>2]=j;if(!j){b=0;return b|0}else{Xa[c[768+(c[i>>2]<<2)>>2]&15](c[m>>2]|0,j,f);c[k+(e*20|0)+16>>2]=h;e=(c[r>>2]|0)+1|0;c[r>>2]=e;j=2;break}}else{j=1;i=0}while(0);do if((e|0)==(c[n>>2]|0)){f=e+10|0;c[n>>2]=f;e=b+5612|0;f=Tc(c[e>>2]|0,f*20|0)|0;if(!f){Uc(c[e>>2]|0);c[e>>2]=0;c[n>>2]=0;c[r>>2]=0;b=0;return b|0}else{c[e>>2]=f;h=c[r>>2]|0;Qi(f+(h*20|0)|0,0,((c[n>>2]|0)-h|0)*20|0)|0;if(!i){i=0;break}i=f+((h+-1|0)*20|0)|0;break}}else e=b+5612|0;while(0);m=c[e>>2]|0;n=c[r>>2]|0;q=m+(n*20|0)|0;o=m+(n*20|0)+12|0;e=c[o>>2]|0;if(e){Uc(e);c[o>>2]=0}p=j+1|0;c[m+(n*20|0)+8>>2]=j;c[m+(n*20|0)+4>>2]=2;c[q>>2]=2;d=d+16|0;e=c[d>>2]|0;f=e<<2;l=Pc(f)|0;c[o>>2]=l;if(!l){b=0;return b|0}h=Pc(f)|0;if(!h){Uc(c[o>>2]|0);c[o>>2]=0;b=0;return b|0}if(e){j=0;k=h;l=c[b+5584>>2]|0;while(1){g[k>>2]=+(c[l+1076>>2]|0);j=j+1|0;if((j|0)==(e|0))break;else{k=k+4|0;l=l+1080|0}}}Xa[c[768+(c[q>>2]<<2)>>2]&15](h,c[o>>2]|0,e);Uc(h);c[m+(n*20|0)+16>>2]=f;c[r>>2]=(c[r>>2]|0)+1;j=b+5628|0;e=c[j>>2]|0;h=b+5632|0;do if((e|0)==(c[h>>2]|0)){e=e+10|0;c[h>>2]=e;f=b+5624|0;e=Tc(c[f>>2]|0,e*20|0)|0;if(e){c[f>>2]=e;b=c[j>>2]|0;Qi(e+(b*20|0)|0,0,((c[h>>2]|0)-b|0)*20|0)|0;e=c[j>>2]|0;break}Uc(c[f>>2]|0);c[f>>2]=0;c[h>>2]=0;c[j>>2]=0;b=0;return b|0}else f=b+5624|0;while(0);b=c[f>>2]|0;c[b+(e*20|0)+8>>2]=i;r=b+(e*20|0)+16|0;a[r>>0]=a[r>>0]|1;c[b+(e*20|0)+4>>2]=c[d>>2];c[b+(e*20|0)>>2]=p;c[b+(e*20|0)+12>>2]=q;c[j>>2]=(c[j>>2]|0)+1;b=1;return b|0}function $c(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ad(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=Xb()|0;k=b+80|0;c[k>>2]=j;if(!j){k=0;return k|0}f=b+192|0;if((sg(c[f>>2]|0,23,e)|0)!=0?(sg(c[f>>2]|0,24,e)|0)!=0:0){h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}}else vg(h);f=b+188|0;if((sg(c[f>>2]|0,25,e)|0)!=0?(sg(c[f>>2]|0,26,e)|0)!=0:0){h=c[f>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](b,a,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}}else vg(h);f=Xb()|0;c[d>>2]=f;if(!f){k=0;return k|0}$b(c[k>>2]|0,f);f=_(c[b+116>>2]|0,c[b+112>>2]|0)|0;i=b+196|0;c[(c[i>>2]|0)+36>>2]=f;f=Qc(f,40)|0;g=c[i>>2]|0;c[g+40>>2]=f;if(!f){k=0;return k|0}if(!(c[g+36>>2]|0)){k=1;return k|0}h=0;while(1){c[f+(h*40|0)+28>>2]=100;c[f+(h*40|0)+20>>2]=0;k=Qc(100,24)|0;g=c[i>>2]|0;f=c[g+40>>2]|0;c[f+(h*40|0)+24>>2]=k;h=h+1|0;if(!k){f=0;g=30;break}if(h>>>0>=(c[g+36>>2]|0)>>>0){f=1;g=30;break}}if((g|0)==30)return f|0}Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}Zb(c[k>>2]|0);c[k>>2]=0;k=0;return k|0}function bd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if(!a)return;b=a+28|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}h=a+40|0;b=c[h>>2]|0;if(b){g=a+36|0;if(c[g>>2]|0){d=b;f=0;do{e=c[d+(f*40|0)+36>>2]|0;if(e){Uc(e);b=c[h>>2]|0;c[b+(f*40|0)+36>>2]=0;d=b}e=c[d+(f*40|0)+16>>2]|0;if(e){Uc(e);b=c[h>>2]|0;c[b+(f*40|0)+16>>2]=0;d=b}e=c[d+(f*40|0)+24>>2]|0;if(e){Uc(e);d=c[h>>2]|0;c[d+(f*40|0)+24>>2]=0;b=d}f=f+1|0}while(f>>>0<(c[g>>2]|0)>>>0)}Uc(b);c[h>>2]=0}Uc(a);return}function cd(d,e,f,g,h,j,k,l,m,n,o){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;Da=i;i=i+256|0;Ca=Da+200|0;Ba=Da+192|0;za=Da+184|0;ya=Da+176|0;pa=Da+168|0;oa=Da+160|0;na=Da+152|0;ma=Da+144|0;la=Da+136|0;ka=Da+128|0;ia=Da+120|0;ha=Da+112|0;wa=Da+104|0;ua=Da+96|0;ga=Da+88|0;fa=Da+80|0;ea=Da+72|0;va=Da+64|0;da=Da+56|0;ca=Da+48|0;sa=Da+40|0;ra=Da+32|0;qa=Da+24|0;ja=Da+16|0;ba=Da+8|0;aa=Da;V=Da+240|0;T=Da+236|0;X=Da+232|0;Z=Da+228|0;$=Da+224|0;U=Da+220|0;Y=Da+216|0;S=Da+212|0;W=Da+208|0;c[S>>2]=65424;Aa=d+8|0;a:do switch(c[Aa>>2]|0){case 256:{c[S>>2]=65497;p=d+76|0;xa=117;break}case 8:{ta=d+76|0;if(!(a[ta>>0]&1)){O=d+200|0;P=d+164|0;Q=d+72|0;R=d+24|0;B=d+196|0;D=d+112|0;E=d+116|0;G=V+2|0;H=V+6|0;I=V+7|0;J=d+16|0;K=d+20|0;L=d+64|0;p=65424;b:while(1){c:do if((p|0)!=65427){while(1){A=Qb(n)|0;if((A|0)==0&(C|0)==0){xa=7;break}if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=9;break b}qb(c[J>>2]|0,W,2);if((c[W>>2]|0)>>>0<2){xa=11;break b}if((c[S>>2]|0)==32896?(A=Qb(n)|0,(A|0)==0&(C|0)==0):0){xa=14;break}s=c[Aa>>2]|0;p=c[W>>2]|0;if(s&16)c[R>>2]=-2-p+(c[R>>2]|0);q=p+-2|0;c[W>>2]=q;p=c[S>>2]|0;r=784;while(1){A=c[r>>2]|0;if((A|0)==0|(A|0)==(p|0)){y=r;break}else r=r+12|0}if(!(c[r+4>>2]&s)){xa=20;break b}if(q>>>0>(c[K>>2]|0)>>>0){A=Qb(n)|0;z=C;if(0>(z|0)|0==(z|0)&q>>>0>A>>>0){xa=24;break b}p=Tc(c[J>>2]|0,c[W>>2]|0)|0;if(!p){xa=26;break b}c[J>>2]=p;q=c[W>>2]|0;c[K>>2]=q}else p=c[J>>2]|0;q=Mb(n,p,q,o)|0;if((q|0)!=(c[W>>2]|0)){xa=29;break b}p=c[r+8>>2]|0;if(!p){xa=31;break b}if(!(Za[p&63](d,c[J>>2]|0,q,o)|0)){xa=33;break b}r=c[O>>2]|0;q=c[B>>2]|0;v=c[y>>2]|0;w=Pb(n)|0;x=c[W>>2]|0;w=w-x+-4|0;x=x+4|0;q=q+40|0;u=c[q>>2]|0;p=c[u+(r*40|0)+20>>2]|0;s=u+(r*40|0)+28|0;t=c[s>>2]|0;if((p+1|0)>>>0>t>>>0){t=~~(+(t>>>0)+100.0)>>>0;c[s>>2]=t;s=Tc(c[u+(r*40|0)+24>>2]|0,t*24|0)|0;t=c[q>>2]|0;p=t+(r*40|0)+24|0;if(!s){xa=41;break b}c[p>>2]=s;q=t;p=c[t+(r*40|0)+20>>2]|0}else{q=u;s=c[u+(r*40|0)+24>>2]|0}b[s+(p*24|0)>>1]=v;A=s+(p*24|0)+8|0;c[A>>2]=w;c[A+4>>2]=((w|0)<0)<<31>>31;c[s+(p*24|0)+16>>2]=x;c[q+(r*40|0)+20>>2]=p+1;if((v|0)==65424?(F=c[q+(r*40|0)+16>>2]|0,(F|0)!=0):0){A=F+((c[q+(r*40|0)+12>>2]|0)*24|0)|0;c[A>>2]=w;c[A+4>>2]=0}do if((c[y>>2]|0)==65424){p=Pb(n)|0;p=-4-(c[W>>2]|0)+p|0;A=L;z=c[A+4>>2]|0;if(!(0>(z|0)|(0==(z|0)?p>>>0>(c[A>>2]|0)>>>0:0)))break;A=L;c[A>>2]=p;c[A+4>>2]=0}while(0);if(a[ta>>0]&4){xa=46;break}if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=50;break b}qb(c[J>>2]|0,S,2);if((c[S>>2]|0)==65427)break c}if((xa|0)==7){xa=0;c[Aa>>2]=64;break}else if((xa|0)==14){xa=0;c[Aa>>2]=64;break}else if((xa|0)==46){xa=0;A=Rb(n,c[R>>2]|0,0,o)|0;if(!((C|0)==0?(A|0)==(c[R>>2]|0):0)){xa=47;break b}c[S>>2]=65427;break}}while(0);A=Qb(n)|0;if((A|0)==0&(C|0)==0?(c[Aa>>2]|0)==64:0){xa=115;break}p=a[ta>>0]|0;if(!(p&4)){q=c[O>>2]|0;r=c[P>>2]|0;if(!(c[Q>>2]|0)){p=c[R>>2]|0;if(p>>>0>1){s=p+-2|0;c[R>>2]=s}else s=p}else{s=Qb(n)|0;s=Si(s|0,C|0,-2,0)|0;c[R>>2]=s}p=r+(q*5640|0)+5592|0;A=r+(q*5640|0)+5596|0;do if(!s)z=1;else{z=Qb(n)|0;y=C;if(0>(y|0)|0==(y|0)&s>>>0>z>>>0)Ub(o,2,8573,ga)|0;q=c[p>>2]|0;if(!q){z=Pc(c[R>>2]|0)|0;c[p>>2]=z;if(!z)break b;else{z=0;break}}q=Tc(q,(c[R>>2]|0)+(c[A>>2]|0)|0)|0;if(!q){xa=65;break b}c[p>>2]=q;z=0}while(0);q=c[B>>2]|0;if(q){w=Pb(n)|0;s=C;y=Si(w|0,s|0,-2,-1)|0;r=c[O>>2]|0;q=q+40|0;u=c[q>>2]|0;v=c[u+(r*40|0)+12>>2]|0;t=c[u+(r*40|0)+16>>2]|0;x=t+(v*24|0)+8|0;c[x>>2]=y;c[x+4>>2]=C;x=c[R>>2]|0;s=Si(x|0,0,w|0,s|0)|0;v=t+(v*24|0)+16|0;c[v>>2]=s;c[v+4>>2]=C;x=x+2|0;v=c[u+(r*40|0)+20>>2]|0;s=u+(r*40|0)+28|0;t=c[s>>2]|0;if((v+1|0)>>>0>t>>>0){t=~~(+(t>>>0)+100.0)>>>0;c[s>>2]=t;s=Tc(c[u+(r*40|0)+24>>2]|0,t*24|0)|0;t=c[q>>2]|0;u=t+(r*40|0)+24|0;if(!s){p=u;xa=74;break}c[u>>2]=s;w=t;q=c[t+(r*40|0)+20>>2]|0}else{w=u;s=c[u+(r*40|0)+24>>2]|0;q=v}b[s+(q*24|0)>>1]=-109;v=Pi(0,y|0,32)|0;y=s+(q*24|0)+8|0;c[y>>2]=v;c[y+4>>2]=C;c[s+(q*24|0)+16>>2]=x;c[w+(r*40|0)+20>>2]=q+1}if(!z)p=Mb(n,(c[p>>2]|0)+(c[A>>2]|0)|0,c[R>>2]|0,o)|0;else p=0;c[Aa>>2]=(p|0)==(c[R>>2]|0)?8:64;c[A>>2]=(c[A>>2]|0)+p;p=a[ta>>0]|0;if((p&9)==1){a[ta>>0]=p|8;q=c[O>>2]|0;do if((Tb(n)|0)!=0?(M=Pb(n)|0,N=C,!((M|0)==-1&(N|0)==-1)):0){while(1){if((Mb(n,V,2,o)|0)!=2){xa=81;break}qb(V,T,2);if((c[T>>2]|0)!=65424){xa=83;break}if((Mb(n,V,2,o)|0)!=2){xa=85;break}qb(V,X,2);if((c[X>>2]|0)!=10){xa=87;break}c[X>>2]=8;p=Mb(n,V,8,o)|0;if((p|0)!=(c[X>>2]|0)){xa=89;break}if((p|0)!=8){xa=91;break}qb(V,Z,2);qb(G,$,4);qb(H,U,1);qb(I,Y,1);if((c[Z>>2]|0)==(q|0)){xa=97;break}p=c[$>>2]|0;if(p>>>0<14){xa=94;break}xa=p+-12|0;c[$>>2]=xa;xa=Rb(n,xa,0,o)|0;if(!((C|0)==0?(xa|0)==(c[$>>2]|0):0)){xa=96;break}}if((xa|0)==81){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==83){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==85){xa=0;Ub(o,1,8295,ha)|0;p=0;q=0;break}else if((xa|0)==87){xa=0;Ub(o,1,8313,ia)|0;p=0;q=0;break}else if((xa|0)==89){xa=0;Ub(o,1,8295,ka)|0;p=0;q=0;break}else if((xa|0)==91){xa=0;Ub(o,1,8662,la)|0;p=0;q=0;break}else if((xa|0)==94){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==96){xa=0;p=(Sb(n,M,N,o)|0)!=0&1;q=0;break}else if((xa|0)==97){xa=0;q=(c[U>>2]|0)==(c[Y>>2]|0)&1;p=(Sb(n,M,N,o)|0)!=0&1;break}}else{p=1;q=0}while(0);if(!p){xa=99;break}if(q){p=_(c[E>>2]|0,c[D>>2]|0)|0;a[ta>>0]=a[ta>>0]&-18|16;if(p){q=c[P>>2]|0;t=0;do{r=q+(t*5640|0)+5588|0;s=c[r>>2]|0;if(s)c[r>>2]=s+1;t=t+1|0}while((t|0)!=(p|0))}Ub(o,2,8734,na)|0}}if(!(a[ta>>0]&1)){if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=109;break}qb(c[J>>2]|0,S,2)}}else{a[ta>>0]=p&-6;c[Aa>>2]=8;if((Mb(n,c[J>>2]|0,2,o)|0)!=2){xa=113;break}qb(c[J>>2]|0,S,2)}p=c[S>>2]|0;if(!((p|0)!=65497&(a[ta>>0]&1)==0)){xa=116;break}}switch(xa|0){case 9:{Ub(o,1,8295,aa)|0;o=0;i=Da;return o|0}case 11:{Ub(o,1,8313,ba)|0;o=0;i=Da;return o|0}case 20:{Ub(o,1,8339,ja)|0;o=0;i=Da;return o|0}case 24:{Ub(o,1,8382,qa)|0;o=0;i=Da;return o|0}case 26:{Uc(c[J>>2]|0);c[J>>2]=0;c[K>>2]=0;Ub(o,1,8427,ra)|0;o=0;i=Da;return o|0}case 29:{Ub(o,1,8295,sa)|0;o=0;i=Da;return o|0}case 31:{Ub(o,1,8461,ca)|0;o=0;i=Da;return o|0}case 33:{c[da>>2]=c[S>>2];Ub(o,1,8490,da)|0;o=0;i=Da;return o|0}case 41:{Uc(c[p>>2]|0);Ca=c[q>>2]|0;c[Ca+(r*40|0)+24>>2]=0;c[Ca+(r*40|0)+28>>2]=0;c[Ca+(r*40|0)+20>>2]=0;Ub(o,1,8537,va)|0;o=0;i=Da;return o|0}case 47:{Ub(o,1,8295,ea)|0;o=0;i=Da;return o|0}case 50:{Ub(o,1,8295,fa)|0;o=0;i=Da;return o|0}case 65:{Uc(c[p>>2]|0);c[p>>2]=0;break}case 74:{Uc(c[p>>2]|0);Ca=c[q>>2]|0;c[Ca+(r*40|0)+24>>2]=0;c[Ca+(r*40|0)+28>>2]=0;c[Ca+(r*40|0)+20>>2]=0;Ub(o,1,8537,wa)|0;o=0;i=Da;return o|0}case 99:{Ub(o,1,8688,ma)|0;o=0;i=Da;return o|0}case 109:{Ub(o,1,8295,oa)|0;o=0;i=Da;return o|0}case 113:{Ub(o,1,8295,pa)|0;o=0;i=Da;return o|0}case 115:{p=c[S>>2]|0;xa=116;break}}if((xa|0)==116)if((p|0)==65497){p=ta;xa=117;break a}else{p=ta;break a}Ub(o,1,8628,ua)|0;o=0;i=Da;return o|0}else p=ta;break}default:{o=0;i=Da;return o|0}}while(0);if((xa|0)==117)if((c[Aa>>2]|0)!=256){c[d+200>>2]=0;c[Aa>>2]=256}if(!(a[p>>0]&1)){s=_(c[d+112>>2]|0,c[d+116>>2]|0)|0;t=d+200|0;q=c[t>>2]|0;d:do if(q>>>0>>0){p=q;r=(c[d+164>>2]|0)+(q*5640|0)|0;while(1){if(c[r+5592>>2]|0){q=p;break d}q=p+1|0;c[t>>2]=q;if(q>>>0>>0){p=q;r=r+5640|0}else break}}while(0);if((q|0)==(s|0)){c[m>>2]=0;o=1;i=Da;return o|0}}else{q=d+200|0;t=q;q=c[q>>2]|0}A=c[d+164>>2]|0;if(a[A+(q*5640|0)+5636>>0]&2){B=A+(q*5640|0)+5160|0;r=c[B>>2]|0;if(!r)p=0;else{s=c[A+(q*5640|0)+5164>>2]|0;u=0;p=0;do{p=(c[s+(u<<3)+4>>2]|0)+p|0;u=u+1|0}while((u|0)!=(r|0))}xa=Pc(p)|0;z=A+(q*5640|0)+5172|0;c[z>>2]=xa;if(!xa){Ub(o,1,8775,ya)|0;Ub(o,1,8813,za)|0;o=0;i=Da;return o|0}y=A+(q*5640|0)+5180|0;c[y>>2]=p;r=c[B>>2]|0;x=A+(q*5640|0)+5164|0;if(!r)p=c[x>>2]|0;else{p=c[x>>2]|0;v=p;w=0;u=0;while(1){s=c[v+(w<<3)>>2]|0;if(!s)s=v;else{Ui((c[z>>2]|0)+u|0,s|0,c[v+(w<<3)+4>>2]|0)|0;s=c[x>>2]|0;u=(c[s+(w<<3)+4>>2]|0)+u|0;Uc(c[s+(w<<3)>>2]|0);s=c[x>>2]|0;c[s+(w<<3)>>2]=0;c[s+(w<<3)+4>>2]=0;r=c[B>>2]|0;p=s}w=w+1|0;if(w>>>0>=r>>>0)break;else v=s}}c[B>>2]=0;Uc(p);c[x>>2]=0;c[A+(q*5640|0)+5168>>2]=c[z>>2];c[A+(q*5640|0)+5176>>2]=c[y>>2];q=c[t>>2]|0}p=d+204|0;if(!($f(c[p>>2]|0,q,o)|0)){Ub(o,1,8839,Ba)|0;o=0;i=Da;return o|0}else{Ba=_(c[d+112>>2]|0,c[d+116>>2]|0)|0;c[Ca>>2]=(c[t>>2]|0)+1;c[Ca+4>>2]=Ba;Ub(o,4,8873,Ca)|0;c[e>>2]=c[t>>2];c[m>>2]=1;c[f>>2]=ag(c[p>>2]|0)|0;o=c[c[(c[p>>2]|0)+20>>2]>>2]|0;c[g>>2]=c[o>>2];c[h>>2]=c[o+4>>2];c[j>>2]=c[o+8>>2];c[k>>2]=c[o+12>>2];c[l>>2]=c[o+16>>2];c[Aa>>2]=c[Aa>>2]|128;o=1;i=Da;return o|0}return 0}function dd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+48|0;r=t+28|0;s=t+32|0;o=b+8|0;if(!(c[o>>2]&128)){g=0;i=t;return g|0}q=b+200|0;if((c[q>>2]|0)!=(d|0)){g=0;i=t;return g|0}j=c[b+164>>2]|0;n=j+(d*5640|0)|0;p=j+(d*5640|0)+5592|0;k=c[p>>2]|0;if(!k){sd(n);g=0;i=t;return g|0}l=b+204|0;m=j+(d*5640|0)+5596|0;if(!(cg(c[l>>2]|0,k,c[m>>2]|0,d,c[b+196>>2]|0,h)|0)){sd(n);c[o>>2]=c[o>>2]|32768;Ub(h,1,8912,t)|0;g=0;i=t;return g|0}if(!(dg(c[l>>2]|0,e,f)|0)){g=0;i=t;return g|0}j=c[p>>2]|0;if(j){Uc(j);c[p>>2]=0;c[m>>2]=0}p=b+76|0;a[p>>0]=a[p>>0]&-2;c[o>>2]=c[o>>2]&-129;p=Qb(g)|0;b=c[o>>2]|0;if((b|0)==256|(p|0)==0&(C|0)==0&(b|0)==64){g=1;i=t;return g|0}if((Mb(g,s,2,h)|0)!=2){Ub(h,2,8931,t+8|0)|0;g=1;i=t;return g|0}qb(s,r,2);switch(c[r>>2]|0){case 65497:{c[q>>2]=0;c[o>>2]=256;g=1;i=t;return g|0}case 65424:{g=1;i=t;return g|0}default:if((Qb(g)|0)==0&(C|0)==0){c[o>>2]=64;Ub(h,2,8975,t+16|0)|0;g=1;i=t;return g|0}else{Ub(h,1,9005,t+24|0)|0;g=0;i=t;return g|0}}return 0}function ed(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;y=z+96|0;x=z+88|0;w=z+80|0;v=z+72|0;u=z+64|0;s=z+56|0;r=z+48|0;o=z+40|0;n=z+32|0;m=z+24|0;l=z+16|0;p=c[b+80>>2]|0;if((c[b+8>>2]|0)!=8){Ub(j,1,9037,z)|0;j=0;i=z;return j|0}if(!(f|e|g|h)){Ub(j,4,9116,z+8|0)|0;c[b+28>>2]=0;c[b+32>>2]=0;c[b+36>>2]=c[b+112>>2];c[b+40>>2]=c[b+116>>2];j=1;i=z;return j|0}t=p+8|0;k=c[t>>2]|0;if(k>>>0>>0){c[l>>2]=e;c[l+4>>2]=k;Ub(j,1,9185,l)|0;j=0;i=z;return j|0}k=c[p>>2]|0;if(k>>>0>e>>>0){c[m>>2]=e;c[m+4>>2]=k;Ub(j,2,9272,m)|0;k=0;e=c[p>>2]|0}else k=((e-(c[b+92>>2]|0)|0)>>>0)/((c[b+100>>2]|0)>>>0)|0;c[b+28>>2]=k;c[d>>2]=e;q=p+12|0;e=c[q>>2]|0;if(e>>>0>>0){c[n>>2]=f;c[n+4>>2]=e;Ub(j,1,9360,n)|0;j=0;i=z;return j|0}l=p+4|0;e=c[l>>2]|0;if(e>>>0>f>>>0){c[o>>2]=f;c[o+4>>2]=e;Ub(j,2,9445,o)|0;e=0;f=c[l>>2]|0}else e=((f-(c[b+96>>2]|0)|0)>>>0)/((c[b+104>>2]|0)>>>0)|0;c[b+32>>2]=e;m=d+4|0;c[m>>2]=f;e=c[p>>2]|0;if(e>>>0>g>>>0){c[r>>2]=g;c[r+4>>2]=e;Ub(j,1,9531,r)|0;j=0;i=z;return j|0}e=c[t>>2]|0;if(e>>>0>>0){c[s>>2]=g;c[s+4>>2]=e;Ub(j,2,9620,s)|0;e=c[b+112>>2]|0;g=c[t>>2]|0}else{e=c[b+100>>2]|0;e=(g+-1-(c[b+92>>2]|0)+e|0)/(e|0)|0}c[b+36>>2]=e;k=d+8|0;c[k>>2]=g;g=c[l>>2]|0;if(g>>>0>h>>>0){c[u>>2]=h;c[u+4>>2]=g;Ub(j,1,9708,u)|0;j=0;i=z;return j|0}g=c[q>>2]|0;if(g>>>0>>0){c[v>>2]=h;c[v+4>>2]=g;Ub(j,2,9798,v)|0;e=c[q>>2]|0;g=c[b+116>>2]|0}else{g=c[b+104>>2]|0;e=h;g=(h+-1-(c[b+96>>2]|0)+g|0)/(g|0)|0}c[b+40>>2]=g;h=d+12|0;c[h>>2]=e;v=b+76|0;a[v>>0]=a[v>>0]|2;v=c[d+16>>2]|0;b=c[d>>2]|0;a:do if(v){f=c[m>>2]|0;t=f+-1|0;u=c[k>>2]|0;q=u+-1|0;r=b+-1|0;g=0;p=c[d+24>>2]|0;while(1){d=c[p>>2]|0;e=(r+d|0)/(d|0)|0;c[p+16>>2]=e;o=c[p+4>>2]|0;k=(t+o|0)/(o|0)|0;c[p+20>>2]=k;d=(q+d|0)/(d|0)|0;l=c[p+40>>2]|0;m=Ri(1,0,l|0)|0;n=C;d=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;d=Si(d|0,C|0,m|0,n|0)|0;d=Pi(d|0,C|0,l|0)|0;e=Si(e|0,((e|0)<0)<<31>>31|0,-1,-1)|0;e=Si(e|0,C|0,m|0,n|0)|0;e=Pi(e|0,C|0,l|0)|0;e=d-e|0;if((e|0)<0){k=29;break}s=c[h>>2]|0;d=(o+-1+s|0)/(o|0)|0;c[p+8>>2]=e;d=Si(d|0,((d|0)<0)<<31>>31|0,-1,-1)|0;d=Si(d|0,C|0,m|0,n|0)|0;d=Pi(d|0,C|0,l|0)|0;e=Si(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;e=Si(e|0,C|0,m|0,n|0)|0;e=Pi(e|0,C|0,l|0)|0;e=d-e|0;if((e|0)<0){k=31;break}c[p+12>>2]=e;g=g+1|0;if(g>>>0>=v>>>0){e=u;g=s;break a}else p=p+52|0}if((k|0)==29){c[w>>2]=g;c[w+4>>2]=e;Ub(j,1,9887,w)|0;j=0;i=z;return j|0}else if((k|0)==31){c[x>>2]=g;c[x+4>>2]=e;Ub(j,1,9956,x)|0;j=0;i=z;return j|0}}else{f=c[m>>2]|0;e=c[k>>2]|0;g=c[h>>2]|0}while(0);c[y>>2]=b;c[y+4>>2]=f;c[y+8>>2]=e;c[y+12>>2]=g;Ub(j,4,10025,y)|0;j=1;i=z;return j|0}function fd(){var b=0,d=0,e=0;b=Qc(1,208)|0;if(!b){d=0;return d|0}c[b>>2]=1;d=b+184|0;a[d>>0]=a[d>>0]|2;d=Qc(1,5640)|0;c[b+12>>2]=d;if(!d){Yc(b);d=0;return d|0}d=Qc(1,1e3)|0;c[b+16>>2]=d;if(!d){Yc(b);d=0;return d|0}c[b+20>>2]=1e3;c[b+60>>2]=-1;d=b+64|0;c[d>>2]=0;c[d+4>>2]=0;d=Qc(1,48)|0;do if(d){c[d+32>>2]=100;c[d+24>>2]=0;e=Qc(100,24)|0;c[d+28>>2]=e;if(!e){Uc(d);break}c[d+40>>2]=0;c[b+196>>2]=d;e=qg()|0;c[b+192>>2]=e;if(!e){Yc(b);e=0;return e|0}e=qg()|0;c[b+188>>2]=e;if(e){e=b;return e|0}Yc(b);e=0;return e|0}while(0);c[b+196>>2]=0;Yc(b);e=0;return e|0}function gd(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=i;i=i+128|0;s=t+104|0;r=t+72|0;q=t+64|0;n=t+40|0;l=t+24|0;j=t+16|0;h=t+8|0;g=t;if(b&384){ki(10063,11,1,d)|0;i=t;return}if((b&1|0)!=0?(f=c[a+80>>2]|0,(f|0)!=0):0)hd(f,0,d);if(b&2){ki(10075,36,1,d)|0;f=c[a+96>>2]|0;c[g>>2]=c[a+92>>2];c[g+4>>2]=f;$h(d,10112,g)|0;g=c[a+104>>2]|0;c[h>>2]=c[a+100>>2];c[h+4>>2]=g;$h(d,10130,h)|0;h=c[a+116>>2]|0;c[j>>2]=c[a+112>>2];c[j+4>>2]=h;$h(d,10148,j)|0;xd(c[a+12>>2]|0,c[(c[a+80>>2]|0)+16>>2]|0,d);ki(10164,2,1,d)|0}if((b&8|0)!=0?(k=_(c[a+112>>2]|0,c[a+116>>2]|0)|0,(k|0)!=0):0){f=a+80|0;g=0;h=c[a+164>>2]|0;while(1){xd(h,c[(c[f>>2]|0)+16>>2]|0,d);g=g+1|0;if((g|0)==(k|0))break;else h=h+5640|0}}if(!(b&16)){i=t;return}j=c[a+196>>2]|0;ki(10167,37,1,d)|0;k=j;b=c[k+4>>2]|0;f=j+8|0;a=c[f>>2]|0;f=c[f+4>>2]|0;h=l;c[h>>2]=c[k>>2];c[h+4>>2]=b;h=l+8|0;c[h>>2]=a;c[h+4>>2]=f;$h(d,10205,l)|0;ki(10272,17,1,d)|0;h=j+28|0;f=c[h>>2]|0;a:do if((f|0)!=0?(m=j+24|0,(c[m>>2]|0)!=0):0){g=0;while(1){b=f+(g*24|0)+8|0;k=c[b>>2]|0;b=c[b+4>>2]|0;l=c[f+(g*24|0)+16>>2]|0;c[n>>2]=e[f+(g*24|0)>>1];a=n+8|0;c[a>>2]=k;c[a+4>>2]=b;c[n+16>>2]=l;$h(d,10290,n)|0;g=g+1|0;if(g>>>0>=(c[m>>2]|0)>>>0)break a;f=c[h>>2]|0}}while(0);ki(10321,4,1,d)|0;b=j+40|0;h=c[b>>2]|0;if((h|0)!=0?(p=j+36|0,o=c[p>>2]|0,(o|0)!=0):0){g=0;f=0;do{f=(c[h+(g*40|0)+4>>2]|0)+f|0;g=g+1|0}while((g|0)!=(o|0));if(f){ki(10326,16,1,d)|0;if(c[p>>2]|0){f=c[b>>2]|0;k=0;do{j=c[f+(k*40|0)+4>>2]|0;c[q>>2]=k;c[q+4>>2]=j;$h(d,10343,q)|0;f=c[b>>2]|0;g=c[f+(k*40|0)+16>>2]|0;b:do if(!((j|0)==0|(g|0)==0)){f=0;while(1){a=g+(f*24|0)|0;u=c[a>>2]|0;a=c[a+4>>2]|0;m=g+(f*24|0)+8|0;l=c[m>>2]|0;m=c[m+4>>2]|0;o=g+(f*24|0)+16|0;n=c[o>>2]|0;o=c[o+4>>2]|0;c[r>>2]=f;h=r+8|0;c[h>>2]=u;c[h+4>>2]=a;h=r+16|0;c[h>>2]=l;c[h+4>>2]=m;h=r+24|0;c[h>>2]=n;c[h+4>>2]=o;$h(d,10379,r)|0;h=f+1|0;f=c[b>>2]|0;if((h|0)==(j|0))break b;g=c[f+(k*40|0)+16>>2]|0;f=h}}while(0);g=c[f+(k*40|0)+24>>2]|0;c:do if((g|0)!=0?(c[f+(k*40|0)+20>>2]|0)!=0:0){f=0;while(1){o=g+(f*24|0)+8|0;n=c[o>>2]|0;o=c[o+4>>2]|0;h=c[g+(f*24|0)+16>>2]|0;c[s>>2]=e[g+(f*24|0)>>1];u=s+8|0;c[u>>2]=n;c[u+4>>2]=o;c[s+16>>2]=h;$h(d,10290,s)|0;h=f+1|0;f=c[b>>2]|0;if(h>>>0>=(c[f+(k*40|0)+20>>2]|0)>>>0)break c;g=c[f+(k*40|0)+24>>2]|0;f=h}}while(0);k=k+1|0}while(k>>>0<(c[p>>2]|0)>>>0)}ki(10321,4,1,d)|0}}ki(10164,2,1,d)|0;i=t;return}function hd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;n=i;i=i+64|0;m=n+48|0;l=n+40|0;j=n+32|0;h=n+16|0;g=n;k=n+52|0;if(!d){ki(10482,13,1,e)|0;a[k+1>>0]=0;f=9}else{ki(10445,36,1,c[676]|0)|0;f=0}a[k>>0]=f;o=c[b>>2]|0;f=c[b+4>>2]|0;c[g>>2]=k;c[g+4>>2]=o;c[g+8>>2]=f;$h(e,10496,g)|0;g=c[b+8>>2]|0;f=c[b+12>>2]|0;c[h>>2]=k;c[h+4>>2]=g;c[h+8>>2]=f;$h(e,10513,h)|0;h=b+16|0;f=c[h>>2]|0;c[j>>2]=k;c[j+4>>2]=f;$h(e,10530,j)|0;f=b+24|0;if(!(c[f>>2]|0)){ki(10164,2,1,e)|0;i=n;return}if(!(c[h>>2]|0)){ki(10164,2,1,e)|0;i=n;return}else g=0;do{c[l>>2]=k;c[l+4>>2]=g;$h(e,10546,l)|0;id((c[f>>2]|0)+(g*52|0)|0,d,e);c[m>>2]=k;$h(e,10566,m)|0;g=g+1|0}while(g>>>0<(c[h>>2]|0)>>>0);ki(10164,2,1,e)|0;i=n;return}function id(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;l=i;i=i+48|0;k=l+24|0;j=l+16|0;h=l;g=l+32|0;f=(d|0)!=0;if(f){ki(10571,41,1,c[676]|0)|0;d=0}else{a[g+1>>0]=9;a[g+2>>0]=0;d=9}a[g>>0]=d;m=c[b>>2]|0;d=c[b+4>>2]|0;c[h>>2]=g;c[h+4>>2]=m;c[h+8>>2]=d;$h(e,10613,h)|0;h=c[b+24>>2]|0;c[j>>2]=g;c[j+4>>2]=h;$h(e,10630,j)|0;j=c[b+32>>2]|0;c[k>>2]=g;c[k+4>>2]=j;$h(e,10642,k)|0;if(!f){i=l;return}ki(10164,2,1,e)|0;i=l;return}function jd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;e=m;b=a+80|0;k=c[(c[b>>2]|0)+16>>2]|0;d=Qc(1,56)|0;c[e>>2]=d;if(!d){l=0;i=m;return l|0}c[d+24>>2]=c[(c[b>>2]|0)+16>>2];c[d>>2]=c[a+92>>2];c[d+4>>2]=c[a+96>>2];c[d+8>>2]=c[a+100>>2];c[d+12>>2]=c[a+104>>2];c[d+16>>2]=c[a+112>>2];c[d+20>>2]=c[a+116>>2];c[d+52>>2]=0;d=c[a+12>>2]|0;b=c[e>>2]|0;c[b+32>>2]=c[d>>2];c[b+36>>2]=c[d+4>>2];c[b+40>>2]=c[d+8>>2];c[b+44>>2]=c[d+16>>2];c[b+48>>2]=Qc(c[b+24>>2]|0,1080)|0;b=c[e>>2]|0;j=b+48|0;a=c[j>>2]|0;if(!a){Cc(e);l=0;i=m;return l|0}if(!k){l=b;i=m;return l|0}h=d+5584|0;d=0;while(1){g=c[h>>2]|0;c[a+(d*1080|0)+4>>2]=c[g+(d*1080|0)>>2];e=g+(d*1080|0)+4|0;f=c[e>>2]|0;c[a+(d*1080|0)+8>>2]=f;c[a+(d*1080|0)+12>>2]=c[g+(d*1080|0)+8>>2];c[a+(d*1080|0)+16>>2]=c[g+(d*1080|0)+12>>2];c[a+(d*1080|0)+20>>2]=c[g+(d*1080|0)+16>>2];c[a+(d*1080|0)+24>>2]=c[g+(d*1080|0)+20>>2];if(f>>>0<33){Ui(a+(d*1080|0)+948|0,g+(d*1080|0)+944|0,f|0)|0;Ui(a+(d*1080|0)+816|0,g+(d*1080|0)+812|0,c[e>>2]|0)|0}f=c[g+(d*1080|0)+24>>2]|0;c[a+(d*1080|0)+28>>2]=f;c[a+(d*1080|0)+808>>2]=c[g+(d*1080|0)+804>>2];if((f|0)!=1){f=(c[e>>2]|0)*3|0;e=f+-2|0;if((e|0)<97&(f|0)>2)l=10}else{e=1;l=10}if((l|0)==10){l=0;f=0;do{c[a+(d*1080|0)+32+(f<<2)>>2]=c[g+(d*1080|0)+28+(f<<3)+4>>2];c[a+(d*1080|0)+420+(f<<2)>>2]=c[g+(d*1080|0)+28+(f<<3)>>2];f=f+1|0}while((f|0)!=(e|0))}c[a+(d*1080|0)+812>>2]=c[g+(d*1080|0)+808>>2];d=d+1|0;if((d|0)==(k|0))break;a=c[j>>2]|0}i=m;return b|0}function kd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=Qc(1,48)|0;if(!b){k=0;return k|0}h=a+196|0;d=c[h>>2]|0;i=d;k=c[i+4>>2]|0;a=b;c[a>>2]=c[i>>2];c[a+4>>2]=k;a=d+8|0;k=c[a+4>>2]|0;i=b+8|0;c[i>>2]=c[a>>2];c[i+4>>2]=k;i=d+16|0;k=c[i+4>>2]|0;a=b+16|0;c[a>>2]=c[i>>2];c[a+4>>2]=k;d=c[d+24>>2]|0;a=b+24|0;c[a>>2]=d;d=Pc(d*24|0)|0;k=b+28|0;c[k>>2]=d;if(!d){Uc(b);k=0;return k|0}e=c[(c[h>>2]|0)+28>>2]|0;if(!e){Uc(d);c[k>>2]=0}else Ui(d|0,e|0,(c[a>>2]|0)*24|0)|0;a=c[(c[h>>2]|0)+36>>2]|0;g=b+36|0;c[g>>2]=a;a=Qc(a,40)|0;i=b+40|0;c[i>>2]=a;if(!a){Uc(c[k>>2]|0);Uc(b);k=0;return k|0}d=c[(c[h>>2]|0)+40>>2]|0;if(!d){Uc(a);c[i>>2]=0;k=b;return k|0}if(!(c[g>>2]|0)){k=b;return k|0}d=c[d+20>>2]|0;c[a+20>>2]=d;d=Pc(d*24|0)|0;a=c[i>>2]|0;c[a+24>>2]=d;a:do if(!d)d=0;else{f=d;d=0;while(1){e=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+24>>2]|0;if(!e){Uc(f);a=c[i>>2]|0;c[a+(d*40|0)+24>>2]=0}else{Ui(f|0,e|0,(c[a+(d*40|0)+20>>2]|0)*24|0)|0;a=c[i>>2]|0}e=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+4>>2]|0;c[a+(d*40|0)+4>>2]=e;e=Pc(e*24|0)|0;a=c[i>>2]|0;c[a+(d*40|0)+16>>2]=e;if(!e)break;f=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+16>>2]|0;if(!f){Uc(e);a=c[i>>2]|0;c[a+(d*40|0)+16>>2]=0}else{Ui(e|0,f|0,(c[a+(d*40|0)+4>>2]|0)*24|0)|0;a=c[i>>2]|0}c[a+(d*40|0)+32>>2]=0;c[a+(d*40|0)+36>>2]=0;d=d+1|0;if(d>>>0>=(c[g>>2]|0)>>>0){j=32;break}f=c[(c[(c[h>>2]|0)+40>>2]|0)+(d*40|0)+20>>2]|0;c[a+(d*40|0)+20>>2]=f;f=Pc(f*24|0)|0;a=c[i>>2]|0;c[a+(d*40|0)+24>>2]=f;if(!f)break a}if((j|0)==32)return b|0;if(d){Uc(c[a+24>>2]|0);Uc(c[(c[i>>2]|0)+16>>2]|0);if((d|0)!=1){a=1;do{Uc(c[(c[i>>2]|0)+(a*40|0)+24>>2]|0);Uc(c[(c[i>>2]|0)+(a*40|0)+16>>2]|0);a=a+1|0}while((a|0)!=(d|0))}a=c[i>>2]|0}Uc(a);Uc(c[k>>2]|0);Uc(b);k=0;return k|0}while(0);if(d){Uc(c[a+24>>2]|0);if((d|0)!=1){a=1;do{Uc(c[(c[i>>2]|0)+(a*40|0)+24>>2]|0);a=a+1|0}while((a|0)!=(d|0))}a=c[i>>2]|0}Uc(a);Uc(c[k>>2]|0);Uc(b);k=0;return k|0}function ld(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d){d=0;return d|0}f=Xb()|0;k=a+84|0;c[k>>2]=f;if(!f){d=0;return d|0}$b(d,f);h=a+188|0;sg(c[h>>2]|0,27,e)|0;h=c[h>>2]|0;i=tg(h)|0;f=ug(h)|0;if(i){j=0;g=1;while(1){if(!g)g=0;else g=(Ra[c[f>>2]&63](a,b,e)|0)!=0;j=j+1|0;if((j|0)==(i|0))break;else{f=f+4|0;g=g&1}}vg(h);if(!g){d=a+80|0;Zb(c[d>>2]|0);c[d>>2]=0;d=0;return d|0}}else vg(h);i=c[d+16>>2]|0;if(!i){d=1;return d|0}h=c[(c[k>>2]|0)+24>>2]|0;f=c[d+24>>2]|0;g=0;do{c[f+(g*52|0)+36>>2]=c[h+(g*52|0)+36>>2];d=h+(g*52|0)+44|0;c[f+(g*52|0)+44>>2]=c[d>>2];c[d>>2]=0;g=g+1|0}while(g>>>0>>0);f=1;return f|0}function md(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;t=i;i=i+16|0;j=t+8|0;if(!d){Ub(e,1,10654,t)|0;s=0;i=t;return s|0}g=c[a+112>>2]|0;h=_(c[a+116>>2]|0,g)|0;if(h>>>0<=f>>>0){c[j>>2]=f;c[j+4>>2]=h+-1;Ub(e,1,10692,j)|0;s=0;i=t;return s|0}s=(f>>>0)%(g>>>0)|0;r=(f>>>0)/(g>>>0)|0;j=c[a+100>>2]|0;h=_(j,s)|0;k=c[a+92>>2]|0;h=h+k|0;c[d>>2]=h;q=a+80|0;g=c[q>>2]|0;l=c[g>>2]|0;h=h>>>0>>0?l:h;c[d>>2]=h;k=(_(j,s+1|0)|0)+k|0;s=d+8|0;c[s>>2]=k;j=c[g+8>>2]|0;k=k>>>0>j>>>0?j:k;c[s>>2]=k;s=c[a+104>>2]|0;j=_(s,r)|0;l=c[a+96>>2]|0;j=j+l|0;p=d+4|0;c[p>>2]=j;o=c[g+4>>2]|0;j=j>>>0>>0?o:j;c[p>>2]=j;l=(_(s,r+1|0)|0)+l|0;r=d+12|0;c[r>>2]=l;s=c[g+12>>2]|0;l=l>>>0>s>>>0?s:l;c[r>>2]=l;r=d+24|0;s=d+16|0;p=c[s>>2]|0;if(p){o=c[g+24>>2]|0;n=h+-1|0;m=j+-1|0;k=k+-1|0;g=l+-1|0;h=0;j=c[r>>2]|0;while(1){l=c[o+(h*52|0)+40>>2]|0;c[j+40>>2]=l;z=c[j>>2]|0;y=(n+z|0)/(z|0)|0;c[j+16>>2]=y;u=c[j+4>>2]|0;x=(m+u|0)/(u|0)|0;c[j+20>>2]=x;z=(k+z|0)/(z|0)|0;u=(g+u|0)/(u|0)|0;w=Ri(1,0,l|0)|0;v=C;z=Si(z|0,((z|0)<0)<<31>>31|0,-1,-1)|0;z=Si(z|0,C|0,w|0,v|0)|0;z=Pi(z|0,C|0,l|0)|0;y=Si(y|0,((y|0)<0)<<31>>31|0,-1,-1)|0;y=Si(y|0,C|0,w|0,v|0)|0;y=Pi(y|0,C|0,l|0)|0;c[j+8>>2]=z-y;u=Si(u|0,((u|0)<0)<<31>>31|0,-1,-1)|0;u=Si(u|0,C|0,w|0,v|0)|0;u=Pi(u|0,C|0,l|0)|0;x=Si(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;v=Si(x|0,C|0,w|0,v|0)|0;l=Pi(v|0,C|0,l|0)|0;c[j+12>>2]=u-l;h=h+1|0;if(h>>>0>=p>>>0)break;else j=j+52|0}}m=a+84|0;g=c[m>>2]|0;if(g)Zb(g);g=Xb()|0;c[m>>2]=g;if(!g){z=0;i=t;return z|0}$b(d,g);c[a+60>>2]=f;j=a+188|0;sg(c[j>>2]|0,28,e)|0;j=c[j>>2]|0;k=tg(j)|0;g=ug(j)|0;if(k){l=0;h=1;while(1){if(!h)h=0;else h=(Ra[c[g>>2]&63](a,b,e)|0)!=0;l=l+1|0;if((l|0)==(k|0))break;else{g=g+4|0;h=h&1}}vg(j);if(!h){Zb(c[q>>2]|0);c[q>>2]=0;z=0;i=t;return z|0}}else vg(j);g=c[s>>2]|0;if(!g){z=1;i=t;return z|0}k=c[(c[m>>2]|0)+24>>2]|0;j=c[r>>2]|0;l=0;while(1){c[j+(l*52|0)+36>>2]=c[k+(l*52|0)+36>>2];h=c[j+(l*52|0)+44>>2]|0;if(!h)h=k;else{Uc(h);h=c[(c[m>>2]|0)+24>>2]|0;j=c[r>>2]|0;g=c[s>>2]|0}z=h+(l*52|0)+44|0;c[j+(l*52|0)+44>>2]=c[z>>2];c[z>>2]=0;l=l+1|0;if(l>>>0>=g>>>0){g=1;break}else k=h}i=t;return g|0}function nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;k=i;i=i+16|0;j=k;c[a+168>>2]=b;e=c[a+80>>2]|0;a:do if((((e|0)!=0?(h=c[e+24>>2]|0,(h|0)!=0):0)?(f=c[a+12>>2]|0,(f|0)!=0):0)?(g=c[f+5584>>2]|0,(g|0)!=0):0){e=c[e+16>>2]|0;if(!e)e=1;else{f=0;while(1){if((c[g+(f*1080|0)+4>>2]|0)>>>0<=b>>>0)break;c[h+(f*52|0)+40>>2]=b;f=f+1|0;if(f>>>0>=e>>>0){e=1;break a}}Ub(d,1,10753,j)|0;e=0}}else e=0;while(0);i=k;return e|0}function od(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;Q=i;i=i+48|0;O=Q+32|0;N=Q+24|0;M=Q+16|0;K=Q+8|0;L=Q;A=d+204|0;g=c[A>>2]|0;F=d+116|0;G=d+112|0;H=_(c[G>>2]|0,c[F>>2]|0)|0;I=(H|0)==1;if(!H){P=1;i=Q;return P|0}J=d+200|0;B=d+12|0;C=d+164|0;D=d+8|0;E=g+20|0;y=g+24|0;z=0;g=0;l=0;a:while(1){if((c[J>>2]|0)!=(z|0)){P=5;break}w=z;z=z+1|0;x=_(c[F>>2]|0,c[G>>2]|0)|0;c[K>>2]=z;c[K+4>>2]=x;Ub(f,4,10866,K)|0;c[B>>2]=0;x=c[A>>2]|0;c[x+12>>2]=c[(c[C>>2]|0)+(w*5640|0)+5588>>2];c[D>>2]=0;if(!(_f(x,c[J>>2]|0,f)|0))break;h=c[A>>2]|0;if(c[(c[h+24>>2]|0)+16>>2]|0){k=0;do{j=c[(c[c[E>>2]>>2]|0)+20>>2]|0;if(I){c[j+(k*52|0)+32>>2]=c[(c[(c[y>>2]|0)+24>>2]|0)+(k*52|0)+44>>2];c[j+(k*52|0)+36>>2]=0}else{if(!(Zf(j+(k*52|0)|0)|0)){P=14;break a}h=c[A>>2]|0}k=k+1|0}while(k>>>0<(c[(c[h+24>>2]|0)+16>>2]|0)>>>0)}x=eg(h)|0;if(!I){if(x>>>0>l>>>0){h=Tc(g,x)|0;if(!h){P=20;break}else{g=h;h=x}}else h=l;j=c[A>>2]|0;w=j+24|0;k=c[w>>2]|0;if(c[k+16>>2]|0){v=j+20|0;j=g;u=0;do{r=c[(c[c[v>>2]>>2]|0)+20>>2]|0;m=c[k+24>>2]|0;q=c[m+(u*52|0)+24>>2]|0;q=((q&7|0)!=0&1)+(q>>>3)|0;n=c[r+(u*52|0)+8>>2]|0;o=c[r+(u*52|0)>>2]|0;t=n-o|0;p=c[r+(u*52|0)+12>>2]|0;r=c[r+(u*52|0)+4>>2]|0;T=c[k>>2]|0;S=c[m+(u*52|0)>>2]|0;l=c[m+(u*52|0)+4>>2]|0;R=(S+~T+(c[k+8>>2]|0)|0)/(S|0)|0;s=R-t|0;k=o-((T+-1+S|0)/(S|0)|0)+(_(R,r-(((c[k+4>>2]|0)+-1+l|0)/(l|0)|0)|0)|0)|0;k=(c[m+(u*52|0)+44>>2]|0)+(k<<2)|0;b:do switch(((q|0)==3?4:q)|0){case 1:{l=(p|0)==(r|0);if(!(c[m+(u*52|0)+32>>2]|0)){if(l)break b;q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){a[m>>0]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+1|0;n=n+4|0}}j=j+t|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}else{if(l)break b;q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){a[m>>0]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+1|0;n=n+4|0}}j=j+t|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}break}case 2:{l=(p|0)==(r|0);if(!(c[m+(u*52|0)+32>>2]|0)){if(!l){q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){b[m>>1]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+2|0;n=n+4|0}}j=j+(t<<1)|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}}else if(!l){q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){b[m>>1]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+2|0;n=n+4|0}}j=j+(t<<1)|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}break}case 4:{if((p|0)!=(r|0)){q=(n|0)==(o|0);o=p-r|0;p=0;while(1){if(!q){l=0;m=j;n=k;while(1){c[m>>2]=c[n>>2];l=l+1|0;if((l|0)==(t|0))break;else{m=m+4|0;n=n+4|0}}j=j+(t<<2)|0;k=k+(t<<2)|0}p=p+1|0;if((p|0)==(o|0))break;else k=k+(s<<2)|0}}break}default:{}}while(0);u=u+1|0;k=c[w>>2]|0}while(u>>>0<(c[k+16>>2]|0)>>>0);j=c[A>>2]|0}if(!(fg(j,g,x)|0)){P=63;break}}else h=l;if(!(Ad(d,e,f)|0)){P=65;break}if(z>>>0>=H>>>0){P=67;break}else l=h}if((P|0)==5)Ub(f,1,10829,L)|0;else if((P|0)==14){Ub(f,1,10887,M)|0;if(!g){T=0;i=Q;return T|0}Uc(g);T=0;i=Q;return T|0}else if((P|0)==20){if(g)Uc(g);Ub(f,1,10925,N)|0;T=0;i=Q;return T|0}else if((P|0)==63){Ub(f,1,10964,O)|0;Uc(g);T=0;i=Q;return T|0}else if((P|0)==65){if(!g){T=0;i=Q;return T|0}Uc(g);T=0;i=Q;return T|0}else if((P|0)==67){if(!g){T=1;i=Q;return T|0}Uc(g);T=1;i=Q;return T|0}if(!g){T=0;i=Q;return T|0}Uc(g);T=0;i=Q;return T|0}function pd(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=a+188|0;if(!(sg(c[f>>2]|0,29,e)|0)){d=0;return d|0}if(((b[a+88>>1]|0)+-3&65535)<4?(sg(c[f>>2]|0,30,e)|0)==0:0){d=0;return d|0}if(!(sg(c[f>>2]|0,31,e)|0)){d=0;return d|0}if(!(sg(c[f>>2]|0,32,e)|0)){d=0;return d|0}if(!(sg(c[f>>2]|0,33,e)|0)){d=0;return d|0}j=c[f>>2]|0;h=tg(j)|0;f=ug(j)|0;if(!h)f=1;else{i=0;g=f;f=1;while(1){if(!f)f=0;else f=(Ra[c[g>>2]&63](a,d,e)|0)!=0;f=f&1;i=i+1|0;if((i|0)==(h|0))break;else g=g+4|0}}vg(j);d=f;return d|0}function qd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;g=Xb()|0;k=a+80|0;c[k>>2]=g;if(!g){Ub(f,1,11011,m)|0;d=0;i=m;return d|0}$b(e,g);j=c[e+24>>2]|0;if((j|0)!=0?(l=c[e+16>>2]|0,(l|0)!=0):0){h=0;do{e=j+(h*52|0)+44|0;g=c[e>>2]|0;if(g){c[(c[(c[k>>2]|0)+24>>2]|0)+(h*52|0)+44>>2]=g;c[e>>2]=0}h=h+1|0}while(h>>>0>>0)}g=a+192|0;if(!(sg(c[g>>2]|0,34,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,35,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,36,f)|0)){d=0;i=m;return d|0}h=c[g>>2]|0;j=tg(h)|0;g=ug(h)|0;if(j){k=0;e=1;while(1){if(!e)e=0;else e=(Ra[c[g>>2]&63](a,d,f)|0)!=0;k=k+1|0;if((k|0)==(j|0))break;else{g=g+4|0;e=e&1}}vg(h);if(!e){d=0;i=m;return d|0}}else vg(h);g=a+188|0;if(!(sg(c[g>>2]|0,37,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,38,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,39,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,40,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,41,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,42,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,43,f)|0)){d=0;i=m;return d|0}e=a+88|0;if(((b[e>>1]|0)+-3&65535)<4){if(!(sg(c[g>>2]|0,44,f)|0)){d=0;i=m;return d|0}if((b[e>>1]|0)==4?(sg(c[g>>2]|0,45,f)|0)==0:0){d=0;i=m;return d|0}}if(!(sg(c[g>>2]|0,46,f)|0)){d=0;i=m;return d|0}if((c[a+108>>2]|0)!=0?(sg(c[g>>2]|0,47,f)|0)==0:0){d=0;i=m;return d|0}if((b[e>>1]&256)!=0?(sg(c[g>>2]|0,48,f)|0)==0:0){d=0;i=m;return d|0}if((c[a+196>>2]|0)!=0?(sg(c[g>>2]|0,49,f)|0)==0:0){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,50,f)|0)){d=0;i=m;return d|0}if(!(sg(c[g>>2]|0,51,f)|0)){d=0;i=m;return d|0}k=c[g>>2]|0;h=tg(k)|0;g=ug(k)|0;if(!h)g=1;else{j=0;e=g;g=1;while(1){if(!g)g=0;else g=(Ra[c[e>>2]&63](a,d,f)|0)!=0;g=g&1;j=j+1|0;if((j|0)==(h|0))break;else e=e+4|0}}vg(k);d=g;i=m;return d|0}function rd(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;o=q+40|0;p=q+32|0;n=q+24|0;l=q+16|0;j=q+8|0;h=q;k=a+200|0;if((c[k>>2]|0)==(b|0)){m=_(c[a+116>>2]|0,c[a+112>>2]|0)|0;c[j>>2]=b+1;c[j+4>>2]=m;Ub(g,4,10866,j)|0;c[a+12>>2]=0;m=a+204|0;j=c[m>>2]|0;c[j+12>>2]=c[(c[a+164>>2]|0)+(b*5640|0)+5588>>2];c[a+8>>2]=0;if(_f(j,c[k>>2]|0,g)|0){h=c[m>>2]|0;a:do if(c[(c[h+24>>2]|0)+16>>2]|0){j=0;while(1){if(!(Zf((c[(c[c[h+20>>2]>>2]|0)+20>>2]|0)+(j*52|0)|0)|0))break;j=j+1|0;h=c[m>>2]|0;if(j>>>0>=(c[(c[h+24>>2]|0)+16>>2]|0)>>>0)break a}Ub(g,1,10887,n)|0;p=0;i=q;return p|0}while(0);if(!(fg(h,d,e)|0)){Ub(g,1,10964,p)|0;p=0;i=q;return p|0}if(Ad(a,f,g)|0){p=1;i=q;return p|0}c[o>>2]=b;Ub(g,1,11101,o)|0;p=0;i=q;return p|0}}else Ub(g,1,10829,h)|0;c[l>>2]=b;Ub(g,1,11044,l)|0;p=0;i=q;return p|0}function sd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a)return;f=a+5164|0;b=c[f>>2]|0;if(b){g=a+5160|0;d=c[g>>2]|0;if(d){e=0;while(1){b=c[b+(e<<3)>>2]|0;if(b){Uc(b);d=c[g>>2]|0}e=e+1|0;if(e>>>0>=d>>>0)break;b=c[f>>2]|0}b=c[f>>2]|0}c[g>>2]=0;Uc(b);c[f>>2]=0}b=a+5172|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5584|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5608|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5604|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5624|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0;c[a+5632>>2]=0;c[a+5628>>2]=0}i=a+5612|0;b=c[i>>2]|0;if(b){h=a+5616|0;d=c[h>>2]|0;if(d){g=0;while(1){e=b+12|0;f=c[e>>2]|0;if(f){Uc(f);c[e>>2]=0;d=c[h>>2]|0}g=g+1|0;if(g>>>0>=d>>>0)break;else b=b+20|0}b=c[i>>2]|0}Uc(b);c[i>>2]=0}b=a+5600|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}b=a+5592|0;d=c[b>>2]|0;if(!d)return;Uc(d);c[b>>2]=0;c[a+5596>>2]=0;return}function td(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function ud(a,b,d){a=a|0;b=b|0;d=d|0;return (c[a+8>>2]|0)==0&(c[a+188>>2]|0)!=0&(c[a+192>>2]|0)!=0&1|0}function vd(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;Y=i;i=i+224|0;X=Y+200|0;U=Y+192|0;T=Y+184|0;Q=Y+176|0;P=Y+168|0;O=Y+160|0;M=Y+152|0;L=Y+144|0;K=Y+136|0;E=Y+128|0;J=Y+120|0;D=Y+112|0;B=Y+104|0;A=Y+96|0;z=Y+88|0;y=Y+80|0;I=Y+72|0;H=Y+64|0;x=Y+56|0;w=Y+48|0;v=Y+40|0;F=Y+32|0;p=Y+24|0;m=Y+16|0;l=Y+8|0;N=Y;S=Y+216|0;g=Y+204|0;G=Y+212|0;u=Y+208|0;W=d+8|0;c[W>>2]=1;a:do if((Mb(e,S,2,f)|0)==2?(qb(S,g,2),(c[g>>2]|0)==65359):0){c[W>>2]=2;o=Pb(e)|0;o=Si(o|0,C|0,-2,-1)|0;n=C;V=d+196|0;h=c[V>>2]|0;c[h>>2]=o;c[h+4>>2]=n;h=N;c[h>>2]=o;c[h+4>>2]=n;Ub(f,4,15766,N)|0;h=c[V>>2]|0;n=c[h>>2]|0;o=h+24|0;g=c[o>>2]|0;k=h+32|0;j=c[k>>2]|0;do if((g+1|0)>>>0>j>>>0){t=~~(+(j>>>0)+100.0)>>>0;c[k>>2]=t;g=h+28|0;h=Tc(c[g>>2]|0,t*24|0)|0;if(!h){Uc(c[g>>2]|0);c[g>>2]=0;c[k>>2]=0;c[o>>2]=0;Ub(f,1,15803,l)|0;break a}else{c[g>>2]=h;g=c[o>>2]|0;break}}else h=c[h+28>>2]|0;while(0);b[h+(g*24|0)>>1]=-177;s=Pi(0,n|0,32)|0;t=h+(g*24|0)+8|0;c[t>>2]=s;c[t+4>>2]=C;c[h+(g*24|0)+16>>2]=2;c[o>>2]=g+1;t=d+16|0;if((Mb(e,c[t>>2]|0,2,f)|0)!=2){Ub(f,1,8295,p)|0;f=0;i=Y;return f|0}qb(c[t>>2]|0,G,2);g=c[G>>2]|0;if((g|0)!=65424){s=d+20|0;q=0;j=0;r=0;b:while(1){if(g>>>0<65280){R=14;break}else l=784;while(1){h=c[l>>2]|0;k=(h|0)==0;if(k|(h|0)==(g|0))break;else l=l+12|0}if(k){Ub(f,2,15914,v)|0;m=2;c:while(1){do{if((Mb(e,c[t>>2]|0,2,f)|0)!=2){R=20;break b}qb(c[t>>2]|0,N,2);g=c[N>>2]|0}while(g>>>0<65280);l=784;while(1){h=c[l>>2]|0;if((h|0)==0|(h|0)==(g|0)){k=l;g=l;break}else l=l+12|0}if(!(c[g+4>>2]&c[W>>2])){R=25;break b}if((h|0)>=65424){R=100;break}switch(h|0){case 0:break;default:{p=k;o=m;break c}}m=m+2|0}if((R|0)==100){R=0;switch(h|0){case 65424:{h=q;g=r;R=27;break b}default:{p=k;o=m}}}l=c[V>>2]|0;n=Pb(e)|0;n=n-o|0;k=l+24|0;g=c[k>>2]|0;h=l+32|0;m=c[h>>2]|0;if((g+1|0)>>>0>m>>>0){g=~~(+(m>>>0)+100.0)>>>0;c[h>>2]=g;l=l+28|0;g=Tc(c[l>>2]|0,g*24|0)|0;if(!g){j=l;g=l;R=32;break}c[l>>2]=g;h=g;g=c[k>>2]|0}else h=c[l+28>>2]|0;b[h+(g*24|0)>>1]=0;m=h+(g*24|0)+8|0;c[m>>2]=n;c[m+4>>2]=((n|0)<0)<<31>>31;c[h+(g*24|0)+16>>2]=o;c[k>>2]=g+1;g=c[p>>2]|0;c[G>>2]=g;if((g|0)==65424){h=q;g=r;break}else k=784;while(1){h=c[k>>2]|0;if((h|0)==0|(h|0)==(g|0))break;else k=k+12|0}}else k=l;r=(h|0)==65361?1:r;q=(h|0)==65362?1:q;j=(h|0)==65372?1:j;if(!(c[k+4>>2]&c[W>>2])){R=38;break}if((Mb(e,c[t>>2]|0,2,f)|0)!=2){R=40;break}qb(c[t>>2]|0,u,2);h=(c[u>>2]|0)+-2|0;c[u>>2]=h;g=c[t>>2]|0;if(h>>>0>(c[s>>2]|0)>>>0){g=Tc(g,h)|0;if(!g){R=43;break}c[t>>2]=g;h=c[u>>2]|0;c[s>>2]=h}g=Mb(e,g,h,f)|0;if((g|0)!=(c[u>>2]|0)){R=46;break}if(!(Za[c[k+8>>2]&63](d,c[t>>2]|0,g,f)|0)){R=48;break}m=c[V>>2]|0;n=c[k>>2]|0;o=Pb(e)|0;p=c[u>>2]|0;o=-4-p+o|0;p=p+4|0;k=m+24|0;g=c[k>>2]|0;h=m+32|0;l=c[h>>2]|0;if((g+1|0)>>>0>l>>>0){g=~~(+(l>>>0)+100.0)>>>0;c[h>>2]=g;l=m+28|0;g=Tc(c[l>>2]|0,g*24|0)|0;if(!g){j=l;g=l;R=53;break}c[l>>2]=g;h=g;g=c[k>>2]|0}else h=c[m+28>>2]|0;b[h+(g*24|0)>>1]=n;n=h+(g*24|0)+8|0;c[n>>2]=o;c[n+4>>2]=((o|0)<0)<<31>>31;c[h+(g*24|0)+16>>2]=p;c[k>>2]=g+1;if((Mb(e,c[t>>2]|0,2,f)|0)!=2){R=55;break}qb(c[t>>2]|0,G,2);g=c[G>>2]|0;if((g|0)==65424){h=q;g=r;break}}switch(R|0){case 14:{c[F>>2]=g;Ub(f,1,15863,F)|0;f=0;i=Y;return f|0}case 20:{Ub(f,1,8295,w)|0;R=34;break}case 25:{Ub(f,1,8339,x)|0;R=34;break}case 27:{c[G>>2]=65424;break}case 32:{Uc(c[g>>2]|0);c[j>>2]=0;c[h>>2]=0;c[k>>2]=0;Ub(f,1,15803,H)|0;R=34;break}case 38:{Ub(f,1,8339,y)|0;f=0;i=Y;return f|0}case 40:{Ub(f,1,8295,z)|0;f=0;i=Y;return f|0}case 43:{Uc(c[t>>2]|0);c[t>>2]=0;c[s>>2]=0;Ub(f,1,8427,A)|0;f=0;i=Y;return f|0}case 46:{Ub(f,1,8295,B)|0;f=0;i=Y;return f|0}case 48:{Ub(f,1,15985,D)|0;f=0;i=Y;return f|0}case 53:{Uc(c[g>>2]|0);c[j>>2]=0;c[h>>2]=0;c[k>>2]=0;Ub(f,1,15803,J)|0;f=0;i=Y;return f|0}case 55:{Ub(f,1,8295,E)|0;f=0;i=Y;return f|0}}if((R|0)==34){Ub(f,1,15930,I)|0;f=0;i=Y;return f|0}if(g){if(!h){Ub(f,1,16090,L)|0;f=0;i=Y;return f|0}if(!j){Ub(f,1,16136,M)|0;f=0;i=Y;return f|0}d:do if(a[d+184>>0]&1){s=d+120|0;do if(c[s>>2]|0){n=d+124|0;o=0;g=0;h=0;e:do{j=c[n>>2]|0;k=c[j+(o<<3)>>2]|0;f:do if(k){l=c[j+(o<<3)+4>>2]|0;j=g>>>0>>0;m=j?0:g-l|0;if((l|0)==(g|0)|j^1)g=m;else{k=j?k+g|0:k;g=l-g|0;while(1){if(g>>>0<4){R=70;break e}qb(k,N,4);j=g+-4|0;g=c[N>>2]|0;h=g+h|0;if(j>>>0>>0)break;if((j|0)==(g|0)){g=m;break f}else{k=k+(g+4)|0;g=j-g|0}}g=g-j|0}}while(0);o=o+1|0}while(o>>>0<(c[s>>2]|0)>>>0);if((R|0)==70){Ub(f,1,16182,O)|0;break}if(!g)R=77;else Ub(f,1,16213,P)|0}else{h=0;R=77}while(0);g:do if((R|0)==77){j=Pc(h)|0;p=d+144|0;c[p>>2]=j;if(!j){Ub(f,1,13302,Q)|0;break}q=d+132|0;c[q>>2]=h;k=c[s>>2]|0;r=d+124|0;do if(k){g=c[r>>2]|0;j=g;o=0;n=0;h=0;h:while(1){l=c[j+(o<<3)>>2]|0;if(!l)l=n;else{j=c[j+(o<<3)+4>>2]|0;g=(c[p>>2]|0)+h|0;i:do if(n>>>0>>0){Ui(g|0,l|0,n|0)|0;h=h+n|0;if((j|0)==(n|0)){l=0;break}m=l+n|0;g=j-n|0;while(1){if(g>>>0<4){R=88;break h}qb(m,S,4);l=m+4|0;k=g+-4|0;j=c[S>>2]|0;g=(c[p>>2]|0)+h|0;if(k>>>0>>0){j=l;break}Ui(g|0,l|0,j|0)|0;g=c[S>>2]|0;h=g+h|0;if((k|0)==(g|0)){l=0;break i}else{m=m+(g+4)|0;g=k-g|0}}Ui(g|0,j|0,k|0)|0;l=(c[S>>2]|0)-k|0;h=k+h|0}else{Ui(g|0,l|0,j|0)|0;l=n-j|0;h=j+h|0}while(0);Uc(c[(c[r>>2]|0)+(o<<3)>>2]|0);j=c[r>>2]|0;c[j+(o<<3)>>2]=0;c[j+(o<<3)+4>>2]=0;k=c[s>>2]|0;g=j}o=o+1|0;if(o>>>0>=k>>>0){R=94;break}else n=l}if((R|0)==88){Ub(f,1,16182,T)|0;break g}else if((R|0)==94){j=c[p>>2]|0;h=c[q>>2]|0;break}}else g=c[r>>2]|0;while(0);c[d+128>>2]=j;c[d+152>>2]=h;c[s>>2]=0;Uc(g);c[r>>2]=0;break d}while(0);Ub(f,1,16236,U)|0;f=0;i=Y;return f|0}while(0);Ub(f,4,16262,X)|0;X=Pb(e)|0;f=(c[V>>2]|0)+8|0;c[f>>2]=X+-2;c[f+4>>2]=0;c[W>>2]=8;f=1;i=Y;return f|0}}Ub(f,1,16044,K)|0;f=0;i=Y;return f|0}while(0);Ub(f,1,15839,m)|0;f=0;i=Y;return f|0}function wd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=i;i=i+16|0;F=G;D=c[b+80>>2]|0;E=b+88|0;A=_(c[b+112>>2]|0,c[b+116>>2]|0)|0;q=c[D+16>>2]|0;o=q*1080|0;p=c[b+12>>2]|0;q=_(q<<2,q)|0;a:do if(A){r=p+5604|0;s=p+5620|0;t=p+5612|0;u=p+5616|0;v=p+5632|0;w=p+5624|0;x=p+5584|0;B=0;C=c[b+164>>2]|0;b:while(1){k=C+5584|0;y=c[k>>2]|0;Ui(C|0,p|0,5640)|0;d=C+5636|0;a[d>>0]=a[d>>0]&-4;c[C+5168>>2]=0;d=C+5604|0;c[d>>2]=0;l=C+5620|0;c[l>>2]=0;z=C+5612|0;c[z>>2]=0;m=C+5632|0;c[m>>2]=0;n=C+5624|0;c[n>>2]=0;c[k>>2]=y;if(c[r>>2]|0){f=Pc(q)|0;c[d>>2]=f;if(!f){d=0;f=25;break}Ui(f|0,c[r>>2]|0,q|0)|0}d=(c[s>>2]|0)*20|0;f=Pc(d)|0;c[z>>2]=f;if(!f){d=0;f=25;break}Ui(f|0,c[t>>2]|0,d|0)|0;d=c[u>>2]|0;if(d){h=0;j=c[z>>2]|0;k=c[t>>2]|0;while(1){g=k+12|0;if(c[g>>2]|0){d=k+16|0;f=Pc(c[d>>2]|0)|0;c[j+12>>2]=f;if(!f){d=0;f=25;break b}Ui(f|0,c[g>>2]|0,c[d>>2]|0)|0;d=c[u>>2]|0}c[l>>2]=(c[l>>2]|0)+1;h=h+1|0;if(h>>>0>=d>>>0)break;else{j=j+20|0;k=k+20|0}}}d=(c[v>>2]|0)*20|0;f=Pc(d)|0;c[n>>2]=f;if(!f){d=0;f=25;break}Ui(f|0,c[w>>2]|0,d|0)|0;c[m>>2]=c[v>>2];h=c[v>>2]|0;if(h){j=0;f=c[n>>2]|0;g=c[w>>2]|0;while(1){d=c[g+8>>2]|0;if(d)c[f+8>>2]=(c[z>>2]|0)+(((d-(c[t>>2]|0)|0)/20|0)*20|0);d=c[g+12>>2]|0;if(d)c[f+12>>2]=(c[z>>2]|0)+(((d-(c[t>>2]|0)|0)/20|0)*20|0);j=j+1|0;if(j>>>0>=h>>>0)break;else{f=f+20|0;g=g+20|0}}}Ui(y|0,c[x>>2]|0,o|0)|0;B=B+1|0;if(B>>>0>=A>>>0)break a;else C=C+5640|0}if((f|0)==25){i=G;return d|0}}while(0);f=Tf(1)|0;d=b+204|0;c[d>>2]=f;if(!f){e=0;i=G;return e|0}if(Xf(f,D,E)|0){e=1;i=G;return e|0}Yf(c[d>>2]|0);c[d>>2]=0;Ub(e,1,8839,F)|0;e=0;i=G;return e|0}function xd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=i;i=i+128|0;u=w+120|0;t=w+112|0;s=w+104|0;r=w+96|0;q=w+88|0;p=w+80|0;o=w+72|0;n=w+64|0;m=w+56|0;l=w+48|0;k=w+40|0;j=w+32|0;h=w+24|0;g=w+16|0;f=w+8|0;e=w;if(!a){i=w;return}ki(12191,17,1,d)|0;c[e>>2]=c[a>>2];$h(d,12209,e)|0;c[f>>2]=c[a+4>>2];$h(d,12222,f)|0;c[g>>2]=c[a+8>>2];$h(d,12234,g)|0;c[h>>2]=c[a+16>>2];$h(d,12251,h)|0;if((b|0)>0){g=a+5584|0;h=0;do{f=c[g>>2]|0;c[j>>2]=h;$h(d,12262,j)|0;c[k>>2]=c[f+(h*1080|0)>>2];$h(d,12276,k)|0;a=f+(h*1080|0)+4|0;c[l>>2]=c[a>>2];$h(d,12290,l)|0;c[m>>2]=c[f+(h*1080|0)+8>>2];$h(d,12313,m)|0;c[n>>2]=c[f+(h*1080|0)+12>>2];$h(d,12329,n)|0;c[o>>2]=c[f+(h*1080|0)+16>>2];$h(d,12345,o)|0;c[p>>2]=c[f+(h*1080|0)+20>>2];$h(d,12362,p)|0;ki(12377,23,1,d)|0;if(c[a>>2]|0){e=0;do{x=c[f+(h*1080|0)+944+(e<<2)>>2]|0;c[q>>2]=c[f+(h*1080|0)+812+(e<<2)>>2];c[q+4>>2]=x;$h(d,12401,q)|0;e=e+1|0}while(e>>>0<(c[a>>2]|0)>>>0)}ai(10,d)|0;x=f+(h*1080|0)+24|0;c[r>>2]=c[x>>2];$h(d,12410,r)|0;c[s>>2]=c[f+(h*1080|0)+804>>2];$h(d,12425,s)|0;ki(12442,20,1,d)|0;if((c[x>>2]|0)!=1){a=(c[a>>2]|0)*3|0;if((a|0)>2){a=a+-2|0;v=8}}else{a=1;v=8}if((v|0)==8){v=0;e=0;do{x=c[f+(h*1080|0)+28+(e<<3)>>2]|0;c[t>>2]=c[f+(h*1080|0)+28+(e<<3)+4>>2];c[t+4>>2]=x;$h(d,12401,t)|0;e=e+1|0}while((e|0)!=(a|0))}ai(10,d)|0;c[u>>2]=c[f+(h*1080|0)+808>>2];$h(d,12463,u)|0;ki(12480,5,1,d)|0;h=h+1|0}while((h|0)!=(b|0))}ki(10321,4,1,d)|0;i=w;return}function yd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=i;i=i+80|0;u=B+32|0;v=B+24|0;y=B+16|0;x=B+8|0;o=B+64|0;w=B+60|0;n=B+56|0;q=B+52|0;s=B+48|0;r=B+44|0;t=B+40|0;p=B+36|0;c[o>>2]=1;e=Pc(1e3)|0;if(!e){Ub(d,1,12127,B)|0;d=0;i=B;return d|0}z=a+116|0;A=a+112|0;k=a+204|0;l=a+84|0;m=a+8|0;f=1e3;j=0;while(1){if(!(cd(a,w,n,q,s,r,t,p,o,b,d)|0)){g=5;break}if(!(c[o>>2]|0)){g=17;break}h=c[n>>2]|0;if(h>>>0>f>>>0){f=Tc(e,h)|0;if(!f){g=9;break}else{e=f;g=h}}else g=f;f=c[w>>2]|0;if(!(dd(a,f,e,h,b,d)|0)){g=11;break}f=f+1|0;h=_(c[A>>2]|0,c[z>>2]|0)|0;c[v>>2]=f;c[v+4>>2]=h;Ub(d,4,11986,v)|0;h=c[k>>2]|0;if(!(ce(c[(c[c[h+20>>2]>>2]|0)+20>>2]|0,c[h+24>>2]|0,e,c[(c[l>>2]|0)+24>>2]|0)|0)){g=13;break}c[u>>2]=f;Ub(d,4,12016,u)|0;h=Qb(b)|0;if((h|0)==0&(C|0)==0?(c[m>>2]|0)==64:0){g=17;break}j=j+1|0;if((j|0)==(_(c[A>>2]|0,c[z>>2]|0)|0)){g=17;break}else f=g}if((g|0)==5){Uc(e);d=0;i=B;return d|0}else if((g|0)==9){Uc(e);A=_(c[A>>2]|0,c[z>>2]|0)|0;c[x>>2]=(c[w>>2]|0)+1;c[x+4>>2]=A;Ub(d,1,11946,x)|0;d=0;i=B;return d|0}else if((g|0)==11){Uc(e);A=_(c[A>>2]|0,c[z>>2]|0)|0;c[y>>2]=f+1;c[y+4>>2]=A;Ub(d,1,12162,y)|0;d=0;i=B;return d|0}else if((g|0)==13){Uc(e);d=0;i=B;return d|0}else if((g|0)==17){Uc(e);d=1;i=B;return d|0}return 0}function zd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0;G=i;i=i+96|0;y=G+56|0;D=G+48|0;x=G+40|0;z=G+32|0;E=G+24|0;k=G+16|0;j=G+8|0;r=G+92|0;B=G+88|0;q=G+84|0;t=G+80|0;v=G+76|0;u=G+72|0;w=G+68|0;s=G+64|0;c[r>>2]=1;e=Pc(1e3)|0;if(!e){Ub(d,1,11880,G)|0;F=0;i=G;return F|0}A=a+196|0;g=c[A>>2]|0;f=c[g+40>>2]|0;a:do if(!f){f=_(c[a+116>>2]|0,c[a+112>>2]|0)|0;c[g+36>>2]=f;f=Qc(f,40)|0;g=c[A>>2]|0;c[g+40>>2]=f;b:do if(f){if(c[g+36>>2]|0){h=0;do{c[f+(h*40|0)+28>>2]=100;c[f+(h*40|0)+20>>2]=0;p=Qc(100,24)|0;g=c[A>>2]|0;f=c[g+40>>2]|0;c[f+(h*40|0)+24>>2]=p;h=h+1|0;if(!p)break b}while(h>>>0<(c[g+36>>2]|0)>>>0)}g=c[a+60>>2]|0;if(!f)break a;else{F=12;break a}}while(0);Uc(e);F=0;i=G;return F|0}else{g=c[a+60>>2]|0;F=12}while(0);if((F|0)==12)if(c[f+16>>2]|0){if(!(c[f+(g*40|0)+4>>2]|0)){p=a+64|0;p=Si(c[p>>2]|0,c[p+4>>2]|0,2,0)|0;if(!(xb(b,p,C,d)|0)){Ub(d,1,11918,j)|0;Uc(e);F=0;i=G;return F|0}}else{p=c[f+(g*40|0)+16>>2]|0;p=Si(c[p>>2]|0,c[p+4>>2]|0,2,0)|0;if(!(xb(b,p,C,d)|0)){Ub(d,1,11918,k)|0;Uc(e);F=0;i=G;return F|0}}f=a+8|0;if((c[f>>2]|0)==256)c[f>>2]=8}c:do if(cd(a,B,q,t,v,u,w,s,r,b,d)|0){o=a+116|0;p=a+112|0;l=a+204|0;m=a+84|0;n=g+1|0;f=1e3;while(1){if(!(c[r>>2]|0))break;k=c[q>>2]|0;if(k>>>0>f>>>0){f=Tc(e,k)|0;if(!f){F=26;break}else{e=f;j=k}}else j=f;h=c[B>>2]|0;if(!(dd(a,h,e,k,b,d)|0)){F=28;break}f=h+1|0;k=_(c[p>>2]|0,c[o>>2]|0)|0;c[z>>2]=f;c[z+4>>2]=k;Ub(d,4,11986,z)|0;k=c[l>>2]|0;if(!(ce(c[(c[c[k+20>>2]>>2]|0)+20>>2]|0,c[k+24>>2]|0,e,c[(c[m>>2]|0)+24>>2]|0)|0)){F=30;break}c[x>>2]=f;Ub(d,4,12016,x)|0;if((h|0)==(g|0)){F=32;break}c[y>>2]=f;c[y+4>>2]=n;Ub(d,2,12060,y)|0;if(!(cd(a,B,q,t,v,u,w,s,r,b,d)|0))break c;else f=j}if((F|0)==26){Uc(e);F=_(c[p>>2]|0,c[o>>2]|0)|0;c[E>>2]=(c[B>>2]|0)+1;c[E+4>>2]=F;Ub(d,1,11946,E)|0;F=0;i=G;return F|0}else if((F|0)==28){Uc(e);F=0;i=G;return F|0}else if((F|0)==30){Uc(e);F=0;i=G;return F|0}else if((F|0)==32){F=(c[A>>2]|0)+8|0;F=Si(c[F>>2]|0,c[F+4>>2]|0,2,0)|0;if(!(xb(b,F,C,d)|0)){Ub(d,1,11918,D)|0;Uc(e);F=0;i=G;return F|0}}Uc(e);F=1;i=G;return F|0}while(0);Uc(e);F=0;i=G;return F|0}function Ad(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;H=i;i=i+32|0;D=H+16|0;t=H+8|0;l=H;C=H+20|0;E=c[a+40>>2]|0;G=a+36|0;n=c[G>>2]|0;o=a+204|0;k=c[o>>2]|0;c[k+16>>2]=0;B=a+8|0;c[B>>2]=0;c[C>>2]=0;pb(n,65424,2);pb(n+2|0,10,2);F=a+200|0;pb(n+4|0,c[F>>2]|0,2);z=a+12|0;pb(n+10|0,c[z>>2]|0,1);A=a+164|0;pb(n+11|0,c[(c[A>>2]|0)+((c[F>>2]|0)*5640|0)+5588>>2]|0,1);c[C>>2]=12;h=n+12|0;f=E+-12|0;m=a+88|0;if(((b[m>>1]|0)+-3&65535)>=4?(g=c[F>>2]|0,j=c[A>>2]|0,(c[j+(g*5640|0)+420>>2]|0)!=0):0){c[C>>2]=0;_d(c[(c[a+80>>2]|0)+16>>2]|0,j,g,h,C);y=c[C>>2]|0;g=y+12|0;h=n+g|0;f=f-y|0}else g=12;c[C>>2]=0;pb(h,65427,2);c[k+4>>2]=c[B>>2];y=c[z>>2]|0;c[k+8>>2]=y;if(!y)c[(c[c[k+20>>2]>>2]|0)+840>>2]=0;c[C>>2]=0;if(!(bg(k,c[F>>2]|0,h+2|0,C,f+-4|0,0)|0)){Ub(e,1,11860,l)|0;d=0;i=H;return d|0}f=(c[C>>2]|0)+2|0;c[C>>2]=f;f=f+g|0;pb(n+6|0,f,4);if(((b[m>>1]|0)+-3&65535)<4){y=a+28|0;pb(c[y>>2]|0,c[F>>2]|0,1);x=(c[y>>2]|0)+1|0;c[y>>2]=x;pb(x,f,4);c[y>>2]=(c[y>>2]|0)+4}g=n+f|0;y=E-f|0;v=c[o>>2]|0;w=a+88|0;r=c[A>>2]|0;s=c[F>>2]|0;m=be(w,0,s)|0;x=a+8|0;c[z>>2]=(c[z>>2]|0)+1;a:do if(m>>>0>1){n=v+4|0;o=v+8|0;p=v+20|0;q=a+28|0;j=g;g=y;f=0;l=1;while(1){c[x>>2]=l;c[C>>2]=0;pb(j,65424,2);pb(j+2|0,10,2);pb(j+4|0,c[F>>2]|0,2);pb(j+10|0,c[z>>2]|0,1);pb(j+11|0,c[(c[A>>2]|0)+((c[F>>2]|0)*5640|0)+5588>>2]|0,1);c[C>>2]=0;pb(j+12|0,65427,2);c[n>>2]=c[B>>2];k=c[z>>2]|0;c[o>>2]=k;if(!k)c[(c[c[p>>2]>>2]|0)+840>>2]=0;c[C>>2]=0;if(!(bg(v,c[F>>2]|0,j+14|0,C,g+-16|0,0)|0))break;I=c[C>>2]|0;J=I+2|0;c[C>>2]=J;k=I+14|0;h=j+k|0;f=f+12+J|0;g=g+-12+(-2-I)|0;pb(j+6|0,k,4);if(((b[w>>1]|0)+-3&65535)<4){pb(c[q>>2]|0,c[F>>2]|0,1);J=(c[q>>2]|0)+1|0;c[q>>2]=J;pb(J,k,4);c[q>>2]=(c[q>>2]|0)+4}c[z>>2]=(c[z>>2]|0)+1;l=l+1|0;if(l>>>0>=m>>>0){u=12;break a}else j=h}Ub(e,1,11860,t)|0}else{h=g;g=y;f=0;u=12}while(0);b:do if((u|0)==12){p=r+(s*5640|0)+420|0;c:do if(c[p>>2]|0){q=v+16|0;r=v+4|0;s=v+8|0;t=v+20|0;o=a+28|0;n=1;d:while(1){c[q>>2]=n;m=be(w,n,c[F>>2]|0)|0;if(m){l=0;while(1){c[x>>2]=l;c[C>>2]=0;pb(h,65424,2);pb(h+2|0,10,2);pb(h+4|0,c[F>>2]|0,2);pb(h+10|0,c[z>>2]|0,1);pb(h+11|0,c[(c[A>>2]|0)+((c[F>>2]|0)*5640|0)+5588>>2]|0,1);c[C>>2]=0;pb(h+12|0,65427,2);c[r>>2]=c[B>>2];J=c[z>>2]|0;c[s>>2]=J;if(!J)c[(c[c[t>>2]>>2]|0)+840>>2]=0;c[C>>2]=0;if(!(bg(v,c[F>>2]|0,h+14|0,C,g+-16|0,0)|0))break d;J=c[C>>2]|0;j=J+2|0;c[C>>2]=j;f=f+12+j|0;j=J+14|0;k=h+j|0;g=g+-12+(-2-J)|0;pb(h+6|0,j,4);if(((b[w>>1]|0)+-3&65535)<4){pb(c[o>>2]|0,c[F>>2]|0,1);J=(c[o>>2]|0)+1|0;c[o>>2]=J;pb(J,j,4);c[o>>2]=(c[o>>2]|0)+4}c[z>>2]=(c[z>>2]|0)+1;l=l+1|0;if(l>>>0>=m>>>0){h=k;break}else h=k}}n=n+1|0;if(n>>>0>(c[p>>2]|0)>>>0)break c}Ub(e,1,11860,D)|0;break b}while(0);J=f-y+E|0;if((Nb(d,c[G>>2]|0,J,e)|0)!=(J|0)){J=0;i=H;return J|0}c[F>>2]=(c[F>>2]|0)+1;J=1;i=H;return J|0}while(0);J=0;i=H;return J|0}function Bd(a,b,d){a=a|0;b=b|0;d=d|0;a=a+44|0;pb(c[a>>2]|0,65497,2);if((Nb(b,c[a>>2]|0,2,d)|0)!=2){b=0;return b|0}b=(Ob(b,d)|0)!=0&1;return b|0}function Cd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=(c[a+32>>2]|0)*5|0;i=a+16|0;i=Si(c[i>>2]|0,c[i+4>>2]|0,6,0)|0;h=C;e=Pb(b)|0;f=C;if(!(Sb(b,i,h,d)|0)){i=0;return i|0}if((Nb(b,c[a+24>>2]|0,g,d)|0)!=(g|0)){i=0;return i|0}i=(Sb(b,e,f,d)|0)!=0&1;return i|0}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+196>>2]|0;if(!a)return 1;b=Pb(b)|0;d=a;d=Oi(b|0,C|0,c[d>>2]|0,c[d+4>>2]|0)|0;b=a+16|0;c[b>>2]=d;c[b+4>>2]=C;return 1}function Ed(a,b,d){a=a|0;b=b|0;d=d|0;d=a+204|0;Yf(c[d>>2]|0);c[d>>2]=0;d=a+24|0;b=c[d>>2]|0;if(b){Uc(b);c[d>>2]=0;c[a+28>>2]=0}d=a+36|0;b=c[d>>2]|0;if(!b){a=a+40|0;c[a>>2]=0;return 1}Uc(b);c[d>>2]=0;a=a+40|0;c[a>>2]=0;return 1}function Fd(a,b,d){a=a|0;b=b|0;d=d|0;d=a+44|0;b=c[d>>2]|0;if(b){Uc(b);c[d>>2]=0}c[a+48>>2]=0;return 1}function Gd(a,b,c){a=a|0;b=b|0;c=c|0;return 1}function Hd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+32|0;e=(c[a+8>>2]|0)==0&(c[a+188>>2]|0)!=0&(c[a+192>>2]|0)!=0&1;b=(c[(c[(c[a+164>>2]|0)+5584>>2]|0)+4>>2]|0)+-1|0;if(b>>>0>31){Ub(d,1,11790,f)|0;d=0;i=f;return d|0}b=1<>2]|0)>>>0>>0){Ub(d,1,11790,f+8|0)|0;d=0;i=f;return d|0}if((c[a+104>>2]|0)>>>0>=b>>>0){d=e;i=f;return d|0}Ub(d,1,11790,f+16|0)|0;d=0;i=f;return d|0}function Id(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((b[a+88>>1]&-32256)<<16>>16!=-32256){j=1;return j|0}i=_(c[a+112>>2]|0,c[a+116>>2]|0)|0;if(!i){j=1;return j|0}h=a+80|0;j=0;e=1;g=c[a+164>>2]|0;while(1){if((c[g+16>>2]|0)==2){e=(c[g+5608>>2]|0)!=0&e;a=c[(c[h>>2]|0)+16>>2]|0;if(a){f=0;d=c[g+5584>>2]|0;while(1){e=(c[d+20>>2]&1^1)&e;f=f+1|0;if(f>>>0>=a>>>0)break;else d=d+1080|0}}}j=j+1|0;if((j|0)==(i|0))break;else g=g+5640|0}return e|0}function Jd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=a+88|0;h=a+32|0;i=c[a+80>>2]|0;j=_(c[a+116>>2]|0,c[a+112>>2]|0)|0;c[h>>2]=0;if(!j)return 1;e=c[a+164>>2]|0;f=0;while(1){Nf(i,g,f);b=e+420|0;d=0;a=0;do{k=be(g,a,f)|0;c[h>>2]=(c[h>>2]|0)+k;d=k+d|0;a=a+1|0}while(a>>>0<=(c[b>>2]|0)>>>0);c[e+5588>>2]=d;f=f+1|0;if((f|0)==(j|0))break;else e=e+5640|0}return 1}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+44>>2]|0;pb(a,65359,2);return (Nb(b,a,2,d)|0)==2|0}function Ld(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+16|0;j=p;k=c[a+80>>2]|0;n=k+16|0;l=(c[n>>2]|0)*3|0;o=l+40|0;f=c[k+24>>2]|0;h=a+48|0;m=a+44|0;g=c[m>>2]|0;do if(o>>>0>(c[h>>2]|0)>>>0){g=Tc(g,o)|0;if(g){c[m>>2]=g;c[h>>2]=o;break}Uc(c[m>>2]|0);c[m>>2]=0;c[h>>2]=0;Ub(d,1,11752,j)|0;b=0;i=p;return b|0}while(0);pb(g,65361,2);pb(g+2|0,l+38|0,2);pb(g+4|0,e[a+88>>1]|0,2);pb(g+6|0,c[k+8>>2]|0,4);pb(g+10|0,c[k+12>>2]|0,4);pb(g+14|0,c[k>>2]|0,4);pb(g+18|0,c[k+4>>2]|0,4);pb(g+22|0,c[a+100>>2]|0,4);pb(g+26|0,c[a+104>>2]|0,4);pb(g+30|0,c[a+92>>2]|0,4);pb(g+34|0,c[a+96>>2]|0,4);pb(g+38|0,c[n>>2]|0,2);if(c[n>>2]|0){h=0;g=g+40|0;while(1){pb(g,(c[f+24>>2]|0)+-1+(c[f+32>>2]<<7)|0,1);pb(g+1|0,c[f>>2]|0,1);pb(g+2|0,c[f+4>>2]|0,1);h=h+1|0;if(h>>>0>=(c[n>>2]|0)>>>0)break;else{g=g+3|0;f=f+52|0}}}b=(Nb(b,c[m>>2]|0,o,d)|0)==(o|0)&1;i=p;return b|0}function Md(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;i=i+32|0;q=r+16|0;p=r+8|0;j=r;o=r+20|0;k=a+200|0;l=c[k>>2]|0;m=a+164|0;n=c[m>>2]|0;e=c[n+(l*5640|0)+5584>>2]|0;if(!(c[e>>2]&1))g=5;else g=(c[e+4>>2]|0)+5|0;h=g+9|0;c[o>>2]=h;f=a+48|0;a=a+44|0;e=c[a>>2]|0;do if(h>>>0>(c[f>>2]|0)>>>0){e=Tc(e,h)|0;if(e){c[a>>2]=e;c[f>>2]=h;break}Uc(c[a>>2]|0);c[a>>2]=0;c[f>>2]=0;Ub(d,1,11687,j)|0;q=0;i=r;return q|0}while(0);pb(e,65362,2);pb(e+2|0,g+7|0,2);pb(e+4|0,c[n+(l*5640|0)>>2]|0,1);pb(e+5|0,c[n+(l*5640|0)+4>>2]|0,1);pb(e+6|0,c[n+(l*5640|0)+8>>2]|0,2);pb(e+8|0,c[n+(l*5640|0)+16>>2]|0,1);c[o>>2]=g;if(!(ae(c[m>>2]|0,c[k>>2]|0,e+9|0,o,d)|0)){Ub(d,1,11726,p)|0;q=0;i=r;return q|0}if(!(c[o>>2]|0)){q=(Nb(b,c[a>>2]|0,h,d)|0)==(h|0)&1;i=r;return q|0}else{Ub(d,1,11726,q)|0;q=0;i=r;return q|0}return 0}function Nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=i;i=i+32|0;o=p+16|0;n=p+8|0;j=p;l=p+20|0;k=a+200|0;m=a+164|0;e=c[(c[m>>2]|0)+((c[k>>2]|0)*5640|0)+5584>>2]|0;f=c[e+24>>2]|0;if((f|0)==1)e=1;else e=((c[e+4>>2]|0)*3|0)+-2|0;g=(f|0)==0?e+1|0:e<<1|1;h=g+4|0;c[l>>2]=h;f=a+48|0;a=a+44|0;e=c[a>>2]|0;do if(h>>>0>(c[f>>2]|0)>>>0){e=Tc(e,h)|0;if(e){c[a>>2]=e;c[f>>2]=h;break}Uc(c[a>>2]|0);c[a>>2]=0;c[f>>2]=0;Ub(d,1,11622,j)|0;o=0;i=p;return o|0}while(0);pb(e,65372,2);pb(e+2|0,g+2|0,2);c[l>>2]=g;if(!($d(c[m>>2]|0,c[k>>2]|0,0,e+4|0,l,d)|0)){Ub(d,1,11661,n)|0;o=0;i=p;return o|0}if(!(c[l>>2]|0)){o=(Nb(b,c[a>>2]|0,h,d)|0)==(h|0)&1;i=p;return o|0}else{Ub(d,1,11661,o)|0;o=0;i=p;return o|0}return 0}function Od(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=i;i=i+16|0;u=w;r=w+4|0;o=a+80|0;e=c[(c[o>>2]|0)+16>>2]|0;if(e>>>0<=1){v=1;i=w;return v|0}s=a+164|0;t=a+200|0;q=a+48|0;n=a+44|0;m=1;while(1){h=c[s>>2]|0;k=c[t>>2]|0;g=c[h+(k*5640|0)+5584>>2]|0;j=c[g+(m*1080|0)>>2]|0;a:do if((((((c[g>>2]|0)==(j|0)?(p=c[g+4>>2]|0,(p|0)==(c[g+(m*1080|0)+4>>2]|0)):0)?(c[g+8>>2]|0)==(c[g+(m*1080|0)+8>>2]|0):0)?(c[g+12>>2]|0)==(c[g+(m*1080|0)+12>>2]|0):0)?(c[g+16>>2]|0)==(c[g+(m*1080|0)+16>>2]|0):0)?(c[g+20>>2]|0)==(c[g+(m*1080|0)+20>>2]|0):0){if(p){a=0;do{if((c[g+812+(a<<2)>>2]|0)!=(c[g+(m*1080|0)+812+(a<<2)>>2]|0)){v=13;break a}if((c[g+944+(a<<2)>>2]|0)!=(c[g+(m*1080|0)+944+(a<<2)>>2]|0)){v=13;break a}a=a+1|0}while(a>>>0

>>0)}}else v=13;while(0);if((v|0)==13){v=0;if(!(j&1))a=5;else a=(c[g+(m*1080|0)+4>>2]|0)+5|0;l=a+(e>>>0<257?6:7)|0;f=c[n>>2]|0;if(l>>>0>(c[q>>2]|0)>>>0){a=Tc(f,l)|0;if(!a){v=17;break}c[n>>2]=a;c[q>>2]=l;k=c[t>>2]|0;h=c[s>>2]|0;g=c[h+(k*5640|0)+5584>>2]|0;e=c[(c[o>>2]|0)+16>>2]|0;j=c[g+(m*1080|0)>>2]|0;f=a}e=e>>>0<257?1:2;if(!(j&1))a=5;else a=(c[g+(m*1080|0)+4>>2]|0)+5|0;pb(f,65363,2);pb(f+2|0,e+3+a|0,2);pb(f+4|0,m,e);j=e|4;pb(f+j|0,c[(c[h+(k*5640|0)+5584>>2]|0)+(m*1080|0)>>2]|0,1);c[r>>2]=a;ae(c[s>>2]|0,c[t>>2]|0,f+(j+1)|0,r,d)|0;if((Nb(b,c[n>>2]|0,l,d)|0)!=(l|0)){a=0;v=24;break}e=c[(c[o>>2]|0)+16>>2]|0}m=m+1|0;if(m>>>0>=e>>>0){a=1;v=24;break}}if((v|0)==17){Uc(c[n>>2]|0);c[n>>2]=0;c[q>>2]=0;Ub(d,1,11548,u)|0;v=0;i=w;return v|0}else if((v|0)==24){i=w;return a|0}return 0}function Pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=i;i=i+16|0;r=t;o=t+4|0;m=a+80|0;e=c[(c[m>>2]|0)+16>>2]|0;if(e>>>0<=1){s=1;i=t;return s|0}p=a+164|0;q=a+200|0;n=a+48|0;l=a+44|0;k=1;while(1){j=c[(c[p>>2]|0)+((c[q>>2]|0)*5640|0)+5584>>2]|0;g=c[j+24>>2]|0;h=c[j+(k*1080|0)+24>>2]|0;a:do if((g|0)==(h|0)?(c[j+804>>2]|0)==(c[j+(k*1080|0)+804>>2]|0):0){if((g|0)!=1){f=(c[j+4>>2]|0)*3|0;a=f+-2|0;if((f|0)!=((c[j+(k*1080|0)+4>>2]|0)*3|0)){s=14;break}if(!a)break}else a=1;f=0;do{if((c[j+28+(f<<3)>>2]|0)!=(c[j+(k*1080|0)+28+(f<<3)>>2]|0)){s=14;break a}f=f+1|0}while(f>>>0>>0);if(g){f=0;do{if((c[j+28+(f<<3)+4>>2]|0)!=(c[j+(k*1080|0)+28+(f<<3)+4>>2]|0)){s=14;break a}f=f+1|0}while(f>>>0>>0)}}else s=14;while(0);if((s|0)==14){s=0;if((h|0)==1)a=1;else a=((c[j+(k*1080|0)+4>>2]|0)*3|0)+-2|0;g=((h|0)==0?a+1|0:a<<1|1)+5+(e>>>0>256&1)|0;a=c[l>>2]|0;if(g>>>0>(c[n>>2]|0)>>>0){a=Tc(a,g)|0;if(!a){s=18;break}c[l>>2]=a;c[n>>2]=g;e=c[(c[p>>2]|0)+((c[q>>2]|0)*5640|0)+5584>>2]|0;f=c[e+(k*1080|0)+24>>2]|0}else{f=h;e=j}if((f|0)==1)e=1;else e=((c[e+(k*1080|0)+4>>2]|0)*3|0)+-2|0;f=(f|0)==0?e+1|0:e<<1|1;c[o>>2]=f+6;pb(a,65373,2);e=a+2|0;if((c[(c[m>>2]|0)+16>>2]|0)>>>0<257){pb(e,f+3|0,2);pb(a+4|0,k,1);a=a+5|0}else{pb(e,f+4|0,2);pb(a+4|0,k,2);a=a+6|0}c[o>>2]=f;$d(c[p>>2]|0,c[q>>2]|0,k,a,o,d)|0;if((Nb(b,c[l>>2]|0,g,d)|0)!=(g|0)){a=0;s=28;break}e=c[(c[m>>2]|0)+16>>2]|0}k=k+1|0;if(k>>>0>=e>>>0){a=1;s=28;break}}if((s|0)==18){Uc(c[l>>2]|0);c[l>>2]=0;c[n>>2]=0;Ub(d,1,11476,r)|0;s=0;i=t;return s|0}else if((s|0)==28){i=t;return a|0}return 0}function Qd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l;h=(c[a+32>>2]|0)*5|0;j=h+6|0;f=a+48|0;k=a+44|0;e=c[k>>2]|0;do if(j>>>0>(c[f>>2]|0)>>>0){e=Tc(e,j)|0;if(e){c[k>>2]=e;c[f>>2]=j;break}Uc(c[k>>2]|0);c[k>>2]=0;c[f>>2]=0;Ub(d,1,11437,g)|0;b=0;i=l;return b|0}while(0);g=Pb(b)|0;a=a+16|0;c[a>>2]=g;c[a+4>>2]=C;pb(e,65365,2);pb(e+2|0,h+4|0,2);pb(e+4|0,0,1);pb(e+5|0,80,1);b=(Nb(b,c[k>>2]|0,j,d)|0)==(j|0)&1;i=l;return b|0}function Rd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+16|0;j=q;p=q+4|0;c[p>>2]=0;m=a+200|0;e=c[m>>2]|0;l=a+164|0;f=c[l>>2]|0;k=a+80|0;h=c[(c[k>>2]|0)+16>>2]|0;o=(_(h>>>0<257?7:9,(c[f+(e*5640|0)+420>>2]|0)+1|0)|0)+4|0;g=a+48|0;n=a+44|0;a=c[n>>2]|0;do if(o>>>0>(c[g>>2]|0)>>>0){e=Tc(a,o)|0;if(e){c[n>>2]=e;c[g>>2]=o;g=e;a=c[(c[k>>2]|0)+16>>2]|0;f=c[l>>2]|0;e=c[m>>2]|0;break}Uc(c[n>>2]|0);c[n>>2]=0;c[g>>2]=0;Ub(d,1,11398,j)|0;b=0;i=q;return b|0}else{g=a;a=h}while(0);_d(a,f,e,g,p);b=(Nb(b,c[n>>2]|0,o,d)|0)==(o|0)&1;i=q;return b|0}function Sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+164|0;j=a+80|0;f=c[j>>2]|0;e=c[f+16>>2]|0;if(!e){b=1;return b|0}h=a+44|0;a=0;g=c[(c[i>>2]|0)+5584>>2]|0;while(1){if(c[g+808>>2]|0){k=c[(c[i>>2]|0)+5584>>2]|0;m=e>>>0<257?1:2;f=m+6|0;l=c[h>>2]|0;pb(l,65374,2);e=m|4;pb(l+2|0,e,2);pb(l+4|0,a,m);pb(l+e|0,0,1);pb(l+(e+1)|0,c[k+(a*1080|0)+808>>2]|0,1);if((Nb(b,c[h>>2]|0,f,d)|0)!=(f|0)){a=0;e=7;break}f=c[j>>2]|0}a=a+1|0;e=c[f+16>>2]|0;if(a>>>0>=e>>>0){a=1;e=7;break}else g=g+1080|0}if((e|0)==7)return a|0;return 0}function Td(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;i=i+16|0;g=l;h=c[a+108>>2]|0;j=wi(h)|0;k=j+6|0;e=a+48|0;f=a+44|0;a=c[f>>2]|0;do if(k>>>0>(c[e>>2]|0)>>>0){a=Tc(a,k)|0;if(a){c[f>>2]=a;c[e>>2]=k;break}Uc(c[f>>2]|0);c[f>>2]=0;c[e>>2]=0;Ub(d,1,11355,g)|0;b=0;i=l;return b|0}while(0);pb(a,65380,2);pb(a+2|0,j+4|0,2);pb(a+4|0,1,2);Ui(a+6|0,h|0,j|0)|0;b=(Nb(b,c[f>>2]|0,k,d)|0)==(k|0)&1;i=l;return b|0}function Ud(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=i;i=i+32|0;w=A+24|0;t=A+16|0;o=A+8|0;g=A;j=c[b+80>>2]|0;k=j+16|0;h=c[k>>2]|0;l=h+6|0;v=b+48|0;z=b+44|0;f=c[z>>2]|0;do if(l>>>0>(c[v>>2]|0)>>>0){f=Tc(f,l)|0;if(f){c[z>>2]=f;c[v>>2]=l;break}Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11199,g)|0;d=0;i=A;return d|0}while(0);pb(f,65400,2);pb(f+2|0,h+4|0,2);pb(f+4|0,c[k>>2]|0,2);if(c[k>>2]|0){h=0;g=c[j+24>>2]|0;f=f+6|0;while(1){pb(f,(c[g+24>>2]|0)+-1|c[g+32>>2]<<7,1);h=h+1|0;if(h>>>0>=(c[k>>2]|0)>>>0)break;else{g=g+52|0;f=f+1|0}}}if((Nb(d,c[z>>2]|0,l,e)|0)!=(l|0)){d=0;i=A;return d|0}q=b+200|0;n=c[q>>2]|0;r=b+164|0;m=c[r>>2]|0;g=m+(n*5640|0)+5616|0;a:do if(c[g>>2]|0){l=0;b=c[m+(n*5640|0)+5612>>2]|0;while(1){h=b+16|0;j=c[h>>2]|0;k=j+10|0;f=c[z>>2]|0;if(k>>>0>(c[v>>2]|0)>>>0){f=Tc(f,k)|0;if(!f)break;c[z>>2]=f;c[v>>2]=k}pb(f,65396,2);pb(f+2|0,j+8|0,2);pb(f+4|0,0,2);pb(f+6|0,c[b+4>>2]<<8|c[b+8>>2]&255|c[b>>2]<<10,2);pb(f+8|0,0,2);Ui(f+10|0,c[b+12>>2]|0,c[h>>2]|0)|0;if((Nb(d,c[z>>2]|0,k,e)|0)!=(k|0)){s=0;x=42;break}l=l+1|0;if(l>>>0>=(c[g>>2]|0)>>>0)break a;else b=b+20|0}if((x|0)==42){i=A;return s|0}Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11238,o)|0;d=0;i=A;return d|0}while(0);o=m+(n*5640|0)+5628|0;b:do if(c[o>>2]|0){p=0;m=c[m+(n*5640|0)+5624>>2]|0;while(1){l=m+4|0;g=c[l>>2]|0;j=g>>>0>255;k=j?2:1;j=j?32768:0;g=_(k,g<<1)|0;b=g+19|0;f=c[z>>2]|0;if(b>>>0>(c[v>>2]|0)>>>0){f=Tc(f,b)|0;if(!f)break;c[z>>2]=f;c[v>>2]=b}pb(f,65397,2);pb(f+2|0,g+17|0,2);pb(f+4|0,0,2);pb(f+6|0,c[m>>2]|0,1);pb(f+7|0,0,2);pb(f+9|0,1,2);pb(f+11|0,1,1);pb(f+12|0,c[l>>2]|j,2);f=f+14|0;if(!(c[l>>2]|0))g=0;else{h=0;do{pb(f,h,k);f=f+k|0;h=h+1|0;g=c[l>>2]|0}while(h>>>0>>0)}pb(f,g|j,2);f=f+2|0;if(!(c[l>>2]|0))h=f;else{g=0;do{pb(f,g,k);f=f+k|0;g=g+1|0}while(g>>>0<(c[l>>2]|0)>>>0);h=f}f=((a[m+16>>0]^1)&255)<<16&65536;g=c[m+8>>2]|0;if(g)f=c[g+8>>2]|f;g=c[m+12>>2]|0;if(g)f=c[g+8>>2]<<8|f;pb(h,f,3);if((Nb(d,c[z>>2]|0,b,e)|0)!=(b|0)){s=0;x=42;break}p=p+1|0;if(p>>>0>=(c[o>>2]|0)>>>0)break b;else m=m+20|0}if((x|0)==42){i=A;return s|0}Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11277,t)|0;d=0;i=A;return d|0}while(0);k=c[q>>2]|0;j=c[r>>2]|0;l=j+(k*5640|0)+5628|0;g=c[l>>2]|0;b=g+5|0;f=c[z>>2]|0;do if(b>>>0>(c[v>>2]|0)>>>0){f=Tc(f,b)|0;if(!f){Uc(c[z>>2]|0);c[z>>2]=0;c[v>>2]=0;Ub(e,1,11316,w)|0;u=1;break}else{c[z>>2]=f;c[v>>2]=b;y=f;x=37;break}}else{y=f;x=37}while(0);if((x|0)==37){pb(y,65399,2);pb(y+2|0,g+3|0,2);pb(y+4|0,c[l>>2]|0,1);if(c[l>>2]|0){h=0;g=y+5|0;f=c[j+(k*5640|0)+5624>>2]|0;while(1){pb(g,c[f>>2]|0,1);h=h+1|0;if(h>>>0>=(c[l>>2]|0)>>>0)break;else{g=g+1|0;f=f+20|0}}}u=(Nb(d,c[z>>2]|0,b,e)|0)!=(b|0)}d=u&1^1;i=A;return d|0}function Vd(a,b,d){a=a|0;b=b|0;d=d|0;d=Pb(b)|0;b=(c[a+196>>2]|0)+8|0;c[b>>2]=d;c[b+4>>2]=C;return 1}function Wd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=i;i=i+16|0;b=Tf(0)|0;e=a+204|0;c[e>>2]=b;if(!b){Ub(d,1,11159,f)|0;d=0;i=f;return d|0}if(Xf(b,c[a+80>>2]|0,a+88|0)|0){d=1;i=f;return d|0}Yf(c[e>>2]|0);c[e>>2]=0;d=0;i=f;return d|0}function Xd(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;O=d+80|0;E=c[O>>2]|0;P=d+164|0;i=c[P>>2]|0;N=E+24|0;F=c[N>>2]|0;f=c[F>>2]|0;h=c[F+4>>2]|0;M=E+16|0;F=_(c[F+24>>2]|0,c[M>>2]|0)|0;D=Pb(e)|0;q=d+116|0;l=c[q>>2]|0;r=d+112|0;e=c[r>>2]|0;G=(+(D>>>0)+4294967296.0*+(C|0))/+((_(e,l)|0)>>>0);D=(a[d+181>>0]&8)==0?1:2;if(l){s=d+92|0;u=d+100|0;v=d+96|0;y=d+104|0;z=E+4|0;A=E+8|0;B=E+12|0;x=+((_(f<<3,h)|0)>>>0);m=e;f=e;p=0;e=i;do{o=p;p=p+1|0;if(!f)f=0;else{m=0;do{w=+Sa[D&3](e);l=c[e+8>>2]|0;w=w/+(l>>>0);Q=c[s>>2]|0;i=c[u>>2]|0;k=(_(i,m)|0)+Q|0;f=c[E>>2]|0;f=(k|0)>(f|0)?k:f;k=c[v>>2]|0;j=c[y>>2]|0;R=(_(j,o)|0)+k|0;h=c[z>>2]|0;h=(R|0)>(h|0)?R:h;m=m+1|0;Q=(_(i,m)|0)+Q|0;i=c[A>>2]|0;i=(Q|0)<(i|0)?Q:i;k=(_(j,p)|0)+k|0;j=c[B>>2]|0;j=(k|0)<(j|0)?k:j;k=e+20|0;n=+g[k>>2];if(n!=0.0)g[k>>2]=+((_(_(i-f|0,F)|0,j-h|0)|0)>>>0)/(x*n)-w;if(l>>>0>1){n=+((_(_(i-f|0,F)|0,j-h|0)|0)>>>0);f=1;h=e+24|0;while(1){t=+g[h>>2];if(t!=0.0)g[h>>2]=n/(x*t)-w;f=f+1|0;if(f>>>0>=l>>>0)break;else h=h+4|0}}e=e+5640|0;f=c[r>>2]|0}while(m>>>0>>0);l=c[q>>2]|0;m=f}}while(p>>>0>>0);if(!l)l=0;else{s=(m|0)==0;t=G+2.0;v=m>>>0>1?m:1;u=0;f=c[P>>2]|0;do{if(!s){p=f+16|0;q=0;r=f;while(1){e=r+20|0;n=+g[e>>2];if(n!=0.0?(x=n-G,g[e>>2]=x,x<30.0):0)g[e>>2]=30.0;j=r+24|0;e=c[r+8>>2]|0;o=e+-1|0;n=+g[j>>2];h=n!=0.0;if(o>>>0>1){k=p+(e<<2)|0;i=1;e=j;do{if(h?(x=n-G,g[e>>2]=x,I=+g[e+-4>>2],x>2]=I+20.0;e=e+4|0;i=i+1|0;n=+g[e>>2];h=n!=0.0}while((i|0)!=(o|0));if(h){H=n;K=k;L=29}}else if(h){H=n;K=j;L=29}if((L|0)==29?(L=0,x=H-t,g[K>>2]=x,J=+g[K+-4>>2],x>2]=J+20.0;q=q+1|0;if(q>>>0>=m>>>0)break;else{p=p+5640|0;r=r+5640|0}}f=f+(v*5640|0)|0}u=u+1|0}while(u>>>0>>0)}}else{m=e;l=0}h=c[M>>2]|0;if(!h)u=0;else{i=(c[d+100>>2]|0)+-1|0;j=(c[d+104>>2]|0)+-1|0;k=0;e=c[N>>2]|0;f=0;while(1){R=c[e>>2]|0;Q=c[e+4>>2]|0;R=_(((j+Q|0)>>>0)/(Q>>>0)|0,((i+R|0)>>>0)/(R>>>0)|0)|0;f=(_(R,c[e+24>>2]|0)|0)+f|0;k=k+1|0;if(k>>>0>=h>>>0)break;else e=e+52|0}u=~~(+(f>>>0)*.1625)>>>0}o=c[(c[O>>2]|0)+16>>2]|0;q=o+-1|0;s=_(l,m)|0;p=(s|0)==0;if(p)i=0;else{e=0;f=0;h=c[P>>2]|0;while(1){R=c[h+5588>>2]|0;f=f>>>0>R>>>0?f:R;e=e+1|0;if((e|0)==(s|0))break;else h=h+5640|0}i=f*12|0}r=d+88|0;if(((b[r>>1]|0)+-3&65535)>=4){if(p){e=0;f=0}else{m=(o|0)==0;k=0;f=0;do{if(!m){h=c[(c[P>>2]|0)+(k*5640|0)+5584>>2]|0;j=0;do{if(!(c[h+(j*1080|0)>>2]&1))e=5;else e=(c[h+(j*1080|0)+4>>2]|0)+5|0;f=f>>>0>e>>>0?f:e;j=j+1|0}while((j|0)!=(o|0))}k=k+1|0}while((k|0)!=(s|0));l=0;e=0;do{if(!m){j=c[(c[P>>2]|0)+(l*5640|0)+5584>>2]|0;k=0;do{if(!(c[j+(k*1080|0)>>2]&1))h=5;else h=(c[j+(k*1080|0)+4>>2]|0)+5|0;e=e>>>0>h>>>0?e:h;k=k+1|0}while((k|0)!=(o|0))}l=l+1|0}while((l|0)!=(s|0))}i=(_(f+12+e|0,q)|0)+i|0}if(p)f=13;else{h=0;f=0;e=c[P>>2]|0;while(1){R=c[e+420>>2]|0;f=f>>>0>R>>>0?f:R;h=h+1|0;if((h|0)==(s|0))break;else e=e+5640|0}f=(f*9|0)+13|0}R=i+u+f|0;c[d+40>>2]=R;R=Pc(R)|0;c[d+36>>2]=R;if(!R){R=0;return R|0}if(((b[r>>1]|0)+-3&65535)>=4){R=1;return R|0}f=Pc((c[d+32>>2]|0)*5|0)|0;c[d+24>>2]=f;if(!f){R=0;return R|0}c[d+28>>2]=f;R=1;return R|0}function Yd(a){a=a|0;return 0.0}function Zd(a){a=a|0;return +(+((((c[a+5588>>2]|0)*14|0)+-14|0)>>>0))}function _d(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=c[b+(d*5640|0)+5584>>2]|0;q=(c[b+(d*5640|0)+420>>2]|0)+1|0;j=a>>>0<257?1:2;p=_(q,(j<<1)+5|0)|0;r=p+4|0;pb(e,65375,2);pb(e+2|0,p+2|0,2);if(!q){c[f>>2]=r;return}k=j+1|0;l=j+3|0;m=j|4;n=m+j|0;o=n+1|0;p=b+(d*5640|0)+8|0;h=g+4|0;i=0;e=e+4|0;g=b+(d*5640|0)+424|0;while(1){pb(e,c[g>>2]|0,1);pb(e+1|0,c[g+4>>2]|0,j);t=g+8|0;pb(e+k|0,c[t>>2]|0,2);b=g+12|0;pb(e+l|0,c[b>>2]|0,1);d=g+16|0;pb(e+m|0,c[d>>2]|0,j);pb(e+n|0,c[g+36>>2]|0,1);u=c[t>>2]|0;s=c[p>>2]|0;c[t>>2]=(u|0)<(s|0)?u:s;t=c[b>>2]|0;s=c[h>>2]|0;c[b>>2]=(t|0)<(s|0)?t:s;b=c[d>>2]|0;c[d>>2]=(b|0)<(a|0)?b:a;i=i+1|0;if((i|0)==(q|0))break;else{e=e+o|0;g=g+148|0}}c[f>>2]=r;return}function $d(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+16|0;k=n+8|0;j=n;l=c[a+(b*5640|0)+5584>>2]|0;b=c[l+(d*1080|0)+24>>2]|0;do if((b|0)!=1){a=(c[l+(d*1080|0)+4>>2]|0)*3|0;h=a+-2|0;if(!b){a=a+-1|0;if((c[f>>2]|0)>>>0>>0){Ub(g,1,11515,j)|0;f=0;i=n;return f|0}else{pb(e,c[l+(d*1080|0)+804>>2]<<5,1);if(!h)break;else b=0;do{e=e+1|0;pb(e,c[l+(d*1080|0)+28+(b<<3)>>2]<<3,1);b=b+1|0}while((b|0)!=(h|0))}}else m=7}else{h=1;b=1;m=7}while(0);if((m|0)==7){a=h<<1|1;if((c[f>>2]|0)>>>0>>0){Ub(g,1,11515,k)|0;f=0;i=n;return f|0}pb(e,(c[l+(d*1080|0)+804>>2]<<5)+b|0,1);if(h){e=e+1|0;b=0;while(1){pb(e,(c[l+(d*1080|0)+28+(b<<3)>>2]<<11)+(c[l+(d*1080|0)+28+(b<<3)+4>>2]|0)|0,2);b=b+1|0;if((b|0)==(h|0))break;else e=e+2|0}}}c[f>>2]=(c[f>>2]|0)-a;f=1;i=n;return f|0}function ae(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+16|0;g=c[a+(b*5640|0)+5584>>2]|0;if((c[e>>2]|0)>>>0<5){Ub(f,1,11587,j)|0;e=0;i=j;return e|0}h=g+4|0;pb(d,(c[h>>2]|0)+-1|0,1);pb(d+1|0,(c[g+8>>2]|0)+-2|0,1);pb(d+2|0,(c[g+12>>2]|0)+-2|0,1);pb(d+3|0,c[g+16>>2]|0,1);pb(d+4|0,c[g+20>>2]|0,1);b=(c[e>>2]|0)+-5|0;c[e>>2]=b;if(!(c[g>>2]&1)){e=1;i=j;return e|0}a=c[h>>2]|0;if(b>>>0>>0){Ub(f,1,11587,j+8|0)|0;e=0;i=j;return e|0}if(!a)a=0;else{b=d+5|0;d=0;while(1){pb(b,(c[g+944+(d<<2)>>2]<<4)+(c[g+812+(d<<2)>>2]|0)|0,1);d=d+1|0;a=c[h>>2]|0;if(d>>>0>=a>>>0)break;else b=b+1|0}b=c[e>>2]|0}c[e>>2]=b-a;e=1;i=j;return e|0}function be(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=c[b+76>>2]|0;g=c[i+(f*5640|0)+4>>2]|0;h=696;while(1){m=c[h>>2]|0;if((m|0)==-1|(m|0)==(g|0))break;else h=h+12|0}if(!(a[b+93>>0]&8)){b=1;return b|0}m=d[b+92>>0]|0;j=i+(f*5640|0)+424+(e*148|0)+92|0;k=i+(f*5640|0)+424+(e*148|0)+88|0;l=i+(f*5640|0)+424+(e*148|0)+96|0;e=i+(f*5640|0)+424+(e*148|0)+84|0;i=a[h+4>>0]|0;switch(i|0){case 67:{g=c[j>>2]|0;break}case 82:{g=c[k>>2]|0;break}case 80:{g=c[l>>2]|0;break}case 76:{g=c[e>>2]|0;break}default:g=1}if((m|0)!=(i|0)){i=a[h+5>>0]|0;switch(i|0){case 67:{g=_(c[j>>2]|0,g)|0;break}case 82:{g=_(c[k>>2]|0,g)|0;break}case 80:{g=_(c[l>>2]|0,g)|0;break}case 76:{g=_(c[e>>2]|0,g)|0;break}default:{}}if((m|0)!=(i|0)){i=a[h+6>>0]|0;switch(i|0){case 67:{g=_(c[j>>2]|0,g)|0;break}case 82:{g=_(c[k>>2]|0,g)|0;break}case 80:{g=_(c[l>>2]|0,g)|0;break}case 76:{g=_(c[e>>2]|0,g)|0;break}default:{}}if((m|0)!=(i|0)){h=a[h+7>>0]|0;switch(h|0){case 67:{g=_(c[j>>2]|0,g)|0;break}case 82:{g=_(c[k>>2]|0,g)|0;break}case 80:{g=_(c[l>>2]|0,g)|0;break}case 76:{g=_(c[e>>2]|0,g)|0;break}default:{}}if((m|0)==(h|0))h=3;else{b=g;return b|0}}else h=2}else h=1}else h=0;c[b+84>>2]=h;b=g;return b|0}function ce(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=g+16|0;if(!(c[B>>2]|0)){B=1;return B|0}A=0;z=c[g+24>>2]|0;while(1){k=i+44|0;j=c[k>>2]|0;l=i+8|0;if(!j){g=i+12|0;j=Qc(_(c[g>>2]|0,c[l>>2]|0)|0,4)|0;c[k>>2]=j;if(!j){h=0;i=61;break}}else g=i+12|0;q=z+36|0;c[i+36>>2]=c[q>>2];x=c[z+24>>2]|0;t=c[f+24>>2]|0;q=c[q>>2]|0;x=((x&7|0)!=0&1)+(x>>>3)|0;x=(x|0)==3?4:x;n=c[t+(q*136|0)+8>>2]|0;m=c[t+(q*136|0)>>2]|0;v=n-m|0;s=c[t+(q*136|0)+12>>2]|0;q=c[t+(q*136|0)+4>>2]|0;t=s-q|0;k=c[i+16>>2]|0;p=c[i+40>>2]|0;o=Ri(1,0,p|0)|0;w=C;k=Si(k|0,0,-1,-1)|0;k=Si(k|0,C|0,o|0,w|0)|0;k=Ti(k|0,C|0,p|0)|0;r=Si(c[i+20>>2]|0,0,-1,-1)|0;w=Si(r|0,C|0,o|0,w|0)|0;p=Ti(w|0,C|0,p|0)|0;w=c[l>>2]|0;l=k+w|0;o=c[g>>2]|0;r=p+o|0;do if(k>>>0>>0){g=m-k|0;if(n>>>0>l>>>0){y=l-m|0;u=0;m=v-y|0;n=g}else{u=0;m=0;n=g;y=v}}else{g=k-m|0;if(n>>>0>l>>>0){u=g;m=n-l|0;n=0;y=w;break}else{u=g;m=0;n=0;y=v-g|0;break}}while(0);do if(p>>>0>>0){l=q-p|0;if(s>>>0>r>>>0){k=r-q|0;o=k;g=0;k=t-k|0}else{o=t;g=0;k=0}}else{g=p-q|0;if(s>>>0>r>>>0){k=s-r|0;l=0;break}else{o=t-g|0;k=0;l=0;break}}while(0);if((u|m|y|k|g|o|0)<0){h=0;i=61;break}g=(_(g,v)|0)+u|0;q=u+m|0;r=(_(k,v)|0)-u|0;p=w-y|0;j=j+((_(w,l)|0)+n<<2)|0;switch(x|0){case 1:{h=h+g|0;g=(o|0)==0;if(!(c[z+32>>2]|0)){if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=d[j>>0];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+1|0}}g=l;h=h+y|0}h=h+q|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}}else if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=a[j>>0];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+1|0}}g=l;h=h+y|0}h=h+q|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}h=h+r|0;break}case 2:{h=h+(g<<1)|0;g=(o|0)==0;if(!(c[z+32>>2]|0)){if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=e[j>>1];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+2|0}}g=l;h=h+(y<<1)|0}h=h+(q<<1)|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}}else if(!g){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=b[j>>1];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+2|0}}g=l;h=h+(y<<1)|0}h=h+(q<<1)|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}h=h+(r<<1)|0;break}case 4:{h=h+(g<<2)|0;if(o){m=(y|0)==0;n=0;g=j;while(1){if(!m){l=g+(y<<2)|0;k=0;j=h;while(1){c[g>>2]=c[j>>2];k=k+1|0;if((k|0)==(y|0))break;else{g=g+4|0;j=j+4|0}}g=l;h=h+(y<<2)|0}h=h+(q<<2)|0;n=n+1|0;if((n|0)==(o|0))break;else g=g+(p<<2)|0}}h=h+(r<<2)|0;break}default:{}}A=A+1|0;if(A>>>0>=(c[B>>2]|0)>>>0){h=1;i=61;break}else{i=i+52|0;z=z+52|0;f=f+52|0}}if((i|0)==61)return h|0;return 0}function de(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=i;i=i+112|0;x=z+88|0;u=z+80|0;v=z+72|0;t=z+64|0;q=z+56|0;p=z+48|0;m=z+40|0;k=z+32|0;j=z+24|0;h=z+16|0;r=z+100|0;s=z+96|0;w=z+92|0;c[s>>2]=0;y=b+200|0;if((f|0)!=8){Ub(g,1,8662,z)|0;Ub(g,1,8662,z+8|0)|0;g=0;i=z;return g|0}qb(e,y,2);qb(e+2|0,r,4);qb(e+6|0,w,1);qb(e+7|0,s,1);l=c[y>>2]|0;e=c[b+112>>2]|0;if(l>>>0>=(_(c[b+116>>2]|0,e)|0)>>>0){c[h>>2]=l;Ub(g,1,15258,h)|0;g=0;i=z;return g|0}f=c[b+164>>2]|0;o=(l>>>0)%(e>>>0)|0;n=(l>>>0)/(e>>>0)|0;e=c[r>>2]|0;do if((e+-1|0)>>>0<13){if((e|0)==12){c[j>>2]=12;Ub(g,2,15282,j)|0;e=c[r>>2]|0;break}c[k>>2]=e;Ub(g,1,15319,k)|0;g=0;i=z;return g|0}while(0);if(!e){Ub(g,4,15380,m)|0;c[b+72>>2]=1}e=c[s>>2]|0;do if(!e)e=c[f+(l*5640|0)+5588>>2]|0;else{e=((d[b+76>>0]|0)>>>4&1)+e|0;c[s>>2]=e;h=f+(l*5640|0)+5588|0;j=c[h>>2]|0;f=c[w>>2]|0;if((j+-1|0)>>>0>>0){c[p>>2]=f;c[p+4>>2]=j;Ub(g,1,15491,p)|0;c[b+72>>2]=1;g=0;i=z;return g|0}if(f>>>0>>0){c[h>>2]=e;break}c[q>>2]=f;c[q+4>>2]=e;Ub(g,1,15590,q)|0;c[b+72>>2]=1;g=0;i=z;return g|0}while(0);if((e|0)!=0?(e|0)==((c[w>>2]|0)+1|0):0){q=b+76|0;a[q>>0]=a[q>>0]|1}c[b+24>>2]=(c[b+72>>2]|0)==0?(c[r>>2]|0)+-12|0:0;c[b+8>>2]=16;e=c[b+60>>2]|0;if((e|0)==-1){if((o>>>0>=(c[b+28>>2]|0)>>>0?o>>>0<(c[b+36>>2]|0)>>>0:0)?n>>>0>=(c[b+32>>2]|0)>>>0:0)e=(n>>>0>=(c[b+40>>2]|0)>>>0&1)<<2&255;else e=4;r=b+76|0;a[r>>0]=a[r>>0]&-5|e}else{r=b+76|0;a[r>>0]=((c[y>>2]|0)!=(e|0)&1)<<2&255|a[r>>0]&-5}k=b+196|0;e=c[k>>2]|0;if(!e){g=1;i=z;return g|0}j=c[y>>2]|0;e=c[e+40>>2]|0;c[e+(j*40|0)>>2]=j;c[e+(j*40|0)+12>>2]=c[w>>2];f=c[s>>2]|0;if(f){c[e+(j*40|0)+4>>2]=f;c[e+(j*40|0)+8>>2]=c[s>>2];e=c[e+(j*40|0)+16>>2]|0;if(!e){x=Qc(c[s>>2]|0,24)|0;c[(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16>>2]=x;if(x){g=1;i=z;return g|0}Ub(g,1,15698,t)|0;g=0;i=z;return g|0}e=Tc(e,(c[s>>2]|0)*24|0)|0;f=(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16|0;if(!e){Uc(c[f>>2]|0);c[(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16>>2]=0;Ub(g,1,15698,v)|0;g=0;i=z;return g|0}else{c[f>>2]=e;g=1;i=z;return g|0}}if(!(c[e+(j*40|0)+16>>2]|0)){c[e+(j*40|0)+8>>2]=10;v=Qc(10,24)|0;f=c[y>>2]|0;e=c[(c[k>>2]|0)+40>>2]|0;c[e+(f*40|0)+16>>2]=v;if(!v){c[e+(f*40|0)+8>>2]=0;Ub(g,1,15698,u)|0;g=0;i=z;return g|0}else j=f}f=c[w>>2]|0;h=e+(j*40|0)+8|0;if(f>>>0<(c[h>>2]|0)>>>0){g=1;i=z;return g|0}f=f+1|0;c[h>>2]=f;e=Tc(c[e+(j*40|0)+16>>2]|0,f*24|0)|0;f=(c[(c[k>>2]|0)+40>>2]|0)+((c[y>>2]|0)*40|0)+16|0;if(!e){Uc(c[f>>2]|0);y=c[y>>2]|0;w=c[(c[k>>2]|0)+40>>2]|0;c[w+(y*40|0)+16>>2]=0;c[w+(y*40|0)+8>>2]=0;Ub(g,1,15698,x)|0;g=0;i=z;return g|0}else{c[f>>2]=e;g=1;i=z;return g|0}return 0}function ee(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+64|0;p=s+48|0;q=s+40|0;k=s+32|0;n=s+56|0;j=s+52|0;c[n>>2]=e;r=b+80|0;l=c[r>>2]|0;o=b+8|0;if((c[o>>2]|0)==16)m=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else m=c[b+12>>2]|0;g=m+5636|0;h=a[g>>0]|0;if(h&1){Ub(f,1,15025,s)|0;r=0;i=s;return r|0}a[g>>0]=h|1;if(e>>>0<5){Ub(f,1,15089,s+8|0)|0;r=0;i=s;return r|0}qb(d,m,1);if((c[m>>2]|0)>>>0>7){Ub(f,1,15115,s+16|0)|0;r=0;i=s;return r|0}qb(d+1|0,j,1);j=c[j>>2]|0;g=m+4|0;c[g>>2]=j;if((j|0)>4){Ub(f,1,15149,s+24|0)|0;c[g>>2]=-1}g=m+8|0;qb(d+2|0,g,2);g=c[g>>2]|0;if((g+-1|0)>>>0>65534){c[k>>2]=g;Ub(f,1,15190,k)|0;r=0;i=s;return r|0}k=c[b+172>>2]|0;c[m+12>>2]=(k|0)==0?g:k;qb(d+4|0,m+16|0,1);k=d+5|0;c[n>>2]=e+-5;j=c[l+16>>2]|0;if(j){d=c[m>>2]&1;g=c[m+5584>>2]|0;h=0;do{c[g+(h*1080|0)>>2]=d;h=h+1|0}while(h>>>0>>0)}if(!(Fe(b,0,k,n,f)|0)){Ub(f,1,15089,q)|0;r=0;i=s;return r|0}if(c[n>>2]|0){Ub(f,1,15089,p)|0;r=0;i=s;return r|0}if((c[o>>2]|0)==16)g=(c[b+164>>2]|0)+((c[b+200>>2]|0)*5640|0)|0;else g=c[b+12>>2]|0;g=c[g+5584>>2]|0;e=g+4|0;h=c[e>>2]|0;m=h<<2;if((c[(c[r>>2]|0)+16>>2]|0)>>>0<=1){r=1;i=s;return r|0}n=g+8|0;o=g+12|0;b=g+16|0;f=g+20|0;p=g+812|0;q=g+944|0;c[g+1084>>2]=h;j=c[n>>2]|0;c[g+1088>>2]=j;d=c[o>>2]|0;c[g+1092>>2]=d;k=c[b>>2]|0;c[g+1096>>2]=k;l=c[f>>2]|0;c[g+1100>>2]=l;Ui(g+1892|0,p|0,m|0)|0;Ui(g+2024|0,q|0,m|0)|0;if((c[(c[r>>2]|0)+16>>2]|0)>>>0<=2){r=1;i=s;return r|0}c[g+2164>>2]=h;c[g+2168>>2]=j;c[g+2172>>2]=d;c[g+2176>>2]=k;c[g+2180>>2]=l;Ui(g+2972|0,p|0,m|0)|0;Ui(g+3104|0,q|0,m|0)|0;if((c[(c[r>>2]|0)+16>>2]|0)>>>0>3)h=3;else{r=1;i=s;return r|0}while(1){j=c[n>>2]|0;d=c[o>>2]|0;k=c[b>>2]|0;l=c[f>>2]|0;c[g+3244>>2]=c[e>>2];c[g+3248>>2]=j;c[g+3252>>2]=d;c[g+3256>>2]=k;c[g+3260>>2]=l;Ui(g+4052|0,p|0,m|0)|0;Ui(g+4184|0,q|0,m|0)|0;h=h+1|0;if(h>>>0>=(c[(c[r>>2]|0)+16>>2]|0)>>>0){g=1;break}else g=g+1080|0}i=s;return g|0}\nfunction lg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=i;i=i+272|0;n=u;s=u+136|0;t=u+8|0;if(!a){t=0;i=u;return t|0}m=a+4|0;if((c[a>>2]|0)==(b|0)?(c[m>>2]|0)==(d|0):0)f=a+8|0;else{c[a>>2]=b;c[m>>2]=d;c[s>>2]=b;c[t>>2]=d;f=a+8|0;c[f>>2]=0;g=0;j=d;k=b;l=0;while(1){r=_(j,k)|0;k=(k+1|0)/2|0;h=l+1|0;c[s+(h<<2)>>2]=k;j=(j+1|0)/2|0;c[t+(h<<2)>>2]=j;g=g+r|0;if(r>>>0<=1)break;else l=h}c[f>>2]=g;if(!g){f=a+12|0;g=c[f>>2]|0;if(g){Uc(g);c[f>>2]=0}Uc(a);t=0;i=u;return t|0}h=g<<4;j=a+16|0;k=a+12|0;do if(h>>>0>(c[j>>2]|0)>>>0){g=Tc(c[k>>2]|0,h)|0;if(g){c[k>>2]=g;d=c[j>>2]|0;Qi(g+d|0,0,h-d|0)|0;c[j>>2]=h;d=c[m>>2]|0;b=c[a>>2]|0;break}Ub(e,1,20166,n)|0;f=c[k>>2]|0;if(f){Uc(f);c[k>>2]=0}Uc(a);t=0;i=u;return t|0}while(0);g=c[k>>2]|0;b=g+((_(d,b)|0)<<4)|0;if(l){r=0;d=b;do{p=c[t+(r<<2)>>2]|0;a:do if((p|0)>0){q=c[s+(r<<2)>>2]|0;if((q|0)<=0){h=p+-1|0;j=0;while(1){o=(j&1|0)!=0|(j|0)==(h|0);k=o?d:b+(q<<4)|0;d=o?d:b;j=j+1|0;if((j|0)>=(p|0)){b=k;break a}else b=k}}o=((q+2+((q|0)<2?~q:-3)|0)>>>1)+1|0;e=p+-1|0;n=0;while(1){m=q;k=d;while(1){c[g>>2]=k;h=g+16|0;j=m;m=m+-2|0;if((m|0)>-1){c[h>>2]=k;g=g+32|0}else g=h;if((j|0)<=2)break;else k=k+16|0}d=d+(o<<4)|0;m=(n&1|0)!=0|(n|0)==(e|0);h=m?d:b+(q<<4)|0;d=m?d:b;n=n+1|0;if((n|0)>=(p|0)){b=h;break}else b=h}}while(0);r=r+1|0}while((r|0)!=(l|0))}c[g>>2]=0}f=c[f>>2]|0;if(!f){t=a;i=u;return t|0}g=0;b=c[a+12>>2]|0;while(1){c[b+4>>2]=999;c[b+8>>2]=0;c[b+12>>2]=0;g=g+1|0;if((g|0)==(f|0))break;else b=b+16|0}i=u;return a|0}function mg(a){a=a|0;var b=0,d=0;if(!a)return;b=a+12|0;d=c[b>>2]|0;if(d){Uc(d);c[b>>2]=0}Uc(a);return}function ng(a,b,d){a=a|0;b=b|0;d=d|0;b=(c[a+12>>2]|0)+(b<<4)|0;if(!b)return;while(1){a=b+4|0;if((c[a>>2]|0)<=(d|0)){b=4;break}c[a>>2]=d;b=c[b>>2]|0;if(!b){b=4;break}}if((b|0)==4)return}function og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+128|0;j=k;d=(c[b+12>>2]|0)+(d<<4)|0;if(!(c[d>>2]|0)){f=0;g=j}else{f=d;b=j;while(1){g=b+4|0;c[b>>2]=d;d=c[f>>2]|0;if(!(c[d>>2]|0)){f=0;break}else{f=d;b=g}}}while(1){h=d+8|0;b=c[h>>2]|0;if((f|0)>(b|0)){c[h>>2]=f;b=f}a:do if((b|0)<(e|0)){f=d+4|0;while(1){if((b|0)>=(c[f>>2]|0))break;Bg(a,0,1);b=b+1|0;if((b|0)>=(e|0)){d=b;break a}}d=d+12|0;if(!(c[d>>2]|0)){Bg(a,1,1);c[d>>2]=1;d=b}else d=b}else d=b;while(0);c[h>>2]=d;if((g|0)==(j|0))break;h=g+-4|0;f=d;d=c[h>>2]|0;g=h}i=k;return}function pg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;k=i;i=i+128|0;j=k;d=(c[b+12>>2]|0)+(d<<4)|0;if(!(c[d>>2]|0)){b=0;g=j}else{f=d;b=j;while(1){g=b+4|0;c[b>>2]=d;d=c[f>>2]|0;if(!(c[d>>2]|0)){b=0;break}else{f=d;b=g}}}while(1){h=d+8|0;f=c[h>>2]|0;if((b|0)>(f|0))c[h>>2]=b;else b=f;d=d+4|0;a:do if((b|0)<(e|0)){while(1){if((b|0)>=(c[d>>2]|0))break a;if(Cg(a,1)|0)break;b=b+1|0;if((b|0)>=(e|0))break a}c[d>>2]=b}while(0);c[h>>2]=b;if((g|0)==(j|0))break;h=g+-4|0;d=c[h>>2]|0;g=h}i=k;return (c[d>>2]|0)<(e|0)|0}function qg(){var a=0,b=0;a=Qc(1,12)|0;if(!a){a=0;return a|0}c[a+4>>2]=10;b=Qc(10,4)|0;c[a+8>>2]=b;if(b){b=a;return b|0}Uc(a);b=0;return b|0}function rg(a){a=a|0;var b=0;if(!a)return;b=c[a+8>>2]|0;if(b)Uc(b);Uc(a);return}function sg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;j=i;i=i+16|0;h=j;g=a+4|0;f=c[g>>2]|0;e=c[a>>2]|0;do if((f|0)==(e|0)){f=f+10|0;c[g>>2]=f;e=a+8|0;f=Tc(c[e>>2]|0,f<<2)|0;if(f){c[e>>2]=f;e=c[a>>2]|0;break}Uc(c[e>>2]|0);c[g>>2]=0;c[a>>2]=0;Ub(d,1,20214,h)|0;a=0;i=j;return a|0}else f=c[a+8>>2]|0;while(0);c[f+(e<<2)>>2]=b;c[a>>2]=e+1;a=1;i=j;return a|0}function tg(a){a=a|0;return c[a>>2]|0}function ug(a){a=a|0;return c[a+8>>2]|0}function vg(a){a=a|0;c[a>>2]=0;return}function wg(){return Pc(20)|0}function xg(a){a=a|0;if(!a)return;Uc(a);return}function yg(a){a=a|0;return (c[a+8>>2]|0)-(c[a>>2]|0)|0}function zg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=b+d;c[a+8>>2]=b;c[a+12>>2]=0;c[a+16>>2]=8;return}function Ag(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=b+d;c[a+8>>2]=b;c[a+12>>2]=0;c[a+16>>2]=0;return}function Bg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!e)return;k=b+16|0;l=b+12|0;m=b+8|0;h=b+4|0;b=c[k>>2]|0;j=e+-1|0;do{i=d>>>j&1;if(!b){g=c[l>>2]|0;b=g<<8&65280;c[l>>2]=b;b=(b|0)==65280?7:8;c[k>>2]=b;f=c[m>>2]|0;if(f>>>0<(c[h>>2]|0)>>>0){c[m>>2]=f+1;a[f>>0]=g;b=c[k>>2]|0}}b=b+-1|0;c[k>>2]=b;c[l>>2]=i<>2];j=j+-1|0}while(j>>>0>>0);return}function Cg(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if(!b){b=0;return b|0}j=a+16|0;k=a+12|0;l=a+8|0;h=a+4|0;e=c[j>>2]|0;f=c[k>>2]|0;i=b+-1|0;a=0;do{if(!e){g=f<<8&65280;c[k>>2]=g;e=(g|0)==65280?7:8;c[j>>2]=e;f=c[l>>2]|0;if(f>>>0<(c[h>>2]|0)>>>0){c[l>>2]=f+1;f=d[f>>0]|0|g;c[k>>2]=f}else f=g}e=e+-1|0;c[j>>2]=e;a=((f>>>e&1)<>>0>>0);return a|0}function Dg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=b+12|0;d=c[f>>2]|0;i=d<<8&65280;c[f>>2]=i;g=b+16|0;c[g>>2]=(i|0)==65280?7:8;i=b+8|0;e=c[i>>2]|0;h=b+4|0;if(e>>>0>=(c[h>>2]|0)>>>0){i=0;return i|0}c[i>>2]=e+1;a[e>>0]=d;if((c[g>>2]|0)!=7){i=1;return i|0}d=c[f>>2]|0;b=d<<8&65280;c[f>>2]=b;c[g>>2]=(b|0)==65280?7:8;b=c[i>>2]|0;if(b>>>0>=(c[h>>2]|0)>>>0){i=0;return i|0}c[i>>2]=b+1;a[b>>0]=d;i=1;return i|0}function Eg(a){a=a|0;var b=0,e=0,f=0,g=0,h=0;h=a+12|0;b=c[h>>2]|0;do if((b&255|0)==255){f=b<<8&65280;c[h>>2]=f;b=a+16|0;c[b>>2]=(f|0)==65280?7:8;g=a+8|0;e=c[g>>2]|0;if(e>>>0<(c[a+4>>2]|0)>>>0){c[g>>2]=e+1;c[h>>2]=d[e>>0]|0|f;break}else{a=0;return a|0}}else b=a+16|0;while(0);c[b>>2]=0;a=1;return a|0}function Fg(a){a=a|0;return Pg(a,1)|0}function Gg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=i;i=i+32|0;B=D+16|0;C=D;k=c[a+24>>2]|0;j=(c[k+8>>2]|0)-(c[k>>2]|0)|0;h=(c[k+12>>2]|0)-(c[k+4>>2]|0)|0;A=(c[a+8>>2]|0)-(c[a>>2]|0)|0;if((b|0)==1){C=1;i=D;return C|0}g=b+-1|0;f=(g|0)==0;if(f)b=0;else{d=k;e=g;b=0;do{z=d;d=d+136|0;y=(c[z+144>>2]|0)-(c[d>>2]|0)|0;b=b>>>0>>0?y:b;z=(c[z+148>>2]|0)-(c[z+140>>2]|0)|0;b=b>>>0>>0?z:b;e=e+-1|0}while((e|0)!=0);b=b<<2}z=Rc(b)|0;c[B>>2]=z;if(!z){C=0;i=D;return C|0}c[C>>2]=z;if(!f){s=a+32|0;t=B+8|0;u=C+8|0;v=B+4|0;w=B+12|0;x=C+4|0;y=C+12|0;do{q=c[s>>2]|0;n=k;k=k+136|0;c[t>>2]=j;c[u>>2]=h;o=c[n+144>>2]|0;p=c[k>>2]|0;e=j;j=o-p|0;b=c[n+148>>2]|0;n=n+140|0;r=c[n>>2]|0;d=h;h=b-r|0;c[v>>2]=j-e;c[w>>2]=(p|0)%2|0;r=(b|0)==(r|0);if(!r){m=j<<2;b=0;while(1){a=_(b,A)|0;l=q+(a<<2)|0;if(e){d=l;f=z+(c[w>>2]<<2)|0;while(1){e=e+-1|0;c[f>>2]=c[d>>2];if(!e)break;else{d=d+4|0;f=f+8|0}}}d=c[v>>2]|0;if(d){e=q+((c[t>>2]|0)+a<<2)|0;f=z+(1-(c[w>>2]|0)<<2)|0;while(1){d=d+-1|0;c[f>>2]=c[e>>2];if(!d)break;else{e=e+4|0;f=f+8|0}}}Qg(B);Ui(l|0,z|0,m|0)|0;b=b+1|0;if((b|0)==(h|0))break;e=c[t>>2]|0}d=c[u>>2]|0;b=c[n>>2]|0}c[x>>2]=h-d;c[y>>2]=(b|0)%2|0;a:do if((o|0)!=(p|0)){b=0;while(1){if(d){e=q+(b<<2)|0;f=z+(c[y>>2]<<2)|0;while(1){d=d+-1|0;c[f>>2]=c[e>>2];if(!d)break;else{e=e+(A<<2)|0;f=f+8|0}}}d=c[x>>2]|0;if(d){e=q+((_(c[u>>2]|0,A)|0)+b<<2)|0;f=z+(1-(c[y>>2]|0)<<2)|0;while(1){d=d+-1|0;c[f>>2]=c[e>>2];if(!d)break;else{e=e+(A<<2)|0;f=f+8|0}}}Qg(C);if(!r){d=0;do{c[q+((_(d,A)|0)+b<<2)>>2]=c[z+(d<<2)>>2];d=d+1|0}while((d|0)!=(h|0))}b=b+1|0;if((b|0)==(j|0))break a;d=c[u>>2]|0}}while(0);g=g+-1|0}while((g|0)!=0)}Sc(z);C=1;i=D;return C|0}function Hg(a){a=a|0;if(!a){a=0;return a|0}a=(a+-1|0)>>>0<2?1:2;return a|0}function Ig(a,b){a=a|0;b=b|0;return +(+h[56+(b*80|0)+(a<<3)>>3])}function Jg(a){a=a|0;return Pg(a,2)|0}function Kg(a){a=a|0;return 0}function Lg(a,b){a=a|0;b=b|0;return +(+h[376+(b*80|0)+(a<<3)>>3])}function Mg(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=a+4|0;l=((c[k>>2]|0)*3|0)+-2|0;if(!l)return;m=a+20|0;n=a+24|0;o=0;do{if(!o){e=0;f=0}else{f=o+-1|0;e=((f>>>0)/3|0)+1|0;f=((f>>>0)%3|0)+1|0}if((f|0)==0|(c[m>>2]|0)==0)g=0;else g=(f+-1|0)>>>0<2?1:2;if(!(c[n>>2]|0))d=1.0;else d=+(1<>2]|0)+~e<<3)>>3];j=~~+M(+(d*8192.0));i=g+b|0;if((j|0)>1){e=j;f=0;while(1){e=e>>1;if((e|0)<=1)break;else f=f+1|0}g=j;e=0;do{g=g>>1;e=e+1|0}while((g|0)>1);f=f+-12|0}else{f=-13;e=0}g=11-e|0;c[a+28+(o<<3)+4>>2]=((g|0)<0?j>>0-g:j<>2]=i-f;o=o+1|0}while((o|0)!=(l|0));return}function Ng(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=i;i=i+32|0;Q=T+16|0;R=T;m=c[a+24>>2]|0;n=c[m+8>>2]|0;o=c[m>>2]|0;k=c[m+12>>2]|0;l=c[m+4>>2]|0;P=a+8|0;h=c[P>>2]|0;j=c[a>>2]|0;O=h-j|0;g=b+-1|0;f=(g|0)==0;if(f)b=80;else{d=m;e=g;b=0;do{N=d;d=d+136|0;M=(c[N+144>>2]|0)-(c[d>>2]|0)|0;b=b>>>0>>0?M:b;N=(c[N+148>>2]|0)-(c[N+140>>2]|0)|0;b=b>>>0>>0?N:b;e=e+-1|0}while((e|0)!=0);b=(b<<4)+80|0}N=Rc(b)|0;c[Q>>2]=N;if(!N){S=0;i=T;return S|0}c[R>>2]=N;a:do if(!f){y=a+32|0;z=a+12|0;A=a+4|0;B=Q+8|0;C=R+8|0;D=Q+4|0;E=Q+12|0;F=R+4|0;G=R+12|0;H=O<<1;I=O<<2;J=O*3|0;L=j<<2;M=h<<2;K=L-M|0;L=M-L|0;M=h-j<<2;b=g;d=N;g=h;e=j;r=k-l|0;f=m;h=n-o|0;while(1){s=c[y>>2]|0;e=_((c[z>>2]|0)-(c[A>>2]|0)|0,g-e|0)|0;c[B>>2]=h;c[C>>2]=r;w=f+136|0;p=c[f+144>>2]|0;q=c[w>>2]|0;x=p-q|0;u=c[f+148>>2]|0;n=f+140|0;t=c[n>>2]|0;v=u-t|0;c[D>>2]=x-h;c[E>>2]=(q|0)%2|0;if((v|0)>3){g=(x|0)>0;h=(u+-4-t|0)>>>2;m=_(K,h)|0;h=s+(L+(_(M,h)|0)<<2)|0;j=s;k=e;l=v;while(1){Sg(Q,j,O,k);Tg(Q);if(g){f=x;do{o=f;f=f+-1|0;c[j+(f<<2)>>2]=c[N+(f<<4)>>2];c[j+(f+O<<2)>>2]=c[N+(f<<4)+4>>2];c[j+(f+H<<2)>>2]=c[N+(f<<4)+8>>2];c[j+(f+J<<2)>>2]=c[N+(f<<4)+12>>2]}while((o|0)>1)}l=l+-4|0;if((l|0)<=3)break;else{j=j+(I<<2)|0;k=k-I|0}}e=K+e+m|0}else h=s;g=v&3;b:do if(!g)S=21;else{Sg(Q,h,O,e);Tg(Q);if((x|0)>0)e=x;else{k=v-r|0;c[F>>2]=k;g=(c[n>>2]|0)%2|0;c[G>>2]=g;l=r;j=s;break}while(1){f=e;e=e+-1|0;switch(g|0){case 3:{c[h+(e+H<<2)>>2]=c[N+(e<<4)+8>>2];S=18;break}case 2:{S=18;break}case 1:{S=19;break}default:{}}if((S|0)==18){c[h+(e+O<<2)>>2]=c[N+(e<<4)+4>>2];S=19}if((S|0)==19){S=0;c[h+(e<<2)>>2]=c[N+(e<<4)>>2]}if((f|0)<=1){S=21;break b}}}while(0);if((S|0)==21){S=0;k=v-r|0;c[F>>2]=k;g=(c[n>>2]|0)%2|0;c[G>>2]=g;if((x|0)>3){o=(u|0)==(t|0);p=p+-4-q|0;n=c[C>>2]|0;l=(n|0)>0;j=1-g|0;m=(k|0)>0;f=s;h=x;while(1){if(l){e=0;do{r=d+((e<<1)+g<<4)|0;q=f+((_(e,O)|0)<<2)|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];e=e+1|0}while((e|0)!=(n|0))}if(m){e=0;do{r=d+(j+(e<<1)<<4)|0;q=f+((_(e+n|0,O)|0)<<2)|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];e=e+1|0}while((e|0)!=(k|0))}Tg(R);if(!o){d=c[R>>2]|0;e=0;do{r=f+((_(e,O)|0)<<2)|0;q=d+(e<<4)|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];e=e+1|0}while((e|0)!=(v|0))}h=h+-4|0;if((h|0)<=3)break;else f=f+16|0}l=n;j=s+((p+4&-4)<<2)|0}else{l=r;j=s}}h=x&3;if(h){d=c[R>>2]|0;if((l|0)>0){e=h<<2;f=0;do{Ui(d+((f<<1)+g<<4)|0,j+((_(f,O)|0)<<2)|0,e|0)|0;f=f+1|0}while((f|0)!=(l|0))}e=1-g|0;if((k|0)>0){f=h<<2;g=0;do{Ui(d+(e+(g<<1)<<4)|0,j+((_(g+l|0,O)|0)<<2)|0,f|0)|0;g=g+1|0}while((g|0)!=(k|0))}Tg(R);if((u|0)!=(t|0)){e=h<<2;f=0;do{Ui(j+((_(f,O)|0)<<2)|0,d+(f<<4)|0,e|0)|0;f=f+1|0}while((f|0)!=(v|0))}}b=b+-1|0;if(!b)break a;g=c[P>>2]|0;e=c[a>>2]|0;r=v;f=w;h=x}}while(0);Sc(N);S=1;i=T;return S|0}function Og(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!e){e=(b|0)>0;if(!(e|(d|0)>1))return;if(e){e=a+((d<<1)+-2<<2)|0;f=0;do{j=f;f=f+1|0;k=a+((j<<1|1)<<2)|0;c[k>>2]=(c[k>>2]|0)-((c[((f|0)<(d|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((j|0)<(d|0)?a+(j<<1<<2)|0:e)>>2]|0)>>1)}while((f|0)!=(b|0))}if((d|0)<=0)return;f=a+4|0;g=(b<<1)+-1|0;h=0;do{if((h|0)<1)e=f;else e=a+((((h|0)>(b|0)?b:h)<<1)+-1<<2)|0;k=a+(h<<1<<2)|0;c[k>>2]=((c[e>>2]|0)+2+(c[a+(((h|0)<(b|0)?h<<1|1:g)<<2)>>2]|0)>>2)+(c[k>>2]|0);h=h+1|0}while((h|0)!=(d|0));return}if((b|0)==1&(d|0)==0){c[a>>2]=c[a>>2]<<1;return}if((b|0)>0){f=a+4|0;g=(d<<1)+-1|0;h=a+(g<<2)|0;k=0;do{i=k<<1;j=c[a+(((k|0)<(d|0)?i|1:g)<<2)>>2]|0;if((k|0)>=1)if((k|0)>(d|0))e=h;else e=a+(i+-1<<2)|0;else e=f;i=a+(i<<2)|0;c[i>>2]=(c[i>>2]|0)-((c[e>>2]|0)+j>>1);k=k+1|0}while((k|0)!=(b|0))}if((d|0)<=0)return;e=a+((b<<1)+-2<<2)|0;f=0;do{j=f;f=f+1|0;k=a+((j<<1|1)<<2)|0;c[k>>2]=((c[((j|0)<(b|0)?a+(j<<1<<2)|0:e)>>2]|0)+2+(c[((f|0)<(b|0)?a+(f<<1<<2)|0:e)>>2]|0)>>2)+(c[k>>2]|0)}while((f|0)!=(d|0));return}function Pg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=(c[a+8>>2]|0)-(c[a>>2]|0)|0;g=c[a+16>>2]|0;i=g+-1|0;x=c[a+32>>2]|0;h=c[a+24>>2]|0;f=(i|0)==0;if(f)a=0;else{d=h;e=i;a=0;do{v=d;d=d+136|0;u=(c[v+144>>2]|0)-(c[d>>2]|0)|0;a=a>>>0>>0?u:a;v=(c[v+148>>2]|0)-(c[v+140>>2]|0)|0;a=a>>>0>>0?v:a;e=e+-1|0}while((e|0)!=0);a=a<<2}v=Pc(a)|0;if(!((a|0)==0|(v|0)!=0)){b=0;return b|0}if(!f){t=g+-2|0;u=t;a=h+(i*136|0)|0;t=h+(t*136|0)|0;while(1){q=c[a>>2]|0;s=(c[a+8>>2]|0)-q|0;m=c[a+4>>2]|0;o=(c[a+12>>2]|0)-m|0;p=(c[t+8>>2]|0)-(c[t>>2]|0)|0;a=c[t+12>>2]|0;d=c[t+4>>2]|0;l=a-d|0;q=q&1;m=m&1;n=o-l|0;r=(s|0)>0;a:do if(r){f=(a|0)==(d|0);i=(o|0)==(l|0);j=v+((m^1)<<2)|0;k=_(l,w)|0;h=v+(m<<2)|0;if((o|0)>0){g=0;while(1){d=x+(g<<2)|0;a=0;do{c[v+(a<<2)>>2]=c[x+((_(a,w)|0)+g<<2)>>2];a=a+1|0}while((a|0)!=(o|0));ab[b&3](v,n,l,m);if(!f){e=l;a=h;while(1){e=e+-1|0;c[d>>2]=c[a>>2];if(!e)break;else{d=d+(w<<2)|0;a=a+8|0}}}if(!i){a=n;d=x+(g+k<<2)|0;e=j;while(1){a=a+-1|0;c[d>>2]=c[e>>2];if(!a)break;else{d=d+(w<<2)|0;e=e+8|0}}}g=g+1|0;if((g|0)==(s|0))break a}}if(f){d=0;while(1){ab[b&3](v,n,l,m);if(!i){a=n;e=x+(d+k<<2)|0;f=j;while(1){a=a+-1|0;c[e>>2]=c[f>>2];if(!a)break;else{e=e+(w<<2)|0;f=f+8|0}}}d=d+1|0;if((d|0)==(s|0))break a}}else f=0;do{ab[b&3](v,n,l,m);a=l;d=x+(f<<2)|0;e=h;while(1){a=a+-1|0;c[d>>2]=c[e>>2];if(!a)break;else{d=d+(w<<2)|0;e=e+8|0}}if(!i){a=n;d=x+(f+k<<2)|0;e=j;while(1){a=a+-1|0;c[d>>2]=c[e>>2];if(!a)break;else{d=d+(w<<2)|0;e=e+8|0}}}f=f+1|0}while((f|0)!=(s|0))}while(0);g=s-p|0;if((o|0)>0){h=(p|0)>0;i=v+(q<<2)|0;j=(g|0)>0;k=v+((q^1)<<2)|0;l=0;do{f=_(l,w)|0;d=x+(f<<2)|0;if(r){a=0;do{c[v+(a<<2)>>2]=c[x+(a+f<<2)>>2];a=a+1|0}while((a|0)!=(s|0))}ab[b&3](v,g,p,q);if(h){e=0;a=i;while(1){c[d>>2]=c[a>>2];e=e+1|0;if((e|0)==(p|0))break;else{d=d+4|0;a=a+8|0}}}if(j){e=0;a=x+(f+p<<2)|0;d=k;while(1){c[a>>2]=c[d>>2];e=e+1|0;if((e|0)==(g|0))break;else{a=a+4|0;d=d+8|0}}}l=l+1|0}while((l|0)!=(o|0))}if(!u)break;else{a=t;u=u+-1|0;t=t+-136|0}}}Uc(v);b=1;return b|0}function Qg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=c[a>>2]|0;j=c[a+4>>2]|0;k=c[a+8>>2]|0;if(!(c[a+12>>2]|0)){e=(j|0)>0;if(!(e|(k|0)>1))return;if((k|0)>0){b=i+4|0;d=(j<<1)+-1|0;f=0;do{if((f|0)<1)a=b;else a=i+((((f|0)>(j|0)?j:f)<<1)+-1<<2)|0;g=f<<1;h=i+(g<<2)|0;c[h>>2]=(c[h>>2]|0)-((c[a>>2]|0)+2+(c[i+(((f|0)<(j|0)?g|1:d)<<2)>>2]|0)>>2);f=f+1|0}while((f|0)!=(k|0))}if(!e)return;a=i+((k<<1)+-2<<2)|0;b=0;do{g=b<<1;f=b;b=b+1|0;h=i+((g|1)<<2)|0;c[h>>2]=((c[((b|0)<(k|0)?i+(b<<1<<2)|0:a)>>2]|0)+(c[((f|0)<(k|0)?i+(g<<2)|0:a)>>2]|0)>>1)+(c[h>>2]|0)}while((b|0)!=(j|0));return}if((j|0)==1&(k|0)==0){c[i>>2]=(c[i>>2]|0)/2|0;return}if((k|0)>0){a=i+((j<<1)+-2<<2)|0;b=0;do{g=b<<1;f=b;b=b+1|0;h=i+((g|1)<<2)|0;c[h>>2]=(c[h>>2]|0)-((c[((f|0)<(j|0)?i+(g<<2)|0:a)>>2]|0)+2+(c[((b|0)<(j|0)?i+(b<<1<<2)|0:a)>>2]|0)>>2)}while((b|0)!=(k|0))}if((j|0)<=0)return;b=i+4|0;d=(k<<1)+-1|0;e=i+(d<<2)|0;h=0;do{f=h<<1;g=c[i+(((h|0)<(k|0)?f|1:d)<<2)>>2]|0;if((h|0)>=1)if((h|0)>(k|0))a=e;else a=i+(f+-1<<2)|0;else a=b;f=i+(f<<2)|0;c[f>>2]=((c[a>>2]|0)+g>>1)+(c[f>>2]|0);h=h+1|0}while((h|0)!=(j|0));return}function Rg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!e){j=(b|0)>0;if(!(j|(d|0)>1))return;if(j){e=a+((d<<1)+-2<<2)|0;f=0;do{m=f;f=f+1|0;l=(c[((f|0)<(d|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((m|0)<(d|0)?a+(m<<1<<2)|0:e)>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,12993,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+((m<<1|1)<<2)|0;c[m>>2]=(c[m>>2]|0)-l}while((f|0)!=(b|0))}i=(d|0)>0;if(i){f=a+4|0;g=(b<<1)+-1|0;h=0;do{if((h|0)<1)e=f;else e=a+((((h|0)>(b|0)?b:h)<<1)+-1<<2)|0;l=(c[a+(((h|0)<(b|0)?h<<1|1:g)<<2)>>2]|0)+(c[e>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,434,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+(h<<1<<2)|0;c[m>>2]=(c[m>>2]|0)-l;h=h+1|0}while((h|0)!=(d|0))}if(j){e=a+((d<<1)+-2<<2)|0;f=0;do{m=f;f=f+1|0;l=(c[((f|0)<(d|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((m|0)<(d|0)?a+(m<<1<<2)|0:e)>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,7233,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+((m<<1|1)<<2)|0;c[m>>2]=l+(c[m>>2]|0)}while((f|0)!=(b|0))}if(i){f=a+4|0;g=(b<<1)+-1|0;h=0;do{if((h|0)<1)e=f;else e=a+((((h|0)>(b|0)?b:h)<<1)+-1<<2)|0;l=(c[a+(((h|0)<(b|0)?h<<1|1:g)<<2)>>2]|0)+(c[e>>2]|0)|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,3633,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;m=a+(h<<1<<2)|0;c[m>>2]=l+(c[m>>2]|0);h=h+1|0}while((h|0)!=(d|0))}if(j){e=0;do{m=a+((e<<1|1)<<2)|0;l=c[m>>2]|0;l=Zi(l|0,((l|0)<0)<<31>>31|0,5038,0)|0;l=Si(l|0,C|0,4096,0)|0;l=Ti(l|0,C|0,13)|0;c[m>>2]=l;e=e+1|0}while((e|0)!=(b|0))}if(i)e=0;else return;do{b=a+(e<<1<<2)|0;m=c[b>>2]|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,6659,0)|0;m=Si(m|0,C|0,4096,0)|0;m=Ti(m|0,C|0,13)|0;c[b>>2]=m;e=e+1|0}while((e|0)!=(d|0));return}m=(d|0)>0;if(!((b|0)>1|m))return;l=(b|0)>0;if(l){f=a+4|0;g=(d<<1)+-1|0;h=a+(g<<2)|0;k=0;do{i=k<<1;j=c[a+(((k|0)<(d|0)?i|1:g)<<2)>>2]|0;if((k|0)>=1)if((k|0)>(d|0))e=h;else e=a+(i+-1<<2)|0;else e=f;e=(c[e>>2]|0)+j|0;e=Zi(e|0,((e|0)<0)<<31>>31|0,12993,0)|0;e=Si(e|0,C|0,4096,0)|0;e=Ti(e|0,C|0,13)|0;j=a+(i<<2)|0;c[j>>2]=(c[j>>2]|0)-e;k=k+1|0}while((k|0)!=(b|0))}if(m){e=a+((b<<1)+-2<<2)|0;f=0;do{k=f;f=f+1|0;j=(c[((f|0)<(b|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((k|0)<(b|0)?a+(k<<1<<2)|0:e)>>2]|0)|0;j=Zi(j|0,((j|0)<0)<<31>>31|0,434,0)|0;j=Si(j|0,C|0,4096,0)|0;j=Ti(j|0,C|0,13)|0;k=a+((k<<1|1)<<2)|0;c[k>>2]=(c[k>>2]|0)-j}while((f|0)!=(d|0))}if(l){f=a+4|0;g=(d<<1)+-1|0;h=a+(g<<2)|0;k=0;do{i=k<<1;j=c[a+(((k|0)<(d|0)?i|1:g)<<2)>>2]|0;if((k|0)>=1)if((k|0)>(d|0))e=h;else e=a+(i+-1<<2)|0;else e=f;e=(c[e>>2]|0)+j|0;e=Zi(e|0,((e|0)<0)<<31>>31|0,7233,0)|0;e=Si(e|0,C|0,4096,0)|0;e=Ti(e|0,C|0,13)|0;j=a+(i<<2)|0;c[j>>2]=e+(c[j>>2]|0);k=k+1|0}while((k|0)!=(b|0))}if(m){e=a+((b<<1)+-2<<2)|0;f=0;do{k=f;f=f+1|0;j=(c[((f|0)<(b|0)?a+(f<<1<<2)|0:e)>>2]|0)+(c[((k|0)<(b|0)?a+(k<<1<<2)|0:e)>>2]|0)|0;j=Zi(j|0,((j|0)<0)<<31>>31|0,3633,0)|0;j=Si(j|0,C|0,4096,0)|0;j=Ti(j|0,C|0,13)|0;k=a+((k<<1|1)<<2)|0;c[k>>2]=j+(c[k>>2]|0)}while((f|0)!=(d|0))}if(l){e=0;do{l=a+(e<<1<<2)|0;k=c[l>>2]|0;k=Zi(k|0,((k|0)<0)<<31>>31|0,5038,0)|0;k=Si(k|0,C|0,4096,0)|0;k=Ti(k|0,C|0,13)|0;c[l>>2]=k;e=e+1|0}while((e|0)!=(b|0))}if(m)e=0;else return;do{b=a+((e<<1|1)<<2)|0;m=c[b>>2]|0;m=Zi(m|0,((m|0)<0)<<31>>31|0,6659,0)|0;m=Si(m|0,C|0,4096,0)|0;m=Ti(m|0,C|0,13)|0;c[b>>2]=m;e=e+1|0}while((e|0)!=(d|0));return}function Sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=c[a>>2]|0;i=c[a+12>>2]|0;q=c[a+8>>2]|0;n=d*3|0;l=1-i|0;k=a+4|0;j=q;a=0;while(1){h=m+(i<<4)|0;if(((j+n|0)<(e|0)?(b&15|0)==0:0)?((h|d)&15|0)==0:0){if((j|0)>0){f=0;do{h=f<<3;c[m+(i<<4)+(h<<2)>>2]=c[b+(f<<2)>>2];g=f+d|0;c[m+(i<<4)+((h|1)<<2)>>2]=c[b+(g<<2)>>2];g=g+d|0;c[m+(i<<4)+((h|2)<<2)>>2]=c[b+(g<<2)>>2];c[m+(i<<4)+((h|3)<<2)>>2]=c[b+(g+d<<2)>>2];f=f+1|0}while((f|0)!=(j|0))}}else r=3;if((r|0)==3?(r=0,(j|0)>0):0){h=0;do{f=h<<3;c[m+(i<<4)+(f<<2)>>2]=c[b+(h<<2)>>2];g=h+d|0;if(((g|0)<(e|0)?(c[m+(i<<4)+((f|1)<<2)>>2]=c[b+(g<<2)>>2],o=g+d|0,(o|0)<(e|0)):0)?(c[m+(i<<4)+((f|2)<<2)>>2]=c[b+(o<<2)>>2],p=o+d|0,(p|0)<(e|0)):0)c[m+(i<<4)+((f|3)<<2)>>2]=c[b+(p<<2)>>2];h=h+1|0}while((h|0)!=(j|0))}a=a+1|0;if((a|0)==2)break;else{b=b+(q<<2)|0;e=e-q|0;i=l;j=c[k>>2]|0}}return}function Tg(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0,p=0;do if(!(c[a+12>>2]|0)){d=c[a+8>>2]|0;if((c[a+4>>2]|0)>0){b=c[a>>2]|0;if((d|0)>0){i=0;f=1;j=9;break}else{i=0;h=1;break}}if((d|0)>1){e=0;f=1;j=7}else return}else{d=c[a+8>>2]|0;if((d|0)<=0)if((c[a+4>>2]|0)>1){b=c[a>>2]|0;i=1;h=0;break}else return;else{e=1;f=0;j=7}}while(0);if((j|0)==7){b=c[a>>2]|0;i=e;j=9}if((j|0)==9){e=0;do{j=e<<3;o=b+(i<<4)+(j<<2)|0;m=b+(i<<4)+((j|1)<<2)|0;n=+g[m>>2];h=b+(i<<4)+((j|2)<<2)|0;l=+g[h>>2];j=b+(i<<4)+((j|3)<<2)|0;k=+g[j>>2];g[o>>2]=+g[o>>2]*1.2301740646362305;g[m>>2]=n*1.2301740646362305;g[h>>2]=l*1.2301740646362305;g[j>>2]=k*1.2301740646362305;e=e+1|0}while((e|0)!=(d|0));h=f}e=c[a+4>>2]|0;if((e|0)>0){f=0;do{o=f<<3;j=b+(h<<4)+(o<<2)|0;a=b+(h<<4)+((o|1)<<2)|0;k=+g[a>>2];m=b+(h<<4)+((o|2)<<2)|0;l=+g[m>>2];o=b+(h<<4)+((o|3)<<2)|0;n=+g[o>>2];g[j>>2]=+g[j>>2]*1.625732421875;g[a>>2]=k*1.625732421875;g[m>>2]=l*1.625732421875;g[o>>2]=n*1.625732421875;f=f+1|0}while((f|0)!=(e|0))}p=b+(h<<4)|0;f=b+(i+1<<4)|0;j=e-i|0;j=(d|0)<(j|0)?d:j;Ug(p,f,d,j,-.4435068666934967);a=b+(i<<4)|0;m=b+(h+1<<4)|0;o=d-h|0;o=(e|0)<(o|0)?e:o;Ug(a,m,e,o,-.8829110860824585);Ug(p,f,d,j,.05298011749982834);Ug(a,m,e,o,1.5861343145370483);return}function Ug(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0.0;if((d|0)>0){m=d<<1;l=m+-2|0;h=+g[a>>2];i=+g[a+4>>2];j=+g[a+8>>2];f=+g[a+12>>2];a=b;k=0;while(1){w=a+-16|0;t=a+-12|0;v=+g[t>>2];q=a+-8|0;s=+g[q>>2];n=a+-4|0;p=+g[n>>2];x=h;h=+g[a>>2];u=i;i=+g[a+4>>2];r=j;j=+g[a+8>>2];o=f;f=+g[a+12>>2];g[w>>2]=+g[w>>2]+(x+h)*e;g[t>>2]=v+(u+i)*e;g[q>>2]=s+(r+j)*e;g[n>>2]=p+(o+f)*e;k=k+1|0;if((k|0)==(d|0))break;else a=a+32|0}a=b+(l<<4)|0;b=b+(m<<4)|0}if((d|0)>=(c|0))return;f=e+e;h=f*+g[a>>2];i=f*+g[a+4>>2];j=f*+g[a+8>>2];f=f*+g[a+12>>2];while(1){n=b+-16|0;q=b+-12|0;u=+g[q>>2];t=b+-8|0;v=+g[t>>2];w=b+-4|0;x=+g[w>>2];g[n>>2]=h+ +g[n>>2];g[q>>2]=i+u;g[t>>2]=j+v;g[w>>2]=f+x;d=d+1|0;if((d|0)==(c|0))break;else b=b+32|0}return}function Vg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;x=d<<2;y=Pc(d<<4)|0;if(!y){a=0;return a|0}z=y+x|0;Qi(y|0,0,x|0)|0;v=d+-1|0;u=(d|0)==0;if(!u){e=0;f=y;while(1){c[f>>2]=e;e=e+1|0;if((e|0)==(d|0))break;else f=f+4|0}}a:do if(v){q=v;j=0;e=0;r=a;s=1;t=y;while(1){k=r+(j<<2)|0;if(j>>>0>>0){i=j;f=k;h=0.0}else break;while(1){o=+g[f>>2];o=o>0.0?o:-o;w=o>h;e=w?i:e;h=w?o:h;i=i+1|0;if((i|0)==(d|0))break;else f=f+(d<<2)|0}if(h==0.0)break;if((e|0)!=(j|0)){w=e-j|0;p=t+(w<<2)|0;n=c[t>>2]|0;c[t>>2]=c[p>>2];c[p>>2]=n;w=r+((_(w,d)|0)<<2)|0;Ui(z|0,w|0,x|0)|0;Ui(w|0,r|0,x|0)|0;Ui(r|0,z|0,x|0)|0}f=j;p=j+1|0;o=+g[k>>2];if(s>>>0>>0){l=r+(p<<2)|0;n=p+q|0;m=s;i=r+(f+d<<2)|0;while(1){h=+g[i>>2]/o;g[i>>2]=h;f=s;j=i;k=l;while(1){j=j+4|0;g[j>>2]=+g[j>>2]-h*+g[k>>2];f=f+1|0;if((f|0)==(d|0))break;else k=k+4|0}m=m+1|0;if((m|0)==(d|0))break;else i=i+(n<<2)|0}}if(p>>>0>>0){q=q+-1|0;j=p;r=r+(d<<2)|0;s=s+1|0;t=t+4|0}else break a}Uc(y);a=0;return a|0}while(0);e=d<<1;w=z+(e<<2)|0;if(!u){u=z+(v+d<<2)|0;q=z+(e+v<<2)|0;r=a+((_(d,d)|0)+-1<<2)|0;s=~d;t=0;p=b;while(1){Qi(z|0,0,x|0)|0;g[z+(t<<2)>>2]=1.0;j=0;k=1;l=y;m=w;n=a;while(1){if(!j)h=0.0;else{e=1;f=w;i=n;h=0.0;while(1){h=h+ +g[i>>2]*+g[f>>2];e=e+1|0;if((e|0)==(k|0))break;else{f=f+4|0;i=i+4|0}}}g[m>>2]=+g[z+(c[l>>2]<<2)>>2]-h;j=j+1|0;if((j|0)==(d|0)){j=d;k=u;l=w;m=q;n=r;break}else{k=k+1|0;l=l+4|0;m=m+4|0;n=n+(d<<2)|0}}while(1){e=j;j=j+-1|0;o=+g[n>>2];if(e>>>0>>0){f=l;i=n;h=0.0;while(1){i=i+4|0;h=h+ +g[i>>2]*+g[f>>2];e=e+1|0;if((e|0)==(d|0))break;else f=f+4|0}}else h=0.0;l=l+-4|0;g[k>>2]=(+g[m>>2]-h)/o;if(!j){e=0;f=p;break}else{k=k+-4|0;m=m+-4|0;n=n+(s<<2)|0}}while(1){c[f>>2]=c[z+(e+d<<2)>>2];e=e+1|0;if((e|0)==(d|0))break;else f=f+(d<<2)|0}t=t+1|0;if((t|0)==(d|0))break;else p=p+4|0}}Uc(y);a=1;return a|0}function Wg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=Qc(1,44)|0;if(!g){g=0;return g|0}h=hh()|0;c[g>>2]=h;if(!h){ih(0);c[g>>2]=0;h=g+4|0;yh(c[h>>2]|0);c[h>>2]=0;if((c[g+40>>2]|0)==0?(d=g+8|0,b=c[d>>2]|0,(b|0)!=0):0){Sc(b);c[d>>2]=0}b=g+12|0;d=c[b>>2]|0;if(d){Sc(d);c[b>>2]=0}Uc(g);h=0;return h|0}h=xh()|0;b=g+4|0;c[b>>2]=h;if(h){c[g+40>>2]=a;h=g;return h|0}ih(c[g>>2]|0);c[g>>2]=0;yh(c[b>>2]|0);c[b>>2]=0;if((c[g+40>>2]|0)==0?(e=g+8|0,f=c[e>>2]|0,(f|0)!=0):0){Sc(f);c[e>>2]=0}b=g+12|0;d=c[b>>2]|0;if(d){Sc(d);c[b>>2]=0}Uc(g);h=0;return h|0}function Xg(a){a=a|0;var b=0,d=0,e=0;if(!a)return;ih(c[a>>2]|0);c[a>>2]=0;e=a+4|0;yh(c[e>>2]|0);c[e>>2]=0;if((c[a+40>>2]|0)==0?(b=a+8|0,d=c[b>>2]|0,(d|0)!=0):0){Sc(d);c[b>>2]=0}b=a+12|0;d=c[b>>2]|0;if(d){Sc(d);c[b>>2]=0}Uc(a);return}function Yg(a,f,h){a=a|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;ya=(c[f+8>>2]|0)-(c[f>>2]|0)|0;za=f+20|0;i=c[za>>2]|0;if(!i){a=1;return a|0}Aa=f+24|0;Ba=h+808|0;Ca=h+16|0;ta=a+4|0;va=a+8|0;wa=a+16|0;xa=a+20|0;sa=h+20|0;pa=f+32|0;qa=a+32|0;ra=a+12|0;h=i;oa=0;a:while(1){ma=c[Aa>>2]|0;na=ma+(oa*136|0)+24|0;f=c[na>>2]|0;if(f){ja=ma+(oa*136|0)+16|0;ka=ma+(oa*136|0)+20|0;la=oa+-1|0;h=c[ka>>2]|0;i=c[ja>>2]|0;ia=0;do{if(_(h,i)|0){da=ma+(oa*136|0)+28+(ia*36|0)+20|0;ea=ma+(oa*136|0)+28+(ia*36|0)+16|0;fa=ma+(oa*136|0)+28+(ia*36|0)|0;ga=ma+(oa*136|0)+28+(ia*36|0)+4|0;ha=ma+(oa*136|0)+28+(ia*36|0)+32|0;ca=0;do{f=c[da>>2]|0;aa=f+(ca*40|0)+16|0;ba=f+(ca*40|0)+20|0;if(_(c[ba>>2]|0,c[aa>>2]|0)|0){Z=f+(ca*40|0)+24|0;$=0;do{h=c[Z>>2]|0;S=c[ea>>2]|0;j=c[Ba>>2]|0;f=c[Ca>>2]|0;T=c[ta>>2]|0;U=c[a>>2]|0;V=h+($*56|0)+8|0;Y=h+($*56|0)+12|0;if(!(_g(a,(c[h+($*56|0)+16>>2]|0)-(c[V>>2]|0)|0,(c[h+($*56|0)+20>>2]|0)-(c[Y>>2]|0)|0)|0)){h=0;G=201;break a}W=h+($*56|0)+24|0;k=c[W>>2]|0;qh(U);rh(U,18,0,46);rh(U,17,0,3);rh(U,0,0,4);X=h+($*56|0)+48|0;i=c[X>>2]|0;if(i){N=h+($*56|0)+4|0;O=(f&1|0)!=0;P=(f&2|0)==0;Q=(f&8|0)==0;R=S<<8;M=(f&32|0)==0;f=k+j|0;h=2;L=0;do{k=c[N>>2]|0;K=O&(h>>>0<2?(f|0)<=((c[W>>2]|0)+-4|0):0);j=c[k+(L<<5)>>2]|0;if(j){i=(c[j>>2]|0)+(c[k+(L<<5)+4>>2]|0)|0;j=c[k+(L<<5)+16>>2]|0;if(!K){if(!(vh(U,i,j)|0)){h=0;G=201;break a}}else zh(T,i,j);I=k+(L<<5)+12|0;b:do if(c[I>>2]|0){J=P|K;H=0;while(1){c:do switch(h|0){case 0:{if(K){w=1<>1|w;j=c[xa>>2]|0;if(!j)break c;v=0-w|0;i=c[wa>>2]|0;u=0;while(1){t=u;u=u+4|0;if(!i)i=0;else{q=(t|0)==-4;r=t|3;s=0;do{d:do if(!q)if(Q){o=t;do{if(o>>>0>=(c[xa>>2]|0)>>>0)break d;m=o;o=o+1|0;i=(_(c[qa>>2]|0,o)|0)+s|0;j=i+1|0;k=c[ra>>2]|0;l=k+(j<<1)|0;m=(_(c[wa>>2]|0,m)|0)+s|0;m=(c[va>>2]|0)+(m<<2)|0;n=c[ta>>2]|0;G=b[l>>1]|0;if((G&255|0)!=0&(G&20480|0)==0){if(Ah(n)|0){D=Ah(n)|0;c[m>>2]=(D|0)!=0?v:w;F=c[qa>>2]|0;G=k+(j-F<<1)|0;E=k+(F+j<<1)|0;C=k+(j+~F<<1)|0;b[C>>1]=e[C>>1]|2;b[G>>1]=b[G>>1]|b[3436+(D<<1)>>1];G=i+2|0;C=k+(G-F<<1)|0;b[C>>1]=e[C>>1]|4;C=k+(i<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+2<<1)>>1];b[l>>1]=e[l>>1]|4096;C=k+(G<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+4<<1)>>1];C=k+(F+i<<1)|0;b[C>>1]=e[C>>1]|1;b[E>>1]=b[E>>1]|b[3436+(D+6<<1)>>1];G=k+(F+G<<1)|0;b[G>>1]=e[G>>1]|8}b[l>>1]=e[l>>1]|16384}}while(o>>>0>>0)}else{p=t;do{i=c[xa>>2]|0;if(p>>>0>=i>>>0)break d;F=p;p=p+1|0;j=(_(c[qa>>2]|0,p)|0)+s|0;k=j+1|0;l=c[ra>>2]|0;m=l+(k<<1)|0;n=(_(c[wa>>2]|0,F)|0)+s|0;n=(c[va>>2]|0)+(n<<2)|0;o=c[ta>>2]|0;G=b[m>>1]|0;G=(F|0)==(r|0)|(F|0)==(i+-1|0)?G&-1095:G;if((G&255|0)!=0&(G&20480|0)==0){if(Ah(o)|0){D=Ah(o)|0;c[n>>2]=(D|0)!=0?v:w;F=c[qa>>2]|0;G=l+(k-F<<1)|0;E=l+(F+k<<1)|0;C=l+(k+~F<<1)|0;b[C>>1]=e[C>>1]|2;b[G>>1]=b[G>>1]|b[3436+(D<<1)>>1];G=j+2|0;C=l+(G-F<<1)|0;b[C>>1]=e[C>>1]|4;C=l+(j<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+2<<1)>>1];b[m>>1]=e[m>>1]|4096;C=l+(G<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+4<<1)>>1];C=l+(F+j<<1)|0;b[C>>1]=e[C>>1]|1;b[E>>1]=b[E>>1]|b[3436+(D+6<<1)>>1];G=l+(F+G<<1)|0;b[G>>1]=e[G>>1]|8}b[m>>1]=e[m>>1]|16384}}while(p>>>0>>0)}while(0);s=s+1|0;i=c[wa>>2]|0}while(s>>>0>>0);j=c[xa>>2]|0}if(u>>>0>=j>>>0){G=163;break c}}}if(Q){k=c[va>>2]|0;l=(c[ra>>2]|0)+2|0;r=1<>1|r;i=c[xa>>2]|0;j=c[wa>>2]|0;if(i>>>0>3){o=j;n=0;while(1){if(!j){j=o;m=0}else{j=0;do{G=(c[qa>>2]|0)+j|0;$g(a,l+(G<<1)|0,k+(j<<2)|0,S,r);i=(c[wa>>2]|0)+j|0;G=(c[qa>>2]|0)+G|0;$g(a,l+(G<<1)|0,k+(i<<2)|0,S,r);i=(c[wa>>2]|0)+i|0;G=(c[qa>>2]|0)+G|0;$g(a,l+(G<<1)|0,k+(i<<2)|0,S,r);$g(a,l+((c[qa>>2]|0)+G<<1)|0,k+((c[wa>>2]|0)+i<<2)|0,S,r);j=j+1|0;i=c[wa>>2]|0}while(j>>>0>>0);j=i;m=i;i=c[xa>>2]|0}k=k+(m<<2<<2)|0;l=l+(c[qa>>2]<<2<<1)|0;n=n+4|0;if(n>>>0<(i&-4)>>>0){o=j;j=m}else{q=l;p=n;break}}}else{q=l;p=0}if(!j){G=163;break c}else o=0;while(1){if(p>>>0>>0){l=k+(o<<2)|0;m=q+(o<<1)|0;n=p;while(1){m=m+(c[qa>>2]<<1)|0;$g(a,m,l,S,r);j=c[wa>>2]|0;n=n+1|0;i=c[xa>>2]|0;if(n>>>0>=i>>>0)break;else l=l+(j<<2)|0}}o=o+1|0;if(o>>>0>=j>>>0){G=163;break c}}}w=1<>1|w;i=c[xa>>2]|0;if(!i){G=163;break c}x=0-w|0;j=c[wa>>2]|0;l=j;v=0;while(1){u=v;v=v+4|0;do if(!j){k=l;j=0}else{t=u|3;if((u|0)==-4){k=l;j=l;break}else s=0;do{r=u;do{i=c[xa>>2]|0;if(r>>>0>=i>>>0)break;G=r;r=r+1|0;l=(_(c[qa>>2]|0,r)|0)+s|0;m=l+1|0;n=c[ra>>2]|0;o=n+(m<<1)|0;p=(_(c[wa>>2]|0,G)|0)+s|0;p=(c[va>>2]|0)+(p<<2)|0;q=c[a>>2]|0;j=b[o>>1]|0;i=(G|0)==(t|0)|(G|0)==(i+-1|0)?j&-1095:j;j=i&255;if((j|0)!=0&(i&20480|0)==0){k=q+100|0;c[k>>2]=q+24+(d[20267+(j|R)>>0]<<2);if(wh(q)|0){F=i>>>4&255;c[k>>2]=q+24+(d[21291+F>>0]<<2);G=wh(q)|0;F=d[21547+F>>0]|0;D=F^G;c[p>>2]=(G|0)!=(F|0)?x:w;F=c[qa>>2]|0;G=n+(m-F<<1)|0;E=n+(F+m<<1)|0;C=n+(m+~F<<1)|0;b[C>>1]=e[C>>1]|2;b[G>>1]=b[G>>1]|b[3436+(D<<1)>>1];G=l+2|0;C=n+(G-F<<1)|0;b[C>>1]=e[C>>1]|4;C=n+(l<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+2<<1)>>1];b[o>>1]=e[o>>1]|4096;C=n+(G<<1)|0;b[C>>1]=b[C>>1]|b[3436+(D+4<<1)>>1];C=n+(F+l<<1)|0;b[C>>1]=e[C>>1]|1;b[E>>1]=b[E>>1]|b[3436+(D+6<<1)>>1];G=n+(F+G<<1)|0;b[G>>1]=e[G>>1]|8}b[o>>1]=e[o>>1]|16384}}while(r>>>0>>0);s=s+1|0;i=c[wa>>2]|0}while(s>>>0>>0);k=i;j=i;i=c[xa>>2]|0}while(0);if(v>>>0>=i>>>0){G=163;break}else l=k}break}case 1:{if(K){q=1<>1;r=(f|0)>0?0-q|0:-1;j=c[xa>>2]|0;if(!j)break c;k=c[wa>>2]|0;i=k;p=0;while(1){o=p;p=p+4|0;if(!k){l=i;k=0}else{n=(o|0)==-4;m=0;do{l=m;m=m+1|0;if(!n){k=o;do{if(k>>>0>=(c[xa>>2]|0)>>>0)break;j=k;k=k+1|0;i=(_(c[qa>>2]|0,k)|0)+m|0;i=(c[ra>>2]|0)+(i<<1)|0;j=(_(c[wa>>2]|0,j)|0)+l|0;j=(c[va>>2]|0)+(j<<2)|0;if((b[i>>1]&20480)==4096){F=(Ah(c[ta>>2]|0)|0)!=0;F=F?q:r;G=c[j>>2]|0;c[j>>2]=((G|0)<0?0-F|0:F)+G;b[i>>1]=e[i>>1]|8192}}while(k>>>0

>>0);i=c[wa>>2]|0}}while(m>>>0>>0);l=i;k=i;j=c[xa>>2]|0}if(p>>>0>=j>>>0){G=163;break c}else i=l}}if(!Q){t=1<>1;u=(f|0)>0?0-t|0:-1;i=c[xa>>2]|0;if(!i){G=163;break c}j=c[wa>>2]|0;k=j;s=0;while(1){r=s;s=s+4|0;if(!j)j=0;else{p=(r|0)==-4;q=r|3;i=k;o=0;do{n=o;o=o+1|0;if(!p){l=r;do{i=c[xa>>2]|0;if(l>>>0>=i>>>0)break;F=l;l=l+1|0;j=(_(c[qa>>2]|0,l)|0)+o|0;j=(c[ra>>2]|0)+(j<<1)|0;k=(_(c[wa>>2]|0,F)|0)+n|0;k=(c[va>>2]|0)+(k<<2)|0;m=c[a>>2]|0;G=b[j>>1]|0;i=(F|0)==(q|0)|(F|0)==(i+-1|0)?G&-1095:G;if((i&20480|0)==4096){c[m+100>>2]=m+24+(((i&8192|0)!=0?16:(i&255|0)!=0?15:14)<<2);F=(wh(m)|0)!=0;F=F?t:u;G=c[k>>2]|0;c[k>>2]=((G|0)<0?0-F|0:F)+G;b[j>>1]=e[j>>1]|8192}}while(l>>>0>>0);i=c[wa>>2]|0}}while(o>>>0>>0);k=i;j=i;i=c[xa>>2]|0}if(s>>>0>=i>>>0){G=163;break c}}}k=c[va>>2]|0;l=(c[ra>>2]|0)+2|0;v=1<>1;w=(f|0)>0?0-v|0:-1;i=c[xa>>2]|0;j=c[wa>>2]|0;if(i>>>0>3){n=j;t=l;u=0;while(1){if(!j){j=n;m=0}else{i=n;s=0;do{j=k+(s<<2)|0;n=c[qa>>2]|0;p=n+s|0;l=t+(p<<1)|0;o=c[a>>2]|0;m=b[l>>1]|0;if((m&20480|0)==4096){c[o+100>>2]=o+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);n=(wh(o)|0)!=0;n=n?v:w;i=c[j>>2]|0;c[j>>2]=((i|0)<0?0-n|0:n)+i;b[l>>1]=e[l>>1]|8192;i=c[wa>>2]|0;j=c[qa>>2]|0;n=c[a>>2]|0}else{j=n;n=o}q=i+s|0;o=k+(q<<2)|0;r=j+p|0;l=t+(r<<1)|0;m=b[l>>1]|0;if((m&20480|0)==4096){c[n+100>>2]=n+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);j=(wh(n)|0)!=0;j=j?v:w;i=c[o>>2]|0;c[o>>2]=((i|0)<0?0-j|0:j)+i;b[l>>1]=e[l>>1]|8192;i=c[wa>>2]|0;j=c[qa>>2]|0;n=c[a>>2]|0}p=i+q|0;o=k+(p<<2)|0;q=j+r|0;l=t+(q<<1)|0;m=b[l>>1]|0;if((m&20480|0)==4096){c[n+100>>2]=n+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);j=(wh(n)|0)!=0;j=j?v:w;i=c[o>>2]|0;c[o>>2]=((i|0)<0?0-j|0:j)+i;b[l>>1]=e[l>>1]|8192;i=c[wa>>2]|0;j=c[qa>>2]|0;n=c[a>>2]|0}m=k+(i+p<<2)|0;j=t+(j+q<<1)|0;l=b[j>>1]|0;if((l&20480|0)==4096){c[n+100>>2]=n+24+(((l&8192|0)!=0?16:(l&255|0)!=0?15:14)<<2);G=(wh(n)|0)!=0;G=G?v:w;i=c[m>>2]|0;c[m>>2]=((i|0)<0?0-G|0:G)+i;b[j>>1]=e[j>>1]|8192;i=c[wa>>2]|0}s=s+1|0}while(s>>>0>>0);j=i;m=i;i=c[xa>>2]|0}k=k+(m<<2<<2)|0;l=t+(c[qa>>2]<<2<<1)|0;o=u+4|0;if(o>>>0<(i&-4)>>>0){n=j;j=m;t=l;u=o}else{s=o;break}}}else s=0;if(!j){G=163;break c}else r=0;do{if(s>>>0>>0){o=k+(r<<2)|0;p=l+(r<<1)|0;q=s;while(1){p=p+(c[qa>>2]<<1)|0;n=c[a>>2]|0;m=b[p>>1]|0;if((m&20480|0)==4096){c[n+100>>2]=n+24+(((m&8192|0)!=0?16:(m&255|0)!=0?15:14)<<2);i=(wh(n)|0)!=0;i=i?v:w;m=c[o>>2]|0;c[o>>2]=((m|0)<0?0-i|0:i)+m;b[p>>1]=e[p>>1]|8192;m=c[wa>>2]|0;i=c[xa>>2]|0}else m=j;q=q+1|0;if(q>>>0>=i>>>0){j=m;break}else{j=m;o=o+(m<<2)|0}}}r=r+1|0}while(r>>>0>>0);G=163;break}case 2:{E=c[a>>2]|0;F=1<>1|F;do if(Q){k=c[va>>2]|0;l=(c[ra>>2]|0)+2|0;j=c[xa>>2]|0;if(j>>>0>3){w=E+92|0;x=E+100|0;y=E+96|0;z=0-F|0;m=c[wa>>2]|0;i=m;o=0;while(1){if(!m)m=0;else{r=o|1;s=r+1|0;t=o|3;u=r+3|0;v=0;do{i=c[qa>>2]|0;j=v;v=v+1|0;D=(_(i,r)|0)+v|0;G=c[ra>>2]|0;D=b[G+((_(i,s)|0)+v<<1)>>1]|b[G+(D<<1)>>1];D=D|b[G+((_(i,t)|0)+v<<1)>>1];e:do if(!((D|b[G+((_(i,u)|0)+v<<1)>>1])&20735)){c[x>>2]=w;if(!(wh(E)|0))break;c[x>>2]=y;p=(wh(E)|0)<<1;p=p|(wh(E)|0);if(p>>>0>=4)break;q=k+((_(c[wa>>2]|0,p)|0)+j<<2)|0;j=l+((_(c[qa>>2]|0,p)|0)+j<<1)|0;n=p;while(1){if(n>>>0>=(c[xa>>2]|0)>>>0)break e;i=c[qa>>2]|0;m=j;j=j+(i<<1)|0;if((n|0)==(p|0)){G=c[a>>2]|0;D=(e[j>>1]|0)>>>4&255;c[G+100>>2]=G+24+(d[21291+D>>0]<<2);G=wh(G)|0;D=d[21547+D>>0]|0;B=D^G;c[q>>2]=(G|0)!=(D|0)?z:F;D=c[qa>>2]|0;G=m+(i-D<<1)|0;C=m+(D+i<<1)|0;A=m+(i+~D<<1)|0;b[A>>1]=e[A>>1]|2;b[G>>1]=b[G>>1]|b[3436+(B<<1)>>1];G=i+1|0;A=m+(G-D<<1)|0;b[A>>1]=e[A>>1]|4;A=i+-1|0;i=m+(A<<1)|0;b[i>>1]=b[i>>1]|b[3436+(B+2<<1)>>1];b[j>>1]=e[j>>1]|4096;i=m+(G<<1)|0;b[i>>1]=b[i>>1]|b[3436+(B+4<<1)>>1];A=m+(D+A<<1)|0;b[A>>1]=e[A>>1]|1;b[C>>1]=b[C>>1]|b[3436+(B+6<<1)>>1];G=m+(D+G<<1)|0;b[G>>1]=e[G>>1]|8;b[j>>1]=e[j>>1]&49151}else ah(a,j,q,S,F);n=n+1|0;if(n>>>0>=4)break;else q=q+(c[wa>>2]<<2)|0}}else{D=i+j|0;ah(a,l+(D<<1)|0,k+(j<<2)|0,S,F);G=(c[wa>>2]|0)+j|0;D=(c[qa>>2]|0)+D|0;ah(a,l+(D<<1)|0,k+(G<<2)|0,S,F);G=(c[wa>>2]|0)+G|0;D=(c[qa>>2]|0)+D|0;ah(a,l+(D<<1)|0,k+(G<<2)|0,S,F);ah(a,l+((c[qa>>2]|0)+D<<1)|0,k+((c[wa>>2]|0)+G<<2)|0,S,F)}while(0);i=c[wa>>2]|0}while(v>>>0>>0);m=i;j=c[xa>>2]|0}k=k+(m<<2<<2)|0;l=l+(c[qa>>2]<<2<<1)|0;o=o+4|0;if(o>>>0>=(j&-4)>>>0){q=k;p=l;break}}}else{i=c[wa>>2]|0;q=k;p=l;o=0}if(!i)break;else n=0;do{if(o>>>0>>0){k=q+(n<<2)|0;l=p+(n<<1)|0;m=o;while(1){l=l+(c[qa>>2]<<1)|0;ah(a,l,k,S,F);i=c[wa>>2]|0;m=m+1|0;j=c[xa>>2]|0;if(m>>>0>=j>>>0)break;else k=k+(i<<2)|0}}n=n+1|0}while(n>>>0>>0)}else{i=c[xa>>2]|0;if(!i)break;A=E+92|0;B=E+100|0;C=E+96|0;D=0-F|0;j=c[wa>>2]|0;z=0;while(1){if(!j){k=z+4|0;j=0}else{v=z|3;w=z|1;x=w+1|0;y=w+3|0;k=z+4|0;u=0;while(1){do if(v>>>0>>0){i=c[qa>>2]|0;l=u+1|0;t=(_(i,w)|0)+l|0;j=c[ra>>2]|0;if(b[j+(t<<1)>>1]&20735){t=0;i=0;G=127;break}if(b[j+((_(i,x)|0)+l<<1)>>1]&20735){t=0;i=0;G=127;break}if(b[j+((_(i,v)|0)+l<<1)>>1]&20735){t=0;i=0;G=127;break}if(b[j+((_(i,y)|0)+l<<1)>>1]&20665){t=0;i=0;G=127;break}c[B>>2]=A;if(!(wh(E)|0))break;c[B>>2]=C;i=(wh(E)|0)<<1;t=1;i=i|(wh(E)|0);G=127}else{t=0;i=0;G=127}while(0);if((G|0)==127){G=0;l=i+z|0;f:do if(l>>>0>>0){s=l;do{i=c[xa>>2]|0;if(s>>>0>=i>>>0)break f;Da=s;s=s+1|0;m=(_(c[qa>>2]|0,s)|0)+u|0;n=m+1|0;o=c[ra>>2]|0;p=o+(n<<1)|0;q=(_(c[wa>>2]|0,Da)|0)+u|0;q=(c[va>>2]|0)+(q<<2)|0;r=c[a>>2]|0;j=b[p>>1]|0;j=(Da|0)==(v|0)|(Da|0)==(i+-1|0)?j&-1095:j;do if(!(t&(Da|0)==(l|0))){if(j&20480)break;i=r+100|0;c[i>>2]=r+24+(d[20267+(j&255|R)>>0]<<2);if(wh(r)|0)G=133}else{i=r+100|0;G=133}while(0);if((G|0)==133){G=0;j=j>>>4&255;c[i>>2]=r+24+(d[21291+j>>0]<<2);Da=wh(r)|0;r=d[21547+j>>0]|0;j=r^Da;c[q>>2]=(Da|0)!=(r|0)?D:F;r=c[qa>>2]|0;Da=o+(n-r<<1)|0;q=o+(r+n<<1)|0;n=o+(n+~r<<1)|0;b[n>>1]=e[n>>1]|2;b[Da>>1]=b[Da>>1]|b[3436+(j<<1)>>1];Da=m+2|0;n=o+(Da-r<<1)|0;b[n>>1]=e[n>>1]|4;n=o+(m<<1)|0;b[n>>1]=b[n>>1]|b[3436+(j+2<<1)>>1];b[p>>1]=e[p>>1]|4096;n=o+(Da<<1)|0;b[n>>1]=b[n>>1]|b[3436+(j+4<<1)>>1];n=o+(r+m<<1)|0;b[n>>1]=e[n>>1]|1;b[q>>1]=b[q>>1]|b[3436+(j+6<<1)>>1];Da=o+(r+Da<<1)|0;b[Da>>1]=e[Da>>1]|8}b[p>>1]=e[p>>1]&49151}while(s>>>0>>0)}while(0);l=u+1|0}j=c[wa>>2]|0;i=c[xa>>2]|0;if(l>>>0>>0)u=l;else break}}if(k>>>0>>0)z=k;else break}}while(0);if(M){G=163;break c}c[E+100>>2]=E+96;wh(E)|0;wh(E)|0;wh(E)|0;wh(E)|0;G=163;break}default:G=163}while(0);do if((G|0)==163){G=0;if(J)break;qh(U);rh(U,18,0,46);rh(U,17,0,3);rh(U,0,0,4)}while(0);h=h+1|0;Da=(h|0)==3;f=(Da<<31>>31)+f|0;h=Da?0:h;H=H+1|0;if(H>>>0>=(c[I>>2]|0)>>>0)break b}}while(0);i=c[X>>2]|0}L=L+1|0}while(L>>>0>>0)}h=(c[V>>2]|0)-(c[fa>>2]|0)|0;f=(c[Y>>2]|0)-(c[ga>>2]|0)|0;i=c[ea>>2]|0;if(i&1){Da=c[Aa>>2]|0;h=(c[Da+(la*136|0)+8>>2]|0)+h-(c[Da+(la*136|0)>>2]|0)|0}if(i&2){Da=c[Aa>>2]|0;f=(c[Da+(la*136|0)+12>>2]|0)+f-(c[Da+(la*136|0)+4>>2]|0)|0}p=c[va>>2]|0;q=c[wa>>2]|0;r=c[xa>>2]|0;i=c[Ba>>2]|0;if((i|0)!=0?(ua=1<>2]|0;m=(l|0)>-1?l:0-l|0;if((m|0)>=(ua|0)){Da=m>>c[Ba>>2];c[k>>2]=(l|0)<0?0-Da|0:Da}n=n+1|0}while((n|0)!=(q|0))}o=o+1|0}while((o|0)!=(r|0))}n=(_(f,ya)|0)+h|0;o=c[pa>>2]|0;h=(r|0)==0;if((c[sa>>2]|0)==1){if(!h){h=(q|0)==0;k=0;do{if(!h){f=_(k,q)|0;i=(_(k,ya)|0)+n|0;j=0;do{c[o+(i+j<<2)>>2]=(c[p+(j+f<<2)>>2]|0)/2|0;j=j+1|0}while((j|0)!=(q|0))}k=k+1|0}while((k|0)!=(r|0))}}else if(!h){m=(q|0)==0;h=p;l=0;k=o+(n<<2)|0;while(1){if(!m){f=h;i=0;j=k;while(1){g[j>>2]=+(c[f>>2]|0)*+g[ha>>2];i=i+1|0;if((i|0)==(q|0))break;else{f=f+4|0;j=j+4|0}}h=h+(q<<2)|0}l=l+1|0;if((l|0)==(r|0))break;else k=k+(ya<<2)|0}}$=$+1|0}while($>>>0<(_(c[ba>>2]|0,c[aa>>2]|0)|0)>>>0);h=c[ka>>2]|0;i=c[ja>>2]|0}ca=ca+1|0}while(ca>>>0<(_(h,i)|0)>>>0);f=c[na>>2]|0}ia=ia+1|0}while(ia>>>0>>0);h=c[za>>2]|0}oa=oa+1|0;if(oa>>>0>=h>>>0){h=1;G=201;break}}if((G|0)==201)return h|0;return 0}function Zg(f,i,j,k,l){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0;Ya=i+32|0;h[Ya>>3]=0.0;Za=i+16|0;m=c[Za>>2]|0;if(!m){_a=1;return _a|0}Xa=i+20|0;Sa=j+5584|0;Ta=f+16|0;Ua=f+20|0;Va=f+8|0;Wa=f+36|0;Pa=(k|0)!=0;Qa=f+32|0;Ra=f+12|0;i=m;Oa=0;a:while(1){j=c[Xa>>2]|0;m=c[Sa>>2]|0;Ma=(c[j+(Oa*52|0)+8>>2]|0)-(c[j+(Oa*52|0)>>2]|0)|0;Na=j+(Oa*52|0)+16|0;n=c[Na>>2]|0;if(n){La=j+(Oa*52|0)+24|0;Ja=j+(Oa*52|0)+32|0;Ka=m+(Oa*1080|0)+20|0;Ga=m+(Oa*1080|0)+16|0;Ia=Pa&Oa>>>0>>0;Ha=k+(Oa<<3)|0;i=n;Fa=0;do{Da=c[La>>2]|0;Ea=Da+(Fa*136|0)+24|0;j=c[Ea>>2]|0;if(j){za=Da+(Fa*136|0)+16|0;Aa=Da+(Fa*136|0)+20|0;Ba=~Fa;Ca=Fa+-1|0;i=c[Aa>>2]|0;m=c[za>>2]|0;ya=0;do{xa=Da+(Fa*136|0)+28+(ya*36|0)+32|0;if(_(i,m)|0){ra=67108864/(~~+M(+(+g[xa>>2]*8192.0))|0)|0;sa=Da+(Fa*136|0)+28+(ya*36|0)+20|0;ta=Da+(Fa*136|0)+28+(ya*36|0)|0;ua=Da+(Fa*136|0)+28+(ya*36|0)+4|0;va=Da+(Fa*136|0)+28+(ya*36|0)+16|0;wa=((ra|0)<0)<<31>>31;qa=0;do{j=c[sa>>2]|0;oa=j+(qa*40|0)+16|0;pa=j+(qa*40|0)+20|0;if(_(c[pa>>2]|0,c[oa>>2]|0)|0){ma=j+(qa*40|0)+24|0;na=0;do{la=c[ma>>2]|0;n=c[la+(na*52|0)+12>>2]|0;i=n-(c[ta>>2]|0)|0;o=c[la+(na*52|0)+16>>2]|0;j=o-(c[ua>>2]|0)|0;m=c[va>>2]|0;if(m&1){ka=c[La>>2]|0;i=(c[ka+(Ca*136|0)+8>>2]|0)+i-(c[ka+(Ca*136|0)>>2]|0)|0}if(m&2){ka=c[La>>2]|0;j=(c[ka+(Ca*136|0)+12>>2]|0)+j-(c[ka+(Ca*136|0)+4>>2]|0)|0}if(!(_g(f,(c[la+(na*52|0)+20>>2]|0)-n|0,(c[la+(na*52|0)+24>>2]|0)-o|0)|0)){i=0;_a=173;break a}p=c[Ta>>2]|0;q=c[Ua>>2]|0;r=Ma-p|0;u=(_(j,Ma)|0)+i|0;v=c[Ja>>2]|0;c[Va>>2]=v+(u<<2);c[Wa>>2]=Ma;i=(q|0)==0;if((c[Ka>>2]|0)==1){if(!i){n=(p|0)==0;o=0;i=0;while(1){if(!n){j=0;m=i;while(1){ka=v+(m+u<<2)|0;c[ka>>2]=c[ka>>2]<<6;j=j+1|0;if((j|0)==(p|0))break;else m=m+1|0}i=p+i|0}o=o+1|0;if((o|0)==(q|0))break;else i=i+r|0}}}else if(!i){n=(p|0)==0;o=0;i=0;while(1){if(!n){j=0;m=i;while(1){ka=v+(m+u<<2)|0;ja=c[ka>>2]|0;ja=Zi(ja|0,((ja|0)<0)<<31>>31|0,ra|0,wa|0)|0;ja=Si(ja|0,C|0,4096,0)|0;ja=Ti(ja|0,C|0,18)|0;c[ka>>2]=ja;j=j+1|0;if((j|0)==(p|0))break;else m=m+1|0}i=p+i|0}o=o+1|0;if((o|0)==(q|0))break;else i=i+r|0}}ga=c[va>>2]|0;ha=(c[Na>>2]|0)+Ba|0;r=c[Ka>>2]|0;ia=+g[xa>>2];ja=c[Ga>>2]|0;ka=c[f>>2]|0;n=c[Ta>>2]|0;do if(!n)i=0;else{o=c[Ua>>2]|0;p=(o|0)==0;q=0;i=0;do{if(!p){j=c[Wa>>2]|0;m=0;do{fa=c[v+(u+((_(m,j)|0)+q)<<2)>>2]|0;fa=(fa|0)>-1?fa:0-fa|0;i=(i|0)>(fa|0)?i:fa;m=m+1|0}while((m|0)!=(o|0))}q=q+1|0}while((q|0)!=(n|0));if(!i){i=0;break}if((i|0)>1){j=i;i=0}else{i=-5;break}while(1){j=j>>1;if((j|0)<=1)break;else i=i+1|0}i=i+-4|0}while(0);ea=la+(na*52|0)+28|0;c[ea>>2]=i;i=i+-1|0;qh(ka);rh(ka,18,0,46);rh(ka,17,0,3);rh(ka,0,0,4);fa=la+(na*52|0)|0;kh(ka,c[fa>>2]|0);b:do if((i|0)>-1){ca=la+(na*52|0)+8|0;W=ja&1;da=(W|0)!=0;X=(r|0)==1;Y=(ja&4|0)==0;W=(W|0)==0;Z=(ja&2|0)==0;$=(ja&8|0)==0;aa=ga<<8;ba=(ja&32|0)==0;j=0;T=i;U=0.0;i=0;V=2;while(1){S=c[ca>>2]|0;I=da&(V>>>0<2?(T|0)<((c[ea>>2]|0)+-4|0):0);c:do switch(V|0){case 0:{G=1<>2]|0;if(!j){n=0;break c}H=(T|0)==0;o=c[Ta>>2]|0;m=o;n=0;F=0;do{E=F;F=F+4|0;if(!m)m=0;else{B=(E|0)==-4;D=E|3;m=o;A=0;do{if(!B){z=E;do{j=c[Ua>>2]|0;if(z>>>0>=j>>>0)break;do if($)j=0;else{if((z|0)==(D|0)){j=1;break}j=(z|0)==(j+-1|0)}while(0);p=z;z=z+1|0;u=(_(c[Qa>>2]|0,z)|0)+A|0;v=u+1|0;w=c[Ra>>2]|0;y=w+(v<<1)|0;p=(_(c[Wa>>2]|0,p)|0)+A|0;p=(c[Va>>2]|0)+(p<<2)|0;x=c[f>>2]|0;q=b[y>>1]|0;q=j?q&-1095:q;j=q&255;if((j|0)!=0&(q&20480|0)==0){m=c[p>>2]|0;m=(((m|0)<0?0-m|0:m)&G|0)!=0;o=m&1;r=x+100|0;c[r>>2]=x+24+(d[20267+(j|aa)>>0]<<2);if(I)oh(x,o);else lh(x,o);if(m){j=c[p>>2]|0;m=j>>>31;j=(j|0)<0?0-j|0:j;if(H)j=3708+((j&127)<<1)|0;else j=3452+((j>>>T&127)<<1)|0;n=(b[j>>1]|0)+n|0;j=q>>>4&255;c[r>>2]=x+24+(d[21291+j>>0]<<2);if(I)oh(x,m);else lh(x,d[21547+j>>0]^m);Q=c[Qa>>2]|0;R=w+(v-Q<<1)|0;P=w+(Q+v<<1)|0;O=w+(v+~Q<<1)|0;b[O>>1]=e[O>>1]|2;b[R>>1]=b[R>>1]|b[3436+(m<<1)>>1];R=u+2|0;O=w+(R-Q<<1)|0;b[O>>1]=e[O>>1]|4;O=w+(u<<1)|0;b[O>>1]=b[O>>1]|b[3436+((m|2)<<1)>>1];b[y>>1]=e[y>>1]|4096;O=w+(R<<1)|0;b[O>>1]=b[O>>1]|b[3436+((m|4)<<1)>>1];O=w+(Q+u<<1)|0;b[O>>1]=e[O>>1]|1;b[P>>1]=b[P>>1]|b[3436+((m|6)<<1)>>1];R=w+(Q+R<<1)|0;b[R>>1]=e[R>>1]|8}b[y>>1]=e[y>>1]|16384}}while(z>>>0>>0);m=c[Ta>>2]|0}A=A+1|0}while(A>>>0>>0);j=c[Ua>>2]|0;o=m}}while(F>>>0>>0);break}case 1:{A=1<>2]|0;if(!j){n=0;break c}B=(T|0)==0;o=c[Ta>>2]|0;m=o;n=0;z=0;do{y=z;z=z+4|0;if(!m)m=0;else{w=(y|0)==-4;x=y|3;m=o;v=0;do{u=v;v=v+1|0;if(!w){r=y;do{j=c[Ua>>2]|0;if(r>>>0>=j>>>0)break;do if($)j=0;else{if((r|0)==(x|0)){j=1;break}j=(r|0)==(j+-1|0)}while(0);m=r;r=r+1|0;p=(_(c[Qa>>2]|0,r)|0)+v|0;p=(c[Ra>>2]|0)+(p<<1)|0;q=c[f>>2]|0;o=b[p>>1]|0;o=j?o&-1095:o;if((o&20480|0)==4096){m=c[(c[Va>>2]|0)+((_(c[Wa>>2]|0,m)|0)+u<<2)>>2]|0;m=(m|0)<0?0-m|0:m;if(B)j=4220+((m&127)<<1)|0;else j=3964+((m>>>T&127)<<1)|0;n=(b[j>>1]|0)+n|0;j=(m&A|0)!=0&1;c[q+100>>2]=q+24+(((o&8192|0)!=0?16:(o&255|0)!=0?15:14)<<2);if(I)oh(q,j);else lh(q,j);b[p>>1]=e[p>>1]|8192}}while(r>>>0>>0);m=c[Ta>>2]|0}}while(v>>>0>>0);j=c[Ua>>2]|0;o=m}}while(z>>>0>>0);break}case 2:{L=c[f>>2]|0;N=1<>2]|0;if(!m)j=0;else{O=L+92|0;P=L+100|0;Q=L+96|0;R=(T|0)==0;n=c[Ta>>2]|0;j=0;K=0;while(1){if(!n){o=K+4|0;n=0}else{D=K|3;E=K|1;F=E+1|0;G=E+3|0;o=K+4|0;H=K+1|0;I=K+2|0;J=K+3|0;B=0;while(1){do if(D>>>0>>0){m=c[Qa>>2]|0;q=B+1|0;p=(_(m,E)|0)+q|0;n=c[Ra>>2]|0;p=b[n+(p<<1)>>1]|0;if($){A=b[n+((_(m,F)|0)+q<<1)>>1]|p;A=A|b[n+((_(m,D)|0)+q<<1)>>1];m=((A|b[n+((_(m,G)|0)+q<<1)>>1])&20735)==0&1}else{do if(!(p&20735)){if(b[n+((_(m,F)|0)+q<<1)>>1]&20735){m=1;break}if(b[n+((_(m,D)|0)+q<<1)>>1]&20735){m=1;break}m=(b[n+((_(m,G)|0)+q<<1)>>1]&20665)!=0}else m=1;while(0);m=m&1^1}if(!m){A=0;m=0;_a=109;break}m=c[Wa>>2]|0;n=c[Va>>2]|0;A=c[n+((_(m,K)|0)+B<<2)>>2]|0;do if(!(((A|0)<0?0-A|0:A)&N)){A=c[n+((_(m,H)|0)+B<<2)>>2]|0;if(((A|0)<0?0-A|0:A)&N){m=1;break}A=c[n+((_(m,I)|0)+B<<2)>>2]|0;if(((A|0)<0?0-A|0:A)&N){m=2;break}m=c[n+((_(m,J)|0)+B<<2)>>2]|0;m=(((m|0)<0?0-m|0:m)&N|0)==0?4:3}else m=0;while(0);c[P>>2]=O;lh(L,(m|0)!=4&1);if((m|0)==4){p=q;break}c[P>>2]=Q;lh(L,m>>>1);lh(L,m&1);A=1;_a=109}else{A=0;m=0;_a=109}while(0);if((_a|0)==109){_a=0;z=m+K|0;d:do if(z>>>0>>0){y=z;do{m=c[Ua>>2]|0;if(y>>>0>=m>>>0)break d;do if($)m=0;else{if((y|0)==(D|0)){m=1;break}m=(y|0)==(m+-1|0)}while(0);$a=y;y=y+1|0;r=(_(c[Qa>>2]|0,y)|0)+B|0;u=r+1|0;v=c[Ra>>2]|0;x=v+(u<<1)|0;n=(_(c[Wa>>2]|0,$a)|0)+B|0;n=(c[Va>>2]|0)+(n<<2)|0;w=c[f>>2]|0;p=b[x>>1]|0;q=m?p&-1095:p;do if(!(A&($a|0)==(z|0))){if(p&20480)break;c[w+100>>2]=w+24+(d[20267+(q&255|aa)>>0]<<2);$a=c[n>>2]|0;$a=((($a|0)<0?0-$a|0:$a)&N|0)!=0;lh(w,$a&1);if($a)_a=117}else _a=117;while(0);if((_a|0)==117){_a=0;n=c[n>>2]|0;m=(n|0)<0?0-n|0:n;if(R)m=3708+((m&127)<<1)|0;else m=3452+((m>>>T&127)<<1)|0;j=(b[m>>1]|0)+j|0;$a=q>>>4&255;c[w+100>>2]=w+24+(d[21291+$a>>0]<<2);p=n>>>31;lh(w,d[21547+$a>>0]^p);w=c[Qa>>2]|0;$a=v+(u-w<<1)|0;q=v+(w+u<<1)|0;u=v+(u+~w<<1)|0;b[u>>1]=e[u>>1]|2;b[$a>>1]=b[$a>>1]|b[3436+(p<<1)>>1];$a=r+2|0;u=v+($a-w<<1)|0;b[u>>1]=e[u>>1]|4;u=v+(r<<1)|0;b[u>>1]=b[u>>1]|b[3436+((p|2)<<1)>>1];b[x>>1]=e[x>>1]|4096;u=v+($a<<1)|0;b[u>>1]=b[u>>1]|b[3436+((p|4)<<1)>>1];u=v+(w+r<<1)|0;b[u>>1]=e[u>>1]|1;b[q>>1]=b[q>>1]|b[3436+((p|6)<<1)>>1];$a=v+(w+$a<<1)|0;b[$a>>1]=e[$a>>1]|8}b[x>>1]=e[x>>1]&49151}while(y>>>0>>0)}while(0);p=B+1|0}n=c[Ta>>2]|0;m=c[Ua>>2]|0;if(p>>>0>>0)B=p;else break}}if(o>>>0>>0)K=o;else break}}if(ba){n=j;break c}uh(ka);n=j;break}default:n=j}while(0);if(Ia)s=+h[Ha>>3];else s=1.0;if(X)t=+Ig(ha,ga);else t=+Lg(ha,ga);t=+(1<>3]=+h[Ya>>3]+t;do if(Y)_a=137;else{if((T|0)<1&(V|0)==2){_a=137;break}mh(ka);m=S+(i*24|0)+20|0;j=a[m>>0]|1;a[m>>0]=j;m=1}while(0);do if((_a|0)==137){j=(c[ea>>2]|0)+-4|0;if((V|0)!=0&(T|0)<(j|0))if(W)_a=141;else _a=140;else if(W|((V|0)!=2|(T|0)!=(j|0)))_a=141;else _a=140;if((_a|0)==140){_a=0;mh(ka);m=S+(i*24|0)+20|0;j=a[m>>0]|1;a[m>>0]=j;m=1;break}else if((_a|0)==141){_a=0;m=S+(i*24|0)+20|0;j=a[m>>0]&-2;a[m>>0]=j;m=3;break}}while(0);R=V+1|0;$a=(R|0)==3;V=$a?0:R;T=($a<<31>>31)+T|0;do if((T|0)>0&(j&1)!=0)if(da&(V>>>0<2?(T|0)<((c[ea>>2]|0)+-4|0):0)){nh(ka);break}else{sh(ka);break}while(0);h[S+(i*24|0)+8>>3]=U;c[S+(i*24|0)>>2]=(jh(ka)|0)+m;if(!Z)ph(ka);i=i+1|0;if((T|0)<=-1)break b;else j=n}}else i=0;while(0);do if(!(ja&16)){if(ja&1)break;mh(ka)}else th(ka);while(0);q=la+(na*52|0)+48|0;c[q>>2]=i;if(i){n=la+(na*52|0)+8|0;p=0;do{o=c[n>>2]|0;j=o+(p*24|0)|0;$a=c[j>>2]|0;if($a>>>0>(jh(ka)|0)>>>0){i=jh(ka)|0;c[j>>2]=i}else i=c[j>>2]|0;do if(i>>>0>1){m=i+-1|0;if((a[(c[fa>>2]|0)+m>>0]|0)!=-1)break;c[j>>2]=m;i=m}while(0);if(!p)j=0;else j=c[(c[n>>2]|0)+((p+-1|0)*24|0)>>2]|0;c[o+(p*24|0)+16>>2]=i-j;p=p+1|0}while(p>>>0<(c[q>>2]|0)>>>0)}na=na+1|0}while(na>>>0<(_(c[pa>>2]|0,c[oa>>2]|0)|0)>>>0);i=c[Aa>>2]|0;m=c[za>>2]|0}qa=qa+1|0}while(qa>>>0<(_(i,m)|0)>>>0);j=c[Ea>>2]|0}ya=ya+1|0}while(ya>>>0>>0);i=c[Na>>2]|0}Fa=Fa+1|0}while(Fa>>>0>>0);i=c[Za>>2]|0}Oa=Oa+1|0;if(Oa>>>0>=i>>>0){i=1;_a=173;break}}if((_a|0)==173)return i|0;return 0}function _g(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=_(d,b)|0;if(!(c[a+40>>2]|0)){h=a+24|0;i=a+8|0;e=c[i>>2]|0;do if(g>>>0>(c[h>>2]|0)>>>0){Sc(e);f=g<<2;e=Rc(f)|0;c[i>>2]=e;if(!e){b=0;return b|0}else{c[h>>2]=g;break}}else f=g<<2;while(0);Qi(e|0,0,f|0)|0}g=b+2|0;c[a+32>>2]=g;g=_(d+2|0,g)|0;h=a+28|0;i=a+12|0;e=c[i>>2]|0;do if(g>>>0>(c[h>>2]|0)>>>0){Sc(e);f=g<<1;e=Rc(f)|0;c[i>>2]=e;if(!e){b=0;return b|0}else{c[h>>2]=g;break}}else f=g<<1;while(0);Qi(e|0,0,f|0)|0;c[a+16>>2]=b;c[a+20>>2]=d;b=1;return b|0}function $g(a,f,g,h,i){a=a|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=c[a>>2]|0;l=b[f>>1]|0;m=l&255;if(!((m|0)!=0&(l&20480|0)==0))return;k=j+100|0;c[k>>2]=j+24+(d[20267+(m|h<<8)>>0]<<2);if(wh(j)|0){h=l>>>4&255;c[k>>2]=j+24+(d[21291+h>>0]<<2);l=wh(j)|0;h=d[21547+h>>0]|0;m=h^l;c[g>>2]=(l|0)!=(h|0)?0-i|0:i;a=c[a+32>>2]|0;i=f+(0-a<<1)|0;h=f+(a<<1)|0;g=f+(~a<<1)|0;b[g>>1]=e[g>>1]|2;b[i>>1]=b[i>>1]|b[3436+(m<<1)>>1];i=f+(1-a<<1)|0;b[i>>1]=e[i>>1]|4;i=f+-2|0;b[i>>1]=b[i>>1]|b[3436+(m+2<<1)>>1];b[f>>1]=e[f>>1]|4096;i=f+2|0;b[i>>1]=b[i>>1]|b[3436+(m+4<<1)>>1];i=f+(a+-1<<1)|0;b[i>>1]=e[i>>1]|1;b[h>>1]=b[h>>1]|b[3436+(m+6<<1)>>1];a=f+(a+1<<1)|0;b[a>>1]=e[a>>1]|8}b[f>>1]=e[f>>1]|16384;return}function ah(a,f,g,h,i){a=a|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0;j=c[a>>2]|0;l=b[f>>1]|0;if(l&20480){a=b[f>>1]|0;a=a&65535;a=a&49151;a=a&65535;b[f>>1]=a;return}k=j+100|0;c[k>>2]=j+24+(d[20267+(l&255|h<<8)>>0]<<2);if(!(wh(j)|0)){a=b[f>>1]|0;a=a&65535;a=a&49151;a=a&65535;b[f>>1]=a;return}h=l>>>4&255;c[k>>2]=j+24+(d[21291+h>>0]<<2);k=wh(j)|0;h=d[21547+h>>0]|0;l=h^k;c[g>>2]=(k|0)!=(h|0)?0-i|0:i;a=c[a+32>>2]|0;i=f+(0-a<<1)|0;h=f+(a<<1)|0;g=f+(~a<<1)|0;b[g>>1]=e[g>>1]|2;b[i>>1]=b[i>>1]|b[3436+(l<<1)>>1];i=f+(1-a<<1)|0;b[i>>1]=e[i>>1]|4;i=f+-2|0;b[i>>1]=b[i>>1]|b[3436+(l+2<<1)>>1];b[f>>1]=e[f>>1]|4096;i=f+2|0;b[i>>1]=b[i>>1]|b[3436+(l+4<<1)>>1];i=f+(a+-1<<1)|0;b[i>>1]=e[i>>1]|1;b[h>>1]=b[h>>1]|b[3436+(l+6<<1)>>1];a=f+(a+1<<1)|0;b[a>>1]=e[a>>1]|8;a=b[f>>1]|0;a=a&65535;a=a&49151;a=a&65535;b[f>>1]=a;return}function bh(a,e,f,g,h,j,k,l,m,n,o,p){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;i=i+16|0;H=I;c[H>>2]=0;q=c[a>>2]|0;D=c[a+4>>2]|0;a=c[D+76>>2]|0;F=a+(e*5640|0)|0;s=(b[D>>1]|0)==4?2:1;t=D+80|0;if(!(c[t>>2]|0))r=1;else r=c[q+16>>2]|0;G=(c[a+(e*5640|0)+420>>2]|0)+1|0;E=Lf(q,D,e,p)|0;if(!E){e=0;i=I;return e|0}c[j>>2]=0;a:do if(!p){if(r){a=0;b:while(1){p=0;o=E;q=0;while(1){Mf(E,D,e,q,a,n,0);if((c[o+80>>2]|0)==-1){a=9;break b}m=o+36|0;c:while(1){do if(!(Of(o)|0))break c;while((c[m>>2]|0)>>>0>=g>>>0);c[H>>2]=0;if(!(fh(e,f,F,o,h,H,k,l)|0)){a=13;break b}B=c[H>>2]|0;c[j>>2]=(c[j>>2]|0)+B;k=k-B|0;p=B+p|0;h=h+B|0}B=c[t>>2]|0;if((B|0)!=0&p>>>0>B>>>0){a=17;break b}q=q+1|0;if(q>>>0>>0)o=o+232|0;else break}a=a+1|0;if(a>>>0>=r>>>0)break a}if((a|0)==9){Kf(E,G);e=0;i=I;return e|0}else if((a|0)==13){Kf(E,G);e=0;i=I;return e|0}else if((a|0)==17){Kf(E,G);e=0;i=I;return e|0}}}else{Mf(E,D,e,o,m,n,p);z=E+(o*232|0)|0;if((c[E+(o*232|0)+80>>2]|0)==-1){Kf(E,G);e=0;i=I;return e|0}n=E+(o*232|0)+36|0;u=(l|0)==0;v=f+840|0;w=l+12|0;x=l+8|0;y=l+88|0;t=D+93|0;s=a+(e*5640|0)+5636|0;while(1){do if(!(Of(z)|0))break a;while((c[n>>2]|0)>>>0>=g>>>0);c[H>>2]=0;if(!(fh(e,f,F,z,h,H,k,l)|0))break;r=c[H>>2]|0;h=h+r|0;k=k-r|0;c[j>>2]=(c[j>>2]|0)+r;if(!u){if(!(c[w>>2]|0))a=c[x>>2]|0;else{q=c[y>>2]|0;a=c[x>>2]|0;o=c[q+(e*592|0)+548>>2]|0;p=o+(a<<5)|0;if(!a){m=(c[q+(e*592|0)+12>>2]|0)+1|0;q=((m|0)<0)<<31>>31;D=p;c[D>>2]=m;c[D+4>>2]=q}else{if((((d[s>>0]|0)>>>2|(d[t>>0]|0)>>>3)&1)!=0?(B=p,A=c[B>>2]|0,B=c[B+4>>2]|0,!((A|0)==0&(B|0)==0)):0){m=A;q=B}else{m=o+(a+-1<<5)+16|0;m=Si(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;q=C}D=p;c[D>>2]=m;c[D+4>>2]=q}p=Si(m|0,q|0,-1,-1)|0;m=C;r=Si(p|0,m|0,r|0,0)|0;D=o+(a<<5)+16|0;c[D>>2]=r;c[D+4>>2]=C;D=o+(a<<5)+8|0;r=D;r=Si(p|0,m|0,c[r>>2]|0,c[r+4>>2]|0)|0;c[D>>2]=r;c[D+4>>2]=C}c[x>>2]=a+1}c[v>>2]=(c[v>>2]|0)+1}Kf(E,G);e=0;i=I;return e|0}while(0);Kf(E,G);e=1;i=I;return e|0}function ch(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0;$=i;i=i+112|0;W=$+64|0;X=$+32|0;S=$;R=$+96|0;Q=$+92|0;k=c[a>>2]|0;M=a+4|0;Z=c[M>>2]|0;h=c[Z+76>>2]|0;O=h+(b*5640|0)|0;P=h+(b*5640|0)+420|0;Y=(c[P>>2]|0)+1|0;Z=Jf(k,Z,b)|0;if(!Z){aa=0;i=$;return aa|0}N=k+16|0;L=h+(b*5640|0)+12|0;K=d+20|0;J=k+24|0;b=g;a=e;H=Z;I=0;a:while(1){if((c[H+80>>2]|0)==-1){aa=4;break}h=Pc(c[N>>2]<<2)|0;if(!h){aa=6;break}Qi(h|0,1,c[N>>2]<<2|0)|0;if(Of(H)|0){g=H+24|0;d=H+28|0;G=H+36|0;k=H+32|0;F=b;E=a;while(1){if((c[L>>2]|0)>>>0>(c[G>>2]|0)>>>0){b=c[g>>2]|0;a=c[K>>2]|0;if((c[d>>2]|0)>>>0<(c[a+(b*52|0)+20>>2]|0)>>>0){c[h+(b<<2)>>2]=0;D=c[M>>2]|0;c[Q>>2]=0;if(!(gh(D,a,O,H,R,E,Q,F,j)|0)){aa=45;break a}C=c[Q>>2]|0;if(!(c[R>>2]|0))a=C;else{B=F-C|0;z=E+C|0;c[Q>>2]=0;b=c[d>>2]|0;l=c[(c[K>>2]|0)+((c[g>>2]|0)*52|0)+24>>2]|0;x=l+(b*136|0)+24|0;a=c[x>>2]|0;b:do if(!a){a=z;aa=43}else{y=E+F|0;m=a;D=0;w=l+(b*136|0)+28|0;l=z;c:while(1){a=c[k>>2]|0;b=c[w+20>>2]|0;if(((c[w+8>>2]|0)!=(c[w>>2]|0)?(c[w+12>>2]|0)!=(c[w+4>>2]|0):0)?(V=_(c[b+(a*40|0)+20>>2]|0,c[b+(a*40|0)+16>>2]|0)|0,(V|0)!=0):0){A=0;a=c[b+(a*40|0)+24>>2]|0;p=l;while(1){u=a+40|0;if(!(c[u>>2]|0))b=p;else{v=a+44|0;b=c[v>>2]|0;do if(!b){o=c[a+4>>2]|0;c[v>>2]=1;c[a+36>>2]=0}else{l=b+-1|0;m=c[a+4>>2]|0;if((c[m+(l<<5)+8>>2]|0)!=(c[m+(l<<5)+20>>2]|0)){o=m+(l<<5)|0;break}c[v>>2]=b+1;o=m+(b<<5)|0}while(0);t=a+36|0;b=a+32|0;s=p;n=o+28|0;l=c[n>>2]|0;if((l+s|0)>>>0>>0|(p+l|0)>>>0>y>>>0){b=D;a=A;break c}m=c[t>>2]|0;s=p;r=o;while(1){o=l+m|0;if(o>>>0>>0){b=D;a=A;aa=29;break a}p=c[a>>2]|0;if(o>>>0>(c[b>>2]|0)>>>0){l=Tc(p,o)|0;if(!l){aa=32;break a}m=c[t>>2]|0;q=c[n>>2]|0;c[b>>2]=q+m;c[a>>2]=l;p=l;l=q}Ui(p+m|0,s|0,l|0)|0;l=r+8|0;m=c[l>>2]|0;if(!m){c[r>>2]=a;o=c[t>>2]|0;c[r+4>>2]=o}else o=c[t>>2]|0;p=c[n>>2]|0;q=s;s=s+p|0;n=c[r+24>>2]|0;m=n+m|0;c[l>>2]=m;l=c[u>>2]|0;c[u>>2]=l-n;c[r+12>>2]=m;m=p+o|0;c[t>>2]=m;o=r+16|0;c[o>>2]=(c[o>>2]|0)+p;if((l|0)==(n|0)){b=s;break}c[v>>2]=(c[v>>2]|0)+1;o=s;n=r+60|0;l=c[n>>2]|0;if((l+o|0)>>>0>>0?1:(q+(l+p)|0)>>>0>y>>>0){b=D;a=A;break c}else r=r+32|0}c[a+48>>2]=c[v>>2]}A=A+1|0;if(A>>>0>=V>>>0){a=b;break}else{a=a+56|0;p=b}}b=c[x>>2]|0}else{b=m;a=l}D=D+1|0;if(D>>>0>=b>>>0){aa=43;break b}else{m=b;w=w+36|0;l=a}}z=c[k>>2]|0;A=c[d>>2]|0;D=c[g>>2]|0;c[S>>2]=l;c[S+4>>2]=B;c[S+8>>2]=a;c[S+12>>2]=z;c[S+16>>2]=b;c[S+20>>2]=A;c[S+24>>2]=D;Ub(j,2,21803,S)|0;a=c[Q>>2]|0}while(0);if((aa|0)==43){aa=0;a=a-z|0;c[Q>>2]=a}a=a+C|0}l=c[g>>2]|0;C=c[d>>2]|0;b=(c[J>>2]|0)+(l*52|0)+36|0;D=c[b>>2]|0;c[b>>2]=C>>>0>D>>>0?C:D;b=a}else aa=47}else{a=c[K>>2]|0;aa=47}if((aa|0)==47){aa=0;D=c[M>>2]|0;c[Q>>2]=0;if(!(gh(D,a,O,H,R,E,Q,F,j)|0)){aa=69;break a}u=c[Q>>2]|0;if(!(c[R>>2]|0))a=u;else{l=F-u|0;w=c[d>>2]|0;x=c[g>>2]|0;a=c[(c[K>>2]|0)+(x*52|0)+24>>2]|0;c[Q>>2]=0;t=c[a+(w*136|0)+24>>2]|0;if(!t)a=0;else{v=c[k>>2]|0;b=0;s=a+(w*136|0)+28|0;while(1){m=c[s+20>>2]|0;if(((c[s+8>>2]|0)!=(c[s>>2]|0)?(c[s+12>>2]|0)!=(c[s+4>>2]|0):0)?(T=_(c[m+(v*40|0)+20>>2]|0,c[m+(v*40|0)+16>>2]|0)|0,(T|0)!=0):0){a=0;r=c[m+(v*40|0)+24>>2]|0;while(1){p=r+40|0;d:do if(c[p>>2]|0){q=r+44|0;m=c[q>>2]|0;do if(!m){o=c[r+4>>2]|0;c[q>>2]=1;c[r+36>>2]=0}else{n=m+-1|0;o=c[r+4>>2]|0;if((c[o+(n<<5)+8>>2]|0)!=(c[o+(n<<5)+20>>2]|0)){o=o+(n<<5)|0;break}c[q>>2]=m+1;o=o+(m<<5)|0}while(0);D=c[Q>>2]|0;m=c[o+28>>2]|0;n=m+D|0;if(n>>>0>>0|n>>>0>l>>>0){g=v;d=w;k=x;aa=65;break a}while(1){c[Q>>2]=n;D=c[o+24>>2]|0;C=o+8|0;c[C>>2]=(c[C>>2]|0)+D;C=c[p>>2]|0;c[p>>2]=C-D;if((C|0)==(D|0))break d;c[q>>2]=(c[q>>2]|0)+1;D=c[Q>>2]|0;m=c[o+60>>2]|0;n=m+D|0;if(n>>>0>>0|n>>>0>l>>>0){g=v;d=w;k=x;aa=65;break a}else o=o+32|0}}while(0);a=a+1|0;if(a>>>0>=T>>>0)break;else r=r+56|0}}b=b+1|0;if(b>>>0>=t>>>0)break;else s=s+36|0}a=c[Q>>2]|0}a=a+u|0}l=c[g>>2]|0;b=a}if((c[h+(l<<2)>>2]|0)!=0?(U=(c[J>>2]|0)+(l*52|0)+36|0,(c[U>>2]|0)==0):0)c[U>>2]=(c[(c[K>>2]|0)+(l*52|0)+20>>2]|0)+-1;a=E+b|0;b=F-b|0;if(!(Of(H)|0))break;else{F=b;E=a}}}Uc(h);I=I+1|0;if(I>>>0>(c[P>>2]|0)>>>0){h=a;aa=75;break}else H=H+232|0}if((aa|0)==4){Kf(Z,Y);aa=0;i=$;return aa|0}else if((aa|0)==6){Kf(Z,Y);aa=0;i=$;return aa|0}else if((aa|0)==29){f=c[k>>2]|0;e=c[d>>2]|0;W=c[g>>2]|0;c[X>>2]=l;c[X+4>>2]=m;c[X+8>>2]=~l;c[X+12>>2]=a;c[X+16>>2]=f;c[X+20>>2]=b;c[X+24>>2]=e;c[X+28>>2]=W;Ub(j,1,21888,X)|0;aa=45}else if((aa|0)==32){Uc(c[a>>2]|0);c[a>>2]=0;c[b>>2]=0;aa=45}else if((aa|0)==65){c[W>>2]=m;c[W+4>>2]=l;c[W+8>>2]=a;c[W+12>>2]=g;c[W+16>>2]=b;c[W+20>>2]=d;c[W+24>>2]=k;Ub(j,1,21987,W)|0;aa=69}else if((aa|0)==75){Kf(Z,Y);c[f>>2]=h-e;aa=1;i=$;return aa|0}if((aa|0)==45){Kf(Z,Y);Uc(h);aa=0;i=$;return aa|0}else if((aa|0)==69){Kf(Z,Y);Uc(h);aa=0;i=$;return aa|0}return 0}function dh(a,b){a=a|0;b=b|0;var d=0;d=Qc(1,8)|0;if(!d){a=0;return a|0}c[d>>2]=a;c[d+4>>2]=b;a=d;return a|0}function eh(a){a=a|0;if(!a)return;Uc(a);return}function fh(b,d,e,f,g,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0,K=0;s=c[f+28>>2]|0;J=c[f+32>>2]|0;K=c[f+36>>2]|0;r=c[(c[d+20>>2]|0)+((c[f+24>>2]|0)*52|0)+24>>2]|0;if(!(c[e>>2]&2))G=g;else{a[g>>0]=-1;a[g+1>>0]=-111;a[g+2>>0]=0;a[g+3>>0]=4;G=d+840|0;a[g+4>>0]=(c[G>>2]|0)>>>8;a[g+5>>0]=c[G>>2];j=j+-6|0;G=g+6|0}if((K|0)==0?(q=r+(s*136|0)+24|0,(c[q>>2]|0)!=0):0){o=r+(s*136|0)+28|0;p=0;while(1){f=c[o+20>>2]|0;kg(c[f+(J*40|0)+32>>2]|0);m=f+(J*40|0)+36|0;kg(c[m>>2]|0);n=_(c[f+(J*40|0)+20>>2]|0,c[f+(J*40|0)+16>>2]|0)|0;if(n){f=f+(J*40|0)+24|0;d=o+28|0;l=0;do{H=c[f>>2]|0;c[H+(l*52|0)+40>>2]=0;ng(c[m>>2]|0,l,(c[d>>2]|0)-(c[H+(l*52|0)+28>>2]|0)|0);l=l+1|0}while((l|0)!=(n|0))}p=p+1|0;if(p>>>0>=(c[q>>2]|0)>>>0)break;else o=o+36|0}}E=wg()|0;if(!E){i=0;return i|0}zg(E,G,j);Bg(E,1,1);F=r+(s*136|0)+28|0;H=r+(s*136|0)+24|0;if(c[H>>2]|0){A=K+1|0;C=F;D=0;while(1){n=c[C+20>>2]|0;B=_(c[n+(J*40|0)+20>>2]|0,c[n+(J*40|0)+16>>2]|0)|0;o=n+(J*40|0)+24|0;f=(B|0)==0;if(!f){d=n+(J*40|0)+32|0;l=c[o>>2]|0;m=0;while(1){if((c[l+40>>2]|0)==0?(c[(c[l+4>>2]|0)+(K*24|0)>>2]|0)!=0:0)ng(c[d>>2]|0,m,K);m=m+1|0;if((m|0)==(B|0))break;else l=l+52|0}if(!f){z=n+(J*40|0)+32|0;y=n+(J*40|0)+36|0;w=c[o>>2]|0;x=0;while(1){f=(c[w+4>>2]|0)+(K*24|0)|0;v=w+40|0;if(!(c[v>>2]|0))og(E,c[z>>2]|0,x,A);else Bg(E,(c[f>>2]|0)!=0&1,1);d=c[f>>2]|0;if(d){if(!(c[v>>2]|0)){c[w+32>>2]=3;og(E,c[y>>2]|0,x,999);d=c[f>>2]|0}a:do switch(d|0){case 1:{Bg(E,0,1);break}case 2:{Bg(E,2,2);break}default:{if(d>>>0<6){Bg(E,d+-3|12,4);break a}if(d>>>0<37){Bg(E,d+-6|480,9);break a}if(d>>>0<165)Bg(E,d+-37|65408,16)}}while(0);o=c[v>>2]|0;d=c[f>>2]|0;u=d+o|0;t=w+8|0;if(o>>>0>>0){s=w+32|0;q=o+-1+d|0;m=0;n=0;l=0;r=(c[t>>2]|0)+(o*24|0)|0;while(1){l=l+1|0;n=(c[r+16>>2]|0)+n|0;if((a[r+20>>0]&1)!=0|(o|0)==(q|0)){if((n|0)>1){d=0;do{n=n>>1;d=d+1|0}while((n|0)>1)}else d=0;p=c[s>>2]|0;if((l|0)>1){n=0;do{l=l>>1;n=n+1|0}while((l|0)>1);l=n}else l=0;n=d+1-p-l|0;m=(m|0)>(n|0)?m:n;n=0;l=0}o=o+1|0;if((o|0)==(u|0))break;else r=r+24|0}if((m|0)>0){d=m;while(1){Bg(E,1,1);if((d|0)>1)d=d+-1|0;else{d=n;break}}}else d=n}else{m=0;d=0;l=0}Bg(E,0,1);q=w+32|0;c[q>>2]=(c[q>>2]|0)+m;m=c[v>>2]|0;if(m>>>0>>0){p=(c[t>>2]|0)+(m*24|0)|0;while(1){l=l+1|0;n=(c[p+16>>2]|0)+d|0;if((a[p+20>>0]&1)==0?(m|0)!=((c[v>>2]|0)+-1+(c[f>>2]|0)|0):0)d=n;else{o=c[q>>2]|0;if((l|0)>1){d=0;do{l=l>>1;d=d+1|0}while((l|0)>1)}else d=0;Bg(E,n,d+o|0);d=0;l=0}m=m+1|0;if((m|0)==(u|0))break;else p=p+24|0}}}x=x+1|0;if((x|0)==(B|0))break;else w=w+52|0}}}D=D+1|0;if(D>>>0>=(c[H>>2]|0)>>>0)break;else C=C+36|0}}if(!(Dg(E)|0)){xg(E);i=0;return i|0}d=yg(E)|0;f=G+d|0;j=j-d|0;xg(E);if(c[e>>2]&4){a[f>>0]=-1;a[G+(d+1)>>0]=-110;j=j+-2|0;f=G+(d+2)|0}t=(k|0)!=0;if(t?(c[k+12>>2]|0)!=0:0){G=f-g|0;e=(c[(c[k+88>>2]|0)+(b*592|0)+548>>2]|0)+(c[k+8>>2]<<5)+8|0;c[e>>2]=G;c[e+4>>2]=((G|0)<0)<<31>>31}d=c[H>>2]|0;b:do if(d){u=k+12|0;v=k+8|0;w=k+88|0;r=F;s=0;c:while(1){l=c[r+20>>2]|0;q=_(c[l+(J*40|0)+20>>2]|0,c[l+(J*40|0)+16>>2]|0)|0;l=c[l+(J*40|0)+24>>2]|0;if(q){if(t){p=0;while(1){o=c[l+4>>2]|0;d=o+(K*24|0)|0;if(c[d>>2]|0){m=o+(K*24|0)+4|0;n=c[m>>2]|0;if(n>>>0>j>>>0){f=0;j=81;break c}Ui(f|0,c[o+(K*24|0)+16>>2]|0,n|0)|0;e=l+40|0;c[e>>2]=(c[e>>2]|0)+(c[d>>2]|0);e=c[m>>2]|0;f=f+e|0;j=j-e|0;if((c[u>>2]|0)!=0?(e=(c[(c[w>>2]|0)+(b*592|0)+548>>2]|0)+(c[v>>2]<<5)+24|0,I=+h[o+(K*24|0)+8>>3]+ +h[e>>3],h[e>>3]=I,+h[k>>3]>3]=I}p=p+1|0;if(p>>>0>=q>>>0)break;else l=l+52|0}}else{p=0;while(1){d=c[l+4>>2]|0;m=d+(K*24|0)|0;if(c[m>>2]|0){n=d+(K*24|0)+4|0;o=c[n>>2]|0;if(o>>>0>j>>>0){f=0;j=81;break c}Ui(f|0,c[d+(K*24|0)+16>>2]|0,o|0)|0;e=l+40|0;c[e>>2]=(c[e>>2]|0)+(c[m>>2]|0);e=c[n>>2]|0;j=j-e|0;f=f+e|0}p=p+1|0;if(p>>>0>=q>>>0)break;else l=l+52|0}}d=c[H>>2]|0}s=s+1|0;if(s>>>0>=d>>>0)break b;else r=r+36|0}if((j|0)==81)return f|0}while(0);c[i>>2]=f-g+(c[i>>2]|0);i=1;return i|0}function gh(b,d,e,f,g,h,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=i;i=i+64|0;L=N+40|0;K=N+32|0;x=N+24|0;w=N+16|0;u=N+8|0;t=N;v=N+48|0;M=N+44|0;c[M>>2]=h;z=c[f+28>>2]|0;J=f+24|0;y=c[d+((c[J>>2]|0)*52|0)+24>>2]|0;H=f+36|0;if((c[H>>2]|0)==0?(s=y+(z*136|0)+24|0,m=c[s>>2]|0,(m|0)!=0):0){r=f+32|0;p=0;q=y+(z*136|0)+28|0;while(1){d=c[r>>2]|0;n=c[q+20>>2]|0;if((c[q+8>>2]|0)!=(c[q>>2]|0)?(c[q+12>>2]|0)!=(c[q+4>>2]|0):0){kg(c[n+(d*40|0)+32>>2]|0);kg(c[n+(d*40|0)+36>>2]|0);m=_(c[n+(d*40|0)+20>>2]|0,c[n+(d*40|0)+16>>2]|0)|0;if(m){o=0;d=c[n+(d*40|0)+24>>2]|0;while(1){c[d+44>>2]=0;c[d+48>>2]=0;o=o+1|0;if((o|0)==(m|0))break;else d=d+56|0}}m=c[s>>2]|0}p=p+1|0;if(p>>>0>=m>>>0)break;else q=q+36|0}}do if(c[e>>2]&2){if(k>>>0<6){Ub(l,2,22072,t)|0;break}d=c[M>>2]|0;if((a[d>>0]|0)==-1?(a[d+1>>0]|0)==-111:0){c[M>>2]=d+6;break}Ub(l,2,22114,u)|0}while(0);G=wg()|0;if(!G){h=0;i=N;return h|0}do if(!(a[b+96>>0]&1))if(!(a[e+5636>>0]&2)){E=c[M>>2]|0;c[v>>2]=h+k-E;F=M;break}else{F=e+5168|0;E=c[F>>2]|0;v=e+5180|0;break}else{F=b+40|0;E=c[F>>2]|0;v=b+44|0}while(0);Ag(G,E,c[v>>2]|0);if(!(Cg(G,1)|0)){Eg(G)|0;m=yg(G)|0;d=E+m|0;xg(G);do if(c[e>>2]&4){if(((c[v>>2]|0)-d+(c[F>>2]|0)|0)>>>0<2){Ub(l,2,22135,w)|0;break}if((a[d>>0]|0)==-1?(a[E+(m+1)>>0]|0)==-110:0){d=E+(m+2)|0;break}Ub(l,2,22177,x)|0}while(0);c[v>>2]=(c[v>>2]|0)+((c[F>>2]|0)-d);c[F>>2]=d;c[g>>2]=0;c[j>>2]=(c[M>>2]|0)-h;h=1;i=N;return h|0}D=y+(z*136|0)+24|0;d=c[D>>2]|0;a:do if(d){B=f+32|0;C=e+5584|0;A=0;y=y+(z*136|0)+28|0;b:while(1){m=c[B>>2]|0;n=c[y+20>>2]|0;if(((c[y+8>>2]|0)!=(c[y>>2]|0)?(c[y+12>>2]|0)!=(c[y+4>>2]|0):0)?(I=_(c[n+(m*40|0)+20>>2]|0,c[n+(m*40|0)+16>>2]|0)|0,(I|0)!=0):0){b=n+(m*40|0)+32|0;f=n+(m*40|0)+36|0;w=y+28|0;x=0;k=c[n+(m*40|0)+24>>2]|0;while(1){m=k+44|0;if(!(c[m>>2]|0))d=pg(G,c[b>>2]|0,x,(c[H>>2]|0)+1|0)|0;else d=Cg(G,1)|0;c:do if(!d)c[k+40>>2]=0;else{if(!(c[m>>2]|0)){d=0;while(1)if(!(pg(G,c[f>>2]|0,x,d)|0))d=d+1|0;else break;c[k+24>>2]=1-d+(c[w>>2]|0);c[k+28>>2]=3}do if(Cg(G,1)|0)if(Cg(G,1)|0){d=Cg(G,2)|0;if((d|0)!=3){d=d+3|0;break}d=Cg(G,5)|0;if((d|0)==31){d=(Cg(G,7)|0)+37|0;break}else{d=d+6|0;break}}else d=2;else d=1;while(0);t=k+40|0;c[t>>2]=d;d=0;while(1)if(!(Cg(G,1)|0))break;else d=d+1|0;u=k+28|0;c[u>>2]=(c[u>>2]|0)+d;m=c[m>>2]|0;do if(!m){n=c[(c[C>>2]|0)+((c[J>>2]|0)*1080|0)+16>>2]|0;d=k+52|0;if(!(c[d>>2]|0)){c[d>>2]=10;o=k+4|0;m=Tc(c[o>>2]|0,320)|0;if(!m){m=d;n=o;d=o;o=66;break b}c[o>>2]=m}else m=c[k+4>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[m+24>>2]=0;c[m+28>>2]=0;if(n&4){c[m+20>>2]=1;m=0;break}m=m+20|0;if(!(n&1)){c[m>>2]=109;m=0;break}else{c[m>>2]=10;m=0;break}}else{q=m+-1|0;r=k+4|0;n=c[r>>2]|0;if((c[n+(q<<5)+8>>2]|0)!=(c[n+(q<<5)+20>>2]|0)){d=k+52|0;m=q;break}p=c[(c[C>>2]|0)+((c[J>>2]|0)*1080|0)+16>>2]|0;d=k+52|0;o=c[d>>2]|0;if((m+1|0)>>>0>o>>>0){z=o+10|0;c[d>>2]=z;n=Tc(n,z<<5)|0;if(!n){n=r;m=d;d=r;o=77;break b}c[r>>2]=n}z=n+(m<<5)|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(p&4){c[n+(m<<5)+20>>2]=1;break}if(!(p&1)){c[n+(m<<5)+20>>2]=109;break}else{z=c[n+(q<<5)+20>>2]|0;c[n+(m<<5)+20>>2]=(z|0)==1|(z|0)==10?2:1;break}}while(0);s=k+4|0;q=c[t>>2]|0;while(1){p=c[s>>2]|0;n=(c[p+(m<<5)+20>>2]|0)-(c[p+(m<<5)+8>>2]|0)|0;n=(n|0)<(q|0)?n:q;c[p+(m<<5)+24>>2]=n;p=c[u>>2]|0;if(n>>>0>1){o=0;while(1){o=o+1|0;if(n>>>0>3)n=n>>>1;else{n=o;break}}}else n=0;p=Cg(G,n+p|0)|0;n=c[s>>2]|0;c[n+(m<<5)+28>>2]=p;p=q-(c[n+(m<<5)+24>>2]|0)|0;if((p|0)<=0)break c;q=m+1|0;r=c[(c[C>>2]|0)+((c[J>>2]|0)*1080|0)+16>>2]|0;o=c[d>>2]|0;if((m+2|0)>>>0>o>>>0){z=o+10|0;c[d>>2]=z;n=Tc(n,z<<5)|0;if(!n){n=s;m=s;o=90;break b}c[s>>2]=n}z=n+(q<<5)|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;if(r&4){c[n+(q<<5)+20>>2]=1;m=q;q=p;continue}if(!(r&1)){c[n+(q<<5)+20>>2]=109;m=q;q=p;continue}else{z=c[n+(m<<5)+20>>2]|0;c[n+(q<<5)+20>>2]=(z|0)==1|(z|0)==10?2:1;m=q;q=p;continue}}}while(0);x=x+1|0;if(x>>>0>=I>>>0)break;else k=k+56|0}d=c[D>>2]|0}A=A+1|0;if(A>>>0>=d>>>0)break a;else y=y+36|0}if((o|0)==66){Uc(c[d>>2]|0);c[n>>2]=0;c[m>>2]=0;xg(G);h=0;i=N;return h|0}else if((o|0)==77){Uc(c[d>>2]|0);c[n>>2]=0;c[m>>2]=0;xg(G);h=0;i=N;return h|0}else if((o|0)==90){Uc(c[m>>2]|0);c[n>>2]=0;c[d>>2]=0;xg(G);h=0;i=N;return h|0}}while(0);if(!(Eg(G)|0)){xg(G);h=0;i=N;return h|0}m=yg(G)|0;d=E+m|0;xg(G);do if(c[e>>2]&4){if(((c[v>>2]|0)-d+(c[F>>2]|0)|0)>>>0<2){Ub(l,2,22135,K)|0;break}if((a[d>>0]|0)==-1?(a[E+(m+1)>>0]|0)==-110:0){d=E+(m+2)|0;break}Ub(l,2,22177,L)|0}while(0);c[v>>2]=(c[v>>2]|0)+((c[F>>2]|0)-d);c[F>>2]=d;c[g>>2]=1;c[j>>2]=(c[M>>2]|0)-h;h=1;i=N;return h|0}function hh(){return Pc(104)|0}function ih(a){a=a|0;if(!a)return;Uc(a);return}function jh(a){a=a|0;return (c[a+12>>2]|0)-(c[a+16>>2]|0)|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0;c[b+100>>2]=b+24;c[b+4>>2]=32768;c[b>>2]=0;f=d+-1|0;c[b+12>>2]=f;e=b+8|0;c[e>>2]=12;c[e>>2]=(a[f>>0]|0)==-1?13:12;c[b+16>>2]=d;return}function lh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=c[b+100>>2]|0;h=c[g>>2]|0;j=(c[h+4>>2]|0)==(d|0);f=c[h>>2]|0;k=b+4|0;d=(c[k>>2]|0)-f|0;c[k>>2]=d;if(!j){if(d>>>0>>0){j=(c[b>>2]|0)+f|0;c[b>>2]=j;f=d;d=j;j=b}else{c[k>>2]=f;d=c[b>>2]|0;j=b}c[g>>2]=c[h+12>>2];i=b+8|0;h=b+12|0;g=d;d=c[i>>2]|0;while(1){f=f<<1;c[k>>2]=f;e=g<<1;c[j>>2]=e;d=d+-1|0;c[i>>2]=d;if(!d){d=c[h>>2]|0;f=a[d>>0]|0;do if(f<<24>>24!=-1){if(!(e&134217728)){e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>18;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}a[d>>0]=f+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){b=c[j>>2]&134217727;c[j>>2]=b;e=d+1|0;c[h>>2]=e;a[e>>0]=b>>>20;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7;break}else{e=d+1|0;c[h>>2]=e;a[e>>0]=(c[j>>2]|0)>>>19;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}}else{e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>19;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7}while(0);f=c[k>>2]|0}if(!(f&32768))g=e;else break}return}if(d&32768){c[b>>2]=(c[b>>2]|0)+f;return}if(d>>>0>>0){c[k>>2]=f;e=c[b>>2]|0;j=b}else{e=(c[b>>2]|0)+f|0;c[b>>2]=e;f=d;j=b}c[g>>2]=c[h+8>>2];i=b+8|0;h=b+12|0;g=e;d=c[i>>2]|0;while(1){f=f<<1;c[k>>2]=f;e=g<<1;c[j>>2]=e;d=d+-1|0;c[i>>2]=d;if(!d){d=c[h>>2]|0;f=a[d>>0]|0;do if(f<<24>>24!=-1){if(!(e&134217728)){e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>18;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}a[d>>0]=f+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){b=c[j>>2]&134217727;c[j>>2]=b;e=d+1|0;c[h>>2]=e;a[e>>0]=b>>>20;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7;break}else{e=d+1|0;c[h>>2]=e;a[e>>0]=(c[j>>2]|0)>>>19;e=c[j>>2]&524287;c[j>>2]=e;c[i>>2]=8;d=8;break}}else{e=d+1|0;c[h>>2]=e;a[e>>0]=g>>>19;e=c[j>>2]&1048575;c[j>>2]=e;c[i>>2]=7;d=7}while(0);f=c[k>>2]|0}if(!(f&32768))g=e;else break}return}function mh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=c[b>>2]|0;f=h|65535;g=b+8|0;f=(f>>>0<((c[b+4>>2]|0)+h|0)>>>0?f:f+-32768|0)<>2];c[b>>2]=f;h=b+12|0;d=c[h>>2]|0;e=a[d>>0]|0;do if(e<<24>>24!=-1){if(!(f&134217728)){d=d+1|0;c[h>>2]=d;a[d>>0]=f>>>19;d=c[b>>2]&524287;c[b>>2]=d;c[g>>2]=8;e=8;break}a[d>>0]=e+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){e=c[b>>2]&134217727;c[b>>2]=e;d=d+1|0;c[h>>2]=d;a[d>>0]=e>>>20;d=c[b>>2]&1048575;c[b>>2]=d;c[g>>2]=7;e=7;break}else{d=d+1|0;c[h>>2]=d;a[d>>0]=(c[b>>2]|0)>>>19;d=c[b>>2]&524287;c[b>>2]=d;c[g>>2]=8;e=8;break}}else{d=d+1|0;c[h>>2]=d;a[d>>0]=f>>>20;d=c[b>>2]&1048575;c[b>>2]=d;c[g>>2]=7;e=7}while(0);d=d<>2]=d;e=c[h>>2]|0;f=a[e>>0]|0;do if(f<<24>>24!=-1){if(!(d&134217728)){f=e+1|0;c[h>>2]=f;a[f>>0]=d>>>19;c[b>>2]=c[b>>2]&524287;c[g>>2]=8;break}a[e>>0]=f+1<<24>>24;d=c[h>>2]|0;if((a[d>>0]|0)==-1){e=c[b>>2]&134217727;c[b>>2]=e;f=d+1|0;c[h>>2]=f;a[f>>0]=e>>>20;c[b>>2]=c[b>>2]&1048575;c[g>>2]=7;break}else{f=d+1|0;c[h>>2]=f;a[f>>0]=(c[b>>2]|0)>>>19;c[b>>2]=c[b>>2]&524287;c[g>>2]=8;break}}else{f=e+1|0;c[h>>2]=f;a[f>>0]=d>>>20;c[b>>2]=c[b>>2]&1048575;c[g>>2]=7}while(0);d=c[h>>2]|0;if((a[d>>0]|0)==-1)return;c[h>>2]=d+1;return}function nh(a){a=a|0;c[a>>2]=0;c[a+8>>2]=8;return}function oh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+8|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;d=(d<>2]|0)|0;c[b>>2]=d;if(f)return;f=b+12|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;a[g>>0]=d;c[e>>2]=8;c[e>>2]=(a[c[f>>2]>>0]|0)==-1?7:8;c[b>>2]=0;return}function ph(a){a=a|0;c[a+28>>2]=1156;c[a+32>>2]=1156;c[a+36>>2]=1156;c[a+40>>2]=1156;c[a+44>>2]=1156;c[a+48>>2]=1156;c[a+52>>2]=1156;c[a+56>>2]=1156;c[a+60>>2]=1156;c[a+64>>2]=1156;c[a+68>>2]=1156;c[a+72>>2]=1156;c[a+76>>2]=1156;c[a+80>>2]=1156;c[a+84>>2]=1156;c[a+88>>2]=1156;c[a+96>>2]=2628;c[a+92>>2]=1252;c[a+24>>2]=1284;return}function qh(a){a=a|0;c[a+24>>2]=1156;c[a+28>>2]=1156;c[a+32>>2]=1156;c[a+36>>2]=1156;c[a+40>>2]=1156;c[a+44>>2]=1156;c[a+48>>2]=1156;c[a+52>>2]=1156;c[a+56>>2]=1156;c[a+60>>2]=1156;c[a+64>>2]=1156;c[a+68>>2]=1156;c[a+72>>2]=1156;c[a+76>>2]=1156;c[a+80>>2]=1156;c[a+84>>2]=1156;c[a+88>>2]=1156;c[a+92>>2]=1156;c[a+96>>2]=1156;return}function rh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a+24+(b<<2)>>2]=1156+((e<<1)+d<<4);return}function sh(b){b=b|0;var d=0,e=0;c[b+100>>2]=b+24;c[b+4>>2]=32768;c[b>>2]=0;d=b+8|0;c[d>>2]=12;e=b+12|0;b=(c[e>>2]|0)+-1|0;c[e>>2]=b;if((a[b>>0]|0)!=-1)return;c[d>>2]=13;return}function th(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=b+8|0;d=c[i>>2]|0;f=12-d|0;if((f|0)>0){g=b+12|0;e=c[b>>2]|0;do{d=e<>2]=d;c[i>>2]=0;e=c[g>>2]|0;h=a[e>>0]|0;do if(h<<24>>24!=-1){if(!(d&134217728)){e=e+1|0;c[g>>2]=e;a[e>>0]=d>>>19;e=c[b>>2]&524287;c[b>>2]=e;c[i>>2]=8;d=8;break}a[e>>0]=h+1<<24>>24;d=c[g>>2]|0;if((a[d>>0]|0)==-1){h=c[b>>2]&134217727;c[b>>2]=h;e=d+1|0;c[g>>2]=e;a[e>>0]=h>>>20;e=c[b>>2]&1048575;c[b>>2]=e;c[i>>2]=7;d=7;break}else{e=d+1|0;c[g>>2]=e;a[e>>0]=(c[b>>2]|0)>>>19;e=c[b>>2]&524287;c[b>>2]=e;c[i>>2]=8;d=8;break}}else{e=e+1|0;c[g>>2]=e;a[e>>0]=d>>>20;e=c[b>>2]&1048575;c[b>>2]=e;c[i>>2]=7;d=7}while(0);f=f-d|0}while((f|0)>0)}else g=b+12|0;d=c[g>>2]|0;e=a[d>>0]|0;if(e<<24>>24==-1)return;f=c[b>>2]|0;if(!(f&134217728)){h=d+1|0;c[g>>2]=h;a[h>>0]=f>>>19;c[b>>2]=c[b>>2]&524287;c[i>>2]=8;return}a[d>>0]=e+1<<24>>24;d=c[g>>2]|0;if((a[d>>0]|0)==-1){f=c[b>>2]&134217727;c[b>>2]=f;h=d+1|0;c[g>>2]=h;a[h>>0]=f>>>20;c[b>>2]=c[b>>2]&1048575;c[i>>2]=7;return}else{h=d+1|0;c[g>>2]=h;a[h>>0]=(c[b>>2]|0)>>>19;c[b>>2]=c[b>>2]&524287;c[i>>2]=8;return}}function uh(a){a=a|0;c[a+100>>2]=a+96;lh(a,1);lh(a,0);lh(a,1);lh(a,0);return}function vh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;c[b+100>>2]=b+24;c[b+16>>2]=e;c[b+20>>2]=e+f;h=b+12|0;c[h>>2]=e;do if(f){i=d[e>>0]<<16;c[b>>2]=i;g=e+1|0;if((f|0)==1)f=255;else f=d[g>>0]|0;if((a[e>>0]|0)!=-1){c[h>>2]=g;g=i|f<<8;c[b>>2]=g;f=b+8|0;c[f>>2]=8;h=b;i=1;break}if(f>>>0>143){g=i|65280;c[b>>2]=g;f=b+8|0;c[f>>2]=8;h=b;i=1;break}else{c[h>>2]=g;g=i+(f<<9)|0;c[b>>2]=g;f=b+8|0;c[f>>2]=7;h=b;i=0;break}}else{c[b>>2]=16776960;f=b+8|0;c[f>>2]=8;g=16776960;h=b;i=1}while(0);c[h>>2]=g<<7;c[f>>2]=i;c[b+4>>2]=32768;return 1}function wh(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=c[b+100>>2]|0;g=c[f>>2]|0;j=c[g>>2]|0;n=b+4|0;i=(c[n>>2]|0)-j|0;c[n>>2]=i;h=c[b>>2]|0;if(h>>>16>>>0>>0){c[n>>2]=j;e=c[g+4>>2]|0;if(i>>>0>>0)c[f>>2]=c[g+8>>2];else{c[f>>2]=c[g+12>>2];e=1-e|0}k=b+8|0;l=b+12|0;m=b+20|0;g=c[k>>2]|0;f=h;do{do if(!g){h=c[l>>2]|0;g=c[m>>2]|0;if((h|0)==(g|0)){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}i=h+1|0;if((i|0)==(g|0))g=255;else g=d[i>>0]|0;if((a[h>>0]|0)!=-1){c[l>>2]=i;f=f+(g<<8)|0;c[b>>2]=f;c[k>>2]=8;g=8;break}if(g>>>0>143){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}else{c[l>>2]=i;f=f+(g<<9)|0;c[b>>2]=f;c[k>>2]=7;g=7;break}}while(0);j=j<<1;c[n>>2]=j;f=f<<1;c[b>>2]=f;g=g+-1|0;c[k>>2]=g}while(j>>>0<32768);return e|0}h=h-(j<<16)|0;c[b>>2]=h;if(i&32768){b=c[g+4>>2]|0;return b|0}e=c[g+4>>2]|0;if(j>>>0>i>>>0){c[f>>2]=c[g+12>>2];e=1-e|0}else c[f>>2]=c[g+8>>2];k=b+8|0;l=b+12|0;m=b+20|0;g=c[k>>2]|0;f=h;j=i;do{do if(!g){h=c[l>>2]|0;g=c[m>>2]|0;if((h|0)==(g|0)){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}i=h+1|0;if((i|0)==(g|0))g=255;else g=d[i>>0]|0;if((a[h>>0]|0)!=-1){c[l>>2]=i;f=f+(g<<8)|0;c[b>>2]=f;c[k>>2]=8;g=8;break}if(g>>>0>143){f=f+65280|0;c[b>>2]=f;c[k>>2]=8;g=8;break}else{c[l>>2]=i;f=f+(g<<9)|0;c[b>>2]=f;c[k>>2]=7;g=7;break}}while(0);j=j<<1;c[n>>2]=j;f=f<<1;c[b>>2]=f;g=g+-1|0;c[k>>2]=g}while(j>>>0<32768);return e|0}function xh(){return Pc(28)|0}function yh(a){a=a|0;if(!a)return;Uc(a);return}function zh(b,d,e){b=b|0;d=d|0;e=e|0;c[b+20>>2]=d;c[b+8>>2]=e;c[b+12>>2]=0;a[b>>0]=0;c[b+4>>2]=0;return}function Ah(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=b+4|0;d=c[g>>2]|0;do if(!d){c[g>>2]=8;e=b+12|0;f=c[e>>2]|0;if((f|0)==(c[b+8>>2]|0)){a[b>>0]=-1;d=8;e=-1;break}if((a[b>>0]|0)==-1){c[g>>2]=7;d=7}else d=8;h=a[(c[b+20>>2]|0)+f>>0]|0;a[b>>0]=h;c[e>>2]=f+1;e=h}else e=a[b>>0]|0;while(0);h=d+-1|0;c[g>>2]=h;return (e&255)>>>h&1|0}function Bh(){var a=0;if(!(c[665]|0))a=2712;else a=c[(Ca()|0)+60>>2]|0;return a|0}function Ch(b){b=b|0;var c=0,e=0;c=0;while(1){if((d[22198+c>>0]|0)==(b|0)){e=2;break}c=c+1|0;if((c|0)==87){c=87;b=22286;e=5;break}}if((e|0)==2)if(!c)b=22286;else{b=22286;e=5}if((e|0)==5)while(1){e=b;while(1){b=e+1|0;if(!(a[e>>0]|0))break;else e=b}c=c+-1|0;if(!c)break;else e=5}return b|0}function Dh(a){a=a|0;if(a>>>0>4294963200){c[(Bh()|0)>>2]=0-a;a=-1}return a|0}function Eh(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[k>>3]=a;d=c[k>>2]|0;e=c[k+4>>2]|0;f=Ti(d|0,e|0,52)|0;f=f&2047;switch(f|0){case 0:{if(a!=0.0){a=+Eh(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=f+-1022;c[k>>2]=d;c[k+4>>2]=e&-2146435073|1071644672;a=+h[k>>3]}}return +a}function Fh(a,b){a=+a;b=b|0;return +(+Eh(a,b))}function Gh(a,b){a=+a;b=b|0;return +(+Jh(a,b))}function Hh(a){a=+a;return ~~+Ih(a)|0}function Ih(a){a=+a;var b=0;b=(g[k>>2]=a,c[k>>2]|0);if((b&2130706432)>>>0<=1249902592){b=(b|0)<0;a=b?a+-8388608.0+8388608.0:a+8388608.0+-8388608.0;if(a==0.0)a=b?-0.0:0.0}return +a}function Jh(a,b){a=+a;b=b|0;var d=0;if((b|0)>1023){a=a*8988465674311579538646525.0e283;d=b+-1023|0;if((d|0)>1023){d=b+-2046|0;d=(d|0)>1023?1023:d;a=a*8988465674311579538646525.0e283}}else if((b|0)<-1022){a=a*2.2250738585072014e-308;d=b+1022|0;if((d|0)<-1022){d=b+2044|0;d=(d|0)<-1022?-1022:d;a=a*2.2250738585072014e-308}}else d=b;d=Ri(d+1023|0,0,52)|0;b=C;c[k>>2]=d;c[k+4>>2]=b;return +(a*+h[k>>3])}function Kh(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(Bh()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function Lh(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Kh(a,b,0)|0;return a|0}function Mh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;o=i;i=i+112|0;n=o+40|0;l=o+24|0;k=o+16|0;g=o;m=o+52|0;f=a[d>>0]|0;if(ri(24090,f<<24>>24,4)|0){e=Fi(1144)|0;if(!e)e=0;else{h=e;j=h+112|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));if(!(ti(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(ti(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;ra(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[k>>2]=b;c[k+4>>2]=3;f=ra(221,k|0)|0;if(!(f&1024)){c[l>>2]=b;c[l+4>>2]=4;c[l+8>>2]=f|1024;ra(221,l|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+120;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21505,c[n+8>>2]=m,(Fa(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=60;c[e+36>>2]=61;c[e+40>>2]=3;c[e+12>>2]=1;if(!(c[666]|0))c[e+76>>2]=-1;Ia(2688);f=c[671]|0;c[e+56>>2]=f;if(f)c[f+52>>2]=e;c[671]=e;Ga(2688)}}else{c[(Bh()|0)>>2]=22;e=0}i=o;return e|0}function Nh(b){b=b|0;var c=0,d=0,e=0;d=(ti(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(ti(b,120)|0)==0;d=e?d:d|128;b=(ti(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function Oh(a){a=a|0;return 0}function Ph(a){a=a|0;return}function Qh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;m=i;i=i+16|0;l=m;k=e&255;a[l>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(Xh(b)|0)){h=c[g>>2]|0;j=4}else f=-1;else j=4;do if((j|0)==4){g=b+20|0;j=c[g>>2]|0;if(j>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[g>>2]=j+1;a[j>>0]=k;break}if((Ra[c[b+36>>2]&63](b,l,1)|0)==1)f=d[l>>0]|0;else f=-1}while(0);i=m;return f|0}function Rh(a){a=a|0;var b=0,d=0;b=i;i=i+16|0;d=b;c[d>>2]=c[a+60>>2];a=Dh(Ja(6,d|0)|0)|0;i=b;return a|0}function Sh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;m=i;i=i+48|0;h=m+16|0;g=m;f=m+32|0;c[f>>2]=d;j=f+4|0;l=b+48|0;n=c[l>>2]|0;c[j>>2]=e-((n|0)!=0&1);k=b+44|0;c[f+8>>2]=c[k>>2];c[f+12>>2]=n;if(!(c[665]|0)){c[h>>2]=c[b+60>>2];c[h+4>>2]=f;c[h+8>>2]=2;f=Dh(Na(145,h|0)|0)|0}else{ua(5,b|0);c[g>>2]=c[b+60>>2];c[g+4>>2]=f;c[g+8>>2]=2;f=Dh(Na(145,g|0)|0)|0;qa(0)}if((f|0)>=1){j=c[j>>2]|0;if(f>>>0>j>>>0){h=c[k>>2]|0;g=b+4|0;c[g>>2]=h;c[b+8>>2]=h+(f-j);if(!(c[l>>2]|0))f=e;else{c[g>>2]=h+1;a[d+(e+-1)>>0]=a[h>>0]|0;f=e}}}else{c[b>>2]=c[b>>2]|f&48^16;c[b+8>>2]=0;c[b+4>>2]=0}i=m;return f|0}function Th(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=i;i=i+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Dh(Ma(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;i=f;return a|0}function Uh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;i=i+48|0;n=q+16|0;m=q;e=q+32|0;o=a+28|0;f=c[o>>2]|0;c[e>>2]=f;p=a+20|0;f=(c[p>>2]|0)-f|0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=d;k=a+60|0;l=a+44|0;b=2;f=f+d|0;while(1){if(!(c[665]|0)){c[n>>2]=c[k>>2];c[n+4>>2]=e;c[n+8>>2]=b;h=Dh(Oa(146,n|0)|0)|0}else{ua(6,a|0);c[m>>2]=c[k>>2];c[m+4>>2]=e;c[m+8>>2]=b;h=Dh(Oa(146,m|0)|0)|0;qa(0)}if((f|0)==(h|0)){f=6;break}if((h|0)<0){f=8;break}f=f-h|0;g=c[e+4>>2]|0;if(h>>>0<=g>>>0)if((b|0)==2){c[o>>2]=(c[o>>2]|0)+h;j=g;b=2}else j=g;else{j=c[l>>2]|0;c[o>>2]=j;c[p>>2]=j;j=c[e+12>>2]|0;h=h-g|0;e=e+8|0;b=b+-1|0}c[e>>2]=(c[e>>2]|0)+h;c[e+4>>2]=j-h}if((f|0)==6){n=c[l>>2]|0;c[a+16>>2]=n+(c[a+48>>2]|0);a=n;c[o>>2]=a;c[p>>2]=a}else if((f|0)==8){c[a+16>>2]=0;c[o>>2]=0;c[p>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}i=q;return d|0}function Vh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+80|0;f=g;c[b+36>>2]=61;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21505,c[f+8>>2]=g+12,(Fa(54,f|0)|0)!=0):0)a[b+75>>0]=-1;f=Uh(b,d,e)|0;i=g;return f|0}function Wh(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+44|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Ra[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(d&20)if(!(d&4))d=-1;else{c[b>>2]=d|32;d=-1}else{d=c[e>>2]|0;c[b+8>>2]=d;c[b+4>>2]=d;d=0}return d|0}function Xh(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function Yh(a){a=a|0;var b=0,d=0,e=0;e=(c[a>>2]&1|0)!=0;if(!e){Ia(2688);d=c[a+52>>2]|0;b=a+56|0;if(d)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b)c[b+52>>2]=d;if((c[671]|0)==(a|0))c[671]=b;Ga(2688)}b=Zh(a)|0;b=Wa[c[a+12>>2]&15](a)|0|b;d=c[a+92>>2]|0;if(d)Gi(d);if(!e)Gi(a);return b|0}function Zh(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=zi(a)|0;break}d=(Oh(a)|0)==0;b=zi(a)|0;if(!d)Ph(a)}else{if(!(c[677]|0))b=0;else b=Zh(c[677]|0)|0;Ia(2688);a=c[671]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=Oh(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=zi(a)|0|b;if(d)Ph(a);a=c[a+56>>2]|0}while((a|0)!=0);Ga(2688)}while(0);return b|0}function _h(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;i=i+32|0;f=g+16|0;e=g;if(ri(24090,a[d>>0]|0,4)|0){h=Nh(d)|0|32768;c[e>>2]=b;c[e+4>>2]=h;c[e+8>>2]=438;e=Dh(Ka(5,e|0)|0)|0;if((e|0)>=0){b=Mh(e,d)|0;if(!b){c[f>>2]=e;Ja(6,f|0)|0;b=0}}else b=0}else{c[(Bh()|0)>>2]=22;b=0}i=g;return b|0}function $h(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=oi(a,b,f)|0;i=e;return d|0}function ai(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((c[d+76>>2]|0)>=0?(Oh(d)|0)!=0:0){if((a[d+75>>0]|0)!=(b|0)?(f=d+20|0,g=c[f>>2]|0,g>>>0<(c[d+16>>2]|0)>>>0):0){c[f>>2]=g+1;a[g>>0]=b;e=b&255}else e=Qh(d,b)|0;Ph(d)}else i=3;do if((i|0)==3){if((a[d+75>>0]|0)!=(b|0)?(h=d+20|0,e=c[h>>2]|0,e>>>0<(c[d+16>>2]|0)>>>0):0){c[h>>2]=e+1;a[e>>0]=b;e=b&255;break}e=Qh(d,b)|0}while(0);return e|0}function bi(a,b){a=a|0;b=b|0;return (ki(a,wi(a)|0,1,b)|0)+-1|0}function ci(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;j=_(e,d)|0;if((c[f+76>>2]|0)>-1)k=Oh(f)|0;else k=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;i=(c[f+8>>2]|0)-h|0;if((i|0)>0){i=i>>>0>>0?i:j;Ui(b|0,h|0,i|0)|0;c[g>>2]=h+i;b=b+i|0;g=j-i|0}else g=j;a:do if(!g)l=13;else{i=f+32|0;h=g;while(1){if(Wh(f)|0){e=h;break}g=Ra[c[i>>2]&63](f,b,h)|0;if((g+1|0)>>>0<2){e=h;break}if((h|0)==(g|0)){l=13;break a}else{b=b+g|0;h=h-g|0}}if(k)Ph(f);e=((j-e|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(k)Ph(f);return e|0}function di(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;f=a+20|0;e=a+28|0;if((c[f>>2]|0)>>>0>(c[e>>2]|0)>>>0?(Ra[c[a+36>>2]&63](a,0,0)|0,(c[f>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[e>>2]=0;c[f>>2]=0;if((Ra[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(Oh(a)|0)==0;b=di(a,b,d)|0;if(!e)Ph(a)}else b=di(a,b,d)|0;return b|0}function fi(a,b,c){a=a|0;b=b|0;c=c|0;return ei(a,b,c)|0}function gi(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Ra[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function hi(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(Oh(a)|0)==0;a=gi(a)|0}else a=gi(a)|0;return a|0}function ii(a){a=a|0;return hi(a)|0}function ji(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(Xh(e)|0)){g=c[f>>2]|0;h=4}else f=0;else h=4;a:do if((h|0)==4){i=e+20|0;h=c[i>>2]|0;if((g-h|0)>>>0>>0){f=Ra[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){f=d;while(1){if(!f){g=h;f=0;break b}g=f+-1|0;if((a[b+g>>0]|0)==10)break;else f=g}if((Ra[c[e+36>>2]&63](e,b,f)|0)>>>0>>0)break a;d=d-f|0;b=b+f|0;g=c[i>>2]|0}else{g=h;f=0}while(0);Ui(g|0,b|0,d|0)|0;c[i>>2]=(c[i>>2]|0)+d;f=f+d|0}while(0);return f|0}function ki(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=_(d,b)|0;if((c[e+76>>2]|0)>-1){g=(Oh(e)|0)==0;a=ji(a,f,e)|0;if(!g)Ph(e)}else a=ji(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function li(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d;c[e>>2]=b;b=oi(c[676]|0,a,e)|0;i=d;return b|0}function mi(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[676]|0;if((c[f+76>>2]|0)>-1)g=Oh(f)|0;else g=0;do if((bi(b,f)|0)<0)d=1;else{if((a[f+75>>0]|0)!=10?(d=f+20|0,e=c[d>>2]|0,e>>>0<(c[f+16>>2]|0)>>>0):0){c[d>>2]=e+1;a[e>>0]=10;d=0;break}d=(Qh(f,10)|0)<0}while(0);if(g)Ph(f);return d<<31>>31|0}function ni(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=d;d=qi(a,b,f)|0;i=e;return d|0}function oi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=i;i=i+224|0;o=s+80|0;r=s+96|0;q=s;p=s+136|0;f=r;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[o>>2]=c[e>>2];if((Ai(0,d,o,q,r)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)m=Oh(b)|0;else m=0;e=c[b>>2]|0;n=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=p;j=b+28|0;c[j>>2]=p;k=b+20|0;c[k>>2]=p;c[e>>2]=80;l=b+16|0;c[l>>2]=p+80;f=Ai(b,d,o,q,r)|0;if(h){Ra[c[b+36>>2]&63](b,0,0)|0;f=(c[k>>2]|0)==0?-1:f;c[g>>2]=h;c[e>>2]=0;c[l>>2]=0;c[j>>2]=0;c[k>>2]=0}}else f=Ai(b,d,o,q,r)|0;e=c[b>>2]|0;c[b>>2]=e|n;if(m)Ph(b);e=(e&32|0)==0?f:-1}i=s;return e|0}function pi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;i=i+128|0;g=n+112|0;m=n;h=m;j=2716;k=h+112|0;do{c[h>>2]=c[j>>2];h=h+4|0;j=j+4|0}while((h|0)<(k|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;l=4}else{c[(Bh()|0)>>2]=75;d=-1}else{g=b;l=4}if((l|0)==4){l=-2-g|0;l=d>>>0>l>>>0?l:d;c[m+48>>2]=l;b=m+20|0;c[b>>2]=g;c[m+44>>2]=g;d=g+l|0;g=m+16|0;c[g>>2]=d;c[m+28>>2]=d;d=oi(m,e,f)|0;if(l){e=c[b>>2]|0;a[e+(((e|0)==(c[g>>2]|0))<<31>>31)>>0]=0}}i=n;return d|0}function qi(a,b,c){a=a|0;b=b|0;c=c|0;return pi(a,2147483647,b,c)|0}function ri(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=_(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return ((e|0)!=0?b:0)|0}function si(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009)break;else f=b}}f=8}else f=8;while(0);if((f|0)==8){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function ti(b,c){b=b|0;c=c|0;b=ui(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function ui(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(wi(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=_(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009)break b;b=b+4|0;e=c[b>>2]|0}while(((e&-2139062144^-2139062144)&e+-16843009|0)==0);while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function vi(a,b){a=a|0;b=b|0;si(a,b)|0;return a|0}function wi(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=b;b=f;while(1){if(!(a[d>>0]|0))break a;d=d+1|0;b=d;if(!(b&3)){b=d;e=4;break}}}while(0);if((e|0)==4){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function xi(a){a=a|0;if(!(c[a+68>>2]|0))Ph(a);return}function yi(a){a=a|0;if(!(c[a+68>>2]|0))Ph(a);return}function zi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;g=a+28|0;if((c[b>>2]|0)>>>0>(c[g>>2]|0)>>>0?(Ra[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)b=-1;else{h=a+4|0;d=c[h>>2]|0;e=a+8|0;f=c[e>>2]|0;if(d>>>0>>0)Ra[c[a+40>>2]&63](a,d-f|0,1)|0;c[a+16>>2]=0;c[g>>2]=0;c[b>>2]=0;c[e>>2]=0;c[h>>2]=0;b=0}return b|0}\nfunction Ai(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;ha=i;i=i+624|0;ca=ha+24|0;ea=ha+16|0;da=ha+588|0;Y=ha+576|0;ba=ha;V=ha+536|0;ga=ha+8|0;fa=ha+528|0;M=(e|0)!=0;N=V+40|0;U=N;V=V+39|0;W=ga+4|0;X=Y+12|0;Y=Y+11|0;Z=da;$=X;aa=$-Z|0;O=-2-Z|0;P=$+2|0;Q=ca+288|0;R=da+9|0;S=R;T=da+8|0;m=0;w=f;n=0;f=0;a:while(1){do if((m|0)>-1)if((n|0)>(2147483647-m|0)){c[(Bh()|0)>>2]=75;m=-1;break}else{m=n+m|0;break}while(0);n=a[w>>0]|0;if(!(n<<24>>24)){L=245;break}else o=w;b:while(1){switch(n<<24>>24){case 37:{n=o;L=9;break b}case 0:{n=o;break b}default:{}}K=o+1|0;n=a[K>>0]|0;o=K}c:do if((L|0)==9)while(1){L=0;if((a[n+1>>0]|0)!=37)break c;o=o+1|0;n=n+2|0;if((a[n>>0]|0)==37)L=9;else break}while(0);y=o-w|0;if(M?(c[e>>2]&32|0)==0:0)ji(w,y,e)|0;if((o|0)!=(w|0)){w=n;n=y;continue}r=n+1|0;o=a[r>>0]|0;p=(o<<24>>24)+-48|0;if(p>>>0<10){K=(a[n+2>>0]|0)==36;r=K?n+3|0:r;o=a[r>>0]|0;u=K?p:-1;f=K?1:f}else u=-1;n=o<<24>>24;d:do if((n&-32|0)==32){p=0;while(1){if(!(1<>24)+-32|p;r=r+1|0;o=a[r>>0]|0;n=o<<24>>24;if((n&-32|0)!=32){s=p;n=r;break}}}else{s=0;n=r}while(0);do if(o<<24>>24==42){p=n+1|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+2>>0]|0)==36:0){c[l+(o<<2)>>2]=10;f=1;n=n+3|0;o=c[j+((a[p>>0]|0)+-48<<3)>>2]|0}else{if(f){m=-1;break a}if(!M){x=s;n=p;f=0;K=0;break}f=(c[g>>2]|0)+(4-1)&~(4-1);o=c[f>>2]|0;c[g>>2]=f+4;f=0;n=p}if((o|0)<0){x=s|8192;K=0-o|0}else{x=s;K=o}}else{p=(o<<24>>24)+-48|0;if(p>>>0<10){o=0;do{o=(o*10|0)+p|0;n=n+1|0;p=(a[n>>0]|0)+-48|0}while(p>>>0<10);if((o|0)<0){m=-1;break a}else{x=s;K=o}}else{x=s;K=0}}while(0);e:do if((a[n>>0]|0)==46){p=n+1|0;o=a[p>>0]|0;if(o<<24>>24!=42){r=(o<<24>>24)+-48|0;if(r>>>0<10){n=p;o=0}else{n=p;r=0;break}while(1){o=(o*10|0)+r|0;n=n+1|0;r=(a[n>>0]|0)+-48|0;if(r>>>0>=10){r=o;break e}}}p=n+2|0;o=(a[p>>0]|0)+-48|0;if(o>>>0<10?(a[n+3>>0]|0)==36:0){c[l+(o<<2)>>2]=10;n=n+4|0;r=c[j+((a[p>>0]|0)+-48<<3)>>2]|0;break}if(f){m=-1;break a}if(M){n=(c[g>>2]|0)+(4-1)&~(4-1);r=c[n>>2]|0;c[g>>2]=n+4;n=p}else{n=p;r=0}}else r=-1;while(0);t=0;while(1){o=(a[n>>0]|0)+-65|0;if(o>>>0>57){m=-1;break a}p=n+1|0;o=a[25126+(t*58|0)+o>>0]|0;s=o&255;if((s+-1|0)>>>0<8){n=p;t=s}else{J=p;break}}if(!(o<<24>>24)){m=-1;break}p=(u|0)>-1;do if(o<<24>>24==19)if(p){m=-1;break a}else L=52;else{if(p){c[l+(u<<2)>>2]=s;H=j+(u<<3)|0;I=c[H+4>>2]|0;L=ba;c[L>>2]=c[H>>2];c[L+4>>2]=I;L=52;break}if(!M){m=0;break a}Ci(ba,s,g)}while(0);if((L|0)==52?(L=0,!M):0){w=J;n=y;continue}u=a[n>>0]|0;u=(t|0)!=0&(u&15|0)==3?u&-33:u;p=x&-65537;I=(x&8192|0)==0?x:p;f:do switch(u|0){case 110:switch(t|0){case 0:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 1:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 2:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}case 3:{b[c[ba>>2]>>1]=m;w=J;n=y;continue a}case 4:{a[c[ba>>2]>>0]=m;w=J;n=y;continue a}case 6:{c[c[ba>>2]>>2]=m;w=J;n=y;continue a}case 7:{w=c[ba>>2]|0;c[w>>2]=m;c[w+4>>2]=((m|0)<0)<<31>>31;w=J;n=y;continue a}default:{w=J;n=y;continue a}}case 112:{t=I|8;r=r>>>0>8?r:8;u=120;L=64;break}case 88:case 120:{t=I;L=64;break}case 111:{p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;if((o|0)==0&(p|0)==0)n=N;else{n=N;do{n=n+-1|0;a[n>>0]=o&7|48;o=Ti(o|0,p|0,3)|0;p=C}while(!((o|0)==0&(p|0)==0))}if(!(I&8)){o=I;t=0;s=25606;L=77}else{t=U-n+1|0;o=I;r=(r|0)<(t|0)?t:r;t=0;s=25606;L=77}break}case 105:case 100:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)<0){n=Oi(0,0,n|0,o|0)|0;o=C;p=ba;c[p>>2]=n;c[p+4>>2]=o;p=1;s=25606;L=76;break f}if(!(I&2048)){s=I&1;p=s;s=(s|0)==0?25606:25608;L=76}else{p=1;s=25607;L=76}break}case 117:{o=ba;n=c[o>>2]|0;o=c[o+4>>2]|0;p=0;s=25606;L=76;break}case 99:{a[V>>0]=c[ba>>2];w=V;o=1;t=0;u=25606;n=N;break}case 109:{n=Ch(c[(Bh()|0)>>2]|0)|0;L=82;break}case 115:{n=c[ba>>2]|0;n=(n|0)!=0?n:25616;L=82;break}case 67:{c[ga>>2]=c[ba>>2];c[W>>2]=0;c[ba>>2]=ga;r=-1;L=86;break}case 83:{if(!r){Ei(e,32,K,0,I);n=0;L=98}else L=86;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=+h[ba>>3];c[ea>>2]=0;h[k>>3]=q;if((c[k+4>>2]|0)>=0)if(!(I&2048)){H=I&1;G=H;H=(H|0)==0?25624:25629}else{G=1;H=25626}else{q=-q;G=1;H=25623}h[k>>3]=q;F=c[k+4>>2]&2146435072;do if(F>>>0<2146435072|(F|0)==2146435072&0<0){v=+Fh(q,ea)*2.0;o=v!=0.0;if(o)c[ea>>2]=(c[ea>>2]|0)+-1;D=u|32;if((D|0)==97){w=u&32;y=(w|0)==0?H:H+9|0;x=G|2;n=12-r|0;do if(!(r>>>0>11|(n|0)==0)){q=8.0;do{n=n+-1|0;q=q*16.0}while((n|0)!=0);if((a[y>>0]|0)==45){q=-(q+(-v-q));break}else{q=v+q-q;break}}else q=v;while(0);o=c[ea>>2]|0;n=(o|0)<0?0-o|0:o;n=Di(n,((n|0)<0)<<31>>31,X)|0;if((n|0)==(X|0)){a[Y>>0]=48;n=Y}a[n+-1>>0]=(o>>31&2)+43;t=n+-2|0;a[t>>0]=u+15;s=(r|0)<1;p=(I&8|0)==0;o=da;while(1){H=~~q;n=o+1|0;a[o>>0]=d[25590+H>>0]|w;q=(q-+(H|0))*16.0;do if((n-Z|0)==1){if(p&(s&q==0.0))break;a[n>>0]=46;n=o+2|0}while(0);if(!(q!=0.0))break;else o=n}r=(r|0)!=0&(O+n|0)<(r|0)?P+r-t|0:aa-t+n|0;p=r+x|0;Ei(e,32,K,p,I);if(!(c[e>>2]&32))ji(y,x,e)|0;Ei(e,48,K,p,I^65536);n=n-Z|0;if(!(c[e>>2]&32))ji(da,n,e)|0;o=$-t|0;Ei(e,48,r-(n+o)|0,0,0);if(!(c[e>>2]&32))ji(t,o,e)|0;Ei(e,32,K,p,I^8192);n=(p|0)<(K|0)?K:p;break}n=(r|0)<0?6:r;if(o){o=(c[ea>>2]|0)+-28|0;c[ea>>2]=o;q=v*268435456.0}else{q=v;o=c[ea>>2]|0}F=(o|0)<0?ca:Q;E=F;o=F;do{B=~~q>>>0;c[o>>2]=B;o=o+4|0;q=(q-+(B>>>0))*1.0e9}while(q!=0.0);p=o;o=c[ea>>2]|0;if((o|0)>0){s=F;while(1){t=(o|0)>29?29:o;r=p+-4|0;do if(r>>>0>>0)r=s;else{o=0;do{B=Ri(c[r>>2]|0,0,t|0)|0;B=Si(B|0,C|0,o|0,0)|0;o=C;A=$i(B|0,o|0,1e9,0)|0;c[r>>2]=A;o=_i(B|0,o|0,1e9,0)|0;r=r+-4|0}while(r>>>0>=s>>>0);if(!o){r=s;break}r=s+-4|0;c[r>>2]=o}while(0);while(1){if(p>>>0<=r>>>0)break;o=p+-4|0;if(!(c[o>>2]|0))p=o;else break}o=(c[ea>>2]|0)-t|0;c[ea>>2]=o;if((o|0)>0)s=r;else break}}else r=F;if((o|0)<0){y=((n+25|0)/9|0)+1|0;z=(D|0)==102;w=r;while(1){x=0-o|0;x=(x|0)>9?9:x;do if(w>>>0

>>0){o=(1<>>x;r=0;t=w;do{B=c[t>>2]|0;c[t>>2]=(B>>>x)+r;r=_(B&o,s)|0;t=t+4|0}while(t>>>0

>>0);o=(c[w>>2]|0)==0?w+4|0:w;if(!r){r=o;break}c[p>>2]=r;r=o;p=p+4|0}else r=(c[w>>2]|0)==0?w+4|0:w;while(0);o=z?F:r;p=(p-o>>2|0)>(y|0)?o+(y<<2)|0:p;o=(c[ea>>2]|0)+x|0;c[ea>>2]=o;if((o|0)>=0){w=r;break}else w=r}}else w=r;do if(w>>>0

>>0){o=(E-w>>2)*9|0;s=c[w>>2]|0;if(s>>>0<10)break;else r=10;do{r=r*10|0;o=o+1|0}while(s>>>0>=r>>>0)}else o=0;while(0);A=(D|0)==103;B=(n|0)!=0;r=n-((D|0)!=102?o:0)+((B&A)<<31>>31)|0;if((r|0)<(((p-E>>2)*9|0)+-9|0)){t=r+9216|0;z=(t|0)/9|0;r=F+(z+-1023<<2)|0;t=((t|0)%9|0)+1|0;if((t|0)<9){s=10;do{s=s*10|0;t=t+1|0}while((t|0)!=9)}else s=10;x=c[r>>2]|0;y=(x>>>0)%(s>>>0)|0;if((y|0)==0?(F+(z+-1022<<2)|0)==(p|0):0)s=w;else L=163;do if((L|0)==163){L=0;v=(((x>>>0)/(s>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;t=(s|0)/2|0;do if(y>>>0>>0)q=.5;else{if((y|0)==(t|0)?(F+(z+-1022<<2)|0)==(p|0):0){q=1.0;break}q=1.5}while(0);do if(G){if((a[H>>0]|0)!=45)break;v=-v;q=-q}while(0);t=x-y|0;c[r>>2]=t;if(!(v+q!=v)){s=w;break}D=t+s|0;c[r>>2]=D;if(D>>>0>999999999){o=w;while(1){s=r+-4|0;c[r>>2]=0;if(s>>>0>>0){o=o+-4|0;c[o>>2]=0}D=(c[s>>2]|0)+1|0;c[s>>2]=D;if(D>>>0>999999999)r=s;else{w=o;r=s;break}}}o=(E-w>>2)*9|0;t=c[w>>2]|0;if(t>>>0<10){s=w;break}else s=10;do{s=s*10|0;o=o+1|0}while(t>>>0>=s>>>0);s=w}while(0);D=r+4|0;w=s;p=p>>>0>D>>>0?D:p}y=0-o|0;while(1){if(p>>>0<=w>>>0){z=0;D=p;break}r=p+-4|0;if(!(c[r>>2]|0))p=r;else{z=1;D=p;break}}do if(A){n=(B&1^1)+n|0;if((n|0)>(o|0)&(o|0)>-5){u=u+-1|0;n=n+-1-o|0}else{u=u+-2|0;n=n+-1|0}p=I&8;if(p)break;do if(z){p=c[D+-4>>2]|0;if(!p){r=9;break}if(!((p>>>0)%10|0)){s=10;r=0}else{r=0;break}do{s=s*10|0;r=r+1|0}while(((p>>>0)%(s>>>0)|0|0)==0)}else r=9;while(0);p=((D-E>>2)*9|0)+-9|0;if((u|32|0)==102){p=p-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}else{p=p+o-r|0;p=(p|0)<0?0:p;n=(n|0)<(p|0)?n:p;p=0;break}}else p=I&8;while(0);x=n|p;s=(x|0)!=0&1;t=(u|32|0)==102;if(t){o=(o|0)>0?o:0;u=0}else{r=(o|0)<0?y:o;r=Di(r,((r|0)<0)<<31>>31,X)|0;if(($-r|0)<2)do{r=r+-1|0;a[r>>0]=48}while(($-r|0)<2);a[r+-1>>0]=(o>>31&2)+43;E=r+-2|0;a[E>>0]=u;o=$-E|0;u=E}y=G+1+n+s+o|0;Ei(e,32,K,y,I);if(!(c[e>>2]&32))ji(H,G,e)|0;Ei(e,48,K,y,I^65536);do if(t){r=w>>>0>F>>>0?F:w;o=r;do{p=Di(c[o>>2]|0,0,R)|0;do if((o|0)==(r|0)){if((p|0)!=(R|0))break;a[T>>0]=48;p=T}else{if(p>>>0<=da>>>0)break;do{p=p+-1|0;a[p>>0]=48}while(p>>>0>da>>>0)}while(0);if(!(c[e>>2]&32))ji(p,S-p|0,e)|0;o=o+4|0}while(o>>>0<=F>>>0);do if(x){if(c[e>>2]&32)break;ji(25658,1,e)|0}while(0);if((n|0)>0&o>>>0>>0){p=o;while(1){o=Di(c[p>>2]|0,0,R)|0;if(o>>>0>da>>>0)do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0);if(!(c[e>>2]&32))ji(o,(n|0)>9?9:n,e)|0;p=p+4|0;o=n+-9|0;if(!((n|0)>9&p>>>0>>0)){n=o;break}else n=o}}Ei(e,48,n+9|0,9,0)}else{t=z?D:w+4|0;if((n|0)>-1){s=(p|0)==0;r=w;do{o=Di(c[r>>2]|0,0,R)|0;if((o|0)==(R|0)){a[T>>0]=48;o=T}do if((r|0)==(w|0)){p=o+1|0;if(!(c[e>>2]&32))ji(o,1,e)|0;if(s&(n|0)<1){o=p;break}if(c[e>>2]&32){o=p;break}ji(25658,1,e)|0;o=p}else{if(o>>>0<=da>>>0)break;do{o=o+-1|0;a[o>>0]=48}while(o>>>0>da>>>0)}while(0);p=S-o|0;if(!(c[e>>2]&32))ji(o,(n|0)>(p|0)?p:n,e)|0;n=n-p|0;r=r+4|0}while(r>>>0>>0&(n|0)>-1)}Ei(e,48,n+18|0,18,0);if(c[e>>2]&32)break;ji(u,$-u|0,e)|0}while(0);Ei(e,32,K,y,I^8192);n=(y|0)<(K|0)?K:y}else{t=(u&32|0)!=0;s=q!=q|0.0!=0.0;o=s?0:G;r=o+3|0;Ei(e,32,K,r,p);n=c[e>>2]|0;if(!(n&32)){ji(H,o,e)|0;n=c[e>>2]|0}if(!(n&32))ji(s?(t?25650:25654):t?25642:25646,3,e)|0;Ei(e,32,K,r,I^8192);n=(r|0)<(K|0)?K:r}while(0);w=J;continue a}default:{p=I;o=r;t=0;u=25606;n=N}}while(0);g:do if((L|0)==64){p=ba;o=c[p>>2]|0;p=c[p+4>>2]|0;s=u&32;if(!((o|0)==0&(p|0)==0)){n=N;do{n=n+-1|0;a[n>>0]=d[25590+(o&15)>>0]|s;o=Ti(o|0,p|0,4)|0;p=C}while(!((o|0)==0&(p|0)==0));L=ba;if((t&8|0)==0|(c[L>>2]|0)==0&(c[L+4>>2]|0)==0){o=t;t=0;s=25606;L=77}else{o=t;t=2;s=25606+(u>>4)|0;L=77}}else{n=N;o=t;t=0;s=25606;L=77}}else if((L|0)==76){n=Di(n,o,N)|0;o=I;t=p;L=77}else if((L|0)==82){L=0;I=ri(n,0,r)|0;H=(I|0)==0;w=n;o=H?r:I-n|0;t=0;u=25606;n=H?n+r|0:I}else if((L|0)==86){L=0;o=0;n=0;s=c[ba>>2]|0;while(1){p=c[s>>2]|0;if(!p)break;n=Lh(fa,p)|0;if((n|0)<0|n>>>0>(r-o|0)>>>0)break;o=n+o|0;if(r>>>0>o>>>0)s=s+4|0;else break}if((n|0)<0){m=-1;break a}Ei(e,32,K,o,I);if(!o){n=0;L=98}else{p=0;r=c[ba>>2]|0;while(1){n=c[r>>2]|0;if(!n){n=o;L=98;break g}n=Lh(fa,n)|0;p=n+p|0;if((p|0)>(o|0)){n=o;L=98;break g}if(!(c[e>>2]&32))ji(fa,n,e)|0;if(p>>>0>=o>>>0){n=o;L=98;break}else r=r+4|0}}}while(0);if((L|0)==98){L=0;Ei(e,32,K,n,I^8192);w=J;n=(K|0)>(n|0)?K:n;continue}if((L|0)==77){L=0;p=(r|0)>-1?o&-65537:o;o=ba;o=(c[o>>2]|0)!=0|(c[o+4>>2]|0)!=0;if((r|0)!=0|o){o=(o&1^1)+(U-n)|0;w=n;o=(r|0)>(o|0)?r:o;u=s;n=N}else{w=N;o=0;u=s;n=N}}s=n-w|0;o=(o|0)<(s|0)?s:o;r=t+o|0;n=(K|0)<(r|0)?r:K;Ei(e,32,n,r,p);if(!(c[e>>2]&32))ji(u,t,e)|0;Ei(e,48,n,r,p^65536);Ei(e,48,o,s,0);if(!(c[e>>2]&32))ji(w,s,e)|0;Ei(e,32,n,r,p^8192);w=J}h:do if((L|0)==245)if(!e)if(f){m=1;while(1){f=c[l+(m<<2)>>2]|0;if(!f)break;Ci(j+(m<<3)|0,f,g);m=m+1|0;if((m|0)>=10){m=1;break h}}if((m|0)<10)while(1){if(c[l+(m<<2)>>2]|0){m=-1;break h}m=m+1|0;if((m|0)>=10){m=1;break}}else m=1}else m=0;while(0);i=ha;return m|0}function Bi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Ui(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function Ci(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Di(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=$i(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e|48;e=_i(b|0,c|0,10,0)|0;if(c>>>0>9|(c|0)==9&b>>>0>4294967295){b=e;c=C}else{b=e;break}}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function Ei(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0;j=i;i=i+256|0;h=j;do if((d|0)>(e|0)&(f&73728|0)==0){f=d-e|0;Qi(h|0,b|0,(f>>>0>256?256:f)|0)|0;b=c[a>>2]|0;g=(b&32|0)==0;if(f>>>0>255){e=d-e|0;do{if(g){ji(h,256,a)|0;b=c[a>>2]|0}f=f+-256|0;g=(b&32|0)==0}while(f>>>0>255);if(g)f=e&255;else break}else if(!g)break;ji(h,f,a)|0}while(0);i=j;return}function Fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;do if(a>>>0<245){o=a>>>0<11?16:a+11&-8;a=o>>>3;i=c[735]|0;d=i>>>a;if(d&3){a=(d&1^1)+a|0;e=a<<1;d=2980+(e<<2)|0;e=2980+(e+2<<2)|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[739]|0)>>>0)ta();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else ta()}else c[735]=i&~(1<>2]=M|3;M=f+(M|4)|0;c[M>>2]=c[M>>2]|1;M=g;return M|0}h=c[737]|0;if(o>>>0>h>>>0){if(d){e=2<>>12&16;e=e>>>j;f=e>>>5&8;e=e>>>f;g=e>>>2&4;e=e>>>g;d=e>>>1&2;e=e>>>d;a=e>>>1&1;a=(f|j|g|d|a)+(e>>>a)|0;e=a<<1;d=2980+(e<<2)|0;e=2980+(e+2<<2)|0;g=c[e>>2]|0;j=g+8|0;f=c[j>>2]|0;do if((d|0)!=(f|0)){if(f>>>0<(c[739]|0)>>>0)ta();b=f+12|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;c[e>>2]=f;k=c[737]|0;break}else ta()}else{c[735]=i&~(1<>2]=o|3;i=g+o|0;c[g+(o|4)>>2]=h|1;c[g+M>>2]=h;if(k){f=c[740]|0;d=k>>>3;b=d<<1;e=2980+(b<<2)|0;a=c[735]|0;d=1<>2]|0;if(b>>>0<(c[739]|0)>>>0)ta();else{l=a;m=b}}else{c[735]=a|d;l=2980+(b+2<<2)|0;m=e}c[l>>2]=f;c[m+12>>2]=f;c[f+8>>2]=m;c[f+12>>2]=e}c[737]=h;c[740]=i;M=j;return M|0}a=c[736]|0;if(a){d=(a&0-a)+-1|0;L=d>>>12&16;d=d>>>L;K=d>>>5&8;d=d>>>K;M=d>>>2&4;d=d>>>M;a=d>>>1&2;d=d>>>a;e=d>>>1&1;e=c[3244+((K|L|M|a|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-o|0;a=e;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b){j=d;break}}a=(c[b+4>>2]&-8)-o|0;M=a>>>0>>0;d=M?a:d;a=b;e=M?b:e}g=c[739]|0;if(e>>>0>>0)ta();i=e+o|0;if(e>>>0>=i>>>0)ta();h=c[e+24>>2]|0;d=c[e+12>>2]|0;do if((d|0)==(e|0)){a=e+20|0;b=c[a>>2]|0;if(!b){a=e+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;f=c[d>>2]|0;if(f){b=f;a=d;continue}d=b+16|0;f=c[d>>2]|0;if(!f)break;else{b=f;a=d}}if(a>>>0>>0)ta();else{c[a>>2]=0;n=b;break}}else{f=c[e+8>>2]|0;if(f>>>0>>0)ta();b=f+12|0;if((c[b>>2]|0)!=(e|0))ta();a=d+8|0;if((c[a>>2]|0)==(e|0)){c[b>>2]=d;c[a>>2]=f;n=d;break}else ta()}while(0);do if(h){b=c[e+28>>2]|0;a=3244+(b<<2)|0;if((e|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=h+16|0;if((c[b>>2]|0)==(e|0))c[b>>2]=n;else c[h+20>>2]=n;if(!n)break}a=c[739]|0;if(n>>>0>>0)ta();c[n+24>>2]=h;b=c[e+16>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[e+20>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(j>>>0<16){M=j+o|0;c[e+4>>2]=M|3;M=e+(M+4)|0;c[M>>2]=c[M>>2]|1}else{c[e+4>>2]=o|3;c[e+(o|4)>>2]=j|1;c[e+(j+o)>>2]=j;b=c[737]|0;if(b){g=c[740]|0;d=b>>>3;b=d<<1;f=2980+(b<<2)|0;a=c[735]|0;d=1<>2]|0;if(a>>>0<(c[739]|0)>>>0)ta();else{p=b;q=a}}else{c[735]=a|d;p=2980+(b+2<<2)|0;q=f}c[p>>2]=g;c[q+12>>2]=g;c[g+8>>2]=q;c[g+12>>2]=f}c[737]=j;c[740]=i}M=e+8|0;return M|0}else q=o}else q=o}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;l=c[736]|0;if(l){d=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)k=31;else{q=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;k=14-(p|q|k)+(v<>>15)|0;k=m>>>(k+7|0)&1|k<<1}else k=0;a=c[3244+(k<<2)>>2]|0;a:do if(!a){f=0;a=0;v=86}else{h=d;f=0;i=m<<((k|0)==31?0:25-(k>>>1)|0);j=a;a=0;while(1){g=c[j+4>>2]&-8;d=g-m|0;if(d>>>0>>0)if((g|0)==(m|0)){g=j;a=j;v=90;break a}else a=j;else d=h;v=c[j+20>>2]|0;j=c[j+16+(i>>>31<<2)>>2]|0;f=(v|0)==0|(v|0)==(j|0)?f:v;if(!j){v=86;break}else{h=d;i=i<<1}}}while(0);if((v|0)==86){if((f|0)==0&(a|0)==0){a=2<>>12&16;a=a>>>n;l=a>>>5&8;a=a>>>l;p=a>>>2&4;a=a>>>p;q=a>>>1&2;a=a>>>q;f=a>>>1&1;f=c[3244+((l|n|p|q|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;j=a}else{g=f;v=90}}if((v|0)==90)while(1){v=0;q=(c[g+4>>2]&-8)-m|0;f=q>>>0>>0;d=f?q:d;a=f?g:a;f=c[g+16>>2]|0;if(f){g=f;v=90;continue}g=c[g+20>>2]|0;if(!g){i=d;j=a;break}else v=90}if((j|0)!=0?i>>>0<((c[737]|0)-m|0)>>>0:0){f=c[739]|0;if(j>>>0>>0)ta();h=j+m|0;if(j>>>0>=h>>>0)ta();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){o=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)ta();else{c[a>>2]=0;o=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)ta();b=e+12|0;if((c[b>>2]|0)!=(j|0))ta();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;o=d;break}else ta()}while(0);do if(g){b=c[j+28>>2]|0;a=3244+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=o;if(!o){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=g+16|0;if((c[b>>2]|0)==(j|0))c[b>>2]=o;else c[g+20>>2]=o;if(!o)break}a=c[739]|0;if(o>>>0>>0)ta();c[o+24>>2]=g;b=c[j+16>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[o+16>>2]=b;c[b+24>>2]=o;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[o+20>>2]=b;c[b+24>>2]=o;break}}while(0);b:do if(i>>>0>=16){c[j+4>>2]=m|3;c[j+(m|4)>>2]=i|1;c[j+(i+m)>>2]=i;b=i>>>3;if(i>>>0<256){a=b<<1;e=2980+(a<<2)|0;d=c[735]|0;b=1<>2]|0;if(a>>>0<(c[739]|0)>>>0)ta();else{s=b;t=a}}else{c[735]=d|b;s=2980+(a+2<<2)|0;t=e}c[s>>2]=h;c[t+12>>2]=h;c[j+(m+8)>>2]=t;c[j+(m+12)>>2]=e;break}b=i>>>8;if(b)if(i>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=i>>>(e+7|0)&1|e<<1}else e=0;b=3244+(e<<2)|0;c[j+(m+28)>>2]=e;c[j+(m+20)>>2]=0;c[j+(m+16)>>2]=0;a=c[736]|0;d=1<>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(i|0)){y=d;break c}else{e=e<<1;b=d}}if(a>>>0<(c[739]|0)>>>0)ta();else{c[a>>2]=h;c[j+(m+24)>>2]=b;c[j+(m+12)>>2]=h;c[j+(m+8)>>2]=h;break b}}else y=b;while(0);b=y+8|0;a=c[b>>2]|0;M=c[739]|0;if(a>>>0>=M>>>0&y>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[j+(m+8)>>2]=a;c[j+(m+12)>>2]=y;c[j+(m+24)>>2]=0;break}else ta()}else{M=i+m|0;c[j+4>>2]=M|3;M=j+(M+4)|0;c[M>>2]=c[M>>2]|1}while(0);M=j+8|0;return M|0}else q=m}else q=m}else q=-1;while(0);d=c[737]|0;if(d>>>0>=q>>>0){b=d-q|0;a=c[740]|0;if(b>>>0>15){c[740]=a+q;c[737]=b;c[a+(q+4)>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=q|3}else{c[737]=0;c[740]=0;c[a+4>>2]=d|3;M=a+(d+4)|0;c[M>>2]=c[M>>2]|1}M=a+8|0;return M|0}a=c[738]|0;if(a>>>0>q>>>0){L=a-q|0;c[738]=L;M=c[741]|0;c[741]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}do if(!(c[853]|0)){a=za(30)|0;if(!(a+-1&a)){c[855]=a;c[854]=a;c[856]=-1;c[857]=-1;c[858]=0;c[846]=0;c[853]=(La(0)|0)&-16^1431655768;break}else ta()}while(0);j=q+48|0;i=c[855]|0;k=q+47|0;h=i+k|0;i=0-i|0;l=h&i;if(l>>>0<=q>>>0){M=0;return M|0}a=c[845]|0;if((a|0)!=0?(t=c[843]|0,y=t+l|0,y>>>0<=t>>>0|y>>>0>a>>>0):0){M=0;return M|0}d:do if(!(c[846]&4)){a=c[741]|0;e:do if(a){f=3388;while(1){d=c[f>>2]|0;if(d>>>0<=a>>>0?(r=f+4|0,(d+(c[r>>2]|0)|0)>>>0>a>>>0):0){g=f;a=r;break}f=c[f+8>>2]|0;if(!f){v=174;break e}}d=h-(c[738]|0)&i;if(d>>>0<2147483647){f=xa(d|0)|0;y=(f|0)==((c[g>>2]|0)+(c[a>>2]|0)|0);a=y?d:0;if(y){if((f|0)!=(-1|0)){w=f;p=a;v=194;break d}}else v=184}else a=0}else v=174;while(0);do if((v|0)==174){g=xa(0)|0;if((g|0)!=(-1|0)){a=g;d=c[854]|0;f=d+-1|0;if(!(f&a))d=l;else d=l-a+(f+a&0-d)|0;a=c[843]|0;f=a+d|0;if(d>>>0>q>>>0&d>>>0<2147483647){y=c[845]|0;if((y|0)!=0?f>>>0<=a>>>0|f>>>0>y>>>0:0){a=0;break}f=xa(d|0)|0;y=(f|0)==(g|0);a=y?d:0;if(y){w=g;p=a;v=194;break d}else v=184}else a=0}else a=0}while(0);f:do if((v|0)==184){g=0-d|0;do if(j>>>0>d>>>0&(d>>>0<2147483647&(f|0)!=(-1|0))?(u=c[855]|0,u=k-d+u&0-u,u>>>0<2147483647):0)if((xa(u|0)|0)==(-1|0)){xa(g|0)|0;break f}else{d=u+d|0;break}while(0);if((f|0)!=(-1|0)){w=f;p=d;v=194;break d}}while(0);c[846]=c[846]|4;v=191}else{a=0;v=191}while(0);if((((v|0)==191?l>>>0<2147483647:0)?(w=xa(l|0)|0,x=xa(0)|0,w>>>0>>0&((w|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(z=x-w|0,A=z>>>0>(q+40|0)>>>0,A):0){p=A?z:a;v=194}if((v|0)==194){a=(c[843]|0)+p|0;c[843]=a;if(a>>>0>(c[844]|0)>>>0)c[844]=a;h=c[741]|0;g:do if(h){g=3388;do{a=c[g>>2]|0;d=g+4|0;f=c[d>>2]|0;if((w|0)==(a+f|0)){B=a;C=d;D=f;E=g;v=204;break}g=c[g+8>>2]|0}while((g|0)!=0);if(((v|0)==204?(c[E+12>>2]&8|0)==0:0)?h>>>0>>0&h>>>0>=B>>>0:0){c[C>>2]=D+p;M=(c[738]|0)+p|0;L=h+8|0;L=(L&7|0)==0?0:0-L&7;K=M-L|0;c[741]=h+L;c[738]=K;c[h+(L+4)>>2]=K|1;c[h+(M+4)>>2]=40;c[742]=c[857];break}a=c[739]|0;if(w>>>0>>0){c[739]=w;a=w}d=w+p|0;g=3388;while(1){if((c[g>>2]|0)==(d|0)){f=g;d=g;v=212;break}g=c[g+8>>2]|0;if(!g){d=3388;break}}if((v|0)==212)if(!(c[d+12>>2]&8)){c[f>>2]=w;n=d+4|0;c[n>>2]=(c[n>>2]|0)+p;n=w+8|0;n=(n&7|0)==0?0:0-n&7;k=w+(p+8)|0;k=(k&7|0)==0?0:0-k&7;b=w+(k+p)|0;m=n+q|0;o=w+m|0;l=b-(w+n)-q|0;c[w+(n+4)>>2]=q|3;h:do if((b|0)!=(h|0)){if((b|0)==(c[740]|0)){M=(c[737]|0)+l|0;c[737]=M;c[740]=o;c[w+(m+4)>>2]=M|1;c[w+(M+m)>>2]=M;break}i=p+4|0;d=c[w+(i+k)>>2]|0;if((d&3|0)==1){j=d&-8;g=d>>>3;i:do if(d>>>0>=256){h=c[w+((k|24)+p)>>2]|0;e=c[w+(p+12+k)>>2]|0;do if((e|0)==(b|0)){f=k|16;e=w+(i+f)|0;d=c[e>>2]|0;if(!d){e=w+(f+p)|0;d=c[e>>2]|0;if(!d){J=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;J=d;break}}else{f=c[w+((k|8)+p)>>2]|0;if(f>>>0>>0)ta();a=f+12|0;if((c[a>>2]|0)!=(b|0))ta();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;J=e;break}else ta()}while(0);if(!h)break;a=c[w+(p+28+k)>>2]|0;d=3244+(a<<2)|0;do if((b|0)!=(c[d>>2]|0)){if(h>>>0<(c[739]|0)>>>0)ta();a=h+16|0;if((c[a>>2]|0)==(b|0))c[a>>2]=J;else c[h+20>>2]=J;if(!J)break i}else{c[d>>2]=J;if(J)break;c[736]=c[736]&~(1<>>0>>0)ta();c[J+24>>2]=h;b=k|16;a=c[w+(b+p)>>2]|0;do if(a)if(a>>>0>>0)ta();else{c[J+16>>2]=a;c[a+24>>2]=J;break}while(0);b=c[w+(i+b)>>2]|0;if(!b)break;if(b>>>0<(c[739]|0)>>>0)ta();else{c[J+20>>2]=b;c[b+24>>2]=J;break}}else{e=c[w+((k|8)+p)>>2]|0;f=c[w+(p+12+k)>>2]|0;d=2980+(g<<1<<2)|0;do if((e|0)!=(d|0)){if(e>>>0>>0)ta();if((c[e+12>>2]|0)==(b|0))break;ta()}while(0);if((f|0)==(e|0)){c[735]=c[735]&~(1<>>0>>0)ta();a=f+8|0;if((c[a>>2]|0)==(b|0)){F=a;break}ta()}while(0);c[e+12>>2]=f;c[F>>2]=e}while(0);b=w+((j|k)+p)|0;f=j+l|0}else f=l;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[w+(m+4)>>2]=f|1;c[w+(f+m)>>2]=f;b=f>>>3;if(f>>>0<256){a=b<<1;e=2980+(a<<2)|0;d=c[735]|0;b=1<>2]|0;if(a>>>0>=(c[739]|0)>>>0){K=b;L=a;break}ta()}while(0);c[K>>2]=o;c[L+12>>2]=o;c[w+(m+8)>>2]=L;c[w+(m+12)>>2]=e;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}K=(b+1048320|0)>>>16&8;L=b<>>16&4;L=L<>>16&2;e=14-(J|K|e)+(L<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=3244+(e<<2)|0;c[w+(m+28)>>2]=e;c[w+(m+20)>>2]=0;c[w+(m+16)>>2]=0;a=c[736]|0;d=1<>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break}b=c[b>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(f|0)){M=d;break j}else{e=e<<1;b=d}}if(a>>>0<(c[739]|0)>>>0)ta();else{c[a>>2]=o;c[w+(m+24)>>2]=b;c[w+(m+12)>>2]=o;c[w+(m+8)>>2]=o;break h}}else M=b;while(0);b=M+8|0;a=c[b>>2]|0;L=c[739]|0;if(a>>>0>=L>>>0&M>>>0>=L>>>0){c[a+12>>2]=o;c[b>>2]=o;c[w+(m+8)>>2]=a;c[w+(m+12)>>2]=M;c[w+(m+24)>>2]=0;break}else ta()}else{M=(c[738]|0)+l|0;c[738]=M;c[741]=o;c[w+(m+4)>>2]=M|1}while(0);M=w+(n|8)|0;return M|0}else d=3388;while(1){a=c[d>>2]|0;if(a>>>0<=h>>>0?(b=c[d+4>>2]|0,e=a+b|0,e>>>0>h>>>0):0)break;d=c[d+8>>2]|0}f=a+(b+-39)|0;a=a+(b+-47+((f&7|0)==0?0:0-f&7))|0;f=h+16|0;a=a>>>0>>0?h:a;b=a+8|0;d=w+8|0;d=(d&7|0)==0?0:0-d&7;M=p+-40-d|0;c[741]=w+d;c[738]=M;c[w+(d+4)>>2]=M|1;c[w+(p+-36)>>2]=40;c[742]=c[857];d=a+4|0;c[d>>2]=27;c[b>>2]=c[847];c[b+4>>2]=c[848];c[b+8>>2]=c[849];c[b+12>>2]=c[850];c[847]=w;c[848]=p;c[850]=0;c[849]=b;b=a+28|0;c[b>>2]=7;if((a+32|0)>>>0>>0)do{M=b;b=b+4|0;c[b>>2]=7}while((M+8|0)>>>0>>0);if((a|0)!=(h|0)){g=a-h|0;c[d>>2]=c[d>>2]&-2;c[h+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){a=b<<1;e=2980+(a<<2)|0;d=c[735]|0;b=1<>2]|0;if(a>>>0<(c[739]|0)>>>0)ta();else{G=b;H=a}}else{c[735]=d|b;G=2980+(a+2<<2)|0;H=e}c[G>>2]=h;c[H+12>>2]=h;c[h+8>>2]=H;c[h+12>>2]=e;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{L=(b+1048320|0)>>>16&8;M=b<>>16&4;M=M<>>16&2;e=14-(K|L|e)+(M<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=3244+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[f>>2]=0;b=c[736]|0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=c[d>>2]|0;k:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){a=b+16+(e>>>31<<2)|0;d=c[a>>2]|0;if(!d)break;if((c[d+4>>2]&-8|0)==(g|0)){I=d;break k}else{e=e<<1;b=d}}if(a>>>0<(c[739]|0)>>>0)ta();else{c[a>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;break g}}else I=b;while(0);b=I+8|0;a=c[b>>2]|0;M=c[739]|0;if(a>>>0>=M>>>0&I>>>0>=M>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=I;c[h+24>>2]=0;break}else ta()}}else{M=c[739]|0;if((M|0)==0|w>>>0>>0)c[739]=w;c[847]=w;c[848]=p;c[850]=0;c[744]=c[853];c[743]=-1;b=0;do{M=b<<1;L=2980+(M<<2)|0;c[2980+(M+3<<2)>>2]=L;c[2980+(M+2<<2)>>2]=L;b=b+1|0}while((b|0)!=32);M=w+8|0;M=(M&7|0)==0?0:0-M&7;L=p+-40-M|0;c[741]=w+M;c[738]=L;c[w+(M+4)>>2]=L|1;c[w+(p+-36)>>2]=40;c[742]=c[857]}while(0);b=c[738]|0;if(b>>>0>q>>>0){L=b-q|0;c[738]=L;M=c[741]|0;c[741]=M+q;c[M+(q+4)>>2]=L|1;c[M+4>>2]=q|3;M=M+8|0;return M|0}}c[(Bh()|0)>>2]=12;M=0;return M|0}function Gi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(!a)return;b=a+-8|0;i=c[739]|0;if(b>>>0>>0)ta();d=c[a+-4>>2]|0;e=d&3;if((e|0)==1)ta();o=d&-8;q=a+(o+-8)|0;do if(!(d&1)){b=c[b>>2]|0;if(!e)return;j=-8-b|0;l=a+j|0;m=b+o|0;if(l>>>0>>0)ta();if((l|0)==(c[740]|0)){b=a+(o+-4)|0;d=c[b>>2]|0;if((d&3|0)!=3){u=l;g=m;break}c[737]=m;c[b>>2]=d&-2;c[a+(j+4)>>2]=m|1;c[q>>2]=m;return}f=b>>>3;if(b>>>0<256){e=c[a+(j+8)>>2]|0;d=c[a+(j+12)>>2]|0;b=2980+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0>>0)ta();if((c[e+12>>2]|0)!=(l|0))ta()}if((d|0)==(e|0)){c[735]=c[735]&~(1<>>0>>0)ta();b=d+8|0;if((c[b>>2]|0)==(l|0))h=b;else ta()}else h=d+8|0;c[e+12>>2]=d;c[h>>2]=e;u=l;g=m;break}h=c[a+(j+24)>>2]|0;e=c[a+(j+12)>>2]|0;do if((e|0)==(l|0)){d=a+(j+20)|0;b=c[d>>2]|0;if(!b){d=a+(j+16)|0;b=c[d>>2]|0;if(!b){k=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0>>0)ta();else{c[d>>2]=0;k=b;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)ta();b=f+12|0;if((c[b>>2]|0)!=(l|0))ta();d=e+8|0;if((c[d>>2]|0)==(l|0)){c[b>>2]=e;c[d>>2]=f;k=e;break}else ta()}while(0);if(h){b=c[a+(j+28)>>2]|0;d=3244+(b<<2)|0;if((l|0)==(c[d>>2]|0)){c[d>>2]=k;if(!k){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=h+16|0;if((c[b>>2]|0)==(l|0))c[b>>2]=k;else c[h+20>>2]=k;if(!k){u=l;g=m;break}}d=c[739]|0;if(k>>>0>>0)ta();c[k+24>>2]=h;b=c[a+(j+16)>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[k+16>>2]=b;c[b+24>>2]=k;break}while(0);b=c[a+(j+20)>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[k+20>>2]=b;c[b+24>>2]=k;u=l;g=m;break}else{u=l;g=m}}else{u=l;g=m}}else{u=b;g=o}while(0);if(u>>>0>=q>>>0)ta();b=a+(o+-4)|0;d=c[b>>2]|0;if(!(d&1))ta();if(!(d&2)){if((q|0)==(c[741]|0)){t=(c[738]|0)+g|0;c[738]=t;c[741]=u;c[u+4>>2]=t|1;if((u|0)!=(c[740]|0))return;c[740]=0;c[737]=0;return}if((q|0)==(c[740]|0)){t=(c[737]|0)+g|0;c[737]=t;c[740]=u;c[u+4>>2]=t|1;c[u+t>>2]=t;return}g=(d&-8)+g|0;f=d>>>3;do if(d>>>0>=256){h=c[a+(o+16)>>2]|0;b=c[a+(o|4)>>2]|0;do if((b|0)==(q|0)){d=a+(o+12)|0;b=c[d>>2]|0;if(!b){d=a+(o+8)|0;b=c[d>>2]|0;if(!b){p=0;break}}while(1){e=b+20|0;f=c[e>>2]|0;if(f){b=f;d=e;continue}e=b+16|0;f=c[e>>2]|0;if(!f)break;else{b=f;d=e}}if(d>>>0<(c[739]|0)>>>0)ta();else{c[d>>2]=0;p=b;break}}else{d=c[a+o>>2]|0;if(d>>>0<(c[739]|0)>>>0)ta();e=d+12|0;if((c[e>>2]|0)!=(q|0))ta();f=b+8|0;if((c[f>>2]|0)==(q|0)){c[e>>2]=b;c[f>>2]=d;p=b;break}else ta()}while(0);if(h){b=c[a+(o+20)>>2]|0;d=3244+(b<<2)|0;if((q|0)==(c[d>>2]|0)){c[d>>2]=p;if(!p){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();b=h+16|0;if((c[b>>2]|0)==(q|0))c[b>>2]=p;else c[h+20>>2]=p;if(!p)break}d=c[739]|0;if(p>>>0>>0)ta();c[p+24>>2]=h;b=c[a+(o+8)>>2]|0;do if(b)if(b>>>0>>0)ta();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[a+(o+12)>>2]|0;if(b)if(b>>>0<(c[739]|0)>>>0)ta();else{c[p+20>>2]=b;c[b+24>>2]=p;break}}}else{e=c[a+o>>2]|0;d=c[a+(o|4)>>2]|0;b=2980+(f<<1<<2)|0;if((e|0)!=(b|0)){if(e>>>0<(c[739]|0)>>>0)ta();if((c[e+12>>2]|0)!=(q|0))ta()}if((d|0)==(e|0)){c[735]=c[735]&~(1<>>0<(c[739]|0)>>>0)ta();b=d+8|0;if((c[b>>2]|0)==(q|0))n=b;else ta()}else n=d+8|0;c[e+12>>2]=d;c[n>>2]=e}while(0);c[u+4>>2]=g|1;c[u+g>>2]=g;if((u|0)==(c[740]|0)){c[737]=g;return}}else{c[b>>2]=d&-2;c[u+4>>2]=g|1;c[u+g>>2]=g}b=g>>>3;if(g>>>0<256){d=b<<1;f=2980+(d<<2)|0;e=c[735]|0;b=1<>2]|0;if(d>>>0<(c[739]|0)>>>0)ta();else{r=b;s=d}}else{c[735]=e|b;r=2980+(d+2<<2)|0;s=f}c[r>>2]=u;c[s+12>>2]=u;c[u+8>>2]=s;c[u+12>>2]=f;return}b=g>>>8;if(b)if(g>>>0>16777215)f=31;else{r=(b+1048320|0)>>>16&8;s=b<>>16&4;s=s<>>16&2;f=14-(q|r|f)+(s<>>15)|0;f=g>>>(f+7|0)&1|f<<1}else f=0;b=3244+(f<<2)|0;c[u+28>>2]=f;c[u+20>>2]=0;c[u+16>>2]=0;d=c[736]|0;e=1<>2]|0;b:do if((c[b+4>>2]&-8|0)!=(g|0)){f=g<<((f|0)==31?0:25-(f>>>1)|0);while(1){d=b+16+(f>>>31<<2)|0;e=c[d>>2]|0;if(!e)break;if((c[e+4>>2]&-8|0)==(g|0)){t=e;break b}else{f=f<<1;b=e}}if(d>>>0<(c[739]|0)>>>0)ta();else{c[d>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u;break a}}else t=b;while(0);b=t+8|0;d=c[b>>2]|0;s=c[739]|0;if(d>>>0>=s>>>0&t>>>0>=s>>>0){c[d+12>>2]=u;c[b>>2]=u;c[u+8>>2]=d;c[u+12>>2]=t;c[u+24>>2]=0;break}else ta()}else{c[736]=d|e;c[b>>2]=u;c[u+24>>2]=b;c[u+12>>2]=u;c[u+8>>2]=u}while(0);u=(c[743]|0)+-1|0;c[743]=u;if(!u)b=3396;else return;while(1){b=c[b>>2]|0;if(!b)break;else b=b+8|0}c[743]=-1;return}function Hi(a,b){a=a|0;b=b|0;var d=0;if(a){d=_(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;b=Fi(d)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;Qi(b|0,0,d|0)|0;return b|0}function Ii(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){a=Fi(b)|0;return a|0}if(b>>>0>4294967231){c[(Bh()|0)>>2]=12;a=0;return a|0}d=Ki(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d){a=d+8|0;return a|0}d=Fi(b)|0;if(!d){a=0;return a|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;Ui(d|0,a|0,(e>>>0>>0?e:b)|0)|0;Gi(a);a=d;return a|0}function Ji(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;do if((b|0)!=8){e=b>>>2;if((b&3|0)!=0|(e|0)==0){a=22;return a|0}if(e+1073741823&e){a=22;return a|0}if((-64-b|0)>>>0>>0){a=12;return a|0}else{e=Li(b>>>0<16?16:b,d)|0;break}}else e=Fi(d)|0;while(0);if(!e){a=12;return a|0}c[a>>2]=e;a=0;return a|0}function Ki(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=a+4|0;p=c[o>>2]|0;j=p&-8;l=a+j|0;i=c[739]|0;d=p&3;if(!((d|0)!=1&a>>>0>=i>>>0&a>>>0>>0))ta();e=a+(j|4)|0;f=c[e>>2]|0;if(!(f&1))ta();if(!d){if(b>>>0<256){a=0;return a|0}if(j>>>0>=(b+4|0)>>>0?(j-b|0)>>>0<=c[855]<<1>>>0:0)return a|0;a=0;return a|0}if(j>>>0>=b>>>0){d=j-b|0;if(d>>>0<=15)return a|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|3;c[e>>2]=c[e>>2]|1;Mi(a+b|0,d);return a|0}if((l|0)==(c[741]|0)){d=(c[738]|0)+j|0;if(d>>>0<=b>>>0){a=0;return a|0}n=d-b|0;c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|1;c[741]=a+b;c[738]=n;return a|0}if((l|0)==(c[740]|0)){e=(c[737]|0)+j|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=d|1;c[a+e>>2]=d;e=a+(e+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[o>>2]=p&1|e|2;e=a+(e+4)|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[737]=d;c[740]=e;return a|0}if(f&2){a=0;return a|0}m=(f&-8)+j|0;if(m>>>0>>0){a=0;return a|0}n=m-b|0;g=f>>>3;do if(f>>>0>=256){h=c[a+(j+24)>>2]|0;g=c[a+(j+12)>>2]|0;do if((g|0)==(l|0)){e=a+(j+20)|0;d=c[e>>2]|0;if(!d){e=a+(j+16)|0;d=c[e>>2]|0;if(!d){k=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;k=d;break}}else{f=c[a+(j+8)>>2]|0;if(f>>>0>>0)ta();d=f+12|0;if((c[d>>2]|0)!=(l|0))ta();e=g+8|0;if((c[e>>2]|0)==(l|0)){c[d>>2]=g;c[e>>2]=f;k=g;break}else ta()}while(0);if(h){d=c[a+(j+28)>>2]|0;e=3244+(d<<2)|0;if((l|0)==(c[e>>2]|0)){c[e>>2]=k;if(!k){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();d=h+16|0;if((c[d>>2]|0)==(l|0))c[d>>2]=k;else c[h+20>>2]=k;if(!k)break}e=c[739]|0;if(k>>>0>>0)ta();c[k+24>>2]=h;d=c[a+(j+16)>>2]|0;do if(d)if(d>>>0>>0)ta();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(j+20)>>2]|0;if(d)if(d>>>0<(c[739]|0)>>>0)ta();else{c[k+20>>2]=d;c[d+24>>2]=k;break}}}else{f=c[a+(j+8)>>2]|0;e=c[a+(j+12)>>2]|0;d=2980+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)ta();if((c[f+12>>2]|0)!=(l|0))ta()}if((e|0)==(f|0)){c[735]=c[735]&~(1<>>0>>0)ta();d=e+8|0;if((c[d>>2]|0)==(l|0))h=d;else ta()}else h=e+8|0;c[f+12>>2]=e;c[h>>2]=f}while(0);if(n>>>0<16){c[o>>2]=m|p&1|2;b=a+(m|4)|0;c[b>>2]=c[b>>2]|1;return a|0}else{c[o>>2]=p&1|b|2;c[a+(b+4)>>2]=n|3;p=a+(m|4)|0;c[p>>2]=c[p>>2]|1;Mi(a+b|0,n);return a|0}return 0}function Li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;a=a>>>0<16?16:a;if(a+-1&a){d=16;while(1)if(d>>>0>>0)d=d<<1;else{a=d;break}}if((-64-a|0)>>>0<=b>>>0){c[(Bh()|0)>>2]=12;i=0;return i|0}h=b>>>0<11?16:b+11&-8;e=Fi(h+12+a|0)|0;if(!e){i=0;return i|0}b=e+-8|0;d=a+-1|0;do if(e&d){f=e+d&0-a;d=f+-8|0;g=b;f=(d-g|0)>>>0>15?d:f+(a+-8)|0;g=f-g|0;a=e+-4|0;e=c[a>>2]|0;d=(e&-8)-g|0;if(!(e&3)){c[f>>2]=(c[b>>2]|0)+g;c[f+4>>2]=d;b=f;break}else{e=f+4|0;c[e>>2]=d|c[e>>2]&1|2;d=f+(d+4)|0;c[d>>2]=c[d>>2]|1;c[a>>2]=g|c[a>>2]&1|2;c[e>>2]=c[e>>2]|1;Mi(b,g);b=f;break}}while(0);a=b+4|0;d=c[a>>2]|0;if((d&3|0)!=0?(i=d&-8,i>>>0>(h+16|0)>>>0):0){g=i-h|0;c[a>>2]=h|d&1|2;c[b+(h|4)>>2]=g|3;i=b+(i|4)|0;c[i>>2]=c[i>>2]|1;Mi(b+h|0,g)}i=b+8|0;return i|0}function Mi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){k=c[a>>2]|0;if(!(d&3))return;n=a+(0-k)|0;m=k+b|0;j=c[739]|0;if(n>>>0>>0)ta();if((n|0)==(c[740]|0)){e=a+(b+4)|0;d=c[e>>2]|0;if((d&3|0)!=3){t=n;h=m;break}c[737]=m;c[e>>2]=d&-2;c[a+(4-k)>>2]=m|1;c[q>>2]=m;return}g=k>>>3;if(k>>>0<256){f=c[a+(8-k)>>2]|0;e=c[a+(12-k)>>2]|0;d=2980+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)ta();if((c[f+12>>2]|0)!=(n|0))ta()}if((e|0)==(f|0)){c[735]=c[735]&~(1<>>0>>0)ta();d=e+8|0;if((c[d>>2]|0)==(n|0))i=d;else ta()}else i=e+8|0;c[f+12>>2]=e;c[i>>2]=f;t=n;h=m;break}i=c[a+(24-k)>>2]|0;f=c[a+(12-k)>>2]|0;do if((f|0)==(n|0)){f=16-k|0;e=a+(f+4)|0;d=c[e>>2]|0;if(!d){e=a+f|0;d=c[e>>2]|0;if(!d){l=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;l=d;break}}else{g=c[a+(8-k)>>2]|0;if(g>>>0>>0)ta();d=g+12|0;if((c[d>>2]|0)!=(n|0))ta();e=f+8|0;if((c[e>>2]|0)==(n|0)){c[d>>2]=f;c[e>>2]=g;l=f;break}else ta()}while(0);if(i){d=c[a+(28-k)>>2]|0;e=3244+(d<<2)|0;if((n|0)==(c[e>>2]|0)){c[e>>2]=l;if(!l){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();d=i+16|0;if((c[d>>2]|0)==(n|0))c[d>>2]=l;else c[i+20>>2]=l;if(!l){t=n;h=m;break}}f=c[739]|0;if(l>>>0>>0)ta();c[l+24>>2]=i;d=16-k|0;e=c[a+d>>2]|0;do if(e)if(e>>>0>>0)ta();else{c[l+16>>2]=e;c[e+24>>2]=l;break}while(0);d=c[a+(d+4)>>2]|0;if(d)if(d>>>0<(c[739]|0)>>>0)ta();else{c[l+20>>2]=d;c[d+24>>2]=l;t=n;h=m;break}else{t=n;h=m}}else{t=n;h=m}}else{t=a;h=b}while(0);j=c[739]|0;if(q>>>0>>0)ta();d=a+(b+4)|0;e=c[d>>2]|0;if(!(e&2)){if((q|0)==(c[741]|0)){s=(c[738]|0)+h|0;c[738]=s;c[741]=t;c[t+4>>2]=s|1;if((t|0)!=(c[740]|0))return;c[740]=0;c[737]=0;return}if((q|0)==(c[740]|0)){s=(c[737]|0)+h|0;c[737]=s;c[740]=t;c[t+4>>2]=s|1;c[t+s>>2]=s;return}h=(e&-8)+h|0;g=e>>>3;do if(e>>>0>=256){i=c[a+(b+24)>>2]|0;f=c[a+(b+12)>>2]|0;do if((f|0)==(q|0)){e=a+(b+20)|0;d=c[e>>2]|0;if(!d){e=a+(b+16)|0;d=c[e>>2]|0;if(!d){p=0;break}}while(1){f=d+20|0;g=c[f>>2]|0;if(g){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0>>0)ta();else{c[e>>2]=0;p=d;break}}else{g=c[a+(b+8)>>2]|0;if(g>>>0>>0)ta();d=g+12|0;if((c[d>>2]|0)!=(q|0))ta();e=f+8|0;if((c[e>>2]|0)==(q|0)){c[d>>2]=f;c[e>>2]=g;p=f;break}else ta()}while(0);if(i){d=c[a+(b+28)>>2]|0;e=3244+(d<<2)|0;if((q|0)==(c[e>>2]|0)){c[e>>2]=p;if(!p){c[736]=c[736]&~(1<>>0<(c[739]|0)>>>0)ta();d=i+16|0;if((c[d>>2]|0)==(q|0))c[d>>2]=p;else c[i+20>>2]=p;if(!p)break}e=c[739]|0;if(p>>>0>>0)ta();c[p+24>>2]=i;d=c[a+(b+16)>>2]|0;do if(d)if(d>>>0>>0)ta();else{c[p+16>>2]=d;c[d+24>>2]=p;break}while(0);d=c[a+(b+20)>>2]|0;if(d)if(d>>>0<(c[739]|0)>>>0)ta();else{c[p+20>>2]=d;c[d+24>>2]=p;break}}}else{f=c[a+(b+8)>>2]|0;e=c[a+(b+12)>>2]|0;d=2980+(g<<1<<2)|0;if((f|0)!=(d|0)){if(f>>>0>>0)ta();if((c[f+12>>2]|0)!=(q|0))ta()}if((e|0)==(f|0)){c[735]=c[735]&~(1<>>0>>0)ta();d=e+8|0;if((c[d>>2]|0)==(q|0))o=d;else ta()}else o=e+8|0;c[f+12>>2]=e;c[o>>2]=f}while(0);c[t+4>>2]=h|1;c[t+h>>2]=h;if((t|0)==(c[740]|0)){c[737]=h;return}}else{c[d>>2]=e&-2;c[t+4>>2]=h|1;c[t+h>>2]=h}d=h>>>3;if(h>>>0<256){e=d<<1;g=2980+(e<<2)|0;f=c[735]|0;d=1<>2]|0;if(e>>>0<(c[739]|0)>>>0)ta();else{r=d;s=e}}else{c[735]=f|d;r=2980+(e+2<<2)|0;s=g}c[r>>2]=t;c[s+12>>2]=t;c[t+8>>2]=s;c[t+12>>2]=g;return}d=h>>>8;if(d)if(h>>>0>16777215)g=31;else{r=(d+1048320|0)>>>16&8;s=d<>>16&4;s=s<>>16&2;g=14-(q|r|g)+(s<>>15)|0;g=h>>>(g+7|0)&1|g<<1}else g=0;d=3244+(g<<2)|0;c[t+28>>2]=g;c[t+20>>2]=0;c[t+16>>2]=0;e=c[736]|0;f=1<>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}d=c[d>>2]|0;a:do if((c[d+4>>2]&-8|0)!=(h|0)){g=h<<((g|0)==31?0:25-(g>>>1)|0);while(1){e=d+16+(g>>>31<<2)|0;f=c[e>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(h|0)){d=f;break a}else{g=g<<1;d=f}}if(e>>>0<(c[739]|0)>>>0)ta();c[e>>2]=t;c[t+24>>2]=d;c[t+12>>2]=t;c[t+8>>2]=t;return}while(0);e=d+8|0;f=c[e>>2]|0;s=c[739]|0;if(!(f>>>0>=s>>>0&d>>>0>=s>>>0))ta();c[f+12>>2]=t;c[e>>2]=t;c[t+8>>2]=f;c[t+12>>2]=d;c[t+24>>2]=0;return}function Ni(){}function Oi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (C=d,a-c>>>0|0)|0}function Pi(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<>c-32|0}function Qi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;h=b&3;i=d|d<<8|d<<16|d<<24;g=f&~3;if(h){h=b+4-h|0;while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function Ri(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b<>>32-c;return a<>>0;return (C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Ti(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Ui(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return ya(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function Vi(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[m+(b>>>24)>>0]|0)+24|0}function Wi(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=_(e,f)|0;d=a>>>16;a=(c>>>16)+(_(e,d)|0)|0;e=b>>>16;b=_(e,f)|0;return (C=(a>>>16)+(_(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Xi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Oi(j^a,i^b,j,i)|0;g=C;a=f^j;b=e^i;return Oi((aj(h,g,Oi(f^c,e^d,f,e)|0,C,0)|0)^a,C^b,a,b)|0}function Yi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+16|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Oi(h^a,g^b,h,g)|0;b=C;aj(a,b,Oi(l^d,k^e,l,k)|0,C,j)|0;e=Oi(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;d=C;i=f;return (C=d,e)|0}function Zi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Wi(e,f)|0;a=C;return (C=(_(b,f)|0)+(_(d,e)|0)+a|a&0,c|0|0)|0}function _i(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return aj(a,b,c,d,0)|0}function $i(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+16|0;f=g|0;aj(a,b,d,e,f)|0;i=g;return (C=c[f+4>>2]|0,c[f>>2]|0)|0}function aj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (C=n,f)|0}else{if(!g){n=0;f=0;return (C=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (C=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (C=n,f)|0}g=h-1|0;if(g&h){i=(aa(h|0)|0)+33-(aa(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (C=o,p)|0}else{p=Vi(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (C=o,p)|0}}else{if(g){if(f){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (C=o,p)|0}if(!l){if(f){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (C=o,p)|0}g=i-1|0;if(!(g&i)){if(f){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Vi(i|0)|0)>>>0);return (C=o,p)|0}g=(aa(i|0)|0)-(aa(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (C=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Si(m|0,l|0,-1,-1)|0;d=C;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;Oi(k,d,e,n)|0;p=C;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Oi(e,n,o&m,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l)|0;b=C;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (C=o,p)|0}function bj(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Qa[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function cj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ra[a&63](b|0,c|0,d|0)|0}function dj(a,b){a=a|0;b=b|0;return +Sa[a&3](b|0)}function ej(a,b){a=a|0;b=b|0;Ta[a&7](b|0)}function fj(a,b,c){a=a|0;b=b|0;c=c|0;Ua[a&7](b|0,c|0)}function gj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Va[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function hj(a,b){a=a|0;b=b|0;return Wa[a&15](b|0)|0}function ij(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Xa[a&15](b|0,c|0,d|0)}function jj(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;return Ya[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0,l|0)|0}function kj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Za[a&63](b|0,c|0,d|0,e|0)|0}function lj(a,b,c){a=a|0;b=b|0;c=c|0;return _a[a&7](b|0,c|0)|0}function mj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return $a[a&3](b|0,c|0,d|0,e|0,f|0)|0}function nj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ab[a&3](b|0,c|0,d|0,e|0)}function oj(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ba(0);return 0}function pj(a,b,c){a=a|0;b=b|0;c=c|0;ba(1);return 0}function qj(a){a=a|0;ba(2);return 0.0}function rj(a){a=a|0;ba(3)}function sj(a,b){a=a|0;b=b|0;ba(4)}function tj(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ba(5);return 0}function uj(a){a=a|0;ba(6);return 0}function vj(a,b,c){a=a|0;b=b|0;c=c|0;ba(7)}function wj(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;ba(8);return 0}function xj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(9);return 0}function yj(a,b){a=a|0;b=b|0;ba(10);return 0}function zj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ba(11);return 0}function Aj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ba(12)}\n\n// EMSCRIPTEN_END_FUNCS\nvar Qa=[oj,ed,We,oj];var Ra=[pj,Bi,Vh,Th,Ab,Bb,Cb,Db,Hc,Ic,Kc,$c,nd,Oe,af,od,pd,Ne,Pe,Lc,Mc,Nc,Oc,td,ud,vd,wd,yd,zd,Bd,Cd,Dd,Ed,Fd,Gd,Hd,Id,Jd,Kd,Ld,Md,Nd,Od,Pd,Qd,Rd,Sd,Td,Ud,Vd,Wd,Xd,ef,ff,gf,hf,jf,kf,lf,mf,Sh,Uh,pj,pj];var Sa=[qj,Yd,Zd,qj];var Ta=[rj,Yc,Ve,gg,hg,xi,yi,rj];var Ua=[sj,mb,nb,ob,Wb,Wc,Le,sj];var Va=[tj,dd,Ue,rd,Te,tj,tj,tj];var Wa=[uj,Rh,jd,kd,$e,_e,Yh,Kg,Hg,uj,uj,uj,uj,uj,uj,uj];var Xa=[vj,Ge,He,Ie,Je,Ae,Be,Ce,De,we,xe,ye,ze,gd,Ze,vj];var Ya=[wj,cd,Se,wj];var Za=[xj,de,ee,fe,ge,he,ie,je,ke,le,me,ne,oe,pe,qe,re,se,te,ue,ve,xf,yf,zf,rf,sf,tf,uf,vf,wf,wb,xb,yb,zb,ld,ad,Ke,Re,qd,Zc,Qe,Me,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj,xj];var _a=[yj,Jc,nf,of,pf,qf,yj,yj];var $a=[zj,md,Xe,zj];var ab=[Aj,Og,Rg,Aj];return{_opj_stream_destroy:Fb,_opj_stream_set_read_function:Gb,_opj_read_tile_header:mc,_opj_set_warning_handler:cc,_opj_destroy_cstr_info:Cc,_opj_image_create:Yb,_opj_set_error_handler:dc,_opj_stream_set_user_data:Kb,_opj_end_decompress:wc,_bitshift64Lshr:Ti,_opj_stream_set_seek_function:Hb,_opj_decode:kc,_opj_set_decoded_resolution_factor:pc,_i64Add:Si,_opj_stream_create_default_file_stream:Fc,_opj_set_default_decoder_parameters:hc,_bitshift64Ashr:Pi,_opj_get_decoded_tile:oc,_memset:Qi,_opj_version:fc,_memcpy:Ui,_opj_destroy_cstr_index:Ec,_opj_stream_set_user_data_length:Lb,_opj_stream_set_skip_function:Jb,_opj_image_destroy:Zb,_opj_stream_create_file_stream:Gc,_opj_setup_encoder:sc,_opj_stream_default_create:Eb,_bitshift64Shl:Ri,_opj_stream_create:vb,_jp2_version:lb,_i64Subtract:Oi,_opj_get_cstr_index:Dc,_opj_encode:uc,_opj_read_header:jc,_opj_get_cstr_info:Bc,_opj_set_default_encoder_parameters:rc,_opj_set_decode_area:lc,_opj_stream_set_write_function:Ib,_opj_dump_codec:Ac,_opj_create_decompress:gc,_opj_decode_tile_data:nc,_free:Gi,_opj_image_tile_create:ac,_opj_set_MCT:xc,_opj_set_info_handler:bc,_opj_start_compress:tc,_opj_write_tile:yc,_opj_setup_decoder:ic,_malloc:Fi,_opj_end_compress:vc,_opj_destroy_codec:zc,_jp2_decode:kb,_opj_stream_create_buffer_stream:ec,_opj_create_compress:qc,runPostSets:Ni,stackAlloc:bb,stackSave:cb,stackRestore:db,establishStackSpace:eb,setThrew:fb,setTempRet0:ib,getTempRet0:jb,dynCall_iiiiiiii:bj,dynCall_iiii:cj,dynCall_di:dj,dynCall_vi:ej,dynCall_vii:fj,dynCall_iiiiiii:gj,dynCall_ii:hj,dynCall_viii:ij,dynCall_iiiiiiiiiiii:jj,dynCall_iiiii:kj,dynCall_iii:lj,dynCall_iiiiii:mj,dynCall_viiii:nj}})\n\n\n// EMSCRIPTEN_END_ASM\n(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _opj_stream_destroy=Module[\"_opj_stream_destroy\"]=asm[\"_opj_stream_destroy\"];var _opj_stream_set_read_function=Module[\"_opj_stream_set_read_function\"]=asm[\"_opj_stream_set_read_function\"];var _opj_read_tile_header=Module[\"_opj_read_tile_header\"]=asm[\"_opj_read_tile_header\"];var _opj_set_warning_handler=Module[\"_opj_set_warning_handler\"]=asm[\"_opj_set_warning_handler\"];var _opj_destroy_cstr_info=Module[\"_opj_destroy_cstr_info\"]=asm[\"_opj_destroy_cstr_info\"];var _opj_image_create=Module[\"_opj_image_create\"]=asm[\"_opj_image_create\"];var _opj_set_error_handler=Module[\"_opj_set_error_handler\"]=asm[\"_opj_set_error_handler\"];var _opj_image_tile_create=Module[\"_opj_image_tile_create\"]=asm[\"_opj_image_tile_create\"];var _opj_end_decompress=Module[\"_opj_end_decompress\"]=asm[\"_opj_end_decompress\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _opj_stream_set_seek_function=Module[\"_opj_stream_set_seek_function\"]=asm[\"_opj_stream_set_seek_function\"];var _opj_decode=Module[\"_opj_decode\"]=asm[\"_opj_decode\"];var _opj_set_decoded_resolution_factor=Module[\"_opj_set_decoded_resolution_factor\"]=asm[\"_opj_set_decoded_resolution_factor\"];var _opj_stream_create_default_file_stream=Module[\"_opj_stream_create_default_file_stream\"]=asm[\"_opj_stream_create_default_file_stream\"];var _opj_encode=Module[\"_opj_encode\"]=asm[\"_opj_encode\"];var _bitshift64Ashr=Module[\"_bitshift64Ashr\"]=asm[\"_bitshift64Ashr\"];var _opj_get_decoded_tile=Module[\"_opj_get_decoded_tile\"]=asm[\"_opj_get_decoded_tile\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _opj_version=Module[\"_opj_version\"]=asm[\"_opj_version\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _opj_destroy_cstr_index=Module[\"_opj_destroy_cstr_index\"]=asm[\"_opj_destroy_cstr_index\"];var _opj_stream_set_user_data_length=Module[\"_opj_stream_set_user_data_length\"]=asm[\"_opj_stream_set_user_data_length\"];var _opj_stream_set_skip_function=Module[\"_opj_stream_set_skip_function\"]=asm[\"_opj_stream_set_skip_function\"];var _opj_image_destroy=Module[\"_opj_image_destroy\"]=asm[\"_opj_image_destroy\"];var _opj_stream_create_file_stream=Module[\"_opj_stream_create_file_stream\"]=asm[\"_opj_stream_create_file_stream\"];var _opj_setup_encoder=Module[\"_opj_setup_encoder\"]=asm[\"_opj_setup_encoder\"];var _opj_stream_default_create=Module[\"_opj_stream_default_create\"]=asm[\"_opj_stream_default_create\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _opj_stream_create=Module[\"_opj_stream_create\"]=asm[\"_opj_stream_create\"];var _jp2_version=Module[\"_jp2_version\"]=asm[\"_jp2_version\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _opj_get_cstr_index=Module[\"_opj_get_cstr_index\"]=asm[\"_opj_get_cstr_index\"];var _opj_set_default_decoder_parameters=Module[\"_opj_set_default_decoder_parameters\"]=asm[\"_opj_set_default_decoder_parameters\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _opj_get_cstr_info=Module[\"_opj_get_cstr_info\"]=asm[\"_opj_get_cstr_info\"];var _opj_set_default_encoder_parameters=Module[\"_opj_set_default_encoder_parameters\"]=asm[\"_opj_set_default_encoder_parameters\"];var _opj_set_decode_area=Module[\"_opj_set_decode_area\"]=asm[\"_opj_set_decode_area\"];var _opj_stream_set_write_function=Module[\"_opj_stream_set_write_function\"]=asm[\"_opj_stream_set_write_function\"];var _opj_dump_codec=Module[\"_opj_dump_codec\"]=asm[\"_opj_dump_codec\"];var _opj_read_header=Module[\"_opj_read_header\"]=asm[\"_opj_read_header\"];var _opj_create_decompress=Module[\"_opj_create_decompress\"]=asm[\"_opj_create_decompress\"];var _opj_decode_tile_data=Module[\"_opj_decode_tile_data\"]=asm[\"_opj_decode_tile_data\"];var _opj_set_info_handler=Module[\"_opj_set_info_handler\"]=asm[\"_opj_set_info_handler\"];var _opj_stream_set_user_data=Module[\"_opj_stream_set_user_data\"]=asm[\"_opj_stream_set_user_data\"];var _opj_set_MCT=Module[\"_opj_set_MCT\"]=asm[\"_opj_set_MCT\"];var _free=Module[\"_free\"]=asm[\"_free\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var _opj_start_compress=Module[\"_opj_start_compress\"]=asm[\"_opj_start_compress\"];var _opj_write_tile=Module[\"_opj_write_tile\"]=asm[\"_opj_write_tile\"];var _opj_setup_decoder=Module[\"_opj_setup_decoder\"]=asm[\"_opj_setup_decoder\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _opj_end_compress=Module[\"_opj_end_compress\"]=asm[\"_opj_end_compress\"];var _opj_destroy_codec=Module[\"_opj_destroy_codec\"]=asm[\"_opj_destroy_codec\"];var _jp2_decode=Module[\"_jp2_decode\"]=asm[\"_jp2_decode\"];var _opj_stream_create_buffer_stream=Module[\"_opj_stream_create_buffer_stream\"]=asm[\"_opj_stream_create_buffer_stream\"];var _opj_create_compress=Module[\"_opj_create_compress\"]=asm[\"_opj_create_compress\"];var dynCall_iiiiiiii=Module[\"dynCall_iiiiiiii\"]=asm[\"dynCall_iiiiiiii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_di=Module[\"dynCall_di\"]=asm[\"dynCall_di\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_iiiiiiiiiiii=Module[\"dynCall_iiiiiiiiiiii\"]=asm[\"dynCall_iiiiiiiiiiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];Runtime.stackAlloc=asm[\"stackAlloc\"];Runtime.stackSave=asm[\"stackSave\"];Runtime.stackRestore=asm[\"stackRestore\"];Runtime.establishStackSpace=asm[\"establishStackSpace\"];Runtime.setTempRet0=asm[\"setTempRet0\"];Runtime.getTempRet0=asm[\"getTempRet0\"];function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller};Module[\"callMain\"]=Module.callMain=function callMain(args){assert(runDependencies==0,\"cannot call main when async dependencies remain! (listen on __ATMAIN__)\");assert(__ATPRERUN__.length==0,\"cannot call main when preRun functions remain to be called\");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module[\"thisProgram\"]),\"i8\",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();if(Module[\"_main\"]&&shouldRunNow)Module[\"callMain\"](args);postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout((function(){setTimeout((function(){Module[\"setStatus\"](\"\")}),1);doRun()}),1)}else{doRun()}}Module[\"run\"]=Module.run=run;function exit(status,implicit){if(implicit&&Module[\"noExitRuntime\"]){return}if(Module[\"noExitRuntime\"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module[\"onExit\"])Module[\"onExit\"](status)}if(ENVIRONMENT_IS_NODE){process[\"stdout\"][\"once\"](\"drain\",(function(){process[\"exit\"](status)}));console.log(\" \");setTimeout((function(){process[\"exit\"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit===\"function\"){quit(status)}throw new ExitStatus(status)}Module[\"exit\"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=\"\"}ABORT=true;EXITSTATUS=1;var extra=\"\\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.\";var output=\"abort(\"+what+\") at \"+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module[\"abort\"]=Module.abort=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}var shouldRunNow=true;if(Module[\"noInitialRun\"]){shouldRunNow=false}run()\n\n\n\n\n\n return Module;\n};\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = OpenJPEG;\n\n/***/ }),\n\n/***/ \"../node_modules/babel-loader/lib/index.js!../node_modules/eslint-loader/index.js?!./webWorker/index.worker.js\":\n/*!**********************************************************************************************************!*\\\n !*** ../node_modules/babel-loader/lib!../node_modules/eslint-loader??ref--4!./webWorker/index.worker.js ***!\n \\**********************************************************************************************************/\n/*! exports provided: registerTaskHandler, version, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _webWorker_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webWorker.js */ \"./webWorker/webWorker.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerTaskHandler\", function() { return _webWorker_js__WEBPACK_IMPORTED_MODULE_0__[\"registerTaskHandler\"]; });\n\n/* harmony import */ var _decodeTask_decodeTask_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./decodeTask/decodeTask.js */ \"./webWorker/decodeTask/decodeTask.js\");\n/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../version.js */ \"./version.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"version\", function() { return _version_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! pako */ \"../node_modules/pako/index.js\");\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(pako__WEBPACK_IMPORTED_MODULE_3__);\n\n\n // TODO: Not sure if this is necessary, but we probably need it for deflate in dicomParser\n\n/* eslint-disable-next-line import/extensions */\n\n // register our task\n\nObject(_webWorker_js__WEBPACK_IMPORTED_MODULE_0__[\"registerTaskHandler\"])(_decodeTask_decodeTask_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvar cornerstoneWADOImageLoaderWebWorker = {\n registerTaskHandler: _webWorker_js__WEBPACK_IMPORTED_MODULE_0__[\"registerTaskHandler\"],\n version: _version_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cornerstoneWADOImageLoaderWebWorker);\n\n/***/ }),\n\n/***/ \"../node_modules/pako/index.js\":\n/*!*************************************!*\\\n !*** ../node_modules/pako/index.js ***!\n \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// Top level file is just a mixin of submodules & constants\n\n\nvar assign = __webpack_require__(/*! ./lib/utils/common */ \"../node_modules/pako/lib/utils/common.js\").assign;\n\nvar deflate = __webpack_require__(/*! ./lib/deflate */ \"../node_modules/pako/lib/deflate.js\");\nvar inflate = __webpack_require__(/*! ./lib/inflate */ \"../node_modules/pako/lib/inflate.js\");\nvar constants = __webpack_require__(/*! ./lib/zlib/constants */ \"../node_modules/pako/lib/zlib/constants.js\");\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/deflate.js\":\n/*!*******************************************!*\\\n !*** ../node_modules/pako/lib/deflate.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n\nvar zlib_deflate = __webpack_require__(/*! ./zlib/deflate */ \"../node_modules/pako/lib/zlib/deflate.js\");\nvar utils = __webpack_require__(/*! ./utils/common */ \"../node_modules/pako/lib/utils/common.js\");\nvar strings = __webpack_require__(/*! ./utils/strings */ \"../node_modules/pako/lib/utils/strings.js\");\nvar msg = __webpack_require__(/*! ./zlib/messages */ \"../node_modules/pako/lib/zlib/messages.js\");\nvar ZStream = __webpack_require__(/*! ./zlib/zstream */ \"../node_modules/pako/lib/zlib/zstream.js\");\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY = 0;\n\nvar Z_DEFLATED = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n if (!(this instanceof Deflate)) return new Deflate(options);\n\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = zlib_deflate.deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/inflate.js\":\n/*!*******************************************!*\\\n !*** ../node_modules/pako/lib/inflate.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n\nvar zlib_inflate = __webpack_require__(/*! ./zlib/inflate */ \"../node_modules/pako/lib/zlib/inflate.js\");\nvar utils = __webpack_require__(/*! ./utils/common */ \"../node_modules/pako/lib/utils/common.js\");\nvar strings = __webpack_require__(/*! ./utils/strings */ \"../node_modules/pako/lib/utils/strings.js\");\nvar c = __webpack_require__(/*! ./zlib/constants */ \"../node_modules/pako/lib/zlib/constants.js\");\nvar msg = __webpack_require__(/*! ./zlib/messages */ \"../node_modules/pako/lib/zlib/messages.js\");\nvar ZStream = __webpack_require__(/*! ./zlib/zstream */ \"../node_modules/pako/lib/zlib/zstream.js\");\nvar GZheader = __webpack_require__(/*! ./zlib/gzheader */ \"../node_modules/pako/lib/zlib/gzheader.js\");\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = utils.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== c.Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = strings.binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = new utils.Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */\n\n if (status === c.Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n }\n\n if (status === c.Z_BUF_ERROR && allowBufError === true) {\n status = c.Z_OK;\n allowBufError = false;\n }\n\n if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n if (status === c.Z_STREAM_END) {\n _mode = c.Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === c.Z_FINISH) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === c.Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === c.Z_SYNC_FLUSH) {\n this.onEnd(c.Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === c.Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/utils/common.js\":\n/*!************************************************!*\\\n !*** ../node_modules/pako/lib/utils/common.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/utils/strings.js\":\n/*!*************************************************!*\\\n !*** ../node_modules/pako/lib/utils/strings.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// String encode/decode helpers\n\n\n\nvar utils = __webpack_require__(/*! ./common */ \"../node_modules/pako/lib/utils/common.js\");\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new utils.Buf8(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n var buf = new utils.Buf8(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/adler32.js\":\n/*!************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/adler32.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/constants.js\":\n/*!**************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/constants.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/crc32.js\":\n/*!**********************************************!*\\\n !*** ../node_modules/pako/lib/zlib/crc32.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/deflate.js\":\n/*!************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/deflate.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __webpack_require__(/*! ../utils/common */ \"../node_modules/pako/lib/utils/common.js\");\nvar trees = __webpack_require__(/*! ./trees */ \"../node_modules/pako/lib/zlib/trees.js\");\nvar adler32 = __webpack_require__(/*! ./adler32 */ \"../node_modules/pako/lib/zlib/adler32.js\");\nvar crc32 = __webpack_require__(/*! ./crc32 */ \"../node_modules/pako/lib/zlib/crc32.js\");\nvar msg = __webpack_require__(/*! ./messages */ \"../node_modules/pako/lib/zlib/messages.js\");\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/gzheader.js\":\n/*!*************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/gzheader.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/inffast.js\":\n/*!************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/inffast.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/inflate.js\":\n/*!************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/inflate.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __webpack_require__(/*! ../utils/common */ \"../node_modules/pako/lib/utils/common.js\");\nvar adler32 = __webpack_require__(/*! ./adler32 */ \"../node_modules/pako/lib/zlib/adler32.js\");\nvar crc32 = __webpack_require__(/*! ./crc32 */ \"../node_modules/pako/lib/zlib/crc32.js\");\nvar inflate_fast = __webpack_require__(/*! ./inffast */ \"../node_modules/pako/lib/zlib/inffast.js\");\nvar inflate_table = __webpack_require__(/*! ./inftrees */ \"../node_modules/pako/lib/zlib/inftrees.js\");\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/inftrees.js\":\n/*!*************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/inftrees.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = __webpack_require__(/*! ../utils/common */ \"../node_modules/pako/lib/utils/common.js\");\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/messages.js\":\n/*!*************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/messages.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/trees.js\":\n/*!**********************************************!*\\\n !*** ../node_modules/pako/lib/zlib/trees.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = __webpack_require__(/*! ../utils/common */ \"../node_modules/pako/lib/utils/common.js\");\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n\n\n/***/ }),\n\n/***/ \"../node_modules/pako/lib/zlib/zstream.js\":\n/*!************************************************!*\\\n !*** ../node_modules/pako/lib/zlib/zstream.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n\n\n/***/ }),\n\n/***/ \"./shared/calculateMinMax.js\":\n/*!***********************************!*\\\n !*** ./shared/calculateMinMax.js ***!\n \\***********************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return calculateMinMax; });\n/* harmony import */ var _getMinMax_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getMinMax.js */ \"./shared/getMinMax.js\");\n\n/**\n * Check the minimum and maximum values in the imageFrame pixel data\n * match with the provided smallestPixelValue and largestPixelValue metaData.\n *\n * If 'strict' is true, log to the console a warning if these values do not match.\n * Otherwise, correct them automatically.\n *\n * @param {Object} imageFrame\n * @param {Boolean} strict If 'strict' is true, log to the console a warning if these values do not match.\n * Otherwise, correct them automatically.Default is true.\n */\n\nfunction calculateMinMax(imageFrame) {\n var strict = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var minMax = Object(_getMinMax_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(imageFrame.pixelData);\n var mustAssign = !(isNumber(imageFrame.smallestPixelValue) && isNumber(imageFrame.largestPixelValue));\n\n if (strict === true && !mustAssign) {\n if (imageFrame.smallestPixelValue !== minMax.min) {\n console.warn('Image smallestPixelValue tag is incorrect. Rendering performance will suffer considerably.');\n }\n\n if (imageFrame.largestPixelValue !== minMax.max) {\n console.warn('Image largestPixelValue tag is incorrect. Rendering performance will suffer considerably.');\n }\n } else {\n imageFrame.smallestPixelValue = minMax.min;\n imageFrame.largestPixelValue = minMax.max;\n }\n}\n\nfunction isNumber(numValue) {\n return typeof numValue === 'number';\n}\n\n/***/ }),\n\n/***/ \"./shared/decodeImageFrame.js\":\n/*!************************************!*\\\n !*** ./shared/decodeImageFrame.js ***!\n \\************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decoders/decodeLittleEndian.js */ \"./shared/decoders/decodeLittleEndian.js\");\n/* harmony import */ var _decoders_decodeBigEndian_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./decoders/decodeBigEndian.js */ \"./shared/decoders/decodeBigEndian.js\");\n/* harmony import */ var _decoders_decodeRLE_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./decoders/decodeRLE.js */ \"./shared/decoders/decodeRLE.js\");\n/* harmony import */ var _decoders_decodeJPEGBaseline_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./decoders/decodeJPEGBaseline.js */ \"./shared/decoders/decodeJPEGBaseline.js\");\n/* harmony import */ var _decoders_decodeJPEGLossless_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./decoders/decodeJPEGLossless.js */ \"./shared/decoders/decodeJPEGLossless.js\");\n/* harmony import */ var _decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./decoders/decodeJPEGLS.js */ \"./shared/decoders/decodeJPEGLS.js\");\n/* harmony import */ var _decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./decoders/decodeJPEG2000.js */ \"./shared/decoders/decodeJPEG2000.js\");\n\n\n\n\n\n\n\n\nfunction decodeImageFrame(imageFrame, transferSyntax, pixelData, decodeConfig, options) {\n var start = new Date().getTime();\n\n if (transferSyntax === '1.2.840.10008.1.2') {\n // Implicit VR Little Endian\n imageFrame = Object(_decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.1') {\n // Explicit VR Little Endian\n imageFrame = Object(_decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.2') {\n // Explicit VR Big Endian (retired)\n imageFrame = Object(_decoders_decodeBigEndian_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.1.99') {\n // Deflate transfer syntax (deflated by dicomParser)\n imageFrame = Object(_decoders_decodeLittleEndian_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.5') {\n // RLE Lossless\n imageFrame = Object(_decoders_decodeRLE_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.50') {\n // JPEG Baseline lossy process 1 (8 bit)\n imageFrame = Object(_decoders_decodeJPEGBaseline_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.51') {\n // JPEG Baseline lossy process 2 & 4 (12 bit)\n imageFrame = Object(_decoders_decodeJPEGBaseline_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.57') {\n // JPEG Lossless, Nonhierarchical (Processes 14)\n imageFrame = Object(_decoders_decodeJPEGLossless_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.70') {\n // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1])\n imageFrame = Object(_decoders_decodeJPEGLossless_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.80') {\n // JPEG-LS Lossless Image Compression\n imageFrame = Object(_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.81') {\n // JPEG-LS Lossy (Near-Lossless) Image Compression\n imageFrame = Object(_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(imageFrame, pixelData);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.90') {\n // JPEG 2000 Lossless\n imageFrame = Object(_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(imageFrame, pixelData, decodeConfig, options);\n } else if (transferSyntax === '1.2.840.10008.1.2.4.91') {\n // JPEG 2000 Lossy\n imageFrame = Object(_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(imageFrame, pixelData, decodeConfig, options);\n } else {\n throw new Error(\"no decoder for transfer syntax \".concat(transferSyntax));\n }\n /* Don't know if these work...\n // JPEG 2000 Part 2 Multicomponent Image Compression (Lossless Only)\n else if(transferSyntax === \"1.2.840.10008.1.2.4.92\")\n {\n return decodeJPEG2000(dataSet, frame);\n }\n // JPEG 2000 Part 2 Multicomponent Image Compression\n else if(transferSyntax === \"1.2.840.10008.1.2.4.93\")\n {\n return decodeJPEG2000(dataSet, frame);\n }\n */\n\n\n var shouldShift = imageFrame.pixelRepresentation !== undefined && imageFrame.pixelRepresentation === 1;\n var shift = shouldShift && imageFrame.bitsStored !== undefined ? 32 - imageFrame.bitsStored : undefined;\n\n if (shouldShift && shift !== undefined) {\n for (var i = 0; i < imageFrame.pixelData.length; i++) {\n // eslint-disable-next-line no-bitwise\n imageFrame.pixelData[i] = imageFrame.pixelData[i] << shift >> shift;\n }\n }\n\n var end = new Date().getTime();\n imageFrame.decodeTimeInMS = end - start;\n return imageFrame;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeImageFrame);\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeBigEndian.js\":\n/*!********************************************!*\\\n !*** ./shared/decoders/decodeBigEndian.js ***!\n \\********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* eslint no-bitwise: 0 */\nfunction swap16(val) {\n return (val & 0xFF) << 8 | val >> 8 & 0xFF;\n}\n\nfunction decodeBigEndian(imageFrame, pixelData) {\n if (imageFrame.bitsAllocated === 16) {\n var arrayBuffer = pixelData.buffer;\n var offset = pixelData.byteOffset;\n var length = pixelData.length; // if pixel data is not aligned on even boundary, shift it so we can create the 16 bit array\n // buffers on it\n\n if (offset % 2) {\n arrayBuffer = arrayBuffer.slice(offset);\n offset = 0;\n }\n\n if (imageFrame.pixelRepresentation === 0) {\n imageFrame.pixelData = new Uint16Array(arrayBuffer, offset, length / 2);\n } else {\n imageFrame.pixelData = new Int16Array(arrayBuffer, offset, length / 2);\n } // Do the byte swap\n\n\n for (var i = 0; i < imageFrame.pixelData.length; i++) {\n imageFrame.pixelData[i] = swap16(imageFrame.pixelData[i]);\n }\n } else if (imageFrame.bitsAllocated === 8) {\n imageFrame.pixelData = pixelData;\n }\n\n return imageFrame;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeBigEndian);\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeJPEG2000.js\":\n/*!*******************************************!*\\\n !*** ./shared/decoders/decodeJPEG2000.js ***!\n \\*******************************************/\n/*! exports provided: default, initializeJPEG2000 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initializeJPEG2000\", function() { return initializeJPEG2000; });\n/* harmony import */ var _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/openJPEG-FixedMemory.js */ \"../codecs/openJPEG-FixedMemory.js\");\n/* harmony import */ var _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../codecs/jpx.min.js */ \"../codecs/jpx.min.js\");\n/* harmony import */ var _codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nfunction decodeJpx(imageFrame, pixelData) {\n var jpxImage = new _codecs_jpx_min_js__WEBPACK_IMPORTED_MODULE_1___default.a();\n jpxImage.parse(pixelData);\n var tileCount = jpxImage.tiles.length;\n\n if (tileCount !== 1) {\n throw new Error(\"JPEG2000 decoder returned a tileCount of \".concat(tileCount, \", when 1 is expected\"));\n }\n\n imageFrame.columns = jpxImage.width;\n imageFrame.rows = jpxImage.height;\n imageFrame.pixelData = jpxImage.tiles[0].items;\n return imageFrame;\n}\n\nvar openJPEG;\n\nfunction decodeOpenJPEG(data, bytesPerPixel, signed) {\n var dataPtr = openJPEG._malloc(data.length);\n\n openJPEG.writeArrayToMemory(data, dataPtr); // create param outpout\n\n var imagePtrPtr = openJPEG._malloc(4);\n\n var imageSizePtr = openJPEG._malloc(4);\n\n var imageSizeXPtr = openJPEG._malloc(4);\n\n var imageSizeYPtr = openJPEG._malloc(4);\n\n var imageSizeCompPtr = openJPEG._malloc(4);\n\n var t0 = new Date().getTime();\n var ret = openJPEG.ccall('jp2_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, data.length, imagePtrPtr, imageSizePtr, imageSizeXPtr, imageSizeYPtr, imageSizeCompPtr]); // add num vomp..etc\n\n if (ret !== 0) {\n console.log('[opj_decode] decoding failed!');\n\n openJPEG._free(dataPtr);\n\n openJPEG._free(openJPEG.getValue(imagePtrPtr, '*'));\n\n openJPEG._free(imageSizeXPtr);\n\n openJPEG._free(imageSizeYPtr);\n\n openJPEG._free(imageSizePtr);\n\n openJPEG._free(imageSizeCompPtr);\n\n return;\n }\n\n var imagePtr = openJPEG.getValue(imagePtrPtr, '*');\n var image = {\n length: openJPEG.getValue(imageSizePtr, 'i32'),\n sx: openJPEG.getValue(imageSizeXPtr, 'i32'),\n sy: openJPEG.getValue(imageSizeYPtr, 'i32'),\n nbChannels: openJPEG.getValue(imageSizeCompPtr, 'i32'),\n // hard coded for now\n perf_timetodecode: undefined,\n pixelData: undefined\n }; // Copy the data from the EMSCRIPTEN heap into the correct type array\n\n var length = image.sx * image.sy * image.nbChannels;\n var src32 = new Int32Array(openJPEG.HEAP32.buffer, imagePtr, length);\n\n if (bytesPerPixel === 1) {\n if (Uint8Array.from) {\n image.pixelData = Uint8Array.from(src32);\n } else {\n image.pixelData = new Uint8Array(length);\n\n for (var i = 0; i < length; i++) {\n image.pixelData[i] = src32[i];\n }\n }\n } else if (signed) {\n if (Int16Array.from) {\n image.pixelData = Int16Array.from(src32);\n } else {\n image.pixelData = new Int16Array(length);\n\n for (var _i = 0; _i < length; _i++) {\n image.pixelData[_i] = src32[_i];\n }\n }\n } else if (Uint16Array.from) {\n image.pixelData = Uint16Array.from(src32);\n } else {\n image.pixelData = new Uint16Array(length);\n\n for (var _i2 = 0; _i2 < length; _i2++) {\n image.pixelData[_i2] = src32[_i2];\n }\n }\n\n var t1 = new Date().getTime();\n image.perf_timetodecode = t1 - t0; // free\n\n openJPEG._free(dataPtr);\n\n openJPEG._free(imagePtrPtr);\n\n openJPEG._free(imagePtr);\n\n openJPEG._free(imageSizePtr);\n\n openJPEG._free(imageSizeXPtr);\n\n openJPEG._free(imageSizeYPtr);\n\n openJPEG._free(imageSizeCompPtr);\n\n return image;\n}\n\nfunction decodeOpenJpeg2000(imageFrame, pixelData) {\n var bytesPerPixel = imageFrame.bitsAllocated <= 8 ? 1 : 2;\n var signed = imageFrame.pixelRepresentation === 1;\n var image = decodeOpenJPEG(pixelData, bytesPerPixel, signed);\n imageFrame.columns = image.sx;\n imageFrame.rows = image.sy;\n imageFrame.pixelData = image.pixelData;\n\n if (image.nbChannels > 1) {\n imageFrame.photometricInterpretation = 'RGB';\n }\n\n return imageFrame;\n}\n\nfunction initializeJPEG2000(decodeConfig) {\n // check to make sure codec is loaded\n if (!decodeConfig.usePDFJS) {\n if (typeof _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') {\n throw new Error('OpenJPEG decoder not loaded');\n }\n }\n\n if (!openJPEG) {\n openJPEG = _codecs_openJPEG_FixedMemory_js__WEBPACK_IMPORTED_MODULE_0___default()();\n\n if (!openJPEG || !openJPEG._jp2_decode) {\n throw new Error('OpenJPEG failed to initialize');\n }\n }\n}\n\nfunction decodeJPEG2000(imageFrame, pixelData, decodeConfig) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n initializeJPEG2000(decodeConfig);\n\n if (options.usePDFJS || decodeConfig.usePDFJS) {\n // OHIF image-JPEG2000 https://github.com/OHIF/image-JPEG2000\n // console.log('PDFJS')\n return decodeJpx(imageFrame, pixelData);\n } // OpenJPEG2000 https://github.com/jpambrun/openjpeg\n // console.log('OpenJPEG')\n\n\n return decodeOpenJpeg2000(imageFrame, pixelData);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeJPEG2000);\n\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeJPEGBaseline.js\":\n/*!***********************************************!*\\\n !*** ./shared/decoders/decodeJPEGBaseline.js ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/jpeg.js */ \"../codecs/jpeg.js\");\n/* harmony import */ var _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction decodeJPEGBaseline(imageFrame, pixelData) {\n // check to make sure codec is loaded\n if (typeof _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') {\n throw new Error('No JPEG Baseline decoder loaded');\n }\n\n var jpeg = new _codecs_jpeg_js__WEBPACK_IMPORTED_MODULE_0___default.a();\n jpeg.parse(pixelData); // Do not use the internal jpeg.js color transformation,\n // since we will handle this afterwards\n\n jpeg.colorTransform = false;\n\n if (imageFrame.bitsAllocated === 8) {\n imageFrame.pixelData = jpeg.getData(imageFrame.columns, imageFrame.rows);\n return imageFrame;\n } else if (imageFrame.bitsAllocated === 16) {\n imageFrame.pixelData = jpeg.getData16(imageFrame.columns, imageFrame.rows);\n return imageFrame;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeJPEGBaseline);\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeJPEGLS.js\":\n/*!*****************************************!*\\\n !*** ./shared/decoders/decodeJPEGLS.js ***!\n \\*****************************************/\n/*! exports provided: default, initializeJPEGLS */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"initializeJPEGLS\", function() { return initializeJPEGLS; });\n/* harmony import */ var _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/charLS-FixedMemory-browser.js */ \"../codecs/charLS-FixedMemory-browser.js\");\n/* harmony import */ var _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0__);\n\nvar charLS;\n\nfunction jpegLSDecode(data, isSigned) {\n // prepare input parameters\n var dataPtr = charLS._malloc(data.length);\n\n charLS.writeArrayToMemory(data, dataPtr); // prepare output parameters\n\n var imagePtrPtr = charLS._malloc(4);\n\n var imageSizePtr = charLS._malloc(4);\n\n var widthPtr = charLS._malloc(4);\n\n var heightPtr = charLS._malloc(4);\n\n var bitsPerSamplePtr = charLS._malloc(4);\n\n var stridePtr = charLS._malloc(4);\n\n var allowedLossyErrorPtr = charLS._malloc(4);\n\n var componentsPtr = charLS._malloc(4);\n\n var interleaveModePtr = charLS._malloc(4); // Decode the image\n\n\n var result = charLS.ccall('jpegls_decode', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number'], [dataPtr, data.length, imagePtrPtr, imageSizePtr, widthPtr, heightPtr, bitsPerSamplePtr, stridePtr, componentsPtr, allowedLossyErrorPtr, interleaveModePtr]); // Extract result values into object\n\n var image = {\n result: result,\n width: charLS.getValue(widthPtr, 'i32'),\n height: charLS.getValue(heightPtr, 'i32'),\n bitsPerSample: charLS.getValue(bitsPerSamplePtr, 'i32'),\n stride: charLS.getValue(stridePtr, 'i32'),\n components: charLS.getValue(componentsPtr, 'i32'),\n allowedLossyError: charLS.getValue(allowedLossyErrorPtr, 'i32'),\n interleaveMode: charLS.getValue(interleaveModePtr, 'i32'),\n pixelData: undefined\n }; // Copy image from emscripten heap into appropriate array buffer type\n\n var imagePtr = charLS.getValue(imagePtrPtr, '*');\n\n if (image.bitsPerSample <= 8) {\n image.pixelData = new Uint8Array(image.width * image.height * image.components);\n image.pixelData.set(new Uint8Array(charLS.HEAP8.buffer, imagePtr, image.pixelData.length));\n } else if (isSigned) {\n image.pixelData = new Int16Array(image.width * image.height * image.components);\n image.pixelData.set(new Int16Array(charLS.HEAP16.buffer, imagePtr, image.pixelData.length));\n } else {\n image.pixelData = new Uint16Array(image.width * image.height * image.components);\n image.pixelData.set(new Uint16Array(charLS.HEAP16.buffer, imagePtr, image.pixelData.length));\n } // free memory and return image object\n\n\n charLS._free(dataPtr);\n\n charLS._free(imagePtr);\n\n charLS._free(imagePtrPtr);\n\n charLS._free(imageSizePtr);\n\n charLS._free(widthPtr);\n\n charLS._free(heightPtr);\n\n charLS._free(bitsPerSamplePtr);\n\n charLS._free(stridePtr);\n\n charLS._free(componentsPtr);\n\n charLS._free(interleaveModePtr);\n\n return image;\n}\n\nfunction initializeJPEGLS() {\n // check to make sure codec is loaded\n if (typeof _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') {\n throw new Error('No JPEG-LS decoder loaded');\n } // Try to initialize CharLS\n // CharLS https://github.com/cornerstonejs/charls\n\n\n if (!charLS) {\n charLS = _codecs_charLS_FixedMemory_browser_js__WEBPACK_IMPORTED_MODULE_0___default()();\n\n if (!charLS || !charLS._jpegls_decode) {\n throw new Error('JPEG-LS failed to initialize');\n }\n }\n}\n\nfunction decodeJPEGLS(imageFrame, pixelData) {\n initializeJPEGLS();\n var image = jpegLSDecode(pixelData, imageFrame.pixelRepresentation === 1); // throw error if not success or too much data\n\n if (image.result !== 0 && image.result !== 6) {\n throw new Error(\"JPEG-LS decoder failed to decode frame (error code \".concat(image.result, \")\"));\n }\n\n imageFrame.columns = image.width;\n imageFrame.rows = image.height;\n imageFrame.pixelData = image.pixelData;\n return imageFrame;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeJPEGLS);\n\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeJPEGLossless.js\":\n/*!***********************************************!*\\\n !*** ./shared/decoders/decodeJPEGLossless.js ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../codecs/jpegLossless.js */ \"../codecs/jpegLossless.js\");\n/* harmony import */ var _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0__);\n\n\nfunction decodeJPEGLossless(imageFrame, pixelData) {\n // check to make sure codec is loaded\n if (typeof _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined' || typeof _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a.lossless === 'undefined' || typeof _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a.lossless.Decoder === 'undefined') {\n throw new Error('No JPEG Lossless decoder loaded');\n }\n\n var byteOutput = imageFrame.bitsAllocated <= 8 ? 1 : 2; // console.time('jpeglossless');\n\n var buffer = pixelData.buffer;\n var decoder = new _codecs_jpegLossless_js__WEBPACK_IMPORTED_MODULE_0___default.a.lossless.Decoder();\n var decompressedData = decoder.decode(buffer, pixelData.byteOffset, pixelData.length, byteOutput); // console.timeEnd('jpeglossless');\n\n if (imageFrame.pixelRepresentation === 0) {\n if (imageFrame.bitsAllocated === 16) {\n imageFrame.pixelData = new Uint16Array(decompressedData.buffer);\n return imageFrame;\n } // untested!\n\n\n imageFrame.pixelData = new Uint8Array(decompressedData.buffer);\n return imageFrame;\n }\n\n imageFrame.pixelData = new Int16Array(decompressedData.buffer);\n return imageFrame;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeJPEGLossless);\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeLittleEndian.js\":\n/*!***********************************************!*\\\n !*** ./shared/decoders/decodeLittleEndian.js ***!\n \\***********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\nfunction decodeLittleEndian(imageFrame, pixelData) {\n var arrayBuffer = pixelData.buffer;\n var offset = pixelData.byteOffset;\n var length = pixelData.length;\n\n if (imageFrame.bitsAllocated === 16) {\n // if pixel data is not aligned on even boundary, shift it so we can create the 16 bit array\n // buffers on it\n if (offset % 2) {\n arrayBuffer = arrayBuffer.slice(offset);\n offset = 0;\n }\n\n if (imageFrame.pixelRepresentation === 0) {\n imageFrame.pixelData = new Uint16Array(arrayBuffer, offset, length / 2);\n } else {\n imageFrame.pixelData = new Int16Array(arrayBuffer, offset, length / 2);\n }\n } else if (imageFrame.bitsAllocated === 8 || imageFrame.bitsAllocated === 1) {\n imageFrame.pixelData = pixelData;\n } else if (imageFrame.bitsAllocated === 32) {\n // if pixel data is not aligned on even boundary, shift it\n if (offset % 2) {\n arrayBuffer = arrayBuffer.slice(offset);\n offset = 0;\n }\n\n imageFrame.pixelData = new Float32Array(arrayBuffer, offset, length / 4);\n }\n\n return imageFrame;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeLittleEndian);\n\n/***/ }),\n\n/***/ \"./shared/decoders/decodeRLE.js\":\n/*!**************************************!*\\\n !*** ./shared/decoders/decodeRLE.js ***!\n \\**************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\nfunction decodeRLE(imageFrame, pixelData) {\n if (imageFrame.bitsAllocated === 8) {\n if (imageFrame.planarConfiguration) {\n return decode8Planar(imageFrame, pixelData);\n }\n\n return decode8(imageFrame, pixelData);\n } else if (imageFrame.bitsAllocated === 16) {\n return decode16(imageFrame, pixelData);\n }\n\n throw new Error('unsupported pixel format for RLE');\n}\n\nfunction decode8(imageFrame, pixelData) {\n var frameData = pixelData;\n var frameSize = imageFrame.rows * imageFrame.columns;\n var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel);\n var header = new DataView(frameData.buffer, frameData.byteOffset);\n var data = new Int8Array(frameData.buffer, frameData.byteOffset);\n var out = new Int8Array(outFrame);\n var outIndex = 0;\n var numSegments = header.getInt32(0, true);\n\n for (var s = 0; s < numSegments; ++s) {\n outIndex = s;\n var inIndex = header.getInt32((s + 1) * 4, true);\n var maxIndex = header.getInt32((s + 2) * 4, true);\n\n if (maxIndex === 0) {\n maxIndex = frameData.length;\n }\n\n var endOfSegment = frameSize * numSegments;\n\n while (inIndex < maxIndex) {\n var n = data[inIndex++];\n\n if (n >= 0 && n <= 127) {\n // copy n bytes\n for (var i = 0; i < n + 1 && outIndex < endOfSegment; ++i) {\n out[outIndex] = data[inIndex++];\n outIndex += imageFrame.samplesPerPixel;\n }\n } else if (n <= -1 && n >= -127) {\n var value = data[inIndex++]; // run of n bytes\n\n for (var j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) {\n out[outIndex] = value;\n outIndex += imageFrame.samplesPerPixel;\n }\n }\n /* else if (n === -128) {\n } // do nothing */\n\n }\n }\n\n imageFrame.pixelData = new Uint8Array(outFrame);\n return imageFrame;\n}\n\nfunction decode8Planar(imageFrame, pixelData) {\n var frameData = pixelData;\n var frameSize = imageFrame.rows * imageFrame.columns;\n var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel);\n var header = new DataView(frameData.buffer, frameData.byteOffset);\n var data = new Int8Array(frameData.buffer, frameData.byteOffset);\n var out = new Int8Array(outFrame);\n var outIndex = 0;\n var numSegments = header.getInt32(0, true);\n\n for (var s = 0; s < numSegments; ++s) {\n outIndex = s * frameSize;\n var inIndex = header.getInt32((s + 1) * 4, true);\n var maxIndex = header.getInt32((s + 2) * 4, true);\n\n if (maxIndex === 0) {\n maxIndex = frameData.length;\n }\n\n var endOfSegment = frameSize * numSegments;\n\n while (inIndex < maxIndex) {\n var n = data[inIndex++];\n\n if (n >= 0 && n <= 127) {\n // copy n bytes\n for (var i = 0; i < n + 1 && outIndex < endOfSegment; ++i) {\n out[outIndex] = data[inIndex++];\n outIndex++;\n }\n } else if (n <= -1 && n >= -127) {\n var value = data[inIndex++]; // run of n bytes\n\n for (var j = 0; j < -n + 1 && outIndex < endOfSegment; ++j) {\n out[outIndex] = value;\n outIndex++;\n }\n }\n /* else if (n === -128) {\n } // do nothing */\n\n }\n }\n\n imageFrame.pixelData = new Uint8Array(outFrame);\n return imageFrame;\n}\n\nfunction decode16(imageFrame, pixelData) {\n var frameData = pixelData;\n var frameSize = imageFrame.rows * imageFrame.columns;\n var outFrame = new ArrayBuffer(frameSize * imageFrame.samplesPerPixel * 2);\n var header = new DataView(frameData.buffer, frameData.byteOffset);\n var data = new Int8Array(frameData.buffer, frameData.byteOffset);\n var out = new Int8Array(outFrame);\n var numSegments = header.getInt32(0, true);\n\n for (var s = 0; s < numSegments; ++s) {\n var outIndex = 0;\n var highByte = s === 0 ? 1 : 0;\n var inIndex = header.getInt32((s + 1) * 4, true);\n var maxIndex = header.getInt32((s + 2) * 4, true);\n\n if (maxIndex === 0) {\n maxIndex = frameData.length;\n }\n\n while (inIndex < maxIndex) {\n var n = data[inIndex++];\n\n if (n >= 0 && n <= 127) {\n for (var i = 0; i < n + 1 && outIndex < frameSize; ++i) {\n out[outIndex * 2 + highByte] = data[inIndex++];\n outIndex++;\n }\n } else if (n <= -1 && n >= -127) {\n var value = data[inIndex++];\n\n for (var j = 0; j < -n + 1 && outIndex < frameSize; ++j) {\n out[outIndex * 2 + highByte] = value;\n outIndex++;\n }\n }\n /* else if (n === -128) {\n } // do nothing */\n\n }\n }\n\n if (imageFrame.pixelRepresentation === 0) {\n imageFrame.pixelData = new Uint16Array(outFrame);\n } else {\n imageFrame.pixelData = new Int16Array(outFrame);\n }\n\n return imageFrame;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (decodeRLE);\n\n/***/ }),\n\n/***/ \"./shared/getMinMax.js\":\n/*!*****************************!*\\\n !*** ./shared/getMinMax.js ***!\n \\*****************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/**\n * Calculate the minimum and maximum values in an Array\n *\n * @param {Number[]} storedPixelData\n * @return {{min: Number, max: Number}}\n */\nfunction getMinMax(storedPixelData) {\n // we always calculate the min max values since they are not always\n // present in DICOM and we don't want to trust them anyway as cornerstone\n // depends on us providing reliable values for these\n var min = storedPixelData[0];\n var max = storedPixelData[0];\n var storedPixel;\n var numPixels = storedPixelData.length;\n\n for (var index = 1; index < numPixels; index++) {\n storedPixel = storedPixelData[index];\n min = Math.min(min, storedPixel);\n max = Math.max(max, storedPixel);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (getMinMax);\n\n/***/ }),\n\n/***/ \"./version.js\":\n/*!********************!*\\\n !*** ./version.js ***!\n \\********************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ('3.0.6');\n\n/***/ }),\n\n/***/ \"./webWorker/decodeTask/decodeTask.js\":\n/*!********************************************!*\\\n !*** ./webWorker/decodeTask/decodeTask.js ***!\n \\********************************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _shared_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/decoders/decodeJPEG2000.js */ \"./shared/decoders/decodeJPEG2000.js\");\n/* harmony import */ var _shared_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/decoders/decodeJPEGLS.js */ \"./shared/decoders/decodeJPEGLS.js\");\n/* harmony import */ var _shared_calculateMinMax_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/calculateMinMax.js */ \"./shared/calculateMinMax.js\");\n/* harmony import */ var _shared_decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/decodeImageFrame.js */ \"./shared/decodeImageFrame.js\");\n\n\n\n // the configuration object for the decodeTask\n\nvar decodeConfig;\n/**\n * Function to control loading and initializing the codecs\n * @param config\n */\n\nfunction loadCodecs(config) {\n // Initialize the codecs\n if (config.decodeTask.initializeCodecsOnStartup) {\n // console.time('initializeCodecs');\n Object(_shared_decoders_decodeJPEG2000_js__WEBPACK_IMPORTED_MODULE_0__[\"initializeJPEG2000\"])(config.decodeTask);\n Object(_shared_decoders_decodeJPEGLS_js__WEBPACK_IMPORTED_MODULE_1__[\"initializeJPEGLS\"])(config.decodeTask); // console.timeEnd('initializeCodecs');\n }\n}\n/**\n * Task initialization function\n */\n\n\nfunction initialize(config) {\n decodeConfig = config;\n loadCodecs(config);\n}\n/**\n * Task handler function\n */\n\n\nfunction handler(data, doneCallback) {\n // Load the codecs if they aren't already loaded\n loadCodecs(decodeConfig);\n var strict = decodeConfig && decodeConfig.decodeTask && decodeConfig.decodeTask.strict;\n var imageFrame = data.data.imageFrame; // convert pixel data from ArrayBuffer to Uint8Array since web workers support passing ArrayBuffers but\n // not typed arrays\n\n var pixelData = new Uint8Array(data.data.pixelData);\n Object(_shared_decodeImageFrame_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(imageFrame, data.data.transferSyntax, pixelData, decodeConfig.decodeTask, data.data.options);\n\n if (!imageFrame.pixelData) {\n throw new Error('decodeTask: imageFrame.pixelData is undefined after decoding');\n }\n\n Object(_shared_calculateMinMax_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(imageFrame, strict); // convert from TypedArray to ArrayBuffer since web workers support passing ArrayBuffers but not\n // typed arrays\n\n imageFrame.pixelData = imageFrame.pixelData.buffer; // invoke the callback with our result and pass the pixelData in the transferList to move it to\n // UI thread without making a copy\n\n doneCallback(imageFrame, [imageFrame.pixelData]);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n taskType: 'decodeTask',\n handler: handler,\n initialize: initialize\n});\n\n/***/ }),\n\n/***/ \"./webWorker/webWorker.js\":\n/*!********************************!*\\\n !*** ./webWorker/webWorker.js ***!\n \\********************************/\n/*! exports provided: registerTaskHandler */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerTaskHandler\", function() { return registerTaskHandler; });\n// an object of task handlers\nvar taskHandlers = {}; // Flag to ensure web worker is only initialized once\n\nvar initialized = false; // the configuration object passed in when the web worker manager is initialized\n\nvar config;\n/**\n * Initialization function that loads additional web workers and initializes them\n * @param data\n */\n\nfunction initialize(data) {\n // console.log('web worker initialize ', data.workerIndex);\n // prevent initialization from happening more than once\n if (initialized) {\n return;\n } // save the config data\n\n\n config = data.config; // Additional web worker tasks can self-register by calling self.registerTaskHandler\n\n self.registerTaskHandler = registerTaskHandler; // load any additional web worker tasks\n\n if (data.config.webWorkerTaskPaths) {\n for (var i = 0; i < data.config.webWorkerTaskPaths.length; i++) {\n self.importScripts(data.config.webWorkerTaskPaths[i]);\n }\n } // initialize each task handler\n\n\n Object.keys(taskHandlers).forEach(function (key) {\n taskHandlers[key].initialize(config.taskConfiguration);\n }); // tell main ui thread that we have completed initialization\n\n self.postMessage({\n taskType: 'initialize',\n status: 'success',\n result: {},\n workerIndex: data.workerIndex\n });\n initialized = true;\n}\n/**\n * Function exposed to web worker tasks to register themselves\n * @param taskHandler\n */\n\n\nfunction registerTaskHandler(taskHandler) {\n if (taskHandlers[taskHandler.taskType]) {\n console.log('attempt to register duplicate task handler \"', taskHandler.taskType, '\"');\n return false;\n }\n\n taskHandlers[taskHandler.taskType] = taskHandler;\n\n if (initialized) {\n taskHandler.initialize(config.taskConfiguration);\n }\n}\n/**\n * Function to load a new web worker task with updated configuration\n * @param data\n */\n\nfunction loadWebWorkerTask(data) {\n config = data.config;\n self.importScripts(data.sourcePath);\n}\n/**\n * Web worker message handler - dispatches messages to the registered task handlers\n * @param msg\n */\n\n\nself.onmessage = function (msg) {\n // console.log('web worker onmessage', msg.data);\n // handle initialize message\n if (msg.data.taskType === 'initialize') {\n initialize(msg.data);\n return;\n } // handle loadWebWorkerTask message\n\n\n if (msg.data.taskType === 'loadWebWorkerTask') {\n loadWebWorkerTask(msg.data);\n return;\n } // dispatch the message if there is a handler registered for it\n\n\n if (taskHandlers[msg.data.taskType]) {\n try {\n taskHandlers[msg.data.taskType].handler(msg.data, function (result, transferList) {\n self.postMessage({\n taskType: msg.data.taskType,\n status: 'success',\n result: result,\n workerIndex: msg.data.workerIndex\n }, transferList);\n });\n } catch (error) {\n console.log(\"task \".concat(msg.data.taskType, \" failed - \").concat(error.message));\n self.postMessage({\n taskType: msg.data.taskType,\n status: 'failed',\n result: error.message,\n workerIndex: msg.data.workerIndex\n });\n }\n\n return;\n } // not task handler registered - send a failure message back to ui thread\n\n\n console.log('no task handler for ', msg.data.taskType);\n console.log(taskHandlers);\n self.postMessage({\n taskType: msg.data.taskType,\n status: 'failed - no task handler registered',\n workerIndex: msg.data.workerIndex\n });\n};\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=922d2a9b8827ff21dc41.worker.js.map", null); +}; + +/***/ }) + +/******/ }); +}); +//# sourceMappingURL=cornerstoneWADOImageLoader.js.map \ No newline at end of file diff --git a/lib/cornerstone/cornerstoneWebImageLoader.min.js b/lib/cornerstone/cornerstoneWebImageLoader.min.js new file mode 100644 index 0000000..d39cba1 --- /dev/null +++ b/lib/cornerstone/cornerstoneWebImageLoader.min.js @@ -0,0 +1,3 @@ +/*! cornerstone-web-image-loader - 2.1.1 - 2018-12-05 | (c) 2016 Chris Hafey | https://github.com/cornerstonejs/cornerstoneWebImageLoader */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("cornerstoneWebImageLoader",[],t):"object"==typeof exports?exports.cornerstoneWebImageLoader=t():e.cornerstoneWebImageLoader=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=void 0;var r,o=n(4),a=(r=o)&&r.__esModule?r:{default:r};var u=void 0,i={set cornerstone(e){u=e,(0,a.default)(u)},get cornerstone(){return u}};t.external=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadImage=function(e){var t=r.external.cornerstone,n=new XMLHttpRequest;return n.open("GET",e,!0),n.responseType="arraybuffer",i.beforeSend(n),n.onprogress=function(n){if(n.lengthComputable){var r=n.loaded,o=n.total,a=Math.round(r/o*100),u={imageId:e,loaded:r,total:o,percentComplete:a};t.triggerEvent(t.events,"cornerstoneimageloadprogress",u)}},{promise:new Promise(function(t,r){n.onload=function(){(0,o.default)(this.response).then(function(n){var r=(0,a.default)(n,e);t(r)},r)},n.send()}),cancelFn:function(){n.abort()}}},t.configure=function(e){i=e};var r=n(0),o=u(n(3)),a=u(n(2));function u(e){return e&&e.__esModule?e:{default:e}}var i={beforeSend:function(){}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.naturalHeight,u=e.naturalWidth;return{imageId:t,minPixelValue:0,maxPixelValue:255,slope:1,intercept:0,windowCenter:128,windowWidth:255,render:r.external.cornerstone.renderWebImage,getPixelData:function(){return(n=void 0,a===t?n=o.getContext("2d"):(o.height=e.naturalHeight,o.width=e.naturalWidth,(n=o.getContext("2d")).drawImage(e,0,0),a=t),n.getImageData(0,0,e.naturalWidth,e.naturalHeight)).data;var n},getCanvas:function(){return a===t?o:(o.height=e.naturalHeight,o.width=e.naturalWidth,o.getContext("2d").drawImage(e,0,0),a=t,o)},getImage:function(){return e},rows:n,columns:u,height:n,width:u,color:!0,rgba:!1,columnPixelSpacing:void 0,rowPixelSpacing:void 0,invert:!1,sizeInBytes:n*u*4}};var r=n(0),o=document.createElement("canvas"),a=void 0},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return new Promise(function(t,n){var r=new Image,o=new Uint8Array(e),a=new Blob([o]),u=window.URL||window.webkitURL,i=u.createObjectURL(a);r.src=i,r.onload=function(){t(r),u.revokeObjectURL(i)},r.onerror=function(e){u.revokeObjectURL(i),n(e)}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){e.registerImageLoader("http",r.loadImage),e.registerImageLoader("https",r.loadImage)};var r=n(1)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.external=t.configure=t.loadImage=t.createImage=t.arrayBufferToImage=void 0;var r=i(n(3)),o=i(n(2)),a=n(1),u=n(0);function i(e){return e&&e.__esModule?e:{default:e}}var d={arrayBufferToImage:r.default,createImage:o.default,loadImage:a.loadImage,configure:a.configure,external:u.external};t.arrayBufferToImage=r.default,t.createImage=o.default,t.loadImage=a.loadImage,t.configure=a.configure,t.external=u.external,t.default=d}])}); +//# sourceMappingURL=cornerstoneWebImageLoader.min.js.map \ No newline at end of file diff --git a/lib/cornerstone/dicomParser.min.js b/lib/cornerstone/dicomParser.min.js new file mode 100644 index 0000000..1c636ce --- /dev/null +++ b/lib/cornerstone/dicomParser.min.js @@ -0,0 +1,17 @@ +/*! dicom-parser - 1.8.4 - 2019-11-26 | (c) 2017 Chris Hafey | https://github.com/cornerstonejs/dicomParser */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("dicom-parser",[],t):"object"==typeof exports?exports["dicom-parser"]=t():e.dicomParser=t()}(this,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=79)}([function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";(function(e){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var n=r(73),i=r(72),a=r(39);function o(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(e,t){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Z(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return j(e).length;default:if(n)return Z(e).length;t=(""+t).toLowerCase(),n=!0}}function g(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function m(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=l.from(t,n)),l.isBuffer(t))return 0===t.length?-1:_(e,t,r,n,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):_(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(e,t,r,n,i){var a,o=1,s=e.length,l=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,s/=2,l/=2,r/=2}function f(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(i){var u=-1;for(a=r;as&&(r=s-l),a=r;a>=0;a--){for(var h=!0,d=0;di&&(n=i):n=i;var a=t.length;if(a%2!=0)throw new TypeError("Invalid hex string");n>a/2&&(n=a/2);for(var o=0;o>8,i=r%256,a.push(i),a.push(n);return a}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function k(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;i239?4:f>223?3:f>191?2:1;if(i+h<=r)switch(h){case 1:f<128&&(u=f);break;case 2:128==(192&(a=e[i+1]))&&(l=(31&f)<<6|63&a)>127&&(u=l);break;case 3:a=e[i+1],o=e[i+2],128==(192&a)&&128==(192&o)&&(l=(15&f)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:a=e[i+1],o=e[i+2],s=e[i+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(l=(15&f)<<18|(63&a)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),i+=h}return function(e){var t=e.length;if(t<=A)return String.fromCharCode.apply(String,e);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return D(this,t,r);case"utf8":case"utf-8":return k(this,t,r);case"ascii":return P(this,t,r);case"latin1":case"binary":return T(this,t,r);case"base64":return S(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e="",r=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(e+=" ... ")),""},l.prototype.compare=function(e,t,r,n,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(t>>>=0,r>>>=0,n>>>=0,i>>>=0,this===e)return 0;for(var a=i-n,o=r-t,s=Math.min(a,o),f=this.slice(n,i),u=e.slice(t,r),h=0;hi)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return y(this,e,t,r);case"utf8":case"utf-8":return b(this,e,t,r);case"ascii":return v(this,e,t,r);case"latin1":case"binary":return w(this,e,t,r);case"base64":return E(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function P(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;in)&&(r=n);for(var i="",a=t;ar)throw new RangeError("Trying to access beyond buffer length")}function R(e,t,r,n,i,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function L(e,t,r,n){t<0&&(t=65535+t+1);for(var i=0,a=Math.min(e.length-r,2);i>>8*(n?i:1-i)}function F(e,t,r,n){t<0&&(t=4294967295+t+1);for(var i=0,a=Math.min(e.length-r,4);i>>8*(n?i:3-i)&255}function B(e,t,r,n,i,a){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(e,t,r,n,a){return a||B(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,a){return a||B(e,0,r,8),i.write(e,t,r,n,52,8),r+8}l.prototype.slice=function(e,t){var r,n=this.length;if(e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t0&&(i*=256);)n+=this[e+--t]*i;return n},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=this[e],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*t)),n},l.prototype.readIntBE=function(e,t,r){e|=0,t|=0,r||I(e,t,this.length);for(var n=t,i=1,a=this[e+--n];n>0&&(i*=256);)a+=this[e+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t|=0,r|=0,n)||R(this,e,t,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+i]=e/a&255;return t+r},l.prototype.writeUInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):F(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},l.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t|=0,!n){var i=Math.pow(2,8*r-1);R(this,e,t,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},l.prototype.writeInt8=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):F(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,r){return e=+e,t|=0,r||R(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):F(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,r){return U(this,e,t,!0,r)},l.prototype.writeFloatBE=function(e,t,r){return U(this,e,t,!1,r)},l.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},l.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},l.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else if(a<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;a.push(r)}else if(r<2048){if((t-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function j(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(N,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function C(e,t,r,n){for(var i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}}).call(this,r(0))},function(e,t,r){"use strict";var n=r(10),i=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=h;var a=r(6);a.inherits=r(5);var o=r(36),s=r(18);a.inherits(h,o);for(var l=i(s.prototype),f=0;f1)for(var r=1;r0){var r=(0,i.readFixedString)(this.byteArray,t.dataOffset,t.length).match(/\\/g);return null===r?1:r.length+1}}},{key:"string",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split("\\")[t].trim():n.trim()}}},{key:"text",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){var n=(0,i.readFixedString)(this.byteArray,r.dataOffset,r.length);return t>=0?n.split("\\")[t].replace(/ +$/,""):n.replace(/ +$/,"")}}},{key:"floatString",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseFloat(n)}}},{key:"intString",value:function(e,t){var r=this.elements[e];if(r&&r.length>0){t=void 0!==t?t:0;var n=this.string(e,t);if(void 0!==n)return parseInt(n)}}},{key:"attributeTag",value:function(e){var t=this.elements[e];if(t&&4===t.length){var r=a(t,this.byteArrayParser).readUint16,n=this.byteArray,i=t.dataOffset;return"x"+("00000000"+(256*r(n,i)*256+r(n,i+2)).toString(16)).substr(-8)}}}]),e}();t.default=o},function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function i(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)i(r,n)&&(e[n]=r[n])}}return e},t.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var a=0;a=n.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=r,this.byteArray=n,this.position=i||0,this.warnings=[]}return i(t,[{key:"seek",value:function(e){if(this.position+e<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=e}},{key:"readByteStream",value:function(e){if(this.position+e>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var r=(0,o.default)(this.byteArray,this.position,e);return this.position+=e,new t(this.byteArrayParser,r)}},{key:"readUint16",value:function(){var e=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,e}},{key:"readUint32",value:function(){var e=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,e}},{key:"readFixedString",value:function(e){var t=(0,s.readFixedString)(this.byteArray,this.position,e);return this.position+=e,t}}]),t}();t.default=l}).call(this,r(1).Buffer)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(void 0===e)throw"dicomParser.readSequenceItem: missing required parameter 'byteStream'";var t={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};if("xfffee000"!==t.tag)throw"dicomParser.readSequenceItem: item tag (FFFE,E000) not found at offset "+e.position;return t};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readFixedString=function(e,t,r){if(r<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(t+r>e.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var n,i="",a=0;a3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?t.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'";if(rt.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";var a=e.elements;for(;t.positionr)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"},t.parseDicomDataSetImplicit=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(r=void 0===r?e.byteArray.length:r,void 0===t)throw"dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'";if(rt.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";var a=e.elements;for(;t.position= 0";if(r>=t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(s<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(r+s>t.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var u=new i.default(e.byteArrayParser,e.byteArray,t.dataOffset),h=(0,a.default)(u);if("xfffee000"!==h.tag)throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";u.seek(h.length);var d=u.position;if(1===s)return(0,o.default)(u.byteArray,d+f[r].offset+8,f[r].length);for(var c=l(f,r,s),p=(0,n.default)(u.byteArray,c),g=0,m=r;m-1?n:a.nextTick;y.WritableState=_;var f=r(6);f.inherits=r(5);var u={deprecate:r(61)},h=r(35),d=r(9).Buffer,c=i.Uint8Array||function(){};var p,g=r(34);function m(){}function _(e,t){s=s||r(2),e=e||{};var n=t instanceof s;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var i=e.highWaterMark,f=e.writableHighWaterMark,u=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(f||0===f)?f:u,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var h=!1===e.decodeStrings;this.decodeStrings=!h,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,i=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,i){--t.pendingcb,r?(a.nextTick(i,n),a.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit("error",n)):(i(n),e._writableState.errorEmitted=!0,e.emit("error",n),S(e,t))}(e,r,n,t,i);else{var o=E(r);o||r.corked||r.bufferProcessing||!r.bufferedRequest||w(e,r),n?l(v,e,r,o,i):v(e,r,o,i)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function y(e){if(s=s||r(2),!(p.call(y,this)||this instanceof s))return new y(e);this._writableState=new _(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),h.call(this)}function b(e,t,r,n,i,a,o){t.writelen=n,t.writecb=o,t.writing=!0,t.sync=!0,r?e._writev(i,t.onwrite):e._write(i,a,t.onwrite),t.sync=!1}function v(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,n(),S(e,t)}function w(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,i=new Array(n),a=t.corkedRequestsFree;a.entry=r;for(var s=0,l=!0;r;)i[s]=r,r.isBuf||(l=!1),r=r.next,s+=1;i.allBuffers=l,b(e,t,!0,t.length,i,"",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new o(t),t.bufferedRequestCount=0}else{for(;r;){var f=r.chunk,u=r.encoding,h=r.callback;if(b(e,t,!1,t.objectMode?1:f.length,f,u,h),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function E(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final(function(r){t.pendingcb--,r&&e.emit("error",r),t.prefinished=!0,e.emit("prefinish"),S(e,t)})}function S(e,t){var r=E(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(x,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),r}f.inherits(y,h),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,"buffer",{get:u.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(y,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===y&&(e&&e._writableState instanceof _)}})):p=function(e){return e instanceof this},y.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},y.prototype.write=function(e,t,r){var n,i=this._writableState,o=!1,s=!i.objectMode&&(n=e,d.isBuffer(n)||n instanceof c);return s&&!d.isBuffer(e)&&(e=function(e){return d.from(e)}(e)),"function"==typeof t&&(r=t,t=null),s?t="buffer":t||(t=i.defaultEncoding),"function"!=typeof r&&(r=m),i.ended?function(e,t){var r=new Error("write after end");e.emit("error",r),a.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var i=!0,o=!1;return null===r?o=new TypeError("May not write null values to stream"):"string"==typeof r||void 0===r||t.objectMode||(o=new TypeError("Invalid non-string/buffer chunk")),o&&(e.emit("error",o),a.nextTick(n,o),i=!1),i}(this,i,e,r))&&(i.pendingcb++,o=function(e,t,r,n,i,a){if(!r){var o=function(e,t,r){e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=d.from(t,r));return t}(t,n,i);n!==o&&(r=!0,i="buffer",n=o)}var s=t.objectMode?1:n.length;t.length+=s;var l=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},y.prototype._write=function(e,t,r){r(new Error("_write() is not implemented"))},y.prototype._writev=null,y.prototype.end=function(e,t,r){var n=this._writableState;"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!==e&&void 0!==e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?a.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(y.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),y.prototype.destroy=g.destroy,y.prototype._undestroy=g.undestroy,y.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,r(3),r(63).setImmediate,r(0))},function(e,t,r){(t=e.exports=r(36)).Stream=t,t.Readable=t,t.Writable=r(18),t.Duplex=r(2),t.Transform=r(32),t.PassThrough=r(60)},function(e,t){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return"function"==typeof e}function i(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,r,o,s,l,f;if(this._events||(this._events={}),"error"===e&&(!this._events.error||i(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var u=new Error('Uncaught, unspecified "error" event. ('+t+")");throw u.context=t,u}if(a(r=this._events[e]))return!1;if(n(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),r.apply(this,s)}else if(i(r))for(s=Array.prototype.slice.call(arguments,1),o=(f=r.slice()).length,l=0;l0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){if(!n(t))throw TypeError("listener must be a function");var r=!1;function i(){this.removeListener(e,i),r||(r=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},r.prototype.removeListener=function(e,t){var r,a,o,s;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(o=(r=this._events[e]).length,a=-1,r===t||n(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(i(r)){for(s=o;s-- >0;)if(r[s]===t||r[s].listener&&r[s].listener===t){a=s;break}if(a<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n(r=this._events[e]))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){return this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return e[t]+256*e[t+1]},readInt16:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";var r=e[t]+(e[t+1]<<8);return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return e[t]+256*e[t+1]+256*e[t+2]*256+256*e[t+3]*256*256},readInt32:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24)},readFloat:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[0]=e[t],r[1]=e[t+1],r[2]=e[t+2],r[3]=e[t+3],r[4]=e[t+4],r[5]=e[t+5],r[6]=e[t+6],r[7]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,r){if(void 0!==e&&t instanceof e)return e.alloc(r);if(t instanceof Uint8Array)return new Uint8Array(r);throw"dicomParser.alloc: unknown type for byteArray"}}).call(this,r(1).Buffer)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var r=e.byteArray.length-8;for(;e.position<=r;){var n=e.readUint16();if(65534===n){var i=e.readUint16();if(57357===i){var a=e.readUint32();return 0!==a&&e.warnings("encountered non zero length following item delimiter at position "+(e.position-4)+" while reading element of undefined length with tag "+t.tag),void(t.length=e.position-t.dataOffset)}}}t.length=e.byteArray.length-t.dataOffset,e.seek(e.byteArray.length-e.position)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readDicomElementImplicit: missing required parameter 'byteStream'";var o={tag:(0,a.default)(e),length:e.readUint32(),dataOffset:e.position};4294967295===o.length&&(o.hadUndefinedLength=!0);if(o.tag===t)return o;if(s(o,e,r))return(0,i.default)(e,o),o;if(o.hadUndefinedLength)return(0,n.default)(e,o),o;return e.seek(o.length),o};var n=o(r(23)),i=o(r(25)),a=o(r(4));function o(e){return e&&e.__esModule?e:{default:e}}var s=function(e,t,r){if(void 0!==r)return"SQ"===r(e.tag);if(t.position+4<=t.byteArray.length){var n=(0,a.default)(t);return t.seek(-4),"xfffee000"===n||"xfffee0dd"===n}return t.warnings.push("eof encountered before finding sequence item tag or sequence delimiter tag in peeking to determine VR"),!1}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.readSequenceItemsImplicit: missing required parameter 'element'";t.items=[],4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var n=(0,o.default)(e);if(e.seek(-4),"xfffee0dd"===n)return t.length=e.position-t.dataOffset,e.seek(8),t;var i=f(e,r);t.items.push(i)}e.warnings.push("eof encountered before finding sequence delimiter in sequence of undefined length"),t.length=e.byteArray.length-t.dataOffset}(e,t,r):function(e,t,r){var n=t.dataOffset+t.length;for(;e.position= 0";if(r>=n.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var l=n[r],f=o(i,l);if(void 0===f)throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";var u=s(r,n,i,f);return(0,a.default)(e,t,f,u,i)};var n,i=r(17),a=(n=i)&&n.__esModule?n:{default:n};var o=function(e,t){for(var r=0;r>>1:e>>>1;t[r]=e}return t}();e.exports=function(e,t,r,i){var a=n,o=i+r;e^=-1;for(var s=i;s>>8^a[255&(e^t[s])];return-1^e}},function(e,t,r){"use strict";e.exports=function(e,t,r,n){for(var i=65535&e|0,a=e>>>16&65535|0,o=0;0!==r;){r-=o=r>2e3?2e3:r;do{a=a+(i=i+t[n++]|0)|0}while(--o);i%=65521,a%=65521}return i|a<<16|0}},function(e,t,r){(function(e,n){var i=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],r=0;r=a)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(e){return"[Circular]"}default:return e}}),l=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(r)?n.showHidden=r:r&&t._extend(n,r),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var r=s.styles[t];return r?"["+s.colors[r][0]+"m"+e+"["+s.colors[r][1]+"m":e}function f(e,t){return e}function u(e,r,n){if(e.customInspect&&r&&x(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var i=r.inspect(n,e);return _(i)||(i=u(e,i,n)),i}var a=function(e,t){if(y(t))return e.stylize("undefined","undefined");if(_(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(m(t))return e.stylize(""+t,"number");if(p(t))return e.stylize(""+t,"boolean");if(g(t))return e.stylize("null","null")}(e,r);if(a)return a;var o=Object.keys(r),s=function(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}(o);if(e.showHidden&&(o=Object.getOwnPropertyNames(r)),E(r)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return h(r);if(0===o.length){if(x(r)){var l=r.name?": "+r.name:"";return e.stylize("[Function"+l+"]","special")}if(b(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(w(r))return e.stylize(Date.prototype.toString.call(r),"date");if(E(r))return h(r)}var f,v="",S=!1,k=["{","}"];(c(r)&&(S=!0,k=["[","]"]),x(r))&&(v=" [Function"+(r.name?": "+r.name:"")+"]");return b(r)&&(v=" "+RegExp.prototype.toString.call(r)),w(r)&&(v=" "+Date.prototype.toUTCString.call(r)),E(r)&&(v=" "+h(r)),0!==o.length||S&&0!=r.length?n<0?b(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),f=S?function(e,t,r,n,i){for(var a=[],o=0,s=t.length;o=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(f,v,k)):k[0]+v+k[1]}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function d(e,t,r,n,i,a){var o,s,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?s=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(s=e.stylize("[Setter]","special")),P(n,i)||(o="["+i+"]"),s||(e.seen.indexOf(l.value)<0?(s=g(r)?u(e,l.value,null):u(e,l.value,r-1)).indexOf("\n")>-1&&(s=a?s.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+s.split("\n").map(function(e){return" "+e}).join("\n")):s=e.stylize("[Circular]","special")),y(o)){if(a&&i.match(/^\d+$/))return s;(o=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=e.stylize(o,"string"))}return o+": "+s}function c(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function g(e){return null===e}function m(e){return"number"==typeof e}function _(e){return"string"==typeof e}function y(e){return void 0===e}function b(e){return v(e)&&"[object RegExp]"===S(e)}function v(e){return"object"==typeof e&&null!==e}function w(e){return v(e)&&"[object Date]"===S(e)}function E(e){return v(e)&&("[object Error]"===S(e)||e instanceof Error)}function x(e){return"function"==typeof e}function S(e){return Object.prototype.toString.call(e)}function k(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(y(a)&&(a=n.env.NODE_DEBUG||""),e=e.toUpperCase(),!o[e])if(new RegExp("\\b"+e+"\\b","i").test(a)){var r=n.pid;o[e]=function(){var n=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,n)}}else o[e]=function(){};return o[e]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=c,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=function(e){return null==e},t.isNumber=m,t.isString=_,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=y,t.isRegExp=b,t.isObject=v,t.isDate=w,t.isError=E,t.isFunction=x,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(54);var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function P(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){var e,r;console.log("%s - %s",(e=new Date,r=[k(e.getHours()),k(e.getMinutes()),k(e.getSeconds())].join(":"),[e.getDate(),A[e.getMonth()],r].join(" ")),t.format.apply(t,arguments))},t.inherits=r(53),t._extend=function(e,t){if(!t||!v(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,r(0),r(3))},function(e,t,r){"use strict";(function(t){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +function n(e,t){if(e===t)return 0;for(var r=e.length,n=t.length,i=0,a=Math.min(r,n);i=0;f--)if(u[f]!==h[f])return!1;for(f=u.length-1;f>=0;f--)if(l=u[f],!y(e[l],t[l],r,n))return!1;return!0}(e,t,r,o))}return r?e===t:e==t}function b(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function v(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function w(e,t,r,n){var i;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=function(e){var t;try{e()}catch(e){t=e}return t}(t),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&m(i,r,"Missing expected exception"+n);var o="string"==typeof n,s=!e&&a.isError(i),l=!e&&i&&!r;if((s&&o&&v(i,r)||l)&&m(i,r,"Got unwanted exception"+n),e&&i&&r&&!v(i,r)||!e&&i)throw i}h.AssertionError=function(e){var t;this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=p(g((t=this).actual),128)+" "+t.operator+" "+p(g(t.expected),128),this.generatedMessage=!0);var r=e.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var i=n.stack,a=c(r),o=i.indexOf("\n"+a);if(o>=0){var s=i.indexOf("\n",o+1);i=i.substring(s+1)}this.stack=i}}},a.inherits(h.AssertionError,Error),h.fail=m,h.ok=_,h.equal=function(e,t,r){e!=t&&m(e,t,r,"==",h.equal)},h.notEqual=function(e,t,r){e==t&&m(e,t,r,"!=",h.notEqual)},h.deepEqual=function(e,t,r){y(e,t,!1)||m(e,t,r,"deepEqual",h.deepEqual)},h.deepStrictEqual=function(e,t,r){y(e,t,!0)||m(e,t,r,"deepStrictEqual",h.deepStrictEqual)},h.notDeepEqual=function(e,t,r){y(e,t,!1)&&m(e,t,r,"notDeepEqual",h.notDeepEqual)},h.notDeepStrictEqual=function e(t,r,n){y(t,r,!0)&&m(t,r,n,"notDeepStrictEqual",e)},h.strictEqual=function(e,t,r){e!==t&&m(e,t,r,"===",h.strictEqual)},h.notStrictEqual=function(e,t,r){e===t&&m(e,t,r,"!==",h.notStrictEqual)},h.throws=function(e,t,r){w(!0,e,t,r)},h.doesNotThrow=function(e,t,r){w(!1,e,t,r)},h.ifError=function(e){if(e)throw e};var E=Object.keys||function(e){var t=[];for(var r in e)o.call(e,r)&&t.push(r);return t}}).call(this,r(0))},function(e,t,r){"use strict";e.exports=a;var n=r(2),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e),this._transformState={afterTransform:function(e,t){var r=this._transformState;r.transforming=!1;var n=r.writecb;if(!n)return this.emit("error",new Error("write callback called multiple times"));r.writechunk=null,r.writecb=null,null!=t&&this.push(t),n(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length>5==6?2:e>>4==14?3:e>>3==30?4:-1}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�".repeat(r);if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�".repeat(r+1);if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�".repeat(r+2)}}(this,e,t);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function f(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function u(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function h(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function d(e){return e.toString(this.encoding)}function c(e){return e&&e.length?this.write(e):""}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return i>0&&(e.lastNeed=i-1),i;if(--n=0)return i>0&&(e.lastNeed=i-2),i;if(--n=0)return i>0&&(2===i?i=0:e.lastNeed=i-3),i;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,r){"use strict";var n=r(10);function i(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(i,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(n.nextTick(i,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,r){e.exports=r(20).EventEmitter},function(e,t,r){"use strict";(function(t,n){var i=r(10);e.exports=b;var a,o=r(39);b.ReadableState=y;r(20).EventEmitter;var s=function(e,t){return e.listeners(t).length},l=r(35),f=r(9).Buffer,u=t.Uint8Array||function(){};var h=r(6);h.inherits=r(5);var d=r(66),c=void 0;c=d&&d.debuglog?d.debuglog("stream"):function(){};var p,g=r(65),m=r(34);h.inherits(b,l);var _=["error","close","destroy","pause","resume"];function y(e,t){a=a||r(2),e=e||{};var n=t instanceof a;this.objectMode=!!e.objectMode,n&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var i=e.highWaterMark,o=e.readableHighWaterMark,s=this.objectMode?16:16384;this.highWaterMark=i||0===i?i:n&&(o||0===o)?o:s,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new g,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=r(33).StringDecoder),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function b(e){if(a=a||r(2),!(this instanceof b))return new b(e);this._readableState=new y(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),l.call(this)}function v(e,t,r,n,i){var a,o=e._readableState;null===t?(o.reading=!1,function(e,t){if(t.ended)return;if(t.decoder){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,S(e)}(e,o)):(i||(a=function(e,t){var r;n=t,f.isBuffer(n)||n instanceof u||"string"==typeof t||void 0===t||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk"));var n;return r}(o,t)),a?e.emit("error",a):o.objectMode||t&&t.length>0?("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===f.prototype||(t=function(e){return f.from(e)}(t)),n?o.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):w(e,o,t,!0):o.ended?e.emit("error",new Error("stream.push() after EOF")):(o.reading=!1,o.decoder&&!r?(t=o.decoder.write(t),o.objectMode||0!==t.length?w(e,o,t,!1):A(e,o)):w(e,o,t,!1))):n||(o.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=E?e=E:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function S(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(c("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?i.nextTick(k,e):k(e))}function k(e){c("emit readable"),e.emit("readable"),O(e)}function A(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(P,e,t))}function P(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ea.length?a.length:e;if(o===a.length?i+=a:i+=a.slice(0,e),0===(e-=o)){o===a.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=a.slice(o));break}++n}return t.length-=n,i}(e,t):function(e,t){var r=f.allocUnsafe(e),n=t.head,i=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var a=n.data,o=e>a.length?a.length:e;if(a.copy(r,r.length-e,0,o),0===(e-=o)){o===a.length?(++i,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(o));break}++i}return t.length-=i,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function R(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,i.nextTick(L,t,e))}function L(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function F(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return c("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?R(this):S(this),null;if(0===(e=x(e,t))&&t.ended)return 0===t.length&&R(this),null;var n,i=t.needReadable;return c("need readable",i),(0===t.length||t.length-e0?I(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&R(this)),null!==n&&this.emit("data",n),n},b.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},b.prototype.pipe=function(e,t){var r=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,c("pipe count=%d opts=%j",a.pipesCount,t);var l=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?u:b;function f(t,n){c("onunpipe"),t===r&&n&&!1===n.hasUnpiped&&(n.hasUnpiped=!0,c("cleanup"),e.removeListener("close",_),e.removeListener("finish",y),e.removeListener("drain",h),e.removeListener("error",m),e.removeListener("unpipe",f),r.removeListener("end",u),r.removeListener("end",b),r.removeListener("data",g),d=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||h())}function u(){c("onend"),e.end()}a.endEmitted?i.nextTick(l):r.once("end",l),e.on("unpipe",f);var h=function(e){return function(){var t=e._readableState;c("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,O(e))}}(r);e.on("drain",h);var d=!1;var p=!1;function g(t){c("ondata"),p=!1,!1!==e.write(t)||p||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==F(a.pipes,e))&&!d&&(c("false write response, pause",r._readableState.awaitDrain),r._readableState.awaitDrain++,p=!0),r.pause())}function m(t){c("onerror",t),b(),e.removeListener("error",m),0===s(e,"error")&&e.emit("error",t)}function _(){e.removeListener("finish",y),b()}function y(){c("onfinish"),e.removeListener("close",_),b()}function b(){c("unpipe"),r.unpipe(e)}return r.on("data",g),function(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?o(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",m),e.once("close",_),e.once("finish",y),e.emit("pipe",r),a.flowing||(c("pipe resume"),r.resume()),e},b.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r),this);if(!e){var n=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a"x0002ffff"){r.position=n;break}s.parser=a.default,t[s.tag]=s}var l=new i.default(r.byteArrayParser,r.byteArray,t);return l.warnings=r.warnings,l.position=r.position,l}()};var n=s(r(12)),i=s(r(7)),a=s(r(21)),o=s(r(15));function s(e){return e&&e.__esModule?e:{default:e}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={readUint16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(e[t]<<8)+e[t+1]},readInt16:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(t+2>e.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";var r=(e[t]<<8)+e[t+1];return 32768&r&&(r=r-65535-1),r},readUint32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*e[t]+e[t+1])+e[t+2])+e[t+3]},readInt32:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(e[t]<<24)+(e[t+1]<<16)+(e[t+2]<<8)+e[t+3]},readFloat:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(t+4>e.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var r=new Uint8Array(4);return r[3]=e[t],r[2]=e[t+1],r[1]=e[t+2],r[0]=e[t+3],new Float32Array(r.buffer)[0]},readDouble:function(e,t){if(t<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(t+8>e.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var r=new Uint8Array(8);return r[7]=e[t],r[6]=e[t+1],r[5]=e[t+2],r[4]=e[t+3],r[3]=e[t+4],r[2]=e[t+5],r[1]=e[t+6],r[0]=e[t+7],new Float64Array(r.buffer)[0]}}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){if(void 0===e)throw"dicomParser.readSequenceItemsExplicit: missing required parameter 'byteStream'";if(void 0===t)throw"dicomParser.readSequenceItemsExplicit: missing required parameter 'element'";t.items=[],4294967295===t.length?function(e,t,r){for(;e.position+4<=e.byteArray.length;){var n=(0,o.default)(e);if(e.seek(-4),"xfffee0dd"===n)return t.length=e.position-t.dataOffset,e.seek(8),t;var i=f(e,r);t.items.push(i)}r.push("eof encountered before finding sequence delimitation tag while reading sequence of undefined length"),t.length=e.position-t.dataOffset}(e,t,r):function(e,t,r){var n=t.dataOffset+t.length;for(;e.positione.byteArray.length-e.position&&(f=e.byteArray.length-e.position),t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f),void(t.length=e.position-t.dataOffset);t.fragments.push({offset:e.position-s-8,position:e.position,length:f}),e.seek(f)}r&&r.push("pixel data element "+t.tag+" missing sequence delimiter tag xfffee0dd")};var n,i=r(4),a=(n=i)&&n.__esModule?n:{default:n}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(void 0===e||void 0===t)throw"dicomParser.explicitElementToString: missing required parameters";if(void 0===t.vr)throw"dicomParser.explicitElementToString: cannot convert implicit element to string";var r,i=t.vr,a=t.tag;function o(t,r){for(var n="",i=0;i= 0";if(0!==t.basicOffsetTable.length)return(0,n.default)(e,t,r);return(0,i.default)(e,t,0,t.fragments.length)};var n=a(r(27)),i=a(r(17));function a(e){return e&&e.__esModule?e:{default:e}}var o=!1},function(e,t,r){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},function(e,t,r){"use strict";var n=r(8),i=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],a=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],s=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(e,t,r,l,f,u,h,d){var c,p,g,m,_,y,b,v,w,E=d.bits,x=0,S=0,k=0,A=0,P=0,T=0,D=0,O=0,I=0,R=0,L=null,F=0,B=new n.Buf16(16),U=new n.Buf16(16),M=null,N=0;for(x=0;x<=15;x++)B[x]=0;for(S=0;S=1&&0===B[A];A--);if(P>A&&(P=A),0===A)return f[u++]=20971520,f[u++]=20971520,d.bits=1,0;for(k=1;k0&&(0===e||1!==A))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+B[x];for(S=0;S852||2===e&&I>592)return 1;for(;;){b=x-D,h[S]y?(v=M[N+h[S]],w=L[F+h[S]]):(v=96,w=0),c=1<>D)+(p-=c)]=b<<24|v<<16|w|0}while(0!==p);for(c=1<>=1;if(0!==c?(R&=c-1,R+=c):R=0,S++,0==--B[x]){if(x===A)break;x=t[r+h[S]]}if(x>P&&(R&m)!==g){for(0===D&&(D=P),_+=k,O=1<<(T=x-D);T+D852||2===e&&I>592)return 1;f[g=R&m]=P<<24|T<<16|_-u|0}}return 0!==R&&(f[_+R]=x-D<<24|64<<16|0),d.bits=P,0}},function(e,t,r){"use strict";e.exports=function(e,t){var r,n,i,a,o,s,l,f,u,h,d,c,p,g,m,_,y,b,v,w,E,x,S,k,A;r=e.state,n=e.next_in,k=e.input,i=n+(e.avail_in-5),a=e.next_out,A=e.output,o=a-(t-e.avail_out),s=a+(e.avail_out-257),l=r.dmax,f=r.wsize,u=r.whave,h=r.wnext,d=r.window,c=r.hold,p=r.bits,g=r.lencode,m=r.distcode,_=(1<>>=v=b>>>24,p-=v,0===(v=b>>>16&255))A[a++]=65535&b;else{if(!(16&v)){if(0==(64&v)){b=g[(65535&b)+(c&(1<>>=v,p-=v),p<15&&(c+=k[n++]<>>=v=b>>>24,p-=v,!(16&(v=b>>>16&255))){if(0==(64&v)){b=m[(65535&b)+(c&(1<l){e.msg="invalid distance too far back",r.mode=30;break e}if(c>>>=v,p-=v,E>(v=a-o)){if((v=E-v)>u&&r.sane){e.msg="invalid distance too far back",r.mode=30;break e}if(x=0,S=d,0===h){if(x+=f-v,v2;)A[a++]=S[x++],A[a++]=S[x++],A[a++]=S[x++],w-=3;w&&(A[a++]=S[x++],w>1&&(A[a++]=S[x++]))}else{x=a-E;do{A[a++]=A[x++],A[a++]=A[x++],A[a++]=A[x++],w-=3}while(w>2);w&&(A[a++]=A[x++],w>1&&(A[a++]=A[x++]))}break}}break}}while(n>3,c&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=a,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function ie(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=E,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(ee),t.distcode=t.distdyn=new n.Buf32(te),t.sane=1,t.back=-1,p):_}function ae(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,ie(e)):_}function oe(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,ae(e))):_}function se(e,t){var r,i;return e?(i=new function(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0},e.state=i,i.window=null,(r=oe(e,t))!==p&&(e.state=null),r):_}var le,fe,ue=!0;function he(e){if(ue){var t;for(le=new n.Buf32(512),fe=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(f,e.lens,0,288,le,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(u,e.lens,0,32,fe,0,e.work,{bits:5}),ue=!1}e.lencode=le,e.lenbits=9,e.distcode=fe,e.distbits=5}function de(e,t,r,i){var a,o=e.state;return null===o.window&&(o.wsize=1<=o.wsize?(n.arraySet(o.window,t,r-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):((a=o.wsize-o.wnext)>i&&(a=i),n.arraySet(o.window,t,r-i,a,o.wnext),(i-=a)?(n.arraySet(o.window,t,r-i,i,0),o.wnext=i,o.whave=o.wsize):(o.wnext+=a,o.wnext===o.wsize&&(o.wnext=0),o.whave>>8&255,r.check=a(r.check,Pe,2,0),se=0,le=0,r.mode=x;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&se)<<8)+(se>>8))%31){e.msg="incorrect header check",r.mode=X;break}if((15&se)!==w){e.msg="unknown compression method",r.mode=X;break}if(le-=4,Ee=8+(15&(se>>>=4)),0===r.wbits)r.wbits=Ee;else if(Ee>r.wbits){e.msg="invalid window size",r.mode=X;break}r.dmax=1<>8&1),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=S;case S:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,Pe[2]=se>>>16&255,Pe[3]=se>>>24&255,r.check=a(r.check,Pe,4,0)),se=0,le=0,r.mode=k;case k:for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>8),512&r.flags&&(Pe[0]=255&se,Pe[1]=se>>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0,r.mode=A;case A:if(1024&r.flags){for(;le<16;){if(0===ae)break e;ae--,se+=ee[re++]<>>8&255,r.check=a(r.check,Pe,2,0)),se=0,le=0}else r.head&&(r.head.extra=null);r.mode=P;case P:if(1024&r.flags&&((ce=r.length)>ae&&(ce=ae),ce&&(r.head&&(Ee=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,ee,re,ce,Ee)),512&r.flags&&(r.check=a(r.check,ee,ce,re)),ae-=ce,re+=ce,r.length-=ce),r.length))break e;r.length=0,r.mode=T;case T:if(2048&r.flags){if(0===ae)break e;ce=0;do{Ee=ee[re+ce++],r.head&&Ee&&r.length<65536&&(r.head.name+=String.fromCharCode(Ee))}while(Ee&&ce>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=L;break;case I:for(;le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>=7&le,le-=7&le,r.mode=V;break}for(;le<3;){if(0===ae)break e;ae--,se+=ee[re++]<>>=1)){case 0:r.mode=B;break;case 1:if(he(r),r.mode=j,t===c){se>>>=2,le-=2;break e}break;case 2:r.mode=N;break;case 3:e.msg="invalid block type",r.mode=X}se>>>=2,le-=2;break;case B:for(se>>>=7&le,le-=7≤le<32;){if(0===ae)break e;ae--,se+=ee[re++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=X;break}if(r.length=65535&se,se=0,le=0,r.mode=U,t===c)break e;case U:r.mode=M;case M:if(ce=r.length){if(ce>ae&&(ce=ae),ce>oe&&(ce=oe),0===ce)break e;n.arraySet(te,ee,re,ce,ie),ae-=ce,re+=ce,oe-=ce,ie+=ce,r.length-=ce;break}r.mode=L;break;case N:for(;le<14;){if(0===ae)break e;ae--,se+=ee[re++]<>>=5,le-=5,r.ndist=1+(31&se),se>>>=5,le-=5,r.ncode=4+(15&se),se>>>=4,le-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=X;break}r.have=0,r.mode=z;case z:for(;r.have>>=3,le-=3}for(;r.have<19;)r.lens[Te[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,Se={bits:r.lenbits},xe=s(l,r.lens,0,19,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid code lengths set",r.mode=X;break}r.have=0,r.mode=Z;case Z:for(;r.have>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=me,le-=me,r.lens[r.have++]=ye;else{if(16===ye){for(ke=me+2;le>>=me,le-=me,0===r.have){e.msg="invalid bit length repeat",r.mode=X;break}Ee=r.lens[r.have-1],ce=3+(3&se),se>>>=2,le-=2}else if(17===ye){for(ke=me+3;le>>=me)),se>>>=3,le-=3}else{for(ke=me+7;le>>=me)),se>>>=7,le-=7}if(r.have+ce>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=X;break}for(;ce--;)r.lens[r.have++]=Ee}}if(r.mode===X)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=X;break}if(r.lenbits=9,Se={bits:r.lenbits},xe=s(f,r.lens,0,r.nlen,r.lencode,0,r.work,Se),r.lenbits=Se.bits,xe){e.msg="invalid literal/lengths set",r.mode=X;break}if(r.distbits=6,r.distcode=r.distdyn,Se={bits:r.distbits},xe=s(u,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,Se),r.distbits=Se.bits,xe){e.msg="invalid distances set",r.mode=X;break}if(r.mode=j,t===c)break e;case j:r.mode=C;case C:if(ae>=6&&oe>=258){e.next_out=ie,e.avail_out=oe,e.next_in=re,e.avail_in=ae,r.hold=se,r.bits=le,o(e,ue),ie=e.next_out,te=e.output,oe=e.avail_out,re=e.next_in,ee=e.input,ae=e.avail_in,se=r.hold,le=r.bits,r.mode===L&&(r.back=-1);break}for(r.back=0;_e=(Ae=r.lencode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,r.length=ye,0===_e){r.mode=G;break}if(32&_e){r.back=-1,r.mode=L;break}if(64&_e){e.msg="invalid literal/length code",r.mode=X;break}r.extra=15&_e,r.mode=q;case q:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Y;case Y:for(;_e=(Ae=r.distcode[se&(1<>>16&255,ye=65535&Ae,!((me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>be)])>>>16&255,ye=65535&Ae,!(be+(me=Ae>>>24)<=le);){if(0===ae)break e;ae--,se+=ee[re++]<>>=be,le-=be,r.back+=be}if(se>>>=me,le-=me,r.back+=me,64&_e){e.msg="invalid distance code",r.mode=X;break}r.offset=ye,r.extra=15&_e,r.mode=W;case W:if(r.extra){for(ke=r.extra;le>>=r.extra,le-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=X;break}r.mode=H;case H:if(0===oe)break e;if(ce=ue-oe,r.offset>ce){if((ce=r.offset-ce)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=X;break}ce>r.wnext?(ce-=r.wnext,pe=r.wsize-ce):pe=r.wnext-ce,ce>r.length&&(ce=r.length),ge=r.window}else ge=te,pe=ie-r.offset,ce=r.length;ce>oe&&(ce=oe),oe-=ce,r.length-=ce;do{te[ie++]=ge[pe++]}while(--ce);0===r.length&&(r.mode=C);break;case G:if(0===oe)break e;te[ie++]=r.length,oe--,r.mode=C;break;case V:if(r.wrap){for(;le<32;){if(0===ae)break e;ae--,se|=ee[re++]<=0;)e[t]=0}var f=0,u=1,h=2,d=29,c=256,p=c+1+d,g=30,m=19,_=2*p+1,y=15,b=16,v=7,w=256,E=16,x=17,S=18,k=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],A=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],P=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],T=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=new Array(2*(p+2));l(D);var O=new Array(2*g);l(O);var I=new Array(512);l(I);var R=new Array(256);l(R);var L=new Array(d);l(L);var F,B,U,M=new Array(g);function N(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function z(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function Z(e){return e<256?I[e]:I[256+(e>>>7)]}function j(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>b-r?(e.bi_buf|=t<>b-e.bi_valid,e.bi_valid+=r-b):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function W(e,t,r){var n,i,a=new Array(y+1),o=0;for(n=1;n<=y;n++)a[n]=o=o+r[n-1]<<1;for(i=0;i<=t;i++){var s=e[2*i+1];0!==s&&(e[2*i]=Y(a[s]++,s))}}function H(e){var t;for(t=0;t8?j(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function V(e,t,r,n){var i=2*t,a=2*r;return e[i]>1;r>=1;r--)J(e,a,r);i=l;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],J(e,a,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,a[2*i]=a[2*r]+a[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,a[2*r+1]=a[2*n+1]=i,e.heap[1]=i++,J(e,a,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,a,o,s,l=t.dyn_tree,f=t.max_code,u=t.stat_desc.static_tree,h=t.stat_desc.has_stree,d=t.stat_desc.extra_bits,c=t.stat_desc.extra_base,p=t.stat_desc.max_length,g=0;for(a=0;a<=y;a++)e.bl_count[a]=0;for(l[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)(a=l[2*l[2*(n=e.heap[r])+1]+1]+1)>p&&(a=p,g++),l[2*n+1]=a,n>f||(e.bl_count[a]++,o=0,n>=c&&(o=d[n-c]),s=l[2*n],e.opt_len+=s*(a+o),h&&(e.static_len+=s*(u[2*n+1]+o)));if(0!==g){do{for(a=p-1;0===e.bl_count[a];)a--;e.bl_count[a]--,e.bl_count[a+1]+=2,e.bl_count[p]--,g-=2}while(g>0);for(a=p;0!==a;a--)for(n=e.bl_count[a];0!==n;)(i=e.heap[--r])>f||(l[2*i+1]!==a&&(e.opt_len+=(a-l[2*i+1])*l[2*i],l[2*i+1]=a),n--)}}(e,t),W(a,f,e.bl_count)}function $(e,t,r){var n,i,a=-1,o=t[1],s=0,l=7,f=4;for(0===o&&(l=138,f=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=o,o=t[2*(n+1)+1],++s>=7;n0?(e.strm.data_type===s&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return a;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return o;for(t=32;t=3&&0===e.bl_tree[2*T[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),l=e.opt_len+3+7>>>3,(f=e.static_len+3+7>>>3)<=l&&(l=f)):l=f=r+5,r+4<=l&&-1!==t?te(e,t,r,n):e.strategy===i||f===l?(C(e,(u<<1)+(n?1:0),3),K(e,D,O)):(C(e,(h<<1)+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(R[r]+c+1)]++,e.dyn_dtree[2*Z(t)]++),e.last_lit===e.lit_bufsize-1},t._tr_align=function(e){C(e,u<<1,3),q(e,w,D),function(e){16===e.bi_valid?(j(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},function(e,t,r){"use strict";var n,i=r(8),a=r(50),o=r(29),s=r(28),l=r(49),f=0,u=1,h=3,d=4,c=5,p=0,g=1,m=-2,_=-3,y=-5,b=-1,v=1,w=2,E=3,x=4,S=0,k=2,A=8,P=9,T=15,D=8,O=286,I=30,R=19,L=2*O+1,F=15,B=3,U=258,M=U+B+1,N=32,z=42,Z=69,j=73,C=91,q=103,Y=113,W=666,H=1,G=2,V=3,J=4,K=3;function X(e,t){return e.msg=l[t],t}function $(e){return(e<<1)-(e>4?9:0)}function Q(e){for(var t=e.length;--t>=0;)e[t]=0}function ee(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function te(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ee(e.strm)}function re(e,t){e.pending_buf[e.pending++]=t}function ne(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function ie(e,t){var r,n,i=e.max_chain_length,a=e.strstart,o=e.prev_length,s=e.nice_match,l=e.strstart>e.w_size-M?e.strstart-(e.w_size-M):0,f=e.window,u=e.w_mask,h=e.prev,d=e.strstart+U,c=f[a+o-1],p=f[a+o];e.prev_length>=e.good_match&&(i>>=2),s>e.lookahead&&(s=e.lookahead);do{if(f[(r=t)+o]===p&&f[r+o-1]===c&&f[r]===f[a]&&f[++r]===f[a+1]){a+=2,r++;do{}while(f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&f[++a]===f[++r]&&ao){if(e.match_start=t,o=n,n>=s)break;c=f[a+o-1],p=f[a+o]}}}while((t=h[t&u])>l&&0!=--i);return o<=e.lookahead?o:e.lookahead}function ae(e){var t,r,n,a,l,f,u,h,d,c,p=e.w_size;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-M)){i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);a+=p}if(0===e.strm.avail_in)break;if(f=e.strm,u=e.window,h=e.strstart+e.lookahead,d=a,c=void 0,(c=f.avail_in)>d&&(c=d),r=0===c?0:(f.avail_in-=c,i.arraySet(u,f.input,f.next_in,c,h),1===f.state.wrap?f.adler=o(f.adler,u,c,h):2===f.state.wrap&&(f.adler=s(f.adler,u,c,h)),f.next_in+=c,f.total_in+=c,c),e.lookahead+=r,e.lookahead+e.insert>=B)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<=B)if(n=a._tr_tally(e,e.strstart-e.match_start,e.match_length-B),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=B){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=B&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=B-1)),e.prev_length>=B&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-B,n=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-B),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),a<1||a>P||r!==A||n<8||n>15||t<0||t>9||o<0||o>x)return X(e,m);8===n&&(n=9);var l=new function(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=A,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*L),this.dyn_dtree=new i.Buf16(2*(2*I+1)),this.bl_tree=new i.Buf16(2*(2*R+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(F+1),this.heap=new i.Buf16(2*O+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*O+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0};return e.state=l,l.strm=e,l.wrap=s,l.gzhead=null,l.w_bits=n,l.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(ae(e),0===e.lookahead&&t===f)return H;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,te(e,!1),0===e.strm.avail_out))return H;if(e.strstart-e.block_start>=e.w_size-M&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):(e.strstart>e.block_start&&(te(e,!1),e.strm.avail_out),H)}),new le(4,4,8,4,oe),new le(4,5,16,8,oe),new le(4,6,32,32,oe),new le(4,4,16,16,se),new le(8,16,32,32,se),new le(8,16,128,128,se),new le(8,32,128,256,se),new le(32,128,258,1024,se),new le(32,258,258,4096,se)],t.deflateInit=function(e,t){return he(e,t,A,T,D,S)},t.deflateInit2=he,t.deflateReset=ue,t.deflateResetKeep=fe,t.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?m:(e.state.gzhead=t,p):m},t.deflate=function(e,t){var r,i,o,l;if(!e||!e.state||t>c||t<0)return e?X(e,m):m;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===W&&t!==d)return X(e,0===e.avail_out?y:m);if(i.strm=e,r=i.last_flush,i.last_flush=t,i.status===z)if(2===i.wrap)e.adler=0,re(i,31),re(i,139),re(i,8),i.gzhead?(re(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),re(i,255&i.gzhead.time),re(i,i.gzhead.time>>8&255),re(i,i.gzhead.time>>16&255),re(i,i.gzhead.time>>24&255),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(re(i,255&i.gzhead.extra.length),re(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=s(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=Z):(re(i,0),re(i,0),re(i,0),re(i,0),re(i,0),re(i,9===i.level?2:i.strategy>=w||i.level<2?4:0),re(i,K),i.status=Y);else{var _=A+(i.w_bits-8<<4)<<8;_|=(i.strategy>=w||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(_|=N),_+=31-_%31,i.status=Y,ne(i,_),0!==i.strstart&&(ne(i,e.adler>>>16),ne(i,65535&e.adler)),e.adler=1}if(i.status===Z)if(i.gzhead.extra){for(o=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending!==i.pending_buf_size));)re(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=j)}else i.status=j;if(i.status===j)if(i.gzhead.name){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.gzindex=0,i.status=C)}else i.status=C;if(i.status===C)if(i.gzhead.comment){o=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>o&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),ee(e),o=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexo&&(e.adler=s(e.adler,i.pending_buf,i.pending-o,o)),0===l&&(i.status=q)}else i.status=q;if(i.status===q&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&ee(e),i.pending+2<=i.pending_buf_size&&(re(i,255&e.adler),re(i,e.adler>>8&255),e.adler=0,i.status=Y)):i.status=Y),0!==i.pending){if(ee(e),0===e.avail_out)return i.last_flush=-1,p}else if(0===e.avail_in&&$(t)<=$(r)&&t!==d)return X(e,y);if(i.status===W&&0!==e.avail_in)return X(e,y);if(0!==e.avail_in||0!==i.lookahead||t!==f&&i.status!==W){var b=i.strategy===w?function(e,t){for(var r;;){if(0===e.lookahead&&(ae(e),0===e.lookahead)){if(t===f)return H;break}if(e.match_length=0,r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):i.strategy===E?function(e,t){for(var r,n,i,o,s=e.window;;){if(e.lookahead<=U){if(ae(e),e.lookahead<=U&&t===f)return H;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=B&&e.strstart>0&&(n=s[i=e.strstart-1])===s[++i]&&n===s[++i]&&n===s[++i]){o=e.strstart+U;do{}while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=B?(r=a._tr_tally(e,1,e.match_length-B),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(te(e,!1),0===e.strm.avail_out))return H}return e.insert=0,t===d?(te(e,!0),0===e.strm.avail_out?V:J):e.last_lit&&(te(e,!1),0===e.strm.avail_out)?H:G}(i,t):n[i.level].func(i,t);if(b!==V&&b!==J||(i.status=W),b===H||b===V)return 0===e.avail_out&&(i.last_flush=-1),p;if(b===G&&(t===u?a._tr_align(i):t!==c&&(a._tr_stored_block(i,0,0,!1),t===h&&(Q(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ee(e),0===e.avail_out))return i.last_flush=-1,p}return t!==d?p:i.wrap<=0?g:(2===i.wrap?(re(i,255&e.adler),re(i,e.adler>>8&255),re(i,e.adler>>16&255),re(i,e.adler>>24&255),re(i,255&e.total_in),re(i,e.total_in>>8&255),re(i,e.total_in>>16&255),re(i,e.total_in>>24&255)):(ne(i,e.adler>>>16),ne(i,65535&e.adler)),ee(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?p:g)},t.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==z&&t!==Z&&t!==j&&t!==C&&t!==q&&t!==Y&&t!==W?X(e,m):(e.state=null,t===Y?X(e,_):p):m},t.deflateSetDictionary=function(e,t){var r,n,a,s,l,f,u,h,d=t.length;if(!e||!e.state)return m;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==z||r.lookahead)return m;for(1===s&&(e.adler=o(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(Q(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new i.Buf8(r.w_size),i.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),l=e.avail_in,f=e.next_in,u=e.input,e.avail_in=d,e.next_in=0,e.input=t,ae(r);r.lookahead>=B;){n=r.strstart,a=r.lookahead-(B-1);do{r.ins_h=(r.ins_h<t.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=e,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}u.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,i(this.init_done,"close before init"),i(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?o.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||s.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},u.prototype.write=function(e,t,r,n,i,a,o){return this._write(!0,e,t,r,n,i,a,o)},u.prototype.writeSync=function(e,t,r,n,i,a,o){return this._write(!1,e,t,r,n,i,a,o)},u.prototype._write=function(r,a,o,s,l,f,u,h){if(i.equal(arguments.length,8),i(this.init_done,"write before init"),i(this.mode!==t.NONE,"already finalized"),i.equal(!1,this.write_in_progress,"write already in progress"),i.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,i.equal(!1,void 0===a,"must provide flush value"),this.write_in_progress=!0,a!==t.Z_NO_FLUSH&&a!==t.Z_PARTIAL_FLUSH&&a!==t.Z_SYNC_FLUSH&&a!==t.Z_FULL_FLUSH&&a!==t.Z_FINISH&&a!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==o&&(o=e.alloc(0),l=0,s=0),this.strm.avail_in=l,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=h,this.strm.output=f,this.strm.next_out=u,this.flush=a,!r)return this._process(),this._checkError()?this._afterSync():void 0;var d=this;return n.nextTick(function(){d._process(),d._after()}),this},u.prototype._afterSync=function(){var e=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,e]},u.prototype._process=function(){var e=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(e=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===e)break;if(31!==this.strm.input[e]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,e++,1===this.strm.avail_in)break;case 1:if(null===e)break;139===this.strm.input[e]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=s.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=s.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=s.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=s.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},u.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return!0},u.prototype._after=function(){if(this._checkError()){var e=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,e),this.pending_close&&this.close()}},u.prototype._error=function(e){this.strm.msg&&(e=this.strm.msg),this.onerror(e,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},u.prototype.init=function(e,r,n,a,o){i(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),i(e>=8&&e<=15,"invalid windowBits"),i(r>=-1&&r<=9,"invalid compression level"),i(n>=1&&n<=9,"invalid memlevel"),i(a===t.Z_FILTERED||a===t.Z_HUFFMAN_ONLY||a===t.Z_RLE||a===t.Z_FIXED||a===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(r,e,n,a,o),this._setDictionary()},u.prototype.params=function(){throw new Error("deflateParams Not supported")},u.prototype.reset=function(){this._reset(),this._setDictionary()},u.prototype._init=function(e,r,n,i,l){switch(this.level=e,this.windowBits=r,this.memLevel=n,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new a,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=o.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=s.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=l,this.write_in_progress=!1,this.init_done=!0},u.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=o.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error("Failed to set dictionary")}},u.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=o.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=s.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error("Failed to reset stream")},t.Zlib=u}).call(this,r(1).Buffer,r(3))},function(e,t,r){e.exports=r(19).PassThrough},function(e,t,r){e.exports=r(19).Transform},function(e,t,r){e.exports=r(2)},function(e,t,r){e.exports=r(18)},function(e,t,r){"use strict";e.exports=a;var n=r(32),i=r(6);function a(e){if(!(this instanceof a))return new a(e);n.call(this,e)}i.inherits=r(5),i.inherits(a,n),a.prototype._transform=function(e,t,r){r(null,e)}},function(e,t,r){(function(t){function r(e){try{if(!t.localStorage)return!1}catch(e){return!1}var r=t.localStorage[e];return null!=r&&"true"===String(r).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var n=!1;return function(){if(!n){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,r(0))},function(e,t,r){(function(e,t){!function(e,r){"use strict";if(!e.setImmediate){var n,i,a,o,s,l=1,f={},u=!1,h=e.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(e);d=d&&d.setTimeout?d:e,"[object process]"==={}.toString.call(e.process)?n=function(e){t.nextTick(function(){p(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,r=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=r,t}}()?e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){p(e.data)},n=function(e){a.port2.postMessage(e)}):h&&"onreadystatechange"in h.createElement("script")?(i=h.documentElement,n=function(e){var t=h.createElement("script");t.onreadystatechange=function(){p(e),t.onreadystatechange=null,i.removeChild(t),t=null},i.appendChild(t)}):n=function(e){setTimeout(p,0,e)}:(o="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(o)&&p(+t.data.slice(o.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),n=function(t){e.postMessage(o+t,"*")}),d.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),r=0;r=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},r(62),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,r(0))},function(e,t){},function(e,t,r){"use strict";var n=r(9).Buffer,i=r(64);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,i,a=n.allocUnsafe(e>>>0),o=this.head,s=0;o;)t=o.data,r=a,i=s,t.copy(r,i),s+=o.data.length,o=o.next;return a},e}(),i&&i.inspect&&i.inspect.custom&&(e.exports.prototype[i.inspect.custom]=function(){var e=i.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,r){e.exports=i;var n=r(20).EventEmitter;function i(){n.call(this)}r(5)(i,n),i.Readable=r(19),i.Writable=r(59),i.Duplex=r(58),i.Transform=r(57),i.PassThrough=r(56),i.Stream=i,i.prototype.pipe=function(e,t){var r=this;function i(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function a(){r.readable&&r.resume&&r.resume()}r.on("data",i),e.on("drain",a),e._isStdio||t&&!1===t.end||(r.on("end",s),r.on("close",l));var o=!1;function s(){o||(o=!0,e.end())}function l(){o||(o=!0,"function"==typeof e.destroy&&e.destroy())}function f(e){if(u(),0===n.listenerCount(this,"error"))throw e}function u(){r.removeListener("data",i),e.removeListener("drain",a),r.removeListener("end",s),r.removeListener("close",l),r.removeListener("error",f),e.removeListener("error",f),r.removeListener("end",u),r.removeListener("close",u),e.removeListener("close",u)}return r.on("error",f),e.on("error",f),r.on("end",u),r.on("close",u),e.on("close",u),e.emit("pipe",r),e}},function(e,t,r){"use strict";(function(e){var n=r(1).Buffer,i=r(67).Transform,a=r(55),o=r(30),s=r(31).ok,l=r(1).kMaxLength,f="Cannot create final Buffer. It would be larger than 0x"+l.toString(16)+" bytes";a.Z_MIN_WINDOWBITS=8,a.Z_MAX_WINDOWBITS=15,a.Z_DEFAULT_WINDOWBITS=15,a.Z_MIN_CHUNK=64,a.Z_MAX_CHUNK=1/0,a.Z_DEFAULT_CHUNK=16384,a.Z_MIN_MEMLEVEL=1,a.Z_MAX_MEMLEVEL=9,a.Z_DEFAULT_MEMLEVEL=8,a.Z_MIN_LEVEL=-1,a.Z_MAX_LEVEL=9,a.Z_DEFAULT_LEVEL=a.Z_DEFAULT_COMPRESSION;for(var u=Object.keys(a),h=0;h=l?o=new RangeError(f):t=n.concat(i,a),i=[],e.close(),r(o,t)}e.on("error",function(t){e.removeListener("end",s),e.removeListener("readable",o),r(t)}),e.on("end",s),e.end(t),o()}function y(e,t){if("string"==typeof t&&(t=n.from(t)),!n.isBuffer(t))throw new TypeError("Not a string or buffer");var r=e._finishFlushFlag;return e._processChunk(t,r)}function b(e){if(!(this instanceof b))return new b(e);P.call(this,e,a.DEFLATE)}function v(e){if(!(this instanceof v))return new v(e);P.call(this,e,a.INFLATE)}function w(e){if(!(this instanceof w))return new w(e);P.call(this,e,a.GZIP)}function E(e){if(!(this instanceof E))return new E(e);P.call(this,e,a.GUNZIP)}function x(e){if(!(this instanceof x))return new x(e);P.call(this,e,a.DEFLATERAW)}function S(e){if(!(this instanceof S))return new S(e);P.call(this,e,a.INFLATERAW)}function k(e){if(!(this instanceof k))return new k(e);P.call(this,e,a.UNZIP)}function A(e){return e===a.Z_NO_FLUSH||e===a.Z_PARTIAL_FLUSH||e===a.Z_SYNC_FLUSH||e===a.Z_FULL_FLUSH||e===a.Z_FINISH||e===a.Z_BLOCK}function P(e,r){var o=this;if(this._opts=e=e||{},this._chunkSize=e.chunkSize||t.Z_DEFAULT_CHUNK,i.call(this,e),e.flush&&!A(e.flush))throw new Error("Invalid flush flag: "+e.flush);if(e.finishFlush&&!A(e.finishFlush))throw new Error("Invalid flush flag: "+e.finishFlush);if(this._flushFlag=e.flush||a.Z_NO_FLUSH,this._finishFlushFlag=void 0!==e.finishFlush?e.finishFlush:a.Z_FINISH,e.chunkSize&&(e.chunkSizet.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+e.chunkSize);if(e.windowBits&&(e.windowBitst.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+e.windowBits);if(e.level&&(e.levelt.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+e.level);if(e.memLevel&&(e.memLevelt.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+e.memLevel);if(e.strategy&&e.strategy!=t.Z_FILTERED&&e.strategy!=t.Z_HUFFMAN_ONLY&&e.strategy!=t.Z_RLE&&e.strategy!=t.Z_FIXED&&e.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+e.strategy);if(e.dictionary&&!n.isBuffer(e.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new a.Zlib(r);var s=this;this._hadError=!1,this._handle.onerror=function(e,r){T(s),s._hadError=!0;var n=new Error(e);n.errno=r,n.code=t.codes[r],s.emit("error",n)};var l=t.Z_DEFAULT_COMPRESSION;"number"==typeof e.level&&(l=e.level);var f=t.Z_DEFAULT_STRATEGY;"number"==typeof e.strategy&&(f=e.strategy),this._handle.init(e.windowBits||t.Z_DEFAULT_WINDOWBITS,l,e.memLevel||t.Z_DEFAULT_MEMLEVEL,f,e.dictionary),this._buffer=n.allocUnsafe(this._chunkSize),this._offset=0,this._level=l,this._strategy=f,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!o._handle},configurable:!0,enumerable:!0})}function T(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null)}function D(e){e.emit("close")}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(c),writable:!1}),t.Deflate=b,t.Inflate=v,t.Gzip=w,t.Gunzip=E,t.DeflateRaw=x,t.InflateRaw=S,t.Unzip=k,t.createDeflate=function(e){return new b(e)},t.createInflate=function(e){return new v(e)},t.createDeflateRaw=function(e){return new x(e)},t.createInflateRaw=function(e){return new S(e)},t.createGzip=function(e){return new w(e)},t.createGunzip=function(e){return new E(e)},t.createUnzip=function(e){return new k(e)},t.deflate=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new b(t),e,r)},t.deflateSync=function(e,t){return y(new b(t),e)},t.gzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new w(t),e,r)},t.gzipSync=function(e,t){return y(new w(t),e)},t.deflateRaw=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new x(t),e,r)},t.deflateRawSync=function(e,t){return y(new x(t),e)},t.unzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new k(t),e,r)},t.unzipSync=function(e,t){return y(new k(t),e)},t.inflate=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new v(t),e,r)},t.inflateSync=function(e,t){return y(new v(t),e)},t.gunzip=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new E(t),e,r)},t.gunzipSync=function(e,t){return y(new E(t),e)},t.inflateRaw=function(e,t,r){return"function"==typeof t&&(r=t,t={}),_(new S(t),e,r)},t.inflateRawSync=function(e,t){return y(new S(t),e)},o.inherits(P,i),P.prototype.params=function(r,n,i){if(rt.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+r);if(n!=t.Z_FILTERED&&n!=t.Z_HUFFMAN_ONLY&&n!=t.Z_RLE&&n!=t.Z_FIXED&&n!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+n);if(this._level!==r||this._strategy!==n){var o=this;this.flush(a.Z_SYNC_FLUSH,function(){s(o._handle,"zlib binding closed"),o._handle.params(r,n),o._hadError||(o._level=r,o._strategy=n,i&&i())})}else e.nextTick(i)},P.prototype.reset=function(){return s(this._handle,"zlib binding closed"),this._handle.reset()},P.prototype._flush=function(e){this._transform(n.alloc(0),"",e)},P.prototype.flush=function(t,r){var i=this,o=this._writableState;("function"==typeof t||void 0===t&&!r)&&(r=t,t=a.Z_FULL_FLUSH),o.ended?r&&e.nextTick(r):o.ending?r&&this.once("end",r):o.needDrain?r&&this.once("drain",function(){return i.flush(t,r)}):(this._flushFlag=t,this.write(n.alloc(0),"",r))},P.prototype.close=function(t){T(this,t),e.nextTick(D,this)},P.prototype._transform=function(e,t,r){var i,o=this._writableState,s=(o.ending||o.ended)&&(!e||o.length===e.length);return null===e||n.isBuffer(e)?this._handle?(s?i=this._finishFlushFlag:(i=this._flushFlag,e.length>=o.length&&(this._flushFlag=this._opts.flush||a.Z_NO_FLUSH)),void this._processChunk(e,i,r)):r(new Error("zlib binding closed")):r(new Error("invalid input"))},P.prototype._processChunk=function(e,t,r){var i=e&&e.length,a=this._chunkSize-this._offset,o=0,u=this,h="function"==typeof r;if(!h){var d,c=[],p=0;this.on("error",function(e){d=e}),s(this._handle,"zlib binding closed");do{var g=this._handle.writeSync(t,e,o,i,this._buffer,this._offset,a)}while(!this._hadError&&y(g[0],g[1]));if(this._hadError)throw d;if(p>=l)throw T(this),new RangeError(f);var m=n.concat(c,p);return T(this),m}s(this._handle,"zlib binding closed");var _=this._handle.write(t,e,o,i,this._buffer,this._offset,a);function y(l,f){if(this&&(this.buffer=null,this.callback=null),!u._hadError){var d=a-f;if(s(d>=0,"have should not go down"),d>0){var g=u._buffer.slice(u._offset,u._offset+d);u._offset+=d,h?u.push(g):(c.push(g),p+=g.length)}if((0===f||u._offset>=u._chunkSize)&&(a=u._chunkSize,u._offset=0,u._buffer=n.allocUnsafe(u._chunkSize)),0===f){if(o+=i-l,i=l,!h)return!0;var m=u._handle.write(t,e,o,i,u._buffer,u._offset,u._chunkSize);return m.callback=y,void(m.buffer=e)}if(!h)return!1;r()}}_.buffer=e,_.callback=y},o.inherits(b,P),o.inherits(v,P),o.inherits(w,P),o.inherits(E,P),o.inherits(x,P),o.inherits(S,P),o.inherits(k,P)}).call(this,r(3))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(t,d){if(void 0===t)throw"dicomParser.parseDicom: missing required parameter 'byteArray'";function c(l){var c=function(e){if(void 0===e.elements.x00020010)throw"dicomParser.parseDicom: missing required meta header attribute 0002,0010";var r=e.elements.x00020010;return u.readFixedString(t,r.dataOffset,r.length)}(l),p=function(e){if("1.2.840.10008.1.2"===e)return!1;return!0}(c),g=function(o,l){if("1.2.840.10008.1.2.1.99"===o){if(d&&d.inflater){var u=d.inflater(t,l);return new a.default(s.default,u,0)}if(void 0!==e&&this.module!==e){var h=r(68),c=(0,f.default)(t,l,t.length-l),p=h.inflateRawSync(c),g=(0,n.default)(t,p.length+l);return t.copy(g,0,0,l),p.copy(g,l),new a.default(s.default,g,0)}if("undefined"!=typeof pako){var m=t.slice(l),_=pako.inflateRaw(m),y=(0,n.default)(t,_.length+l);return y.set(t.slice(0,l),0),y.set(_,l),new a.default(s.default,y,0)}throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax"}if("1.2.840.10008.1.2.2"===o)return new a.default(i.default,t,l);return new a.default(s.default,t,l)}(c,l.position),m=new o.default(g.byteArrayParser,g.byteArray,{});m.warnings=g.warnings;try{p?h.parseDicomDataSetExplicit(m,g,g.byteArray.length,d):h.parseDicomDataSetImplicit(m,g,g.byteArray.length,d)}catch(e){var _={exception:e,dataSet:m};throw _}return m}return p=(0,l.default)(t,d),g=c(p),function(e,t){for(var r in e.elements)e.elements.hasOwnProperty(r)&&(t.elements[r]=e.elements[r]);return void 0!==e.warnings&&(t.warnings=e.warnings.concat(t.warnings)),t}(p,g);var p,g};var n=c(r(22)),i=c(r(38)),a=c(r(12)),o=c(r(7)),s=c(r(21)),l=c(r(37)),f=c(r(11)),u=d(r(14)),h=d(r(16));function d(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function c(e){return e&&e.__esModule?e:{default:e}}}).call(this,r(69)(e))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default="1.8.4"},function(e,t){t.read=function(e,t,r,n,i){var a,o,s=8*i-n-1,l=(1<>1,u=-7,h=r?i-1:0,d=r?-1:1,c=e[t+h];for(h+=d,a=c&(1<<-u)-1,c>>=-u,u+=s;u>0;a=256*a+e[t+h],h+=d,u-=8);for(o=a&(1<<-u)-1,a>>=-u,u+=n;u>0;o=256*o+e[t+h],h+=d,u-=8);if(0===a)a=1-f;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,n),a-=f}return(c?-1:1)*o*Math.pow(2,a-n)},t.write=function(e,t,r,n,i,a){var o,s,l,f=8*a-i-1,u=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=n?0:a-1,p=n?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,o=u):(o=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-o))<1&&(o--,l*=2),(t+=o+h>=1?d/l:d*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(t*l-1)*Math.pow(2,i),o+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;e[r+c]=255&s,c+=p,s/=256,i-=8);for(o=o<0;e[r+c]=255&o,c+=p,o/=256,f-=8);e[r+c-p]|=128*g}},function(e,t,r){"use strict";t.byteLength=function(e){return 3*e.length/4-f(e)},t.toByteArray=function(e){var t,r,n,o,s,l=e.length;o=f(e),s=new a(3*l/4-o),r=o>0?l-4:l;var u=0;for(t=0;t>16&255,s[u++]=n>>8&255,s[u++]=255&n;2===o?(n=i[e.charCodeAt(t)]<<2|i[e.charCodeAt(t+1)]>>4,s[u++]=255&n):1===o&&(n=i[e.charCodeAt(t)]<<10|i[e.charCodeAt(t+1)]<<4|i[e.charCodeAt(t+2)]>>2,s[u++]=n>>8&255,s[u++]=255&n);return s},t.fromByteArray=function(e){for(var t,r=e.length,i=r%3,a="",o=[],s=0,l=r-i;sl?l:s+16383));1===i?(t=e[r-1],a+=n[t>>2],a+=n[t<<4&63],a+="=="):2===i&&(t=(e[r-2]<<8)+e[r-1],a+=n[t>>10],a+=n[t>>4&63],a+=n[t<<2&63],a+="=");return o.push(a),o.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function u(e,t,r){for(var i,a,o=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return o.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},function(e,t,r){"use strict";function n(e,t){return 255===e.byteArray[t]&&217===e.byteArray[t+1]}function i(e,t,r){var i=t.fragments[r];return!(!n(e,i.position+i.length-2)&&!n(e,i.position+i.length-3))}function a(e,t,r){for(var n=r;n0&&t<=12&&e>0&&e<=function(e,t){switch(e){case 2:return t%4==0&&t%100||t%400==0?29:28;case 9:case 4:case 6:case 11:return 30;default:return 31}}(t,r)}(i,n,r))throw"invalid DA '"+e+"'";return{year:r,month:n,day:i}}if(t)throw"invalid DA '"+e+"'";return}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if(e.length>=2){var r=parseInt(e.substring(0,2),10),n=e.length>=4?parseInt(e.substring(2,4),10):void 0,i=e.length>=6?parseInt(e.substring(4,6),10):void 0,a=e.length>=8?e.substring(7,13):void 0,o=a?parseInt(a,10)*Math.pow(10,6-a.length):void 0;if(t&&(isNaN(r)||void 0!==n&&isNaN(n)||void 0!==i&&isNaN(i)||void 0!==o&&isNaN(o)||r<0||r>23||n&&(n<0||n>59)||i&&(i<0||i>59)||o&&(o<0||o>999999)))throw"invalid TM '"+e+"'";return{hours:r,minutes:n,seconds:i,fractionalSeconds:o}}if(t)throw"invalid TM '"+e+"'";return}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(26),i=f(r(77)),a=f(r(76)),o=f(r(43)),s=f(r(75)),l=f(r(74));function f(e){return e&&e.__esModule?e:{default:e}}t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=i.default,t.parseDA=a.default,t.explicitElementToString=o.default,t.explicitDataSetToJS=s.default,t.createJPEGBasicOffsetTable=l.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.readTag=t.readSequenceItem=t.readSequenceItemsImplicit=t.readSequenceItemsExplicit=t.readPart10Header=t.readEncapsulatedPixelDataFromFragments=t.readEncapsulatedPixelData=t.readEncapsulatedImageFrame=t.readDicomElementImplicit=t.readDicomElementExplicit=t.parseDicom=t.littleEndianByteArrayParser=t.findItemDelimitationItemAndSetElementLength=t.findEndOfEncapsulatedElement=t.findAndSetUNElementLength=t.DataSet=t.sharedCopy=t.ByteStream=t.bigEndianByteArrayParser=t.version=t.alloc=t.readFixedString=t.parseDicomDataSetImplicit=t.parseDicomDataSetExplicit=t.createJPEGBasicOffsetTable=t.explicitDataSetToJS=t.explicitElementToString=t.parseDA=t.parseTM=t.parsePN=t.isPrivateTag=t.isStringVr=void 0;var n=r(78),i=r(16),a=r(14),o=P(r(22)),s=P(r(71)),l=P(r(38)),f=P(r(12)),u=P(r(11)),h=P(r(7)),d=P(r(41)),c=P(r(42)),p=P(r(23)),g=P(r(21)),m=P(r(70)),_=P(r(15)),y=P(r(24)),b=P(r(27)),v=P(r(44)),w=P(r(17)),E=P(r(37)),x=P(r(40)),S=P(r(25)),k=P(r(13)),A=P(r(4));function P(e){return e&&e.__esModule?e:{default:e}}var T={isStringVr:n.isStringVr,isPrivateTag:n.isPrivateTag,parsePN:n.parsePN,parseTM:n.parseTM,parseDA:n.parseDA,explicitElementToString:n.explicitElementToString,explicitDataSetToJS:n.explicitDataSetToJS,createJPEGBasicOffsetTable:n.createJPEGBasicOffsetTable,parseDicomDataSetExplicit:i.parseDicomDataSetExplicit,parseDicomDataSetImplicit:i.parseDicomDataSetImplicit,readFixedString:a.readFixedString,alloc:o.default,version:s.default,bigEndianByteArrayParser:l.default,ByteStream:f.default,sharedCopy:u.default,DataSet:h.default,findAndSetUNElementLength:d.default,findEndOfEncapsulatedElement:c.default,findItemDelimitationItemAndSetElementLength:p.default,littleEndianByteArrayParser:g.default,parseDicom:m.default,readDicomElementExplicit:_.default,readDicomElementImplicit:y.default,readEncapsulatedImageFrame:b.default,readEncapsulatedPixelData:v.default,readEncapsulatedPixelDataFromFragments:w.default,readPart10Header:E.default,readSequenceItemsExplicit:x.default,readSequenceItemsImplicit:S.default,readSequenceItem:k.default,readTag:A.default};t.isStringVr=n.isStringVr,t.isPrivateTag=n.isPrivateTag,t.parsePN=n.parsePN,t.parseTM=n.parseTM,t.parseDA=n.parseDA,t.explicitElementToString=n.explicitElementToString,t.explicitDataSetToJS=n.explicitDataSetToJS,t.createJPEGBasicOffsetTable=n.createJPEGBasicOffsetTable,t.parseDicomDataSetExplicit=i.parseDicomDataSetExplicit,t.parseDicomDataSetImplicit=i.parseDicomDataSetImplicit,t.readFixedString=a.readFixedString,t.alloc=o.default,t.version=s.default,t.bigEndianByteArrayParser=l.default,t.ByteStream=f.default,t.sharedCopy=u.default,t.DataSet=h.default,t.findAndSetUNElementLength=d.default,t.findEndOfEncapsulatedElement=c.default,t.findItemDelimitationItemAndSetElementLength=p.default,t.littleEndianByteArrayParser=g.default,t.parseDicom=m.default,t.readDicomElementExplicit=_.default,t.readDicomElementImplicit=y.default,t.readEncapsulatedImageFrame=b.default,t.readEncapsulatedPixelData=v.default,t.readEncapsulatedPixelDataFromFragments=w.default,t.readPart10Header=E.default,t.readSequenceItemsExplicit=x.default,t.readSequenceItemsImplicit=S.default,t.readSequenceItem=k.default,t.readTag=A.default,t.default=T}])}); +//# sourceMappingURL=dicomParser.min.js.map \ No newline at end of file diff --git a/lib/cornerstone/hammer.js b/lib/cornerstone/hammer.js new file mode 100644 index 0000000..00d2965 --- /dev/null +++ b/lib/cornerstone/hammer.js @@ -0,0 +1,2643 @@ +/*! Hammer.JS - v2.0.7 - 2016-04-22 + * http://hammerjs.github.io/ + * + * Copyright (c) 2016 Jorik Tangelder; + * Licensed under the MIT license */ +(function(window, document, exportName, undefined) { + 'use strict'; + +var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o']; +var TEST_ELEMENT = document.createElement('div'); + +var TYPE_FUNCTION = 'function'; + +var round = Math.round; +var abs = Math.abs; +var now = Date.now; + +/** + * set a timeout with a given scope + * @param {Function} fn + * @param {Number} timeout + * @param {Object} context + * @returns {number} + */ +function setTimeoutContext(fn, timeout, context) { + return setTimeout(bindFn(fn, context), timeout); +} + +/** + * if the argument is an array, we want to execute the fn on each entry + * if it aint an array we don't want to do a thing. + * this is used by all the methods that accept a single and array argument. + * @param {*|Array} arg + * @param {String} fn + * @param {Object} [context] + * @returns {Boolean} + */ +function invokeArrayArg(arg, fn, context) { + if (Array.isArray(arg)) { + each(arg, context[fn], context); + return true; + } + return false; +} + +/** + * walk objects and arrays + * @param {Object} obj + * @param {Function} iterator + * @param {Object} context + */ +function each(obj, iterator, context) { + var i; + + if (!obj) { + return; + } + + if (obj.forEach) { + obj.forEach(iterator, context); + } else if (obj.length !== undefined) { + i = 0; + while (i < obj.length) { + iterator.call(context, obj[i], i, obj); + i++; + } + } else { + for (i in obj) { + obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); + } + } +} + +/** + * wrap a method with a deprecation warning and stack trace + * @param {Function} method + * @param {String} name + * @param {String} message + * @returns {Function} A new function wrapping the supplied method. + */ +function deprecate(method, name, message) { + var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n'; + return function() { + var e = new Error('get-stack-trace'); + var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '') + .replace(/^\s+at\s+/gm, '') + .replace(/^Object.\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace'; + + var log = window.console && (window.console.warn || window.console.log); + if (log) { + log.call(window.console, deprecationMessage, stack); + } + return method.apply(this, arguments); + }; +} + +/** + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} target + * @param {...Object} objects_to_assign + * @returns {Object} target + */ +var assign; +if (typeof Object.assign !== 'function') { + assign = function assign(target) { + if (target === undefined || target === null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + var output = Object(target); + for (var index = 1; index < arguments.length; index++) { + var source = arguments[index]; + if (source !== undefined && source !== null) { + for (var nextKey in source) { + if (source.hasOwnProperty(nextKey)) { + output[nextKey] = source[nextKey]; + } + } + } + } + return output; + }; +} else { + assign = Object.assign; +} + +/** + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge=false] + * @returns {Object} dest + */ +var extend = deprecate(function extend(dest, src, merge) { + var keys = Object.keys(src); + var i = 0; + while (i < keys.length) { + if (!merge || (merge && dest[keys[i]] === undefined)) { + dest[keys[i]] = src[keys[i]]; + } + i++; + } + return dest; +}, 'extend', 'Use `assign`.'); + +/** + * merge the values from src in the dest. + * means that properties that exist in dest will not be overwritten by src + * @param {Object} dest + * @param {Object} src + * @returns {Object} dest + */ +var merge = deprecate(function merge(dest, src) { + return extend(dest, src, true); +}, 'merge', 'Use `assign`.'); + +/** + * simple class inheritance + * @param {Function} child + * @param {Function} base + * @param {Object} [properties] + */ +function inherit(child, base, properties) { + var baseP = base.prototype, + childP; + + childP = child.prototype = Object.create(baseP); + childP.constructor = child; + childP._super = baseP; + + if (properties) { + assign(childP, properties); + } +} + +/** + * simple function bind + * @param {Function} fn + * @param {Object} context + * @returns {Function} + */ +function bindFn(fn, context) { + return function boundFn() { + return fn.apply(context, arguments); + }; +} + +/** + * let a boolean value also be a function that must return a boolean + * this first item in args will be used as the context + * @param {Boolean|Function} val + * @param {Array} [args] + * @returns {Boolean} + */ +function boolOrFn(val, args) { + if (typeof val == TYPE_FUNCTION) { + return val.apply(args ? args[0] || undefined : undefined, args); + } + return val; +} + +/** + * use the val2 when val1 is undefined + * @param {*} val1 + * @param {*} val2 + * @returns {*} + */ +function ifUndefined(val1, val2) { + return (val1 === undefined) ? val2 : val1; +} + +/** + * addEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler + */ +function addEventListeners(target, types, handler) { + each(splitStr(types), function(type) { + target.addEventListener(type, handler, false); + }); +} + +/** + * removeEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler + */ +function removeEventListeners(target, types, handler) { + each(splitStr(types), function(type) { + target.removeEventListener(type, handler, false); + }); +} + +/** + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found + */ +function hasParent(node, parent) { + while (node) { + if (node == parent) { + return true; + } + node = node.parentNode; + } + return false; +} + +/** + * small indexOf wrapper + * @param {String} str + * @param {String} find + * @returns {Boolean} found + */ +function inStr(str, find) { + return str.indexOf(find) > -1; +} + +/** + * split string on whitespace + * @param {String} str + * @returns {Array} words + */ +function splitStr(str) { + return str.trim().split(/\s+/g); +} + +/** + * find if a array contains the object using indexOf or a simple polyFill + * @param {Array} src + * @param {String} find + * @param {String} [findByKey] + * @return {Boolean|Number} false when not found, or the index + */ +function inArray(src, find, findByKey) { + if (src.indexOf && !findByKey) { + return src.indexOf(find); + } else { + var i = 0; + while (i < src.length) { + if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { + return i; + } + i++; + } + return -1; + } +} + +/** + * convert array-like objects to real arrays + * @param {Object} obj + * @returns {Array} + */ +function toArray(obj) { + return Array.prototype.slice.call(obj, 0); +} + +/** + * unique array with objects based on a key (like 'id') or just by the array's value + * @param {Array} src [{id:1},{id:2},{id:1}] + * @param {String} [key] + * @param {Boolean} [sort=False] + * @returns {Array} [{id:1},{id:2}] + */ +function uniqueArray(src, key, sort) { + var results = []; + var values = []; + var i = 0; + + while (i < src.length) { + var val = key ? src[i][key] : src[i]; + if (inArray(values, val) < 0) { + results.push(src[i]); + } + values[i] = val; + i++; + } + + if (sort) { + if (!key) { + results = results.sort(); + } else { + results = results.sort(function sortUniqueArray(a, b) { + return a[key] > b[key]; + }); + } + } + + return results; +} + +/** + * get the prefixed property + * @param {Object} obj + * @param {String} property + * @returns {String|Undefined} prefixed + */ +function prefixed(obj, property) { + var prefix, prop; + var camelProp = property[0].toUpperCase() + property.slice(1); + + var i = 0; + while (i < VENDOR_PREFIXES.length) { + prefix = VENDOR_PREFIXES[i]; + prop = (prefix) ? prefix + camelProp : property; + + if (prop in obj) { + return prop; + } + i++; + } + return undefined; +} + +/** + * get a unique id + * @returns {number} uniqueId + */ +var _uniqueId = 1; +function uniqueId() { + return _uniqueId++; +} + +/** + * get the window object of an element + * @param {HTMLElement} element + * @returns {DocumentView|Window} + */ +function getWindowForElement(element) { + var doc = element.ownerDocument || element; + return (doc.defaultView || doc.parentWindow || window); +} + +var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; + +var SUPPORT_TOUCH = ('ontouchstart' in window); +var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; +var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); + +var INPUT_TYPE_TOUCH = 'touch'; +var INPUT_TYPE_PEN = 'pen'; +var INPUT_TYPE_MOUSE = 'mouse'; +var INPUT_TYPE_KINECT = 'kinect'; + +var COMPUTE_INTERVAL = 25; + +var INPUT_START = 1; +var INPUT_MOVE = 2; +var INPUT_END = 4; +var INPUT_CANCEL = 8; + +var DIRECTION_NONE = 1; +var DIRECTION_LEFT = 2; +var DIRECTION_RIGHT = 4; +var DIRECTION_UP = 8; +var DIRECTION_DOWN = 16; + +var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; +var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; +var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + +var PROPS_XY = ['x', 'y']; +var PROPS_CLIENT_XY = ['clientX', 'clientY']; + +/** + * create new input type manager + * @param {Manager} manager + * @param {Function} callback + * @returns {Input} + * @constructor + */ +function Input(manager, callback) { + var self = this; + this.manager = manager; + this.callback = callback; + this.element = manager.element; + this.target = manager.options.inputTarget; + + // smaller wrapper around the handler, for the scope and the enabled state of the manager, + // so when disabled the input events are completely bypassed. + this.domHandler = function(ev) { + if (boolOrFn(manager.options.enable, [manager])) { + self.handler(ev); + } + }; + + this.init(); + +} + +Input.prototype = { + /** + * should handle the inputEvent data and trigger the callback + * @virtual + */ + handler: function() { }, + + /** + * bind the events + */ + init: function() { + this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + }, + + /** + * unbind the events + */ + destroy: function() { + this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + } +}; + +/** + * create new input type manager + * called by the Manager constructor + * @param {Hammer} manager + * @returns {Input} + */ +function createInputInstance(manager) { + var Type; + var inputClass = manager.options.inputClass; + + if (inputClass) { + Type = inputClass; + } else if (SUPPORT_POINTER_EVENTS) { + Type = PointerEventInput; + } else if (SUPPORT_ONLY_TOUCH) { + Type = TouchInput; + } else if (!SUPPORT_TOUCH) { + Type = MouseInput; + } else { + Type = TouchMouseInput; + } + return new (Type)(manager, inputHandler); +} + +/** + * handle input events + * @param {Manager} manager + * @param {String} eventType + * @param {Object} input + */ +function inputHandler(manager, eventType, input) { + var pointersLen = input.pointers.length; + var changedPointersLen = input.changedPointers.length; + var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0)); + var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0)); + + input.isFirst = !!isFirst; + input.isFinal = !!isFinal; + + if (isFirst) { + manager.session = {}; + } + + // source event is the normalized value of the domEvents + // like 'touchstart, mouseup, pointerdown' + input.eventType = eventType; + + // compute scale, rotation etc + computeInputData(manager, input); + + // emit secret event + manager.emit('hammer.input', input); + + manager.recognize(input); + manager.session.prevInput = input; +} + +/** + * extend the data with some usable properties like scale, rotate, velocity etc + * @param {Object} manager + * @param {Object} input + */ +function computeInputData(manager, input) { + var session = manager.session; + var pointers = input.pointers; + var pointersLength = pointers.length; + + // store the first input to calculate the distance and direction + if (!session.firstInput) { + session.firstInput = simpleCloneInputData(input); + } + + // to compute scale and rotation we need to store the multiple touches + if (pointersLength > 1 && !session.firstMultiple) { + session.firstMultiple = simpleCloneInputData(input); + } else if (pointersLength === 1) { + session.firstMultiple = false; + } + + var firstInput = session.firstInput; + var firstMultiple = session.firstMultiple; + var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; + + var center = input.center = getCenter(pointers); + input.timeStamp = now(); + input.deltaTime = input.timeStamp - firstInput.timeStamp; + + input.angle = getAngle(offsetCenter, center); + input.distance = getDistance(offsetCenter, center); + + computeDeltaXY(session, input); + input.offsetDirection = getDirection(input.deltaX, input.deltaY); + + var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY); + input.overallVelocityX = overallVelocity.x; + input.overallVelocityY = overallVelocity.y; + input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y; + + input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; + input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; + + input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length > + session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers); + + computeIntervalInputData(session, input); + + // find the correct target + var target = manager.element; + if (hasParent(input.srcEvent.target, target)) { + target = input.srcEvent.target; + } + input.target = target; +} + +function computeDeltaXY(session, input) { + var center = input.center; + var offset = session.offsetDelta || {}; + var prevDelta = session.prevDelta || {}; + var prevInput = session.prevInput || {}; + + if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { + prevDelta = session.prevDelta = { + x: prevInput.deltaX || 0, + y: prevInput.deltaY || 0 + }; + + offset = session.offsetDelta = { + x: center.x, + y: center.y + }; + } + + input.deltaX = prevDelta.x + (center.x - offset.x); + input.deltaY = prevDelta.y + (center.y - offset.y); +} + +/** + * velocity is calculated every x ms + * @param {Object} session + * @param {Object} input + */ +function computeIntervalInputData(session, input) { + var last = session.lastInterval || input, + deltaTime = input.timeStamp - last.timeStamp, + velocity, velocityX, velocityY, direction; + + if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { + var deltaX = input.deltaX - last.deltaX; + var deltaY = input.deltaY - last.deltaY; + + var v = getVelocity(deltaTime, deltaX, deltaY); + velocityX = v.x; + velocityY = v.y; + velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; + direction = getDirection(deltaX, deltaY); + + session.lastInterval = input; + } else { + // use latest velocity info if it doesn't overtake a minimum period + velocity = last.velocity; + velocityX = last.velocityX; + velocityY = last.velocityY; + direction = last.direction; + } + + input.velocity = velocity; + input.velocityX = velocityX; + input.velocityY = velocityY; + input.direction = direction; +} + +/** + * create a simple clone from the input used for storage of firstInput and firstMultiple + * @param {Object} input + * @returns {Object} clonedInputData + */ +function simpleCloneInputData(input) { + // make a simple copy of the pointers because we will get a reference if we don't + // we only need clientXY for the calculations + var pointers = []; + var i = 0; + while (i < input.pointers.length) { + pointers[i] = { + clientX: round(input.pointers[i].clientX), + clientY: round(input.pointers[i].clientY) + }; + i++; + } + + return { + timeStamp: now(), + pointers: pointers, + center: getCenter(pointers), + deltaX: input.deltaX, + deltaY: input.deltaY + }; +} + +/** + * get the center of all the pointers + * @param {Array} pointers + * @return {Object} center contains `x` and `y` properties + */ +function getCenter(pointers) { + var pointersLength = pointers.length; + + // no need to loop when only one touch + if (pointersLength === 1) { + return { + x: round(pointers[0].clientX), + y: round(pointers[0].clientY) + }; + } + + var x = 0, y = 0, i = 0; + while (i < pointersLength) { + x += pointers[i].clientX; + y += pointers[i].clientY; + i++; + } + + return { + x: round(x / pointersLength), + y: round(y / pointersLength) + }; +} + +/** + * calculate the velocity between two points. unit is in px per ms. + * @param {Number} deltaTime + * @param {Number} x + * @param {Number} y + * @return {Object} velocity `x` and `y` + */ +function getVelocity(deltaTime, x, y) { + return { + x: x / deltaTime || 0, + y: y / deltaTime || 0 + }; +} + +/** + * get the direction between two points + * @param {Number} x + * @param {Number} y + * @return {Number} direction + */ +function getDirection(x, y) { + if (x === y) { + return DIRECTION_NONE; + } + + if (abs(x) >= abs(y)) { + return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + return y < 0 ? DIRECTION_UP : DIRECTION_DOWN; +} + +/** + * calculate the absolute distance between two points + * @param {Object} p1 {x, y} + * @param {Object} p2 {x, y} + * @param {Array} [props] containing x and y keys + * @return {Number} distance + */ +function getDistance(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + + return Math.sqrt((x * x) + (y * y)); +} + +/** + * calculate the angle between two coordinates + * @param {Object} p1 + * @param {Object} p2 + * @param {Array} [props] containing x and y keys + * @return {Number} angle + */ +function getAngle(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + return Math.atan2(y, x) * 180 / Math.PI; +} + +/** + * calculate the rotation degrees between two pointersets + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} rotation + */ +function getRotation(start, end) { + return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); +} + +/** + * calculate the scale factor between two pointersets + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} scale + */ +function getScale(start, end) { + return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); +} + +var MOUSE_INPUT_MAP = { + mousedown: INPUT_START, + mousemove: INPUT_MOVE, + mouseup: INPUT_END +}; + +var MOUSE_ELEMENT_EVENTS = 'mousedown'; +var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; + +/** + * Mouse events input + * @constructor + * @extends Input + */ +function MouseInput() { + this.evEl = MOUSE_ELEMENT_EVENTS; + this.evWin = MOUSE_WINDOW_EVENTS; + + this.pressed = false; // mousedown state + + Input.apply(this, arguments); +} + +inherit(MouseInput, Input, { + /** + * handle mouse events + * @param {Object} ev + */ + handler: function MEhandler(ev) { + var eventType = MOUSE_INPUT_MAP[ev.type]; + + // on start we want to have the left mouse button down + if (eventType & INPUT_START && ev.button === 0) { + this.pressed = true; + } + + if (eventType & INPUT_MOVE && ev.which !== 1) { + eventType = INPUT_END; + } + + // mouse must be down + if (!this.pressed) { + return; + } + + if (eventType & INPUT_END) { + this.pressed = false; + } + + this.callback(this.manager, eventType, { + pointers: [ev], + changedPointers: [ev], + pointerType: INPUT_TYPE_MOUSE, + srcEvent: ev + }); + } +}); + +var POINTER_INPUT_MAP = { + pointerdown: INPUT_START, + pointermove: INPUT_MOVE, + pointerup: INPUT_END, + pointercancel: INPUT_CANCEL, + pointerout: INPUT_CANCEL +}; + +// in IE10 the pointer types is defined as an enum +var IE10_POINTER_TYPE_ENUM = { + 2: INPUT_TYPE_TOUCH, + 3: INPUT_TYPE_PEN, + 4: INPUT_TYPE_MOUSE, + 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 +}; + +var POINTER_ELEMENT_EVENTS = 'pointerdown'; +var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; + +// IE10 has prefixed support, and case-sensitive +if (window.MSPointerEvent && !window.PointerEvent) { + POINTER_ELEMENT_EVENTS = 'MSPointerDown'; + POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; +} + +/** + * Pointer events input + * @constructor + * @extends Input + */ +function PointerEventInput() { + this.evEl = POINTER_ELEMENT_EVENTS; + this.evWin = POINTER_WINDOW_EVENTS; + + Input.apply(this, arguments); + + this.store = (this.manager.session.pointerEvents = []); +} + +inherit(PointerEventInput, Input, { + /** + * handle mouse events + * @param {Object} ev + */ + handler: function PEhandler(ev) { + var store = this.store; + var removePointer = false; + + var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); + var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; + var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; + + var isTouch = (pointerType == INPUT_TYPE_TOUCH); + + // get index of the event in the store + var storeIndex = inArray(store, ev.pointerId, 'pointerId'); + + // start and mouse must be down + if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { + if (storeIndex < 0) { + store.push(ev); + storeIndex = store.length - 1; + } + } else if (eventType & (INPUT_END | INPUT_CANCEL)) { + removePointer = true; + } + + // it not found, so the pointer hasn't been down (so it's probably a hover) + if (storeIndex < 0) { + return; + } + + // update the event in the store + store[storeIndex] = ev; + + this.callback(this.manager, eventType, { + pointers: store, + changedPointers: [ev], + pointerType: pointerType, + srcEvent: ev + }); + + if (removePointer) { + // remove from the store + store.splice(storeIndex, 1); + } + } +}); + +var SINGLE_TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL +}; + +var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; +var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; + +/** + * Touch events input + * @constructor + * @extends Input + */ +function SingleTouchInput() { + this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; + this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; + this.started = false; + + Input.apply(this, arguments); +} + +inherit(SingleTouchInput, Input, { + handler: function TEhandler(ev) { + var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; + + // should we handle the touch events? + if (type === INPUT_START) { + this.started = true; + } + + if (!this.started) { + return; + } + + var touches = normalizeSingleTouches.call(this, ev, type); + + // when done, reset the started state + if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { + this.started = false; + } + + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } +}); + +/** + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] + */ +function normalizeSingleTouches(ev, type) { + var all = toArray(ev.touches); + var changed = toArray(ev.changedTouches); + + if (type & (INPUT_END | INPUT_CANCEL)) { + all = uniqueArray(all.concat(changed), 'identifier', true); + } + + return [all, changed]; +} + +var TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL +}; + +var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; + +/** + * Multi-user touch events input + * @constructor + * @extends Input + */ +function TouchInput() { + this.evTarget = TOUCH_TARGET_EVENTS; + this.targetIds = {}; + + Input.apply(this, arguments); +} + +inherit(TouchInput, Input, { + handler: function MTEhandler(ev) { + var type = TOUCH_INPUT_MAP[ev.type]; + var touches = getTouches.call(this, ev, type); + if (!touches) { + return; + } + + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } +}); + +/** + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] + */ +function getTouches(ev, type) { + var allTouches = toArray(ev.touches); + var targetIds = this.targetIds; + + // when there is only one touch, the process can be simplified + if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { + targetIds[allTouches[0].identifier] = true; + return [allTouches, allTouches]; + } + + var i, + targetTouches, + changedTouches = toArray(ev.changedTouches), + changedTargetTouches = [], + target = this.target; + + // get target touches from touches + targetTouches = allTouches.filter(function(touch) { + return hasParent(touch.target, target); + }); + + // collect touches + if (type === INPUT_START) { + i = 0; + while (i < targetTouches.length) { + targetIds[targetTouches[i].identifier] = true; + i++; + } + } + + // filter changed touches to only contain touches that exist in the collected target ids + i = 0; + while (i < changedTouches.length) { + if (targetIds[changedTouches[i].identifier]) { + changedTargetTouches.push(changedTouches[i]); + } + + // cleanup removed touches + if (type & (INPUT_END | INPUT_CANCEL)) { + delete targetIds[changedTouches[i].identifier]; + } + i++; + } + + if (!changedTargetTouches.length) { + return; + } + + return [ + // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' + uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), + changedTargetTouches + ]; +} + +/** + * Combined touch and mouse input + * + * Touch has a higher priority then mouse, and while touching no mouse events are allowed. + * This because touch devices also emit mouse events while doing a touch. + * + * @constructor + * @extends Input + */ + +var DEDUP_TIMEOUT = 2500; +var DEDUP_DISTANCE = 25; + +function TouchMouseInput() { + Input.apply(this, arguments); + + var handler = bindFn(this.handler, this); + this.touch = new TouchInput(this.manager, handler); + this.mouse = new MouseInput(this.manager, handler); + + this.primaryTouch = null; + this.lastTouches = []; +} + +inherit(TouchMouseInput, Input, { + /** + * handle mouse and touch events + * @param {Hammer} manager + * @param {String} inputEvent + * @param {Object} inputData + */ + handler: function TMEhandler(manager, inputEvent, inputData) { + var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), + isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE); + + if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) { + return; + } + + // when we're in a touch event, record touches to de-dupe synthetic mouse event + if (isTouch) { + recordTouches.call(this, inputEvent, inputData); + } else if (isMouse && isSyntheticEvent.call(this, inputData)) { + return; + } + + this.callback(manager, inputEvent, inputData); + }, + + /** + * remove the event listeners + */ + destroy: function destroy() { + this.touch.destroy(); + this.mouse.destroy(); + } +}); + +function recordTouches(eventType, eventData) { + if (eventType & INPUT_START) { + this.primaryTouch = eventData.changedPointers[0].identifier; + setLastTouch.call(this, eventData); + } else if (eventType & (INPUT_END | INPUT_CANCEL)) { + setLastTouch.call(this, eventData); + } +} + +function setLastTouch(eventData) { + var touch = eventData.changedPointers[0]; + + if (touch.identifier === this.primaryTouch) { + var lastTouch = {x: touch.clientX, y: touch.clientY}; + this.lastTouches.push(lastTouch); + var lts = this.lastTouches; + var removeLastTouch = function() { + var i = lts.indexOf(lastTouch); + if (i > -1) { + lts.splice(i, 1); + } + }; + setTimeout(removeLastTouch, DEDUP_TIMEOUT); + } +} + +function isSyntheticEvent(eventData) { + var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY; + for (var i = 0; i < this.lastTouches.length; i++) { + var t = this.lastTouches[i]; + var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); + if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) { + return true; + } + } + return false; +} + +var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); +var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; + +// magical touchAction value +var TOUCH_ACTION_COMPUTE = 'compute'; +var TOUCH_ACTION_AUTO = 'auto'; +var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented +var TOUCH_ACTION_NONE = 'none'; +var TOUCH_ACTION_PAN_X = 'pan-x'; +var TOUCH_ACTION_PAN_Y = 'pan-y'; +var TOUCH_ACTION_MAP = getTouchActionProps(); + +/** + * Touch Action + * sets the touchAction property or uses the js alternative + * @param {Manager} manager + * @param {String} value + * @constructor + */ +function TouchAction(manager, value) { + this.manager = manager; + this.set(value); +} + +TouchAction.prototype = { + /** + * set the touchAction value on the element or enable the polyfill + * @param {String} value + */ + set: function(value) { + // find out the touch-action by the event handlers + if (value == TOUCH_ACTION_COMPUTE) { + value = this.compute(); + } + + if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) { + this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + } + this.actions = value.toLowerCase().trim(); + }, + + /** + * just re-set the touchAction value + */ + update: function() { + this.set(this.manager.options.touchAction); + }, + + /** + * compute the value for the touchAction property based on the recognizer's settings + * @returns {String} value + */ + compute: function() { + var actions = []; + each(this.manager.recognizers, function(recognizer) { + if (boolOrFn(recognizer.options.enable, [recognizer])) { + actions = actions.concat(recognizer.getTouchAction()); + } + }); + return cleanTouchActions(actions.join(' ')); + }, + + /** + * this method is called on each input cycle and provides the preventing of the browser behavior + * @param {Object} input + */ + preventDefaults: function(input) { + var srcEvent = input.srcEvent; + var direction = input.offsetDirection; + + // if the touch action did prevented once this session + if (this.manager.session.prevented) { + srcEvent.preventDefault(); + return; + } + + var actions = this.actions; + var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE]; + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y]; + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X]; + + if (hasNone) { + //do not prevent defaults if this is a tap gesture + + var isTapPointer = input.pointers.length === 1; + var isTapMovement = input.distance < 2; + var isTapTouchTime = input.deltaTime < 250; + + if (isTapPointer && isTapMovement && isTapTouchTime) { + return; + } + } + + if (hasPanX && hasPanY) { + // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent + return; + } + + if (hasNone || + (hasPanY && direction & DIRECTION_HORIZONTAL) || + (hasPanX && direction & DIRECTION_VERTICAL)) { + return this.preventSrc(srcEvent); + } + }, + + /** + * call preventDefault to prevent the browser's default behavior (scrolling in most cases) + * @param {Object} srcEvent + */ + preventSrc: function(srcEvent) { + this.manager.session.prevented = true; + srcEvent.preventDefault(); + } +}; + +/** + * when the touchActions are collected they are not a valid value, so we need to clean things up. * + * @param {String} actions + * @returns {*} + */ +function cleanTouchActions(actions) { + // none + if (inStr(actions, TOUCH_ACTION_NONE)) { + return TOUCH_ACTION_NONE; + } + + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); + + // if both pan-x and pan-y are set (different recognizers + // for different directions, e.g. horizontal pan but vertical swipe?) + // we need none (as otherwise with pan-x pan-y combined none of these + // recognizers will work, since the browser would handle all panning + if (hasPanX && hasPanY) { + return TOUCH_ACTION_NONE; + } + + // pan-x OR pan-y + if (hasPanX || hasPanY) { + return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; + } + + // manipulation + if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { + return TOUCH_ACTION_MANIPULATION; + } + + return TOUCH_ACTION_AUTO; +} + +function getTouchActionProps() { + if (!NATIVE_TOUCH_ACTION) { + return false; + } + var touchMap = {}; + var cssSupports = window.CSS && window.CSS.supports; + ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) { + + // If css.supports is not supported but there is native touch-action assume it supports + // all values. This is the case for IE 10 and 11. + touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true; + }); + return touchMap; +} + +/** + * Recognizer flow explained; * + * All recognizers have the initial state of POSSIBLE when a input session starts. + * The definition of a input session is from the first input until the last input, with all it's movement in it. * + * Example session for mouse-input: mousedown -> mousemove -> mouseup + * + * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed + * which determines with state it should be. + * + * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to + * POSSIBLE to give it another change on the next cycle. + * + * Possible + * | + * +-----+---------------+ + * | | + * +-----+-----+ | + * | | | + * Failed Cancelled | + * +-------+------+ + * | | + * Recognized Began + * | + * Changed + * | + * Ended/Recognized + */ +var STATE_POSSIBLE = 1; +var STATE_BEGAN = 2; +var STATE_CHANGED = 4; +var STATE_ENDED = 8; +var STATE_RECOGNIZED = STATE_ENDED; +var STATE_CANCELLED = 16; +var STATE_FAILED = 32; + +/** + * Recognizer + * Every recognizer needs to extend from this class. + * @constructor + * @param {Object} options + */ +function Recognizer(options) { + this.options = assign({}, this.defaults, options || {}); + + this.id = uniqueId(); + + this.manager = null; + + // default is enable true + this.options.enable = ifUndefined(this.options.enable, true); + + this.state = STATE_POSSIBLE; + + this.simultaneous = {}; + this.requireFail = []; +} + +Recognizer.prototype = { + /** + * @virtual + * @type {Object} + */ + defaults: {}, + + /** + * set options + * @param {Object} options + * @return {Recognizer} + */ + set: function(options) { + assign(this.options, options); + + // also update the touchAction, in case something changed about the directions/enabled state + this.manager && this.manager.touchAction.update(); + return this; + }, + + /** + * recognize simultaneous with an other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + recognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { + return this; + } + + var simultaneous = this.simultaneous; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (!simultaneous[otherRecognizer.id]) { + simultaneous[otherRecognizer.id] = otherRecognizer; + otherRecognizer.recognizeWith(this); + } + return this; + }, + + /** + * drop the simultaneous link. it doesnt remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + dropRecognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { + return this; + } + + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + delete this.simultaneous[otherRecognizer.id]; + return this; + }, + + /** + * recognizer can only run when an other is failing + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + requireFailure: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { + return this; + } + + var requireFail = this.requireFail; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (inArray(requireFail, otherRecognizer) === -1) { + requireFail.push(otherRecognizer); + otherRecognizer.requireFailure(this); + } + return this; + }, + + /** + * drop the requireFailure link. it does not remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + dropRequireFailure: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { + return this; + } + + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + var index = inArray(this.requireFail, otherRecognizer); + if (index > -1) { + this.requireFail.splice(index, 1); + } + return this; + }, + + /** + * has require failures boolean + * @returns {boolean} + */ + hasRequireFailures: function() { + return this.requireFail.length > 0; + }, + + /** + * if the recognizer can recognize simultaneous with an other recognizer + * @param {Recognizer} otherRecognizer + * @returns {Boolean} + */ + canRecognizeWith: function(otherRecognizer) { + return !!this.simultaneous[otherRecognizer.id]; + }, + + /** + * You should use `tryEmit` instead of `emit` directly to check + * that all the needed recognizers has failed before emitting. + * @param {Object} input + */ + emit: function(input) { + var self = this; + var state = this.state; + + function emit(event) { + self.manager.emit(event, input); + } + + // 'panstart' and 'panmove' + if (state < STATE_ENDED) { + emit(self.options.event + stateStr(state)); + } + + emit(self.options.event); // simple 'eventName' events + + if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...) + emit(input.additionalEvent); + } + + // panend and pancancel + if (state >= STATE_ENDED) { + emit(self.options.event + stateStr(state)); + } + }, + + /** + * Check that all the require failure recognizers has failed, + * if true, it emits a gesture event, + * otherwise, setup the state to FAILED. + * @param {Object} input + */ + tryEmit: function(input) { + if (this.canEmit()) { + return this.emit(input); + } + // it's failing anyway + this.state = STATE_FAILED; + }, + + /** + * can we emit? + * @returns {boolean} + */ + canEmit: function() { + var i = 0; + while (i < this.requireFail.length) { + if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { + return false; + } + i++; + } + return true; + }, + + /** + * update the recognizer + * @param {Object} inputData + */ + recognize: function(inputData) { + // make a new copy of the inputData + // so we can change the inputData without messing up the other recognizers + var inputDataClone = assign({}, inputData); + + // is is enabled and allow recognizing? + if (!boolOrFn(this.options.enable, [this, inputDataClone])) { + this.reset(); + this.state = STATE_FAILED; + return; + } + + // reset when we've reached the end + if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { + this.state = STATE_POSSIBLE; + } + + this.state = this.process(inputDataClone); + + // the recognizer has recognized a gesture + // so trigger an event + if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { + this.tryEmit(inputDataClone); + } + }, + + /** + * return the state of the recognizer + * the actual recognizing happens in this method + * @virtual + * @param {Object} inputData + * @returns {Const} STATE + */ + process: function(inputData) { }, // jshint ignore:line + + /** + * return the preferred touch-action + * @virtual + * @returns {Array} + */ + getTouchAction: function() { }, + + /** + * called when the gesture isn't allowed to recognize + * like when another is being recognized or it is disabled + * @virtual + */ + reset: function() { } +}; + +/** + * get a usable string, used as event postfix + * @param {Const} state + * @returns {String} state + */ +function stateStr(state) { + if (state & STATE_CANCELLED) { + return 'cancel'; + } else if (state & STATE_ENDED) { + return 'end'; + } else if (state & STATE_CHANGED) { + return 'move'; + } else if (state & STATE_BEGAN) { + return 'start'; + } + return ''; +} + +/** + * direction cons to string + * @param {Const} direction + * @returns {String} + */ +function directionStr(direction) { + if (direction == DIRECTION_DOWN) { + return 'down'; + } else if (direction == DIRECTION_UP) { + return 'up'; + } else if (direction == DIRECTION_LEFT) { + return 'left'; + } else if (direction == DIRECTION_RIGHT) { + return 'right'; + } + return ''; +} + +/** + * get a recognizer by name if it is bound to a manager + * @param {Recognizer|String} otherRecognizer + * @param {Recognizer} recognizer + * @returns {Recognizer} + */ +function getRecognizerByNameIfManager(otherRecognizer, recognizer) { + var manager = recognizer.manager; + if (manager) { + return manager.get(otherRecognizer); + } + return otherRecognizer; +} + +/** + * This recognizer is just used as a base for the simple attribute recognizers. + * @constructor + * @extends Recognizer + */ +function AttrRecognizer() { + Recognizer.apply(this, arguments); +} + +inherit(AttrRecognizer, Recognizer, { + /** + * @namespace + * @memberof AttrRecognizer + */ + defaults: { + /** + * @type {Number} + * @default 1 + */ + pointers: 1 + }, + + /** + * Used to check if it the recognizer receives valid input, like input.distance > 10. + * @memberof AttrRecognizer + * @param {Object} input + * @returns {Boolean} recognized + */ + attrTest: function(input) { + var optionPointers = this.options.pointers; + return optionPointers === 0 || input.pointers.length === optionPointers; + }, + + /** + * Process the input and return the state for the recognizer + * @memberof AttrRecognizer + * @param {Object} input + * @returns {*} State + */ + process: function(input) { + var state = this.state; + var eventType = input.eventType; + + var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); + var isValid = this.attrTest(input); + + // on cancel input and we've recognized before, return STATE_CANCELLED + if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { + return state | STATE_CANCELLED; + } else if (isRecognized || isValid) { + if (eventType & INPUT_END) { + return state | STATE_ENDED; + } else if (!(state & STATE_BEGAN)) { + return STATE_BEGAN; + } + return state | STATE_CHANGED; + } + return STATE_FAILED; + } +}); + +/** + * Pan + * Recognized when the pointer is down and moved in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ +function PanRecognizer() { + AttrRecognizer.apply(this, arguments); + + this.pX = null; + this.pY = null; +} + +inherit(PanRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof PanRecognizer + */ + defaults: { + event: 'pan', + threshold: 10, + pointers: 1, + direction: DIRECTION_ALL + }, + + getTouchAction: function() { + var direction = this.options.direction; + var actions = []; + if (direction & DIRECTION_HORIZONTAL) { + actions.push(TOUCH_ACTION_PAN_Y); + } + if (direction & DIRECTION_VERTICAL) { + actions.push(TOUCH_ACTION_PAN_X); + } + return actions; + }, + + directionTest: function(input) { + var options = this.options; + var hasMoved = true; + var distance = input.distance; + var direction = input.direction; + var x = input.deltaX; + var y = input.deltaY; + + // lock to axis? + if (!(direction & options.direction)) { + if (options.direction & DIRECTION_HORIZONTAL) { + direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + hasMoved = x != this.pX; + distance = Math.abs(input.deltaX); + } else { + direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN; + hasMoved = y != this.pY; + distance = Math.abs(input.deltaY); + } + } + input.direction = direction; + return hasMoved && distance > options.threshold && direction & options.direction; + }, + + attrTest: function(input) { + return AttrRecognizer.prototype.attrTest.call(this, input) && + (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); + }, + + emit: function(input) { + + this.pX = input.deltaX; + this.pY = input.deltaY; + + var direction = directionStr(input.direction); + + if (direction) { + input.additionalEvent = this.options.event + direction; + } + this._super.emit.call(this, input); + } +}); + +/** + * Pinch + * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). + * @constructor + * @extends AttrRecognizer + */ +function PinchRecognizer() { + AttrRecognizer.apply(this, arguments); +} + +inherit(PinchRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof PinchRecognizer + */ + defaults: { + event: 'pinch', + threshold: 0, + pointers: 2 + }, + + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, + + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); + }, + + emit: function(input) { + if (input.scale !== 1) { + var inOut = input.scale < 1 ? 'in' : 'out'; + input.additionalEvent = this.options.event + inOut; + } + this._super.emit.call(this, input); + } +}); + +/** + * Press + * Recognized when the pointer is down for x ms without any movement. + * @constructor + * @extends Recognizer + */ +function PressRecognizer() { + Recognizer.apply(this, arguments); + + this._timer = null; + this._input = null; +} + +inherit(PressRecognizer, Recognizer, { + /** + * @namespace + * @memberof PressRecognizer + */ + defaults: { + event: 'press', + pointers: 1, + time: 251, // minimal time of the pointer to be pressed + threshold: 9 // a minimal movement is ok, but keep it low + }, + + getTouchAction: function() { + return [TOUCH_ACTION_AUTO]; + }, + + process: function(input) { + var options = this.options; + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTime = input.deltaTime > options.time; + + this._input = input; + + // we only allow little movement + // and we've reached an end event, so a tap is possible + if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) { + this.reset(); + } else if (input.eventType & INPUT_START) { + this.reset(); + this._timer = setTimeoutContext(function() { + this.state = STATE_RECOGNIZED; + this.tryEmit(); + }, options.time, this); + } else if (input.eventType & INPUT_END) { + return STATE_RECOGNIZED; + } + return STATE_FAILED; + }, + + reset: function() { + clearTimeout(this._timer); + }, + + emit: function(input) { + if (this.state !== STATE_RECOGNIZED) { + return; + } + + if (input && (input.eventType & INPUT_END)) { + this.manager.emit(this.options.event + 'up', input); + } else { + this._input.timeStamp = now(); + this.manager.emit(this.options.event, this._input); + } + } +}); + +/** + * Rotate + * Recognized when two or more pointer are moving in a circular motion. + * @constructor + * @extends AttrRecognizer + */ +function RotateRecognizer() { + AttrRecognizer.apply(this, arguments); +} + +inherit(RotateRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof RotateRecognizer + */ + defaults: { + event: 'rotate', + threshold: 0, + pointers: 2 + }, + + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, + + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); + } +}); + +/** + * Swipe + * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ +function SwipeRecognizer() { + AttrRecognizer.apply(this, arguments); +} + +inherit(SwipeRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof SwipeRecognizer + */ + defaults: { + event: 'swipe', + threshold: 10, + velocity: 0.3, + direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, + pointers: 1 + }, + + getTouchAction: function() { + return PanRecognizer.prototype.getTouchAction.call(this); + }, + + attrTest: function(input) { + var direction = this.options.direction; + var velocity; + + if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { + velocity = input.overallVelocity; + } else if (direction & DIRECTION_HORIZONTAL) { + velocity = input.overallVelocityX; + } else if (direction & DIRECTION_VERTICAL) { + velocity = input.overallVelocityY; + } + + return this._super.attrTest.call(this, input) && + direction & input.offsetDirection && + input.distance > this.options.threshold && + input.maxPointers == this.options.pointers && + abs(velocity) > this.options.velocity && input.eventType & INPUT_END; + }, + + emit: function(input) { + var direction = directionStr(input.offsetDirection); + if (direction) { + this.manager.emit(this.options.event + direction, input); + } + + this.manager.emit(this.options.event, input); + } +}); + +/** + * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur + * between the given interval and position. The delay option can be used to recognize multi-taps without firing + * a single tap. + * + * The eventData from the emitted event contains the property `tapCount`, which contains the amount of + * multi-taps being recognized. + * @constructor + * @extends Recognizer + */ +function TapRecognizer() { + Recognizer.apply(this, arguments); + + // previous time and center, + // used for tap counting + this.pTime = false; + this.pCenter = false; + + this._timer = null; + this._input = null; + this.count = 0; +} + +inherit(TapRecognizer, Recognizer, { + /** + * @namespace + * @memberof PinchRecognizer + */ + defaults: { + event: 'tap', + pointers: 1, + taps: 1, + interval: 300, // max time between the multi-tap taps + time: 250, // max time of the pointer to be down (like finger on the screen) + threshold: 9, // a minimal movement is ok, but keep it low + posThreshold: 10 // a multi-tap can be a bit off the initial position + }, + + getTouchAction: function() { + return [TOUCH_ACTION_MANIPULATION]; + }, + + process: function(input) { + var options = this.options; + + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTouchTime = input.deltaTime < options.time; + + this.reset(); + + if ((input.eventType & INPUT_START) && (this.count === 0)) { + return this.failTimeout(); + } + + // we only allow little movement + // and we've reached an end event, so a tap is possible + if (validMovement && validTouchTime && validPointers) { + if (input.eventType != INPUT_END) { + return this.failTimeout(); + } + + var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; + var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; + + this.pTime = input.timeStamp; + this.pCenter = input.center; + + if (!validMultiTap || !validInterval) { + this.count = 1; + } else { + this.count += 1; + } + + this._input = input; + + // if tap count matches we have recognized it, + // else it has began recognizing... + var tapCount = this.count % options.taps; + if (tapCount === 0) { + // no failing requirements, immediately trigger the tap event + // or wait as long as the multitap interval to trigger + if (!this.hasRequireFailures()) { + return STATE_RECOGNIZED; + } else { + this._timer = setTimeoutContext(function() { + this.state = STATE_RECOGNIZED; + this.tryEmit(); + }, options.interval, this); + return STATE_BEGAN; + } + } + } + return STATE_FAILED; + }, + + failTimeout: function() { + this._timer = setTimeoutContext(function() { + this.state = STATE_FAILED; + }, this.options.interval, this); + return STATE_FAILED; + }, + + reset: function() { + clearTimeout(this._timer); + }, + + emit: function() { + if (this.state == STATE_RECOGNIZED) { + this._input.tapCount = this.count; + this.manager.emit(this.options.event, this._input); + } + } +}); + +/** + * Simple way to create a manager with a default set of recognizers. + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor + */ +function Hammer(element, options) { + options = options || {}; + options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); + return new Manager(element, options); +} + +/** + * @const {string} + */ +Hammer.VERSION = '2.0.7'; + +/** + * default settings + * @namespace + */ +Hammer.defaults = { + /** + * set if DOM events are being triggered. + * But this is slower and unused by simple implementations, so disabled by default. + * @type {Boolean} + * @default false + */ + domEvents: false, + + /** + * The value for the touchAction property/fallback. + * When set to `compute` it will magically set the correct value based on the added recognizers. + * @type {String} + * @default compute + */ + touchAction: TOUCH_ACTION_COMPUTE, + + /** + * @type {Boolean} + * @default true + */ + enable: true, + + /** + * EXPERIMENTAL FEATURE -- can be removed/changed + * Change the parent input target element. + * If Null, then it is being set the to main element. + * @type {Null|EventTarget} + * @default null + */ + inputTarget: null, + + /** + * force an input class + * @type {Null|Function} + * @default null + */ + inputClass: null, + + /** + * Default recognizer setup when calling `Hammer()` + * When creating a new Manager these will be skipped. + * @type {Array} + */ + preset: [ + // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] + [RotateRecognizer, {enable: false}], + [PinchRecognizer, {enable: false}, ['rotate']], + [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}], + [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']], + [TapRecognizer], + [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']], + [PressRecognizer] + ], + + /** + * Some CSS properties can be used to improve the working of Hammer. + * Add them to this method and they will be set when creating a new Manager. + * @namespace + */ + cssProps: { + /** + * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userSelect: 'none', + + /** + * Disable the Windows Phone grippers when pressing an element. + * @type {String} + * @default 'none' + */ + touchSelect: 'none', + + /** + * Disables the default callout shown when you touch and hold a touch target. + * On iOS, when you touch and hold a touch target such as a link, Safari displays + * a callout containing information about the link. This property allows you to disable that callout. + * @type {String} + * @default 'none' + */ + touchCallout: 'none', + + /** + * Specifies whether zooming is enabled. Used by IE10> + * @type {String} + * @default 'none' + */ + contentZooming: 'none', + + /** + * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userDrag: 'none', + + /** + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in iOS. This property obeys the alpha value, if specified. + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: 'rgba(0,0,0,0)' + } +}; + +var STOP = 1; +var FORCED_STOP = 2; + +/** + * Manager + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor + */ +function Manager(element, options) { + this.options = assign({}, Hammer.defaults, options || {}); + + this.options.inputTarget = this.options.inputTarget || element; + + this.handlers = {}; + this.session = {}; + this.recognizers = []; + this.oldCssProps = {}; + + this.element = element; + this.input = createInputInstance(this); + this.touchAction = new TouchAction(this, this.options.touchAction); + + toggleCssProps(this, true); + + each(this.options.recognizers, function(item) { + var recognizer = this.add(new (item[0])(item[1])); + item[2] && recognizer.recognizeWith(item[2]); + item[3] && recognizer.requireFailure(item[3]); + }, this); +} + +Manager.prototype = { + /** + * set options + * @param {Object} options + * @returns {Manager} + */ + set: function(options) { + assign(this.options, options); + + // Options that need a little more setup + if (options.touchAction) { + this.touchAction.update(); + } + if (options.inputTarget) { + // Clean up existing event listeners and reinitialize + this.input.destroy(); + this.input.target = options.inputTarget; + this.input.init(); + } + return this; + }, + + /** + * stop recognizing for this session. + * This session will be discarded, when a new [input]start event is fired. + * When forced, the recognizer cycle is stopped immediately. + * @param {Boolean} [force] + */ + stop: function(force) { + this.session.stopped = force ? FORCED_STOP : STOP; + }, + + /** + * run the recognizers! + * called by the inputHandler function on every movement of the pointers (touches) + * it walks through all the recognizers and tries to detect the gesture that is being made + * @param {Object} inputData + */ + recognize: function(inputData) { + var session = this.session; + if (session.stopped) { + return; + } + + // run the touch-action polyfill + this.touchAction.preventDefaults(inputData); + + var recognizer; + var recognizers = this.recognizers; + + // this holds the recognizer that is being recognized. + // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED + // if no recognizer is detecting a thing, it is set to `null` + var curRecognizer = session.curRecognizer; + + // reset when the last recognizer is recognized + // or when we're in a new session + if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) { + curRecognizer = session.curRecognizer = null; + } + + var i = 0; + while (i < recognizers.length) { + recognizer = recognizers[i]; + + // find out if we are allowed try to recognize the input for this one. + // 1. allow if the session is NOT forced stopped (see the .stop() method) + // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one + // that is being recognized. + // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. + // this can be setup with the `recognizeWith()` method on the recognizer. + if (session.stopped !== FORCED_STOP && ( // 1 + !curRecognizer || recognizer == curRecognizer || // 2 + recognizer.canRecognizeWith(curRecognizer))) { // 3 + recognizer.recognize(inputData); + } else { + recognizer.reset(); + } + + // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the + // current active recognizer. but only if we don't already have an active recognizer + if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { + curRecognizer = session.curRecognizer = recognizer; + } + i++; + } + }, + + /** + * get a recognizer by its event name. + * @param {Recognizer|String} recognizer + * @returns {Recognizer|Null} + */ + get: function(recognizer) { + if (recognizer instanceof Recognizer) { + return recognizer; + } + + var recognizers = this.recognizers; + for (var i = 0; i < recognizers.length; i++) { + if (recognizers[i].options.event == recognizer) { + return recognizers[i]; + } + } + return null; + }, + + /** + * add a recognizer to the manager + * existing recognizers with the same event name will be removed + * @param {Recognizer} recognizer + * @returns {Recognizer|Manager} + */ + add: function(recognizer) { + if (invokeArrayArg(recognizer, 'add', this)) { + return this; + } + + // remove existing + var existing = this.get(recognizer.options.event); + if (existing) { + this.remove(existing); + } + + this.recognizers.push(recognizer); + recognizer.manager = this; + + this.touchAction.update(); + return recognizer; + }, + + /** + * remove a recognizer by name or instance + * @param {Recognizer|String} recognizer + * @returns {Manager} + */ + remove: function(recognizer) { + if (invokeArrayArg(recognizer, 'remove', this)) { + return this; + } + + recognizer = this.get(recognizer); + + // let's make sure this recognizer exists + if (recognizer) { + var recognizers = this.recognizers; + var index = inArray(recognizers, recognizer); + + if (index !== -1) { + recognizers.splice(index, 1); + this.touchAction.update(); + } + } + + return this; + }, + + /** + * bind event + * @param {String} events + * @param {Function} handler + * @returns {EventEmitter} this + */ + on: function(events, handler) { + if (events === undefined) { + return; + } + if (handler === undefined) { + return; + } + + var handlers = this.handlers; + each(splitStr(events), function(event) { + handlers[event] = handlers[event] || []; + handlers[event].push(handler); + }); + return this; + }, + + /** + * unbind event, leave emit blank to remove all handlers + * @param {String} events + * @param {Function} [handler] + * @returns {EventEmitter} this + */ + off: function(events, handler) { + if (events === undefined) { + return; + } + + var handlers = this.handlers; + each(splitStr(events), function(event) { + if (!handler) { + delete handlers[event]; + } else { + handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1); + } + }); + return this; + }, + + /** + * emit event to the listeners + * @param {String} event + * @param {Object} data + */ + emit: function(event, data) { + // we also want to trigger dom events + if (this.options.domEvents) { + triggerDomEvent(event, data); + } + + // no handlers, so skip it all + var handlers = this.handlers[event] && this.handlers[event].slice(); + if (!handlers || !handlers.length) { + return; + } + + data.type = event; + data.preventDefault = function() { + data.srcEvent.preventDefault(); + }; + + var i = 0; + while (i < handlers.length) { + handlers[i](data); + i++; + } + }, + + /** + * destroy the manager and unbinds all events + * it doesn't unbind dom events, that is the user own responsibility + */ + destroy: function() { + this.element && toggleCssProps(this, false); + + this.handlers = {}; + this.session = {}; + this.input.destroy(); + this.element = null; + } +}; + +/** + * add/remove the css properties as defined in manager.options.cssProps + * @param {Manager} manager + * @param {Boolean} add + */ +function toggleCssProps(manager, add) { + var element = manager.element; + if (!element.style) { + return; + } + var prop; + each(manager.options.cssProps, function(value, name) { + prop = prefixed(element.style, name); + if (add) { + manager.oldCssProps[prop] = element.style[prop]; + element.style[prop] = value; + } else { + element.style[prop] = manager.oldCssProps[prop] || ''; + } + }); + if (!add) { + manager.oldCssProps = {}; + } +} + +/** + * trigger dom event + * @param {String} event + * @param {Object} data + */ +function triggerDomEvent(event, data) { + var gestureEvent = document.createEvent('Event'); + gestureEvent.initEvent(event, true, true); + gestureEvent.gesture = data; + data.target.dispatchEvent(gestureEvent); +} + +assign(Hammer, { + INPUT_START: INPUT_START, + INPUT_MOVE: INPUT_MOVE, + INPUT_END: INPUT_END, + INPUT_CANCEL: INPUT_CANCEL, + + STATE_POSSIBLE: STATE_POSSIBLE, + STATE_BEGAN: STATE_BEGAN, + STATE_CHANGED: STATE_CHANGED, + STATE_ENDED: STATE_ENDED, + STATE_RECOGNIZED: STATE_RECOGNIZED, + STATE_CANCELLED: STATE_CANCELLED, + STATE_FAILED: STATE_FAILED, + + DIRECTION_NONE: DIRECTION_NONE, + DIRECTION_LEFT: DIRECTION_LEFT, + DIRECTION_RIGHT: DIRECTION_RIGHT, + DIRECTION_UP: DIRECTION_UP, + DIRECTION_DOWN: DIRECTION_DOWN, + DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, + DIRECTION_VERTICAL: DIRECTION_VERTICAL, + DIRECTION_ALL: DIRECTION_ALL, + + Manager: Manager, + Input: Input, + TouchAction: TouchAction, + + TouchInput: TouchInput, + MouseInput: MouseInput, + PointerEventInput: PointerEventInput, + TouchMouseInput: TouchMouseInput, + SingleTouchInput: SingleTouchInput, + + Recognizer: Recognizer, + AttrRecognizer: AttrRecognizer, + Tap: TapRecognizer, + Pan: PanRecognizer, + Swipe: SwipeRecognizer, + Pinch: PinchRecognizer, + Rotate: RotateRecognizer, + Press: PressRecognizer, + + on: addEventListeners, + off: removeEventListeners, + each: each, + merge: merge, + extend: extend, + assign: assign, + inherit: inherit, + bindFn: bindFn, + prefixed: prefixed +}); + +// this prevents errors when Hammer is loaded in the presence of an AMD +// style loader but by script tag, not by the loader. +var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line +freeGlobal.Hammer = Hammer; + +if (typeof define === 'function' && define.amd) { + define(function() { + return Hammer; + }); +} else if (typeof module != 'undefined' && module.exports) { + module.exports = Hammer; +} else { + window[exportName] = Hammer; +} + +})(window, document, 'Hammer'); diff --git a/lib/dexie.js b/lib/dexie.js new file mode 100644 index 0000000..15f54c3 --- /dev/null +++ b/lib/dexie.js @@ -0,0 +1,4474 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 2.0.4, Fri May 25 2018 + * + * http://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Dexie = factory()); +}(this, (function () { 'use strict'; + +var keys = Object.keys; +var isArray = Array.isArray; +var _global = typeof self !== 'undefined' ? self : + typeof window !== 'undefined' ? window : + global; +function extend(obj, extension) { + if (typeof extension !== 'object') + return obj; + keys(extension).forEach(function (key) { + obj[key] = extension[key]; + }); + return obj; +} +var getProto = Object.getPrototypeOf; +var _hasOwn = {}.hasOwnProperty; +function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); +} +function props(proto, extension) { + if (typeof extension === 'function') + extension = extension(getProto(proto)); + keys(extension).forEach(function (key) { + setProp(proto, key, extension[key]); + }); +} +var defineProperty = Object.defineProperty; +function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? + { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : + { value: functionOrGetSet, configurable: true, writable: true }, options)); +} +function derive(Child) { + return { + from: function (Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; +} +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +function getPropertyDescriptor(obj, prop) { + var pd = getOwnPropertyDescriptor(obj, prop), proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); +} +var _slice = [].slice; +function slice(args, start, end) { + return _slice.call(args, start, end); +} +function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); +} +function assert(b) { + if (!b) + throw new Error("Assertion Failed"); +} +function asap(fn) { + if (_global.setImmediate) + setImmediate(fn); + else + setTimeout(fn, 0); +} + +/** Generate an object (hash map) based on given array. + * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to + * instert on the resulting object for each item in the array. If this function returns a falsy value, the + * current item wont affect the resulting object. + */ +function arrayToObject(array, extractor) { + return array.reduce(function (result, item, i) { + var nameAndValue = extractor(item, i); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); +} +function trycatcher(fn, reject) { + return function () { + try { + fn.apply(this, arguments); + } + catch (e) { + reject(e); + } + }; +} +function tryCatch(fn, onerror, args) { + try { + fn.apply(null, args); + } + catch (ex) { + onerror && onerror(ex); + } +} +function getByKeyPath(obj, keyPath) { + // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path + if (hasOwn(obj, keyPath)) + return obj[keyPath]; // This line is moved from last to first for optimization purpose. + if (!keyPath) + return obj; + if (typeof keyPath !== 'string') { + var rv = []; + for (var i = 0, l = keyPath.length; i < l; ++i) { + var val = getByKeyPath(obj, keyPath[i]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf('.'); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return undefined; +} +function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === undefined) + return; + if ('isFrozen' in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== 'string' && 'length' in keyPath) { + assert(typeof value !== 'string' && 'length' in value); + for (var i = 0, l = keyPath.length; i < l; ++i) { + setByKeyPath(obj, keyPath[i], value[i]); + } + } + else { + var period = keyPath.indexOf('.'); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === undefined) + delete obj[currentKeyPath]; + else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj) + innerObj = (obj[currentKeyPath] = {}); + setByKeyPath(innerObj, remainingKeyPath, value); + } + } + else { + if (value === undefined) + delete obj[keyPath]; + else + obj[keyPath] = value; + } + } +} +function delByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string') + setByKeyPath(obj, keyPath, undefined); + else if ('length' in keyPath) + [].map.call(keyPath, function (kp) { + setByKeyPath(obj, kp, undefined); + }); +} +function shallowClone(obj) { + var rv = {}; + for (var m in obj) { + if (hasOwn(obj, m)) + rv[m] = obj[m]; + } + return rv; +} +var concat = [].concat; +function flatten(a) { + return concat.apply([], a); +} +//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm +var intrinsicTypes = "Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set" + .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; }).map(function (t) { return _global[t]; }); +function deepClone(any) { + if (!any || typeof any !== 'object') + return any; + var rv; + if (isArray(any)) { + rv = []; + for (var i = 0, l = any.length; i < l; ++i) { + rv.push(deepClone(any[i])); + } + } + else if (intrinsicTypes.indexOf(any.constructor) >= 0) { + rv = any; + } + else { + rv = any.constructor ? Object.create(any.constructor.prototype) : {}; + for (var prop in any) { + if (hasOwn(any, prop)) { + rv[prop] = deepClone(any[prop]); + } + } + } + return rv; +} +function getObjectDiff(a, b, rv, prfx) { + // Compares objects a and b and produces a diff object. + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach(function (prop) { + if (!hasOwn(b, prop)) + rv[prfx + prop] = undefined; // Property removed + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && + ap && bp && + // Now compare constructors are same (not equal because wont work in Safari) + ('' + ap.constructor) === ('' + bp.constructor)) + // Same type of object but its properties may have changed + getObjectDiff(ap, bp, rv, prfx + prop + "."); + else if (ap !== bp) + rv[prfx + prop] = b[prop]; // Primitive value changed + } + }); + keys(b).forEach(function (prop) { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; // Property added + } + }); + return rv; +} +// If first argument is iterable or array-like, return it as an array +var iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator; +var getIteratorOf = iteratorSymbol ? function (x) { + var i; + return x != null && (i = x[iteratorSymbol]) && i.apply(x); +} : function () { return null; }; +var NO_CHAR_ARRAY = {}; +// Takes one or several arguments and returns an array based on the following criteras: +// * If several arguments provided, return arguments converted to an array in a way that +// still allows javascript engine to optimize the code. +// * If single argument is an array, return a clone of it. +// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special +// case to the two bullets below. +// * If single argument is an iterable, convert it to an array and return the resulting array. +// * If single argument is array-like (has length of type number), convert it to an array. +function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; +} + +// By default, debug will be true only if platform is a web platform and its page is served from localhost. +// When debug = true, error's stacks will contain asyncronic long stacks. +var debug = typeof location !== 'undefined' && + // By default, use debug mode if served from localhost. + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); +function setDebug(value, filter) { + debug = value; + libraryFilter = filter; +} +var libraryFilter = function () { return true; }; +var NEEDS_THROW_FOR_STACK = !new Error("").stack; +function getErrorWithStack() { + "use strict"; + if (NEEDS_THROW_FOR_STACK) + try { + // Doing something naughty in strict mode here to trigger a specific error + // that can be explicitely ignored in debugger's exception settings. + // If we'd just throw new Error() here, IE's debugger's exception settings + // will just consider it as "exception thrown by javascript code" which is + // something you wouldn't want it to ignore. + getErrorWithStack.arguments; + throw new Error(); // Fallback if above line don't throw. + } + catch (e) { + return e; + } + return new Error(); +} +function prettyStack(exception, numIgnoredFrames) { + var stack = exception.stack; + if (!stack) + return ""; + numIgnoredFrames = (numIgnoredFrames || 0); + if (stack.indexOf(exception.name) === 0) + numIgnoredFrames += (exception.name + exception.message).split('\n').length; + return stack.split('\n') + .slice(numIgnoredFrames) + .filter(libraryFilter) + .map(function (frame) { return "\n" + frame; }) + .join(''); +} +function deprecated(what, fn) { + return function () { + console.warn(what + " is deprecated. See https://github.com/dfahlander/Dexie.js/wiki/Deprecations. " + prettyStack(getErrorWithStack(), 1)); + return fn.apply(this, arguments); + }; +} + +var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' +]; +var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed" +}; +// +// DexieError - base class of all out exceptions. +// +function DexieError(name, msg) { + // Reason we don't use ES6 classes is because: + // 1. It bloats transpiled code and increases size of minified code. + // 2. It doesn't give us much in this case. + // 3. It would require sub classes to call super(), which + // is not needed when deriving from Error. + this._e = getErrorWithStack(); + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + stack: { + get: function () { + return this._stack || + (this._stack = this.name + ": " + this.message + prettyStack(this._e, 2)); + } + }, + toString: function () { return this.name + ": " + this.message; } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + failures + .map(function (f) { return f.toString(); }) + .filter(function (v, i, s) { return s.indexOf(v) === i; }) // Only unique error strings + .join('\n'); +} +// +// ModifyError - thrown in Collection.modify() +// Specific constructor because it contains members failures and failedKeys. +// +function ModifyError(msg, failures, successCount, failedKeys) { + this._e = getErrorWithStack(); + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this._e = getErrorWithStack(); + this.name = "BulkError"; + this.failures = failures; + this.message = getMultiErrorMessage(msg, failures); +} +derive(BulkError).from(DexieError); +// +// +// Dynamically generate error names and exception classes based +// on the names in errorList. +// +// +// Map of {ErrorName -> ErrorName + "Error"} +var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {}); +// Need an alias for DexieError because we're gonna create subclasses with the same name. +var BaseException = DexieError; +// Map of {ErrorName -> exception constructor} +var exceptions = errorList.reduce(function (obj, name) { + // Let the name be "DexieError" because this name may + // be shown in call stack and when debugging. DexieError is + // the most true name because it derives from DexieError, + // and we cannot change Function.name programatically without + // dynamically create a Function object, which would be considered + // 'eval-evil'. + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this._e = getErrorWithStack(); + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = msgOrInner; + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = msgOrInner.name + " " + msgOrInner.message; + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; +}, {}); +// Use ECMASCRIPT standard exceptions where applicable: +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce(function (obj, name) { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + // Derive stack from inner exception if it has a stack + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce(function (obj, name) { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; + +function nop() { } +function mirror(val) { return val; } +function pureFunctionChain(f1, f2) { + // Enables chained events that takes ONE argument and returns it to the next function in chain. + // This pattern is used in the hook("reading") event. + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; +} +function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f2) { + // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance. + // This pattern is used in the hook("creating") event. + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess + onerror = this.onerror; // In case event listener has set this.onerror + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; +} +function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess + onerror = this.onerror; // In case event listener has set this.onerror + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain. + var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess + onerror = this.onerror; // In case event listener has set this.onerror + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; +} +function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} + +function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; +} + +/* + * Copyright (c) 2014-2017 David Fahlander + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0 + */ +// +// Promise and Zone (PSD) for Dexie library +// +// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by +// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation. +// +// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another +// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use +// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task +// engine that is indexedDB compliant across all browsers. +// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible. +// Also with inspiration from bluebird, asyncronic stacks in debug mode. +// +// Specific non-standard features of this Promise class: +// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as +// native async / await. +// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame +// and below + all promises that those promises creates or awaits. +// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). +// +// David Fahlander, https://github.com/dfahlander +// +// Just a pointer that only this module knows about. +// Used in Promise constructor to emulate a private constructor. +var INTERNAL = {}; +// Async stacks (long stacks) must not grow infinitely. +var LONG_STACKS_CLIP_LIMIT = 100; +var MAX_LONG_STACKS = 20; +var ZONE_ECHO_LIMIT = 7; +var nativePromiseInstanceAndProto = (function () { + try { + // Be able to patch native async functions + return new Function("let F=async ()=>{},p=F();return [p,Object.getPrototypeOf(p),Promise.resolve(),F.constructor];")(); + } + catch (e) { + var P = _global.Promise; + return P ? + [P.resolve(), P.prototype, P.resolve()] : + []; + } +})(); +var resolvedNativePromise = nativePromiseInstanceAndProto[0]; +var nativePromiseProto = nativePromiseInstanceAndProto[1]; +var resolvedGlobalPromise = nativePromiseInstanceAndProto[2]; +var nativePromiseThen = nativePromiseProto && nativePromiseProto.then; +var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +var AsyncFunction = nativePromiseInstanceAndProto[3]; +var patchGlobalPromise = !!resolvedGlobalPromise; +var stack_being_generated = false; +/* The default function used only for the very first promise in a promise chain. + As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks + emulated in this module. For indexedDB compatibility, this means that every method needs to + execute at least one promise before doing an indexedDB operation. Dexie will always call + db.ready().then() for every operation to make sure the indexedDB event is started in an + indexedDB-compatible emulated micro task loop. +*/ +var schedulePhysicalTick = resolvedGlobalPromise ? + function () { resolvedGlobalPromise.then(physicalTick); } + : + _global.setImmediate ? + // setImmediate supported. Those modern platforms also supports Function.bind(). + setImmediate.bind(null, physicalTick) : + _global.MutationObserver ? + // MutationObserver supported + function () { + var hiddenDiv = document.createElement("div"); + (new MutationObserver(function () { + physicalTick(); + hiddenDiv = null; + })).observe(hiddenDiv, { attributes: true }); + hiddenDiv.setAttribute('i', '1'); + } : + // No support for setImmediate or MutationObserver. No worry, setTimeout is only called + // once time. Every tick that follows will be our emulated micro tick. + // Could have uses setTimeout.bind(null, 0, physicalTick) if it wasnt for that FF13 and below has a bug + function () { setTimeout(physicalTick, 0); }; +// Configurable through Promise.scheduler. +// Don't export because it would be unsafe to let unknown +// code call it unless they do try..catch within their callback. +// This function can be retrieved through getter of Promise.scheduler though, +// but users must not do Promise.scheduler = myFuncThatThrowsException +var asap$1 = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true; +var needsNewPhysicalTick = true; +var unhandledErrors = []; +var rejectingErrors = []; +var currentFulfiller = null; +var rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions +var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: globalError, + pgp: false, + env: {}, + finalize: function () { + this.unhandleds.forEach(function (uh) { + try { + globalError(uh[0], uh[1]); + } + catch (e) { } + }); + } +}; +var PSD = globalPSD; +var microtickQueue = []; // Callbacks to call in this or next physical tick. +var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick. +var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick. +function Promise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this.onuncatched = nop; // Deprecate in next major. Not needed. Better to use global error handler. + // A library may set `promise._lib = true;` after promise is created to make resolve() or reject() + // execute the microtask engine implicitely within the call to resolve() or reject(). + // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack + // only contains library code when calling resolve() or reject(). + // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from + // global scope (event handler, timer etc)! + this._lib = false; + // Current async scope + var psd = (this._PSD = PSD); + if (debug) { + this._stackHolder = getErrorWithStack(); + this._prev = null; + this._numPrev = 0; // Number of previous promises (for long stacks) + } + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + // Private constructor (INTERNAL, state, value). + // Used internally by Promise.resolve() and Promise.reject(). + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError(). + return; + } + this._state = null; // null (=pending), false (=rejected) or true (=resolved) + this._value = null; // error or result + ++psd.ref; // Refcounting current scope + executePromiseTask(this, fn); +} +// Prepare a property descriptor to put onto Promise.prototype.then +var thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var _this = this; + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + if (possibleAwait) + decrementExpectedAwaits(); + var rv = new Promise(function (resolve, reject) { + propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd)); + }); + debug && linkToPreviousPromise(rv, this); + return rv; + } + then.prototype = INTERNAL; // For idempotense, see setter below. + return then; + }, + // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then + // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor. + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : // Restore to original property descriptor. + { + get: function () { + return value; // Getter returning provided value (behaves like value is just changed) + }, + set: thenProp.set // Keep a setter that is prepared to restore original. + }); + } +}; +props(Promise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + // A little tinier version of then() that don't have to create a resulting promise. + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + // First argument is the Error type to catch + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, function (err) { + // Catching errors by its constructor type (similar to java / c++ / c#) + // Sample: promise.catch(TypeError, function (e) { ... }); + return err instanceof type ? handler(err) : PromiseReject(err); + }) + : this.then(null, function (err) { + // Catching errors by the error.name property. Makes sense for indexedDB where error type + // is always DOMError but where e.name tells the actual error type. + // Sample: promise.catch('ConstraintError', function (e) { ... }); + return err && err.name === type ? handler(err) : PromiseReject(err); + }); + }, + finally: function (onFinally) { + return this.then(function (value) { + onFinally(); + return value; + }, function (err) { + onFinally(); + return PromiseReject(err); + }); + }, + stack: { + get: function () { + if (this._stack) + return this._stack; + try { + stack_being_generated = true; + var stacks = getStack(this, [], MAX_LONG_STACKS); + var stack = stacks.join("\nFrom previous: "); + if (this._state !== null) + this._stack = stack; // Stack may be updated on reject. + return stack; + } + finally { + stack_being_generated = false; + } + } + }, + timeout: function (ms, msg) { + var _this = this; + return ms < Infinity ? + new Promise(function (resolve, reject) { + var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms); + _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(Promise.prototype, Symbol.toStringTag, 'Promise'); +// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env. +// Environment globals snapshotted on leaving global zone +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +// Promise Static Properties +props(Promise, { + all: function () { + var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like. + .map(onPossibleParallellAsync); // Handle parallell async/awaits + return new Promise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach(function (a, i) { return Promise.resolve(a).then(function (x) { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject); }); + }); + }, + resolve: function (value) { + if (value instanceof Promise) + return value; + if (value && typeof value.then === 'function') + return new Promise(function (resolve, reject) { + value.then(resolve, reject); + }); + var rv = new Promise(INTERNAL, true, value); + linkToPreviousPromise(rv, currentFulfiller); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new Promise(function (resolve, reject) { + values.map(function (value) { return Promise.resolve(value).then(resolve, reject); }); + }); + }, + PSD: { + get: function () { return PSD; }, + set: function (value) { return PSD = value; } + }, + //totalEchoes: {get: ()=>totalEchoes}, + //task: {get: ()=>task}, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: function () { return asap$1; }, + set: function (value) { asap$1 = value; } + }, + rejectionMapper: { + get: function () { return rejectionMapper; }, + set: function (value) { rejectionMapper = value; } // Map reject failures + }, + follow: function (fn, zoneProps) { + return new Promise(function (resolve, reject) { + return newScope(function (resolve, reject) { + var psd = PSD; + psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize() + psd.onunhandled = reject; // Triggered directly on unhandled promises of this library. + psd.finalize = callBoth(function () { + var _this = this; + // Unhandled standard or 3rd part promises are put in PSD.unhandleds and + // examined upon scope completion while unhandled rejections in this Promise + // will trigger directly through psd.onunhandled + run_at_end_of_this_or_next_physical_tick(function () { + _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } +}); +/** +* Take a potentially misbehaving resolver function and make sure +* onFulfilled and onRejected are only called once. +* +* Makes no guarantees about asynchrony. +*/ +function executePromiseTask(promise, fn) { + // Promise Resolution Procedure: + // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + try { + fn(function (value) { + if (promise._state !== null) + return; // Already settled + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, function (resolve, reject) { + value instanceof Promise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below + } + catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + debug && reason !== null && typeof reason === 'object' && !reason._promise && tryCatch(function () { + var origProp = getPropertyDescriptor(reason, "stack"); + reason._promise = promise; + setProp(reason, "stack", { + get: function () { + return stack_being_generated ? + origProp && (origProp.get ? + origProp.get.apply(reason) : + origProp.value) : + promise.stack; + } + }); + }); + // Add the failure to a list of possibly uncaught errors + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + //debug && linkToPreviousPromise(promise); + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize(); + if (numScheduledCalls === 0) { + // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call, + // and that no deferreds where listening to this rejection or success. + // Since there is a risk that our stack can contain application code that may + // do stuff after this code is finished that may generate new calls, we cannot + // call finalizers here. + ++numScheduledCalls; + asap$1(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); // Will detect unhandled errors + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch() + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap$1(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + // Set static variable currentFulfiller to the promise that is being fullfilled, + // so that we connect the chain of promises (for long stacks support) + currentFulfiller = promise; + // Call callback and resolve our listener with it's return value. + var ret, value = promise._value; + if (promise._state) { + // cb is onResolved + ret = cb(value); + } + else { + // cb is onRejected + if (rejectingErrors.length) + rejectingErrors = []; + ret = cb(value); + if (rejectingErrors.indexOf(value) === -1) + markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise. + } + listener.resolve(ret); + } + catch (e) { + // Exception thrown in callback. Reject our listener. + listener.reject(e); + } + finally { + // Restore env and currentFulfiller. + currentFulfiller = null; + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function getStack(promise, stacks, limit) { + if (stacks.length === limit) + return stacks; + var stack = ""; + if (promise._state === false) { + var failure = promise._value, errorName, message; + if (failure != null) { + errorName = failure.name || "Error"; + message = failure.message || failure; + stack = prettyStack(failure, 0); + } + else { + errorName = failure; // If error is undefined or null, show that. + message = ""; + } + stacks.push(errorName + (message ? ": " + message : "") + stack); + } + if (debug) { + stack = prettyStack(promise._stackHolder, 2); + if (stack && stacks.indexOf(stack) === -1) + stacks.push(stack); + if (promise._prev) + getStack(promise._prev, stacks, limit); + } + return stacks; +} +function linkToPreviousPromise(promise, prev) { + // Support long stacks by linking to previous completed promise. + var numPrev = prev ? prev._numPrev + 1 : 0; + if (numPrev < LONG_STACKS_CLIP_LIMIT) { + promise._prev = prev; + promise._numPrev = numPrev; + } +} +/* The callback to schedule with setImmediate() or setTimeout(). + It runs a virtual microtick and executes any callback registered in microtickQueue. + */ +function physicalTick() { + beginMicroTickScope() && endMicroTickScope(); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +/* Executes micro-ticks without doing try..catch. + This can be possible because we only use this internally and + the registered functions are exception-safe (they do try..catch + internally before calling any external method). If registering + functions in the microtickQueue that are not exception-safe, this + would destroy the framework and make it instable. So we don't export + our asap method. +*/ +function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(function (p) { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list. + var i = finalizers.length; + while (i) + finalizers[--i](); +} +function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap$1(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + // Only add to unhandledErrors if not already there. The first one to add to this list + // will be upon the first rejection so that the root cause (first promise in the + // rejection chain) is the one listed. + if (!unhandledErrors.some(function (p) { return p._value === promise._value; })) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + // Called when a reject handled is actually being called. + // Search in unhandledErrors for any promise whos _value is this promise_value (list + // contains only rejected promises, and only one item per error) + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + // Found a promise that failed with this same error object pointer, + // Remove that since there is a listener that actually takes care of it. + unhandledErrors.splice(i, 1); + return; + } +} +function PromiseReject(reason) { + return new Promise(INTERNAL, false, reason); +} +function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +// +// variables used for native await support +// +var task = { awaits: 0, echoes: 0, id: 0 }; // The ongoing macro-task when using zone-echoing. +var taskCounter = 0; // ID counter for macro tasks. +var zoneStack = []; // Stack of left zones to restore asynchronically. +var zoneEchoes = 0; // zoneEchoes is a must in order to persist zones between native await expressions. +var totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then. +var zone_id_counter = 0; +function newScope(fn, props$$1, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + // Prepare for promise patching (done in usePSD): + var globalEnv = globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: Promise, + PromiseProp: { value: Promise, configurable: true, writable: true }, + all: Promise.all, + race: Promise.race, + resolve: Promise.resolve, + reject: Promise.reject, + nthen: getPatchedPromiseThen(globalEnv.nthen, psd), + gthen: getPatchedPromiseThen(globalEnv.gthen, psd) // global then + } : {}; + if (props$$1) + extend(psd, props$$1); + // unhandleds and onunhandled should not be specifically set here. + // Leave them on parent prototype. + // unhandleds.push(err) will push to parent's prototype + // onunhandled() will call parents onunhandled (with this scope's this-pointer though!) + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +// Function to call if scopeFunc returns NativePromise +// Also for each NativePromise in the arguments to Promise.all() +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called. +// Also call this when a native await calls then method on a promise. In that case, don't supply +// sourceTaskId because we already know it refers to current task. +function decrementExpectedAwaits(sourceTaskId) { + if (!task.awaits || (sourceTaskId && sourceTaskId !== task.id)) + return; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0. +} +// Call from Promise.all() and Promise.race() +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(function (x) { + decrementExpectedAwaits(); + return x; + }, function (e) { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.id = 0; // Cancel zone echoing. + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + // Enter or leave zone asynchronically as well, so that tasks initiated during current tick + // will be surrounded by the zone when they are invoked. + enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; // The actual zone switch occurs at this line. + // Snapshot on every leave from global zone. + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + // Let's patch the global and native Promises (may be same or may be different) + var GlobalPromise = globalPSD.env.Promise; + // Swich environments (may be PSD-zone or the global zone. Both apply.) + var targetEnv = targetZone.env; + // Change Promise.prototype.then for native and global Promise (they MAY differ on polyfilled environments, but both can be accessed) + // Must be done on each zone change because the patched method contains targetZone in its closure. + nativePromiseProto.then = targetEnv.nthen; + GlobalPromise.prototype.then = targetEnv.gthen; + if (currentZone.global || targetZone.global) { + // Leaving or entering global zone. It's time to patch / restore global Promise. + // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular. + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might + // not be accessing global.Promise but a local reference to it) + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + nthen: nativePromiseProto.then, + gthen: GlobalPromise.prototype.then + } : {}; +} +function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } +} +function enqueueNativeMicroTask(job) { + // + // Precondition: nativePromiseThen !== undefined + // + nativePromiseThen.call(resolvedNativePromise, job); +} +function nativeAwaitCompatibleWrap(fn, zone, possibleAwait) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + } + }; +} +function getPatchedPromiseThen(origThen, zone) { + return function (onResolved, onRejected) { + return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false)); + }; +} +var UNHANDLEDREJECTION = "unhandledrejection"; +function globalError(err, promise) { + var rv; + try { + rv = promise.onuncatched(err); + } + catch (e) { } + if (rv !== false) + try { + var event, eventData = { promise: promise, reason: err }; + if (_global.document && document.createEvent) { + event = document.createEvent('Event'); + event.initEvent(UNHANDLEDREJECTION, true, true); + extend(event, eventData); + } + else if (_global.CustomEvent) { + event = new CustomEvent(UNHANDLEDREJECTION, { detail: eventData }); + extend(event, eventData); + } + if (event && _global.dispatchEvent) { + dispatchEvent(event); + if (!_global.PromiseRejectionEvent && _global.onunhandledrejection) + // No native support for PromiseRejectionEvent but user has set window.onunhandledrejection. Manually call it. + try { + _global.onunhandledrejection(event); + } + catch (_) { } + } + if (!event.defaultPrevented) { + console.warn("Unhandled rejection: " + (err.stack || err)); + } + } + catch (e) { } +} +var rejection = Promise.reject; + +function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + // Subscribe. If additional arguments than just the subscriber was provided, forward them as well. + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + // Return interface allowing to fire or unsubscribe from event + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + // events(this, {reading: [functionChain, nop]}); + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack + // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten. + var context = add(eventName, mirror, function fire() { + // Optimazation-safe cloning of arguments into args. + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + // All each subscriber: + context.subscribers.forEach(function (fn) { + asap(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} + +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * Copyright (c) 2014-2017 David Fahlander + * + * Version 2.0.4, Fri May 25 2018 + * + * http://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0 + * + */ +var DEXIE_VERSION = '2.0.4'; +var maxString = String.fromCharCode(65535); +var maxKey = (function () { try { + IDBKeyRange.only([[]]); + return [[]]; +} +catch (e) { + return maxString; +} })(); +var minKey = -Infinity; +var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +var STRING_EXPECTED = "String expected."; +var connections = []; +var isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent); +var hasIEDeleteObjectStoreBug = isIEOrEdge; +var hangsOnDeleteLargeKeyRange = isIEOrEdge; +var dexieStackFrameFilter = function (frame) { return !/(dexie\.js|dexie\.min\.js)/.test(frame); }; +var dbNamesDB; // Global database for backing Dexie.getDatabaseNames() on browser without indexedDB.webkitGetDatabaseNames() +// Init debug +setDebug(debug, dexieStackFrameFilter); +function Dexie(dbName, options) { + /// Specify only if you wich to control which addons that should run on this instance + var deps = Dexie.dependencies; + var opts = extend({ + // Default Options + addons: Dexie.addons, + autoOpen: true, + indexedDB: deps.indexedDB, + IDBKeyRange: deps.IDBKeyRange // Backend IDBKeyRange api. Default to browser env. + }, options); + var addons = opts.addons, autoOpen = opts.autoOpen, indexedDB = opts.indexedDB, IDBKeyRange = opts.IDBKeyRange; + var globalSchema = this._dbSchema = {}; + var versions = []; + var dbStoreNames = []; + var allTables = {}; + /// + var idbdb = null; // Instance of IDBDatabase + var dbOpenError = null; + var isBeingOpened = false; + var onReadyBeingFired = null; + var openComplete = false; + var READONLY = "readonly", READWRITE = "readwrite"; + var db = this; + var dbReadyResolve, dbReadyPromise = new Promise(function (resolve) { + dbReadyResolve = resolve; + }), cancelOpen, openCanceller = new Promise(function (_, reject) { + cancelOpen = reject; + }); + var autoSchema = true; + var hasNativeGetDatabaseNames = !!getNativeGetDatabaseNamesFn(indexedDB), hasGetAll; + function init() { + // Default subscribers to "versionchange" and "blocked". + // Can be overridden by custom handlers. If custom handlers return false, these default + // behaviours will be prevented. + db.on("versionchange", function (ev) { + // Default behavior for versionchange event is to close database connection. + // Caller can override this behavior by doing db.on("versionchange", function(){ return false; }); + // Let's not block the other window from making it's delete() or open() call. + // NOTE! This event is never fired in IE,Edge or Safari. + if (ev.newVersion > 0) + console.warn("Another connection wants to upgrade database '" + db.name + "'. Closing db now to resume the upgrade."); + else + console.warn("Another connection wants to delete database '" + db.name + "'. Closing db now to resume the delete request."); + db.close(); + // In many web applications, it would be recommended to force window.reload() + // when this event occurs. To do that, subscribe to the versionchange event + // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion) + // The reason for this is that your current web app obviously has old schema code that needs + // to be updated. Another window got a newer version of the app and needs to upgrade DB but + // your window is blocking it unless we close it here. + }); + db.on("blocked", function (ev) { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn("Dexie.delete('" + db.name + "') was blocked"); + else + console.warn("Upgrade '" + db.name + "' blocked by other connection holding version " + ev.oldVersion / 10); + }); + } + // + // + // + // ------------------------- Versioning Framework--------------------------- + // + // + // + this.version = function (versionNumber) { + /// + /// + if (idbdb || isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0]; + if (versionInstance) + return versionInstance; + versionInstance = new Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + // Disable autoschema mode, as at least one version is specified. + autoSchema = false; + return versionInstance; + }; + function Version(versionNumber) { + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + this.stores({}); // Derive earlier schemas by default. + } + extend(Version.prototype, { + stores: function (stores) { + ///

+ /// Defines the schema for a particular version + /// + /// + /// Example:
+ /// {users: "id++,first,last,&username,*email",
+ /// passwords: "id++,&username"}
+ ///
+ /// Syntax: {Table: "[primaryKey][++],[&][*]index1,[&][*]index2,..."}

+ /// Special characters:
+ /// "&" means unique key,
+ /// "*" means value is multiEntry,
+ /// "++" means auto-increment and only applicable for primary key
+ /// + this._cfg.storesSource = this._cfg.storesSource ? extend(this._cfg.storesSource, stores) : stores; + // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax. + var storesSpec = {}; + versions.forEach(function (version) { + extend(storesSpec, version._cfg.storesSource); + }); + var dbschema = (this._cfg.dbschema = {}); + this._parseStoresSpec(storesSpec, dbschema); + // Update the latest schema to this version + // Update API + globalSchema = db._dbSchema = dbschema; + removeTablesApi([allTables, db, Transaction.prototype]); // Keep Transaction.prototype even though it should be depr. + setApiOnPlace([allTables, db, Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + dbStoreNames = keys(dbschema); + return this; + }, + upgrade: function (upgradeFunction) { + this._cfg.contentUpgrade = upgradeFunction; + return this; + }, + _parseStoresSpec: function (stores, outSchema) { + keys(stores).forEach(function (tableName) { + if (stores[tableName] !== null) { + var instanceTemplate = {}; + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + if (primKey.keyPath) + setByKeyPath(instanceTemplate, primKey.keyPath, primKey.auto ? 0 : primKey.keyPath); + indexes.forEach(function (idx) { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + setByKeyPath(instanceTemplate, idx.keyPath, idx.compound ? idx.keyPath.map(function () { return ""; }) : ""); + }); + outSchema[tableName] = new TableSchema(tableName, primKey, indexes, instanceTemplate); + } + }); + } + }); + function runUpgraders(oldVersion, idbtrans, reject) { + var trans = db._createTransaction(READWRITE, dbStoreNames, globalSchema); + trans.create(idbtrans); + trans._completion.catch(reject); + var rejectTransaction = trans._reject.bind(trans); + newScope(function () { + PSD.trans = trans; + if (oldVersion === 0) { + // Create tables: + keys(globalSchema).forEach(function (tableName) { + createTable(idbtrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + Promise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction); + } + else + updateTablesAndIndexes(oldVersion, trans, idbtrans).catch(rejectTransaction); + }); + } + function updateTablesAndIndexes(oldVersion, trans, idbtrans) { + // Upgrade version to version, step-by-step from oldest to newest version. + // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version) + var queue = []; + var oldVersionStruct = versions.filter(function (version) { return version._cfg.version === oldVersion; })[0]; + if (!oldVersionStruct) + throw new exceptions.Upgrade("Dexie specification of currently installed DB version is missing"); + globalSchema = db._dbSchema = oldVersionStruct._cfg.dbschema; + var anyContentUpgraderHasRun = false; + var versToRun = versions.filter(function (v) { return v._cfg.version > oldVersion; }); + versToRun.forEach(function (version) { + /// + queue.push(function () { + var oldSchema = globalSchema; + var newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(oldSchema, idbtrans); + adjustToExistingIndexNames(newSchema, idbtrans); + globalSchema = db._dbSchema = newSchema; + var diff = getSchemaDiff(oldSchema, newSchema); + // Add tables + diff.add.forEach(function (tuple) { + createTable(idbtrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + // Change tables + diff.change.forEach(function (change) { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + var store = idbtrans.objectStore(change.name); + // Add indexes + change.add.forEach(function (idx) { + addIndex(store, idx); + }); + // Update indexes + change.change.forEach(function (idx) { + store.deleteIndex(idx.name); + addIndex(store, idx); + }); + // Delete indexes + change.del.forEach(function (idxName) { + store.deleteIndex(idxName); + }); + } + }); + if (version._cfg.contentUpgrade) { + anyContentUpgraderHasRun = true; + return Promise.follow(function () { + version._cfg.contentUpgrade(trans); + }); + } + }); + queue.push(function (idbtrans) { + if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) { + var newSchema = version._cfg.dbschema; + // Delete old tables + deleteRemovedTables(newSchema, idbtrans); + } + }); + }); + // Now, create a queue execution engine + function runQueue() { + return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + Promise.resolve(); + } + return runQueue().then(function () { + createMissingTables(globalSchema, idbtrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version) + }); + } + function getSchemaDiff(oldSchema, newSchema) { + var diff = { + del: [], + add: [], + change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs} + }; + for (var table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + var oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + var change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (oldDef.primKey.src !== newDef.primKey.src) { + // Primary key has changed. Remove and re-add table. + change.recreate = true; + diff.change.push(change); + } + else { + // Same primary key. Just find out what differs: + var oldIndexes = oldDef.idxByName; + var newIndexes = newDef.idxByName; + for (var idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; + } + function createTable(idbtrans, tableName, primKey, indexes) { + /// + var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : { autoIncrement: primKey.auto }); + indexes.forEach(function (idx) { addIndex(store, idx); }); + return store; + } + function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(function (tableName) { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); + } + function deleteRemovedTables(newSchema, idbtrans) { + for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) { + var storeName = idbtrans.db.objectStoreNames[i]; + if (newSchema[storeName] == null) { + idbtrans.db.deleteObjectStore(storeName); + } + } + } + function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); + } + // + // + // Dexie Protected API + // + // + this._allTables = allTables; + this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { + return new Transaction(mode, storeNames, dbschema, parentTransaction); + }; + /* Generate a temporary transaction when db operations are done outside a transaction scope. + */ + function tempTransaction(mode, storeNames, fn) { + if (!openComplete && (!PSD.letThrough)) { + if (!isBeingOpened) { + if (!autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway. + } + return dbReadyPromise.then(function () { return tempTransaction(mode, storeNames, fn); }); + } + else { + var trans = db._createTransaction(mode, storeNames, globalSchema); + try { + trans.create(); + } + catch (ex) { + return rejection(ex); + } + return trans._promise(mode, function (resolve, reject) { + return newScope(function () { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(function (result) { + // Instead of resolving value directly, wait with resolving it until transaction has completed. + // Otherwise the data would not be in the DB if requesting it in the then() operation. + // Specifically, to ensure that the following expression will work: + // + // db.friends.put({name: "Arne"}).then(function () { + // db.friends.where("name").equals("Arne").count(function(count) { + // assert (count === 1); + // }); + // }); + // + return trans._completion.then(function () { return result; }); + }); /*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major. + trans._reject(err); + return rejection(err); + });*/ + } + } + this._whenReady = function (fn) { + return openComplete || PSD.letThrough ? fn() : new Promise(function (resolve, reject) { + if (!isBeingOpened) { + if (!autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway. + } + dbReadyPromise.then(resolve, reject); + }).then(fn); + }; + // + // + // + // + // Dexie API + // + // + // + this.verno = 0; + this.open = function () { + if (isBeingOpened || idbdb) + return dbReadyPromise.then(function () { return dbOpenError ? rejection(dbOpenError) : db; }); + debug && (openCanceller._stackHolder = getErrorWithStack()); // Let stacks point to when open() was called rather than where new Dexie() was called. + isBeingOpened = true; + dbOpenError = null; + openComplete = false; + // Function pointers to call when the core opening process completes. + var resolveDbReady = dbReadyResolve, + // upgradeTransaction to abort on failure. + upgradeTransaction = null; + return Promise.race([openCanceller, new Promise(function (resolve, reject) { + // Multiply db.verno with 10 will be needed to workaround upgrading bug in IE: + // IE fails when deleting objectStore after reading from it. + // A future version of Dexie.js will stopover an intermediate version to workaround this. + // At that point, we want to be backward compatible. Could have been multiplied with 2, but by using 10, it is easier to map the number to the real version number. + // If no API, throw! + if (!indexedDB) + throw new exceptions.MissingAPI("indexedDB API not found. If using IE10+, make sure to run your code on a server URL " + + "(not locally). If using old Safari versions, make sure to include indexedDB polyfill."); + var req = autoSchema ? indexedDB.open(dbName) : indexedDB.open(dbName, Math.round(db.verno * 10)); + if (!req) + throw new exceptions.MissingAPI("IndexedDB API not available"); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134 + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(fireOnBlocked); + req.onupgradeneeded = wrap(function (e) { + upgradeTransaction = req.transaction; + if (autoSchema && !db._allowEmptyDB) { + // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases. + // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we + // do not create a new database by accident here. + req.onerror = preventDefault; // Prohibit onabort error from firing before we're done! + upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.) + // Close database and delete it. + req.result.close(); + var delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here! + delreq.onsuccess = delreq.onerror = wrap(function () { + reject(new exceptions.NoSuchDatabase("Database " + dbName + " doesnt exist")); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix. + runUpgraders(oldVer / 10, upgradeTransaction, reject, req); + } + }, reject); + req.onsuccess = wrap(function () { + // Core opening procedure complete. Now let's just record some stuff. + upgradeTransaction = null; + idbdb = req.result; + connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari. + if (autoSchema) + readGlobalSchema(); + else if (idbdb.objectStoreNames.length > 0) { + try { + adjustToExistingIndexNames(globalSchema, idbdb.transaction(safariMultiStoreFix(idbdb.objectStoreNames), READONLY)); + } + catch (e) { + // Safari may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120. + } + } + idbdb.onversionchange = wrap(function (ev) { + db._vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari) + db.on("versionchange").fire(ev); + }); + if (!hasNativeGetDatabaseNames && dbName !== '__dbnames') { + dbNamesDB.dbnames.put({ name: dbName }).catch(nop); + } + resolve(); + }, reject); + })]).then(function () { + // Before finally resolving the dbReadyPromise and this promise, + // call and await all on('ready') subscribers: + // Dexie.vip() makes subscribers able to use the database while being opened. + // This is a must since these subscribers take part of the opening procedure. + onReadyBeingFired = []; + return Promise.resolve(Dexie.vip(db.on.ready.fire)).then(function fireRemainders() { + if (onReadyBeingFired.length > 0) { + // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed. + var remainders = onReadyBeingFired.reduce(promisableChain, nop); + onReadyBeingFired = []; + return Promise.resolve(Dexie.vip(remainders)).then(fireRemainders); + } + }); + }).finally(function () { + onReadyBeingFired = null; + }).then(function () { + // Resolve the db.open() with the db instance. + isBeingOpened = false; + return db; + }).catch(function (err) { + try { + // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit. + upgradeTransaction && upgradeTransaction.abort(); + } + catch (e) { } + isBeingOpened = false; // Set before calling db.close() so that it doesnt reject openCanceller again (leads to unhandled rejection event). + db.close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh. + // A call to db.close() may have made on-ready subscribers fail. Use dbOpenError if set, since err could be a follow-up error on that. + dbOpenError = err; // Record the error. It will be used to reject further promises of db operations. + return rejection(dbOpenError); + }).finally(function () { + openComplete = true; + resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters. + }); + }; + this.close = function () { + var idx = connections.indexOf(db); + if (idx >= 0) + connections.splice(idx, 1); + if (idbdb) { + try { + idbdb.close(); + } + catch (e) { } + idbdb = null; + } + autoOpen = false; + dbOpenError = new exceptions.DatabaseClosed(); + if (isBeingOpened) + cancelOpen(dbOpenError); + // Reset dbReadyPromise promise: + dbReadyPromise = new Promise(function (resolve) { + dbReadyResolve = resolve; + }); + openCanceller = new Promise(function (_, reject) { + cancelOpen = reject; + }); + }; + this.delete = function () { + var hasArguments = arguments.length > 0; + return new Promise(function (resolve, reject) { + if (hasArguments) + throw new exceptions.InvalidArgument("Arguments not allowed in db.delete()"); + if (isBeingOpened) { + dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + function doDelete() { + db.close(); + var req = indexedDB.deleteDatabase(dbName); + req.onsuccess = wrap(function () { + if (!hasNativeGetDatabaseNames) { + dbNamesDB.dbnames.delete(dbName).catch(nop); + } + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = fireOnBlocked; + } + }); + }; + this.backendDB = function () { + return idbdb; + }; + this.isOpen = function () { + return idbdb !== null; + }; + this.hasBeenClosed = function () { + return dbOpenError && (dbOpenError instanceof exceptions.DatabaseClosed); + }; + this.hasFailed = function () { + return dbOpenError !== null; + }; + this.dynamicallyOpened = function () { + return autoSchema; + }; + // + // Properties + // + this.name = dbName; + // db.tables - an array of all Table instances. + props(this, { + tables: { + get: function () { + /// + return keys(allTables).map(function (name) { return allTables[name]; }); + } + } + }); + // + // Events + // + this.on = Events(this, "populate", "blocked", "versionchange", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) { + return function (subscriber, bSticky) { + Dexie.vip(function () { + if (openComplete) { + // Database already open. Call subscriber asap. + if (!dbOpenError) + Promise.resolve().then(subscriber); + // bSticky: Also subscribe to future open sucesses (after close / reopen) + if (bSticky) + subscribe(subscriber); + } + else if (onReadyBeingFired) { + // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected + onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + // Database not yet open. Subscribe to it. + subscribe(subscriber); + // If bSticky is falsy, make sure to unsubscribe subscriber when fired once. + if (!bSticky) + subscribe(function unsubscribe() { + db.on.ready.unsubscribe(subscriber); + db.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.transaction = function () { + /// + /// + /// + /// "r" for readonly, or "rw" for readwrite + /// Table instance, Array of Table instances, String or String Array of object stores to include in the transaction + /// Function to execute with transaction + var args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + }; + function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + // Let table arguments be all arguments between mode and last argument. + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments) + // and clone arguments except the first one into local var 'args'. + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments. + scopeFunc = args.pop(); + var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays. + return [mode, tables, scopeFunc]; + } + this._transaction = function (mode, tables, scopeFunc) { + var parentTransaction = PSD.trans; + // Check if parent transactions is bound to this db instance, and if caller wants to reuse it + if (!parentTransaction || parentTransaction.db !== db || mode.indexOf('!') !== -1) + parentTransaction = null; + var onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); // Ok. Will change arguments[0] as well but we wont touch arguments henceforth. + try { + // + // Get storeNames from arguments. Either through given table instances, or through given table names. + // + var storeNames = tables.map(function (table) { + var storeName = table instanceof Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + // + // Resolve mode. Allow shortcuts "r" and "rw". + // + if (mode == "r" || mode == READONLY) + mode = READONLY; + else if (mode == "rw" || mode == READWRITE) + mode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + // Basic checks + if (parentTransaction.mode === READONLY && mode === READWRITE) { + if (onlyIfCompatible) { + // Spawn new transaction instead. + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(function (storeName) { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + // Spawn new transaction instead. + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + // '?' mode should not keep using an inactive transaction. + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, function (_, reject) { reject(e); }) : + rejection(e); + } + // If this is a sub-transaction, lock the parent and then launch the sub-transaction. + return (parentTransaction ? + parentTransaction._promise(mode, enterTransactionScope, "lock") : + PSD.trans ? + // no parent transaction despite PSD.trans exists. Make sure also + // that the zone we create is not a sub-zone of current, because + // Promise.follow() should not wait for it if so. + usePSD(PSD.transless, function () { return db._whenReady(enterTransactionScope); }) : + db._whenReady(enterTransactionScope)); + function enterTransactionScope() { + return Promise.resolve().then(function () { + // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction(). + var transless = PSD.transless || PSD; + // Our transaction. + //return new Promise((resolve, reject) => { + var trans = db._createTransaction(mode, storeNames, globalSchema, parentTransaction); + // Let the transaction instance be part of a Promise-specific data (PSD) value. + var zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing) + trans.idbtrans = parentTransaction.idbtrans; + } + else { + trans.create(); // Create the backend transaction so that complete() or error() will trigger even if no operation is made upon it. + } + // Support for native async await. + if (scopeFunc.constructor === AsyncFunction) { + incrementExpectedAwaits(); + } + var returnValue; + var promiseFollowed = Promise.follow(function () { + // Finally, call the scope function with our table and transaction arguments. + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (returnValue.constructor === NativePromise) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + // scopeFunc returned an iterator with throw-support. Handle yield as await. + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + // Promise returned. User uses promise-style transactions. + Promise.resolve(returnValue).then(function (x) { return trans.active ? + x // Transaction still active. Continue. + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) + // No promise returned. Wait for all outstanding promises before continuing. + : promiseFollowed.then(function () { return returnValue; })).then(function (x) { + // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion: + if (parentTransaction) + trans._resolve(); + // wait for trans._completion + // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves) + return trans._completion.then(function () { return x; }); + }).catch(function (e) { + trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc! + return rejection(e); + }); + }); + } + }; + this.table = function (tableName) { + /// + if (!hasOwn(allTables, tableName)) { + throw new exceptions.InvalidTable("Table " + tableName + " does not exist"); + } + return allTables[tableName]; + }; + // + // + // + // Table Class + // + // + // + function Table(name, tableSchema, optionalTrans) { + /// + this.name = name; + this.schema = tableSchema; + this._tx = optionalTrans; + this.hook = allTables[name] ? allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + } + function BulkErrorHandlerCatchAll(errorList, done, supportHooks) { + return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(function (e) { + errorList.push(e); + done && done(); + }); + } + function bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook) { + // If hasDeleteHook, keysOrTuples must be an array of tuples: [[key1, value2],[key2,value2],...], + // else keysOrTuples must be just an array of keys: [key1, key2, ...]. + return new Promise(function (resolve, reject) { + var len = keysOrTuples.length, lastItem = len - 1; + if (len === 0) + return resolve(); + if (!hasDeleteHook) { + for (var i = 0; i < len; ++i) { + var req = idbstore.delete(keysOrTuples[i]); + req.onerror = eventRejectHandler(reject); + if (i === lastItem) + req.onsuccess = wrap(function () { return resolve(); }); + } + } + else { + var hookCtx, errorHandler = hookedEventRejectHandler(reject), successHandler = hookedEventSuccessHandler(null); + tryCatch(function () { + for (var i = 0; i < len; ++i) { + hookCtx = { onsuccess: null, onerror: null }; + var tuple = keysOrTuples[i]; + deletingHook.call(hookCtx, tuple[0], tuple[1], trans); + var req = idbstore.delete(tuple[0]); + req._hookCtx = hookCtx; + req.onerror = errorHandler; + if (i === lastItem) + req.onsuccess = hookedEventSuccessHandler(resolve); + else + req.onsuccess = successHandler; + } + }, function (err) { + hookCtx.onerror && hookCtx.onerror(err); + throw err; + }); + } + }); + } + props(Table.prototype, { + // + // Table Protected Methods + // + _trans: function getTransaction(mode, fn, writeLocked) { + var trans = this._tx || PSD.trans; + return trans && trans.db === db ? + trans === PSD.trans ? + trans._promise(mode, fn, writeLocked) : + newScope(function () { return trans._promise(mode, fn, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(mode, [this.name], fn); + }, + _idbstore: function getIDBObjectStore(mode, fn, writeLocked) { + var tableName = this.name; + function supplyIdbStore(resolve, reject, trans) { + if (trans.storeNames.indexOf(tableName) === -1) + throw new exceptions.NotFound("Table" + tableName + " not part of transaction"); + return fn(resolve, reject, trans.idbtrans.objectStore(tableName), trans); + } + return this._trans(mode, supplyIdbStore, writeLocked); + }, + // + // Table Public Methods + // + get: function (keyOrCrit, cb) { + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + var self = this; + return this._idbstore(READONLY, function (resolve, reject, idbstore) { + var req = idbstore.get(keyOrCrit); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function () { + resolve(self.hook.reading.fire(req.result)); + }, reject); + }).then(cb); + }, + where: function (indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new WhereClause(this, "[" + indexOrCrit.join('+') + "]"); + // indexOrCrit is an object map of {[keyPath]:value} + var keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + // Only one critera. This was the easy case: + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + // Multiple criterias. + // Let's try finding a compound index that matches all keyPaths in + // arbritary order: + var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) { + return ix.compound && + keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; }) && + ix.keyPath.every(function (keyPath) { return keyPaths.indexOf(keyPath) >= 0; }); + })[0]; + if (compoundIndex && maxKey !== maxString) + // Cool! We found such compound index + // and this browser supports compound indexes (maxKey !== maxString)! + return this + .where(compoundIndex.name) + .equals(compoundIndex.keyPath.map(function (kp) { return indexOrCrit[kp]; })); + if (!compoundIndex) + console.warn("The query " + JSON.stringify(indexOrCrit) + " on " + this.name + " would benefit of a " + + ("compound index [" + keyPaths.join('+') + "]")); + // Ok, now let's fallback to finding at least one matching index + // and filter the rest. + var idxByName = this.schema.idxByName; + var simpleIndex = keyPaths.reduce(function (r, keyPath) { return [ + r[0] || idxByName[keyPath], + r[0] || !idxByName[keyPath] ? + combine(r[1], function (x) { return '' + getByKeyPath(x, keyPath) == + '' + indexOrCrit[keyPath]; }) + : r[1] + ]; }, [null, null]); + var idx = simpleIndex[0]; + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(simpleIndex[1]) : + compoundIndex ? + this.filter(simpleIndex[1]) : // Has compound but browser bad. Allow filter. + this.where(keyPaths).equals(''); // No index at all. Fail lazily. + }, + count: function (cb) { + return this.toCollection().count(cb); + }, + offset: function (offset) { + return this.toCollection().offset(offset); + }, + limit: function (numRows) { + return this.toCollection().limit(numRows); + }, + reverse: function () { + return this.toCollection().reverse(); + }, + filter: function (filterFunction) { + return this.toCollection().and(filterFunction); + }, + each: function (fn) { + return this.toCollection().each(fn); + }, + toArray: function (cb) { + return this.toCollection().toArray(cb); + }, + orderBy: function (index) { + return new Collection(new WhereClause(this, isArray(index) ? + "[" + index.join('+') + "]" : + index)); + }, + toCollection: function () { + return new Collection(new WhereClause(this)); + }, + mapToClass: function (constructor, structure) { + /// + /// Map table to a javascript constructor function. Objects returned from the database will be instances of this class, making + /// it possible to the instanceOf operator as well as extending the class using constructor.prototype.method = function(){...}. + /// + /// Constructor function representing the class. + /// Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also + /// know what type each member has. Example: {name: String, emailAddresses: [String], password} + this.schema.mappedClass = constructor; + var instanceTemplate = Object.create(constructor.prototype); + if (structure) { + // structure and instanceTemplate is for IDE code competion only while constructor.prototype is for actual inheritance. + applyStructure(instanceTemplate, structure); + } + this.schema.instanceTemplate = instanceTemplate; + // Now, subscribe to the when("reading") event to make all objects that come out from this table inherit from given class + // no matter which method to use for reading (Table.get() or Table.where(...)... ) + var readHook = function (obj) { + if (!obj) + return obj; // No valid object. (Value is null). Return as is. + // Create a new object that derives from constructor: + var res = Object.create(constructor.prototype); + // Clone members: + for (var m in obj) + if (hasOwn(obj, m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + }, + defineClass: function (structure) { + /// + /// Define all members of the class that represents the table. This will help code completion of when objects are read from the database + /// as well as making it possible to extend the prototype of the returned constructor function. + /// + /// Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also + /// know what type each member has. Example: {name: String, emailAddresses: [String], properties: {shoeSize: Number}} + return this.mapToClass(Dexie.defineClass(structure), structure); + }, + bulkDelete: function (keys$$1) { + if (this.hook.deleting.fire === nop) { + return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) { + resolve(bulkDelete(idbstore, trans, keys$$1, false, nop)); + }); + } + else { + return this + .where(':id') + .anyOf(keys$$1) + .delete() + .then(function () { }); // Resolve with undefined. + } + }, + bulkPut: function (objects, keys$$1) { + var _this = this; + return this._idbstore(READWRITE, function (resolve, reject, idbstore) { + if (!idbstore.keyPath && !_this.schema.primKey.auto && !keys$$1) + throw new exceptions.InvalidArgument("bulkPut() with non-inbound keys requires keys array in second argument"); + if (idbstore.keyPath && keys$$1) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys$$1 && keys$$1.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + if (objects.length === 0) + return resolve(); // Caller provided empty list. + var done = function (result) { + if (errorList.length === 0) + resolve(result); + else + reject(new BulkError(_this.name + ".bulkPut(): " + errorList.length + " of " + numObjs + " operations failed", errorList)); + }; + var req, errorList = [], errorHandler, numObjs = objects.length, table = _this; + if (_this.hook.creating.fire === nop && _this.hook.updating.fire === nop) { + // + // Standard Bulk (no 'creating' or 'updating' hooks to care about) + // + errorHandler = BulkErrorHandlerCatchAll(errorList); + for (var i = 0, l = objects.length; i < l; ++i) { + req = keys$$1 ? idbstore.put(objects[i], keys$$1[i]) : idbstore.put(objects[i]); + req.onerror = errorHandler; + } + // Only need to catch success or error on the last operation + // according to the IDB spec. + req.onerror = BulkErrorHandlerCatchAll(errorList, done); + req.onsuccess = eventSuccessHandler(done); + } + else { + var effectiveKeys = keys$$1 || idbstore.keyPath && objects.map(function (o) { return getByKeyPath(o, idbstore.keyPath); }); + // Generate map of {[key]: object} + var objectLookup = effectiveKeys && arrayToObject(effectiveKeys, function (key, i) { return key != null && [key, objects[i]]; }); + var promise = !effectiveKeys ? + // Auto-incremented key-less objects only without any keys argument. + table.bulkAdd(objects) : + // Keys provided. Either as inbound in provided objects, or as a keys argument. + // Begin with updating those that exists in DB: + table.where(':id').anyOf(effectiveKeys.filter(function (key) { return key != null; })).modify(function () { + this.value = objectLookup[this.primKey]; + objectLookup[this.primKey] = null; // Mark as "don't add this" + }).catch(ModifyError, function (e) { + errorList = e.failures; // No need to concat here. These are the first errors added. + }).then(function () { + // Now, let's examine which items didnt exist so we can add them: + var objsToAdd = [], keysToAdd = keys$$1 && []; + // Iterate backwards. Why? Because if same key was used twice, just add the last one. + for (var i = effectiveKeys.length - 1; i >= 0; --i) { + var key = effectiveKeys[i]; + if (key == null || objectLookup[key]) { + objsToAdd.push(objects[i]); + keys$$1 && keysToAdd.push(key); + if (key != null) + objectLookup[key] = null; // Mark as "dont add again" + } + } + // The items are in reverse order so reverse them before adding. + // Could be important in order to get auto-incremented keys the way the caller + // would expect. Could have used unshift instead of push()/reverse(), + // but: http://jsperf.com/unshift-vs-reverse + objsToAdd.reverse(); + keys$$1 && keysToAdd.reverse(); + return table.bulkAdd(objsToAdd, keysToAdd); + }).then(function (lastAddedKey) { + // Resolve with key of the last object in given arguments to bulkPut(): + var lastEffectiveKey = effectiveKeys[effectiveKeys.length - 1]; // Key was provided. + return lastEffectiveKey != null ? lastEffectiveKey : lastAddedKey; + }); + promise.then(done).catch(BulkError, function (e) { + // Concat failure from ModifyError and reject using our 'done' method. + errorList = errorList.concat(e.failures); + done(); + }).catch(reject); + } + }, "locked"); // If called from transaction scope, lock transaction til all steps are done. + }, + bulkAdd: function (objects, keys$$1) { + var self = this, creatingHook = this.hook.creating.fire; + return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) { + if (!idbstore.keyPath && !self.schema.primKey.auto && !keys$$1) + throw new exceptions.InvalidArgument("bulkAdd() with non-inbound keys requires keys array in second argument"); + if (idbstore.keyPath && keys$$1) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys$$1 && keys$$1.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + if (objects.length === 0) + return resolve(); // Caller provided empty list. + function done(result) { + if (errorList.length === 0) + resolve(result); + else + reject(new BulkError(self.name + ".bulkAdd(): " + errorList.length + " of " + numObjs + " operations failed", errorList)); + } + var req, errorList = [], errorHandler, successHandler, numObjs = objects.length; + if (creatingHook !== nop) { + // + // There are subscribers to hook('creating') + // Must behave as documented. + // + var keyPath = idbstore.keyPath, hookCtx; + errorHandler = BulkErrorHandlerCatchAll(errorList, null, true); + successHandler = hookedEventSuccessHandler(null); + tryCatch(function () { + for (var i = 0, l = objects.length; i < l; ++i) { + hookCtx = { onerror: null, onsuccess: null }; + var key = keys$$1 && keys$$1[i]; + var obj = objects[i], effectiveKey = keys$$1 ? key : keyPath ? getByKeyPath(obj, keyPath) : undefined, keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans); + if (effectiveKey == null && keyToUse != null) { + if (keyPath) { + obj = deepClone(obj); + setByKeyPath(obj, keyPath, keyToUse); + } + else { + key = keyToUse; + } + } + req = key != null ? idbstore.add(obj, key) : idbstore.add(obj); + req._hookCtx = hookCtx; + if (i < l - 1) { + req.onerror = errorHandler; + if (hookCtx.onsuccess) + req.onsuccess = successHandler; + } + } + }, function (err) { + hookCtx.onerror && hookCtx.onerror(err); + throw err; + }); + req.onerror = BulkErrorHandlerCatchAll(errorList, done, true); + req.onsuccess = hookedEventSuccessHandler(done); + } + else { + // + // Standard Bulk (no 'creating' hook to care about) + // + errorHandler = BulkErrorHandlerCatchAll(errorList); + for (var i = 0, l = objects.length; i < l; ++i) { + req = keys$$1 ? idbstore.add(objects[i], keys$$1[i]) : idbstore.add(objects[i]); + req.onerror = errorHandler; + } + // Only need to catch success or error on the last operation + // according to the IDB spec. + req.onerror = BulkErrorHandlerCatchAll(errorList, done); + req.onsuccess = eventSuccessHandler(done); + } + }); + }, + add: function (obj, key) { + /// + /// Add an object to the database. In case an object with same primary key already exists, the object will not be added. + /// + /// A javascript object to insert + /// Primary key + var creatingHook = this.hook.creating.fire; + return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) { + var hookCtx = { onsuccess: null, onerror: null }; + if (creatingHook !== nop) { + var effectiveKey = (key != null) ? key : (idbstore.keyPath ? getByKeyPath(obj, idbstore.keyPath) : undefined); + var keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans); // Allow subscribers to when("creating") to generate the key. + if (effectiveKey == null && keyToUse != null) { + if (idbstore.keyPath) + setByKeyPath(obj, idbstore.keyPath, keyToUse); + else + key = keyToUse; + } + } + try { + var req = key != null ? idbstore.add(obj, key) : idbstore.add(obj); + req._hookCtx = hookCtx; + req.onerror = hookedEventRejectHandler(reject); + req.onsuccess = hookedEventSuccessHandler(function (result) { + // TODO: Remove these two lines in next major release (2.0?) + // It's no good practice to have side effects on provided parameters + var keyPath = idbstore.keyPath; + if (keyPath) + setByKeyPath(obj, keyPath, result); + resolve(result); + }); + } + catch (e) { + if (hookCtx.onerror) + hookCtx.onerror(e); + throw e; + } + }); + }, + put: function (obj, key) { + var _this = this; + /// + /// Add an object to the database but in case an object with same primary key alread exists, the existing one will get updated. + /// + /// A javascript object to insert or update + /// Primary key + var creatingHook = this.hook.creating.fire, updatingHook = this.hook.updating.fire; + if (creatingHook !== nop || updatingHook !== nop) { + // + // People listens to when("creating") or when("updating") events! + // We must know whether the put operation results in an CREATE or UPDATE. + // + var keyPath = this.schema.primKey.keyPath; + var effectiveKey = (key !== undefined) ? key : (keyPath && getByKeyPath(obj, keyPath)); + if (effectiveKey == null) + return this.add(obj); + // Since key is optional, make sure we get it from obj if not provided + // Primary key exist. Lock transaction and try modifying existing. If nothing modified, call add(). + // clone obj before this async call. If caller modifies obj the line after put(), the IDB spec requires that it should not affect operation. + obj = deepClone(obj); + return this._trans(READWRITE, function () { + return _this.where(":id").equals(effectiveKey).modify(function () { + // Replace extisting value with our object + // CRUD event firing handled in Collection.modify() + this.value = obj; + }).then(function (count) { return count === 0 ? _this.add(obj, key) : effectiveKey; }); + }, "locked"); // Lock needed because operation is splitted into modify() and add(). + } + else { + // Use the standard IDB put() method. + return this._idbstore(READWRITE, function (resolve, reject, idbstore) { + var req = key !== undefined ? idbstore.put(obj, key) : idbstore.put(obj); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function (ev) { + var keyPath = idbstore.keyPath; + if (keyPath) + setByKeyPath(obj, keyPath, ev.target.result); + resolve(req.result); + }); + }); + } + }, + 'delete': function (key) { + /// Primary key of the object to delete + if (this.hook.deleting.subscribers.length) { + // People listens to when("deleting") event. Must implement delete using Collection.delete() that will + // call the CRUD event. Only Collection.delete() will know whether an object was actually deleted. + return this.where(":id").equals(key).delete(); + } + else { + // No one listens. Use standard IDB delete() method. + return this._idbstore(READWRITE, function (resolve, reject, idbstore) { + var req = idbstore.delete(key); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function () { + resolve(req.result); + }); + }); + } + }, + clear: function () { + if (this.hook.deleting.subscribers.length) { + // People listens to when("deleting") event. Must implement delete using Collection.delete() that will + // call the CRUD event. Only Collection.delete() will knows which objects that are actually deleted. + return this.toCollection().delete(); + } + else { + return this._idbstore(READWRITE, function (resolve, reject, idbstore) { + var req = idbstore.clear(); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function () { + resolve(req.result); + }); + }); + } + }, + update: function (keyOrObject, modifications) { + if (typeof modifications !== 'object' || isArray(modifications)) + throw new exceptions.InvalidArgument("Modifications must be an object."); + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + // object to modify. Also modify given object with the modifications: + keys(modifications).forEach(function (keyPath) { + setByKeyPath(keyOrObject, keyPath, modifications[keyPath]); + }); + var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + // key to modify + return this.where(":id").equals(keyOrObject).modify(modifications); + } + } + }); + // + // + // + // Transaction Class + // + // + // + function Transaction(mode, storeNames, dbschema, parent) { + var _this = this; + /// + /// Transaction class. Represents a database transaction. All operations on db goes through a Transaction. + /// + /// Any of "readwrite" or "readonly" + /// Array of table names to operate on + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; // Just for debugging waitFor() + this._completion = new Promise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + this._completion.then(function () { + _this.active = false; + _this.on.complete.fire(); + }, function (e) { + var wasActive = _this.active; + _this.active = false; + _this.on.error.fire(e); + _this.parent ? + _this.parent._reject(e) : + wasActive && _this.idbtrans && _this.idbtrans.abort(); + return rejection(e); // Indicate we actually DO NOT catch this error. + }); + } + props(Transaction.prototype, { + // + // Transaction Protected Methods (not required by API users, but needed internally and eventually by dexie extensions) + // + _lock: function () { + assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope. + // Temporary set all requests into a pending queue if they are called before database is ready. + ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage) + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + }, + _unlock: function () { + assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope. + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + }, + _locked: function () { + // Checks if any write-lock is applied on this transaction. + // To simplify the Dexie API for extension implementations, we support recursive locks. + // This is accomplished by using "Promise Specific Data" (PSD). + // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ). + // PSD is local to code executing on top of the call stacks of any of any code executed by Promise(): + // * callback given to the Promise() constructor (function (resolve, reject){...}) + // * callbacks given to then()/catch()/finally() methods (function (value){...}) + // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise. + // Derivation is done so that the inner PSD __proto__ points to the outer PSD. + // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock. + return this._reculock && PSD.lockOwnerFor !== this; + }, + create: function (idbtrans) { + var _this = this; + if (!this.mode) + return this; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open() + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open() + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()! + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode); + idbtrans.onerror = wrap(function (ev) { + preventDefault(ev); // Prohibit default bubbling to window.error + _this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(function (ev) { + preventDefault(ev); + _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); + _this.active = false; + _this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(function () { + _this.active = false; + _this._resolve(); + }); + return this; + }, + _promise: function (mode, fn, bWriteLock) { + var _this = this; + if (mode === READWRITE && this.mode !== READWRITE) + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new Promise(function (resolve, reject) { + _this._blockedFuncs.push([function () { + _this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(function () { + var p = new Promise(function (resolve, reject) { + _this._lock(); + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(function () { return _this._unlock(); }); + p._lib = true; + return p; + }); + } + else { + var p = new Promise(function (resolve, reject) { + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + }, + _root: function () { + return this.parent ? this.parent._root() : this; + }, + waitFor: function (promise) { + // Always operate on the root transaction (in case this is a sub stransaction) + var root = this._root(); + // For stability reasons, convert parameter to promise no matter what type is passed to waitFor(). + // (We must be able to call .then() on it.) + promise = Promise.resolve(promise); + if (root._waitingFor) { + // Already called waitFor(). Wait for both to complete. + root._waitingFor = root._waitingFor.then(function () { return promise; }); + } + else { + // We're not in waiting state. Start waiting state. + root._waitingFor = promise; + root._waitingQueue = []; + // Start interacting with indexedDB until promise completes: + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; // For debugging only + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new Promise(function (resolve, reject) { + promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () { + if (root._waitingFor === currentWaitPromise) { + // No one added a wait after us. Safe to stop the spinning. + root._waitingFor = null; + } + }); + }); + }, + // + // Transaction Public Properties and Methods + // + abort: function () { + this.active && this._reject(new exceptions.Abort()); + this.active = false; + }, + tables: { + get: deprecated("Transaction.tables", function () { return allTables; }) + }, + table: function (name) { + var table = db.table(name); // Don't check that table is part of transaction. It must fail lazily! + return new Table(name, table.schema, this); + } + }); + // + // + // + // WhereClause + // + // + // + function WhereClause(table, index, orCollection) { + /// + /// + /// + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + } + props(WhereClause.prototype, function () { + // WhereClause private methods + function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; + } + function emptyCollection(whereClause) { + return new Collection(whereClause, function () { return IDBKeyRange.only(""); }).limit(0); + } + function upperFactory(dir) { + return dir === "next" ? function (s) { return s.toUpperCase(); } : function (s) { return s.toLowerCase(); }; + } + function lowerFactory(dir) { + return dir === "next" ? function (s) { return s.toLowerCase(); } : function (s) { return s.toUpperCase(); }; + } + function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); + } + function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + /// + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(function (s) { return typeof s === 'string'; })) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new Collection(whereClause, function () { + return IDBKeyRange.bound(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); + }); + c._ondirectionchange = function (direction) { + // This event onlys occur before filter is called the first time. + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + /// + /// + /// + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; + } + // + // WhereClause public methods + // + return { + between: function (lower, upper, includeLower, includeUpper) { + /// + /// Filter out records whose where-field lays between given lower and upper values. Applies to Strings, Numbers and Dates. + /// + /// + /// + /// Whether items that equals lower should be included. Default true. + /// Whether items that equals upper should be included. Default false. + /// + includeLower = includeLower !== false; // Default to true + includeUpper = includeUpper === true; // Default to false + try { + if ((cmp(lower, upper) > 0) || + (cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection. + return new Collection(this, function () { return IDBKeyRange.bound(lower, upper, !includeLower, !includeUpper); }); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + }, + equals: function (value) { + return new Collection(this, function () { return IDBKeyRange.only(value); }); + }, + above: function (value) { + return new Collection(this, function () { return IDBKeyRange.lowerBound(value, true); }); + }, + aboveOrEqual: function (value) { + return new Collection(this, function () { return IDBKeyRange.lowerBound(value); }); + }, + below: function (value) { + return new Collection(this, function () { return IDBKeyRange.upperBound(value, true); }); + }, + belowOrEqual: function (value) { + return new Collection(this, function () { return IDBKeyRange.upperBound(value); }); + }, + startsWith: function (str) { + /// + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + }, + startsWithIgnoreCase: function (str) { + /// + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); + }, + equalsIgnoreCase: function (str) { + /// + return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], ""); + }, + anyOfIgnoreCase: function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, ""); + }, + startsWithAnyOfIgnoreCase: function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { + return a.some(function (n) { + return x.indexOf(n) === 0; + }); + }, set, maxString); + }, + anyOf: function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + var compare = ascending; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + var c = new Collection(this, function () { return IDBKeyRange.bound(set[0], set[set.length - 1]); }); + c._ondirectionchange = function (direction) { + compare = (direction === "next" ? ascending : descending); + set.sort(compare); + }; + var i = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (compare(key, set[i]) > 0) { + // The cursor has passed beyond this key. Check next. + ++i; + if (i === set.length) { + // There is no next. Stop searching. + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set. + return true; + } + else { + // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for. + advance(function () { cursor.continue(set[i]); }); + return false; + } + }); + return c; + }, + notEqual: function (value) { + return this.inAnyRange([[minKey, value], [value, maxKey]], { includeLowers: false, includeUppers: false }); + }, + noneOf: function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new Collection(this); // Return entire collection. + try { + set.sort(ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + // Transform ["a","b","c"] to a set of ranges for between/above/below: [[minKey,"a"], ["a","b"], ["b","c"], ["c",maxKey]] + var ranges = set.reduce(function (res, val) { return res ? res.concat([[res[res.length - 1][1], val]]) : [[minKey, val]]; }, null); + ranges.push([set[set.length - 1], maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + }, + /** Filter out values withing given set of ranges. + * Example, give children and elders a rebate of 50%: + * + * db.friends.where('age').inAnyRange([[0,18],[65,Infinity]]).modify({Rebate: 1/2}); + * + * @param {(string|number|Date|Array)[][]} ranges + * @param {{includeLowers: boolean, includeUppers: boolean}} options + */ + inAnyRange: function (ranges, options) { + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(function (range) { return range[0] !== undefined && range[1] !== undefined && ascending(range[0], range[1]) <= 0; })) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + var includeLowers = !options || options.includeLowers !== false; // Default to true + var includeUppers = options && options.includeUppers === true; // Default to false + function addRange(ranges, newRange) { + for (var i = 0, l = ranges.length; i < l; ++i) { + var range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + var sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + // Join overlapping ranges + var set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var i = 0; + var keyIsBeyondCurrentEntry = includeUppers ? + function (key) { return ascending(key, set[i][1]) > 0; } : + function (key) { return ascending(key, set[i][1]) >= 0; }; + var keyIsBeforeCurrentEntry = includeLowers ? + function (key) { return descending(key, set[i][0]) > 0; } : + function (key) { return descending(key, set[i][0]) >= 0; }; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + var checkKey = keyIsBeyondCurrentEntry; + var c = new Collection(this, function () { + return IDBKeyRange.bound(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); + }); + c._ondirectionchange = function (direction) { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (checkKey(key)) { + // The cursor has passed beyond this key. Check next. + ++i; + if (i === set.length) { + // There is no next. Stop searching. + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set. + return true; + } + else if (cmp(key, set[i][1]) === 0 || cmp(key, set[i][0]) === 0) { + // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border. + // Continue to next key but don't include this one. + return false; + } + else { + // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for. + advance(function () { + if (sortDirection === ascending) + cursor.continue(set[i][0]); + else + cursor.continue(set[i][1]); + }); + return false; + } + }); + return c; + }, + startsWithAnyOf: function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(function (s) { return typeof s === 'string'; })) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map(function (str) { + return [str, str + maxString]; + })); + } + }; + }); + // + // + // + // Collection Class + // + // + // + function Collection(whereClause, keyRangeGenerator) { + /// + /// + /// + /// Where clause instance + /// + var keyRange = null, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + var whereCtx = whereClause._ctx, table = whereCtx.table; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: table.hook.reading.fire + }; + } + function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); + } + props(Collection.prototype, function () { + // + // Collection Private Functions + // + function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); + } + function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory; + ctx.justLimit = isLimitFilter && !curr; + } + function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); + } + /** @param ctx { + * isPrimKey: boolean, + * table: Table, + * index: string + * } + * @param store IDBObjectStore + **/ + function getIndexOrStore(ctx, store) { + if (ctx.isPrimKey) + return store; + var indexSpec = ctx.table.schema.idxByName[ctx.index]; + if (!indexSpec) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + store.name + " is not indexed"); + return store.index(indexSpec.name); + } + /** @param ctx { + * isPrimKey: boolean, + * table: Table, + * index: string, + * keysOnly: boolean, + * range?: IDBKeyRange, + * dir: "next" | "prev" + * } + */ + function openCursor(ctx, store) { + var idxOrStore = getIndexOrStore(ctx, store); + return ctx.keysOnly && 'openKeyCursor' in idxOrStore ? + idxOrStore.openKeyCursor(ctx.range || null, ctx.dir + ctx.unique) : + idxOrStore.openCursor(ctx.range || null, ctx.dir + ctx.unique); + } + function iter(ctx, fn, resolve, reject, idbstore) { + var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + iterate(openCursor(ctx, idbstore), combine(ctx.algorithm, filter), fn, resolve, reject, !ctx.keysOnly && ctx.valueMapper); + } + else + (function () { + var set = {}; + var resolved = 0; + function resolveboth() { + if (++resolved === 2) + resolve(); // Seems like we just support or btwn max 2 expressions, but there are no limit because we do recursion. + } + function union(item, cursor, advance) { + if (!filter || filter(cursor, advance, resolveboth, reject)) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set, key)) { + set[key] = true; + fn(item, cursor, advance); + } + } + } + ctx.or._iterate(union, resolveboth, reject, idbstore); + iterate(openCursor(ctx, idbstore), ctx.algorithm, union, resolveboth, reject, !ctx.keysOnly && ctx.valueMapper); + })(); + } + return { + // + // Collection Protected Functions + // + _read: function (fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._idbstore(READONLY, fn).then(cb); + }, + _write: function (fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._idbstore(READWRITE, fn, "locked"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued. + }, + _addAlgorithm: function (fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + }, + _iterate: function (fn, resolve, reject, idbstore) { + return iter(this._ctx, fn, resolve, reject, idbstore); + }, + clone: function (props$$1) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props$$1) + extend(ctx, props$$1); + rv._ctx = ctx; + return rv; + }, + raw: function () { + this._ctx.valueMapper = null; + return this; + }, + // + // Collection Public methods + // + each: function (fn) { + var ctx = this._ctx; + return this._read(function (resolve, reject, idbstore) { + iter(ctx, fn, resolve, reject, idbstore); + }); + }, + count: function (cb) { + var ctx = this._ctx; + if (isPlainKeyRange(ctx, true)) { + // This is a plain key range. We can use the count() method if the index. + return this._read(function (resolve, reject, idbstore) { + var idx = getIndexOrStore(ctx, idbstore); + var req = (ctx.range ? idx.count(ctx.range) : idx.count()); + req.onerror = eventRejectHandler(reject); + req.onsuccess = function (e) { + resolve(Math.min(e.target.result, ctx.limit)); + }; + }, cb); + } + else { + // Algorithms, filters or expressions are applied. Need to count manually. + var count = 0; + return this._read(function (resolve, reject, idbstore) { + iter(ctx, function () { ++count; return false; }, function () { resolve(count); }, reject, idbstore); + }, cb); + } + }, + sortBy: function (keyPath, cb) { + /// + var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + }, + toArray: function (cb) { + var ctx = this._ctx; + return this._read(function (resolve, reject, idbstore) { + if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + // Special optimation if we could use IDBObjectStore.getAll() or + // IDBKeyRange.getAll(): + var readingHook = ctx.table.hook.reading.fire; + var idxOrStore = getIndexOrStore(ctx, idbstore); + var req = ctx.limit < Infinity ? + idxOrStore.getAll(ctx.range, ctx.limit) : + idxOrStore.getAll(ctx.range); + req.onerror = eventRejectHandler(reject); + req.onsuccess = readingHook === mirror ? + eventSuccessHandler(resolve) : + eventSuccessHandler(function (res) { + try { + resolve(res.map(readingHook)); + } + catch (e) { + reject(e); + } + }); + } + else { + // Getting array through a cursor. + var a = []; + iter(ctx, function (item) { a.push(item); }, function arrayComplete() { + resolve(a); + }, reject, idbstore); + } + }, cb); + }, + offset: function (offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; // For count() + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function (cursor, advance) { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(function () { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function () { return (--offsetLeft < 0); }; + }); + } + return this; + }, + limit: function (numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count() + addReplayFilter(this._ctx, function () { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); // Stop after this item has been included + return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here. + }; + }, true); + return this; + }, + until: function (filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + }, + first: function (cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + }, + last: function (cb) { + return this.reverse().first(cb); + }, + filter: function (filterFunction) { + /// function(val){return true/false} + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + // match filters not used in Dexie.js but can be used by 3rd part libraries to test a + // collection for a match without querying DB. Used by Dexie.Observable. + addMatchFilter(this._ctx, filterFunction); + return this; + }, + and: function (filterFunction) { + return this.filter(filterFunction); + }, + or: function (indexName) { + return new WhereClause(this._ctx.table, indexName, this); + }, + reverse: function () { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + }, + desc: function () { + return this.reverse(); + }, + eachKey: function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + }, + eachUniqueKey: function (cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + }, + eachPrimaryKey: function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + }, + keys: function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + }, + primaryKeys: function (cb) { + var ctx = this._ctx; + if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + // Special optimation if we could use IDBObjectStore.getAllKeys() or + // IDBKeyRange.getAllKeys(): + return this._read(function (resolve, reject, idbstore) { + var idxOrStore = getIndexOrStore(ctx, idbstore); + var req = ctx.limit < Infinity ? + idxOrStore.getAllKeys(ctx.range, ctx.limit) : + idxOrStore.getAllKeys(ctx.range); + req.onerror = eventRejectHandler(reject); + req.onsuccess = eventSuccessHandler(resolve); + }).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + }, + uniqueKeys: function (cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + }, + firstKey: function (cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + }, + lastKey: function (cb) { + return this.reverse().firstKey(cb); + }, + distinct: function () { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; // distinct() only makes differencies on multiEntry indexes. + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + }, + // + // Methods that mutate storage + // + modify: function (changes) { + var self = this, ctx = this._ctx, hook = ctx.table.hook, updatingHook = hook.updating.fire, deletingHook = hook.deleting.fire; + return this._write(function (resolve, reject, idbstore, trans) { + var modifyer; + if (typeof changes === 'function') { + // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item) + if (updatingHook === nop && deletingHook === nop) { + // Noone cares about what is being changed. Just let the modifier function be the given argument as is. + modifyer = changes; + } + else { + // People want to know exactly what is being modified or deleted. + // Let modifyer be a proxy function that finds out what changes the caller is actually doing + // and call the hooks accordingly! + modifyer = function (item) { + var origItem = deepClone(item); // Clone the item first so we can compare laters. + if (changes.call(this, item, this) === false) + return false; // Call the real modifyer function (If it returns false explicitely, it means it dont want to modify anyting on this object) + if (!hasOwn(this, "value")) { + // The real modifyer function requests a deletion of the object. Inform the deletingHook that a deletion is taking place. + deletingHook.call(this, this.primKey, item, trans); + } + else { + // No deletion. Check what was changed + var objectDiff = getObjectDiff(origItem, this.value); + var additionalChanges = updatingHook.call(this, objectDiff, this.primKey, origItem, trans); + if (additionalChanges) { + // Hook want to apply additional modifications. Make sure to fullfill the will of the hook. + item = this.value; + keys(additionalChanges).forEach(function (keyPath) { + setByKeyPath(item, keyPath, additionalChanges[keyPath]); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath + }); + } + } + }; + } + } + else if (updatingHook === nop) { + // changes is a set of {keyPath: value} and no one is listening to the updating hook. + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + var anythingModified = false; + for (var i = 0; i < numKeys; ++i) { + var keyPath = keyPaths[i], val = changes[keyPath]; + if (getByKeyPath(item, keyPath) !== val) { + setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath + anythingModified = true; + } + } + return anythingModified; + }; + } + else { + // changes is a set of {keyPath: value} and people are listening to the updating hook so we need to call it and + // allow it to add additional modifications to make. + var origChanges = changes; + changes = shallowClone(origChanges); // Let's work with a clone of the changes keyPath/value set so that we can restore it in case a hook extends it. + modifyer = function (item) { + var anythingModified = false; + var additionalChanges = updatingHook.call(this, changes, this.primKey, deepClone(item), trans); + if (additionalChanges) + extend(changes, additionalChanges); + keys(changes).forEach(function (keyPath) { + var val = changes[keyPath]; + if (getByKeyPath(item, keyPath) !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + }); + if (additionalChanges) + changes = shallowClone(origChanges); // Restore original changes for next iteration + return anythingModified; + }; + } + var count = 0; + var successCount = 0; + var iterationComplete = false; + var failures = []; + var failKeys = []; + var currentKey = null; + function modifyItem(item, cursor) { + currentKey = cursor.primaryKey; + var thisContext = { + primKey: cursor.primaryKey, + value: item, + onsuccess: null, + onerror: null + }; + function onerror(e) { + failures.push(e); + failKeys.push(thisContext.primKey); + checkFinished(); + return true; // Catch these errors and let a final rejection decide whether or not to abort entire transaction + } + if (modifyer.call(thisContext, item, thisContext) !== false) { + var bDelete = !hasOwn(thisContext, "value"); + ++count; + tryCatch(function () { + var req = (bDelete ? cursor.delete() : cursor.update(thisContext.value)); + req._hookCtx = thisContext; + req.onerror = hookedEventRejectHandler(onerror); + req.onsuccess = hookedEventSuccessHandler(function () { + ++successCount; + checkFinished(); + }); + }, onerror); + } + else if (thisContext.onsuccess) { + // Hook will expect either onerror or onsuccess to always be called! + thisContext.onsuccess(thisContext.value); + } + } + function doReject(e) { + if (e) { + failures.push(e); + failKeys.push(currentKey); + } + return reject(new ModifyError("Error modifying one or more objects", failures, successCount, failKeys)); + } + function checkFinished() { + if (iterationComplete && successCount + failures.length === count) { + if (failures.length > 0) + doReject(); + else + resolve(successCount); + } + } + self.clone().raw()._iterate(modifyItem, function () { + iterationComplete = true; + checkFinished(); + }, doReject, idbstore); + }); + }, + 'delete': function () { + var _this = this; + var ctx = this._ctx, range = ctx.range, deletingHook = ctx.table.hook.deleting.fire, hasDeleteHook = deletingHook !== nop; + if (!hasDeleteHook && + isPlainKeyRange(ctx) && + ((ctx.isPrimKey && !hangsOnDeleteLargeKeyRange) || !range)) { + // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208) + // For chromium, this is the way most optimized version. + // For IE/Edge, this could hang the indexedDB engine and make operating system instable + // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7) + return this._write(function (resolve, reject, idbstore) { + // Our API contract is to return a count of deleted items, so we have to count() before delete(). + var onerror = eventRejectHandler(reject), countReq = (range ? idbstore.count(range) : idbstore.count()); + countReq.onerror = onerror; + countReq.onsuccess = function () { + var count = countReq.result; + tryCatch(function () { + var delReq = (range ? idbstore.delete(range) : idbstore.clear()); + delReq.onerror = onerror; + delReq.onsuccess = function () { return resolve(count); }; + }, function (err) { return reject(err); }); + }; + }); + } + // Default version to use when collection is not a vanilla IDBKeyRange on the primary key. + // Divide into chunks to not starve RAM. + // If has delete hook, we will have to collect not just keys but also objects, so it will use + // more memory and need lower chunk size. + var CHUNKSIZE = hasDeleteHook ? 2000 : 10000; + return this._write(function (resolve, reject, idbstore, trans) { + var totalCount = 0; + // Clone collection and change its table and set a limit of CHUNKSIZE on the cloned Collection instance. + var collection = _this + .clone({ + keysOnly: !ctx.isMatch && !hasDeleteHook + }) // load just keys (unless filter() or and() or deleteHook has subscribers) + .distinct() // In case multiEntry is used, never delete same key twice because resulting count + .limit(CHUNKSIZE) + .raw(); // Don't filter through reading-hooks (like mapped classes etc) + var keysOrTuples = []; + // We're gonna do things on as many chunks that are needed. + // Use recursion of nextChunk function: + var nextChunk = function () { return collection.each(hasDeleteHook ? function (val, cursor) { + // Somebody subscribes to hook('deleting'). Collect all primary keys and their values, + // so that the hook can be called with its values in bulkDelete(). + keysOrTuples.push([cursor.primaryKey, cursor.value]); + } : function (val, cursor) { + // No one subscribes to hook('deleting'). Collect only primary keys: + keysOrTuples.push(cursor.primaryKey); + }).then(function () { + // Chromium deletes faster when doing it in sort order. + hasDeleteHook ? + keysOrTuples.sort(function (a, b) { return ascending(a[0], b[0]); }) : + keysOrTuples.sort(ascending); + return bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook); + }).then(function () { + var count = keysOrTuples.length; + totalCount += count; + keysOrTuples = []; + return count < CHUNKSIZE ? totalCount : nextChunk(); + }); }; + resolve(nextChunk()); + }); + } + }; + }); + // + // + // + // ------------------------- Help functions --------------------------- + // + // + // + function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; + } + function setApiOnPlace(objs, tableNames, dbschema) { + tableNames.forEach(function (tableName) { + var schema = dbschema[tableName]; + objs.forEach(function (obj) { + if (!(tableName in obj)) { + if (obj === Transaction.prototype || obj instanceof Transaction) { + // obj is a Transaction prototype (or prototype of a subclass to Transaction) + // Make the API a getter that returns this.table(tableName) + setProp(obj, tableName, { get: function () { return this.table(tableName); } }); + } + else { + // Table will not be bound to a transaction (will use Dexie.currentTransaction) + obj[tableName] = new Table(tableName, schema); + } + } + }); + }); + } + function removeTablesApi(objs) { + objs.forEach(function (obj) { + for (var key in obj) { + if (obj[key] instanceof Table) + delete obj[key]; + } + }); + } + function iterate(req, filter, fn, resolve, reject, valueMapper) { + // Apply valueMapper (hook('reading') or mappped class) + var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn; + // Wrap fn with PSD and microtick stuff from Promise. + var wrappedFn = wrap(mappedFn, reject); + if (!req.onerror) + req.onerror = eventRejectHandler(reject); + if (filter) { + req.onsuccess = trycatcher(function filter_record() { + var cursor = req.result; + if (cursor) { + var c = function () { cursor.continue(); }; + if (filter(cursor, function (advancer) { c = advancer; }, resolve, reject)) + wrappedFn(cursor.value, cursor, function (advancer) { c = advancer; }); + c(); + } + else { + resolve(); + } + }, reject); + } + else { + req.onsuccess = trycatcher(function filter_record() { + var cursor = req.result; + if (cursor) { + var c = function () { cursor.continue(); }; + wrappedFn(cursor.value, cursor, function (advancer) { c = advancer; }); + c(); + } + else { + resolve(); + } + }, reject); + } + } + function parseIndexSyntax(indexes) { + /// + /// + var rv = []; + indexes.split(',').forEach(function (index) { + index = index.trim(); + var name = index.replace(/([&*]|\+\+)/g, ""); // Remove "&", "++" and "*" + // Let keyPath of "[a+b]" be ["a","b"]: + var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + rv.push(new IndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), /\./.test(index))); + }); + return rv; + } + function cmp(key1, key2) { + return indexedDB.cmp(key1, key2); + } + function min(a, b) { + return cmp(a, b) < 0 ? a : b; + } + function max(a, b) { + return cmp(a, b) > 0 ? a : b; + } + function ascending(a, b) { + return indexedDB.cmp(a, b); + } + function descending(a, b) { + return indexedDB.cmp(b, a); + } + function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; + } + function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; + } + function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; + } + function readGlobalSchema() { + db.verno = idbdb.version / 10; + db._dbSchema = globalSchema = {}; + dbStoreNames = slice(idbdb.objectStoreNames, 0); + if (dbStoreNames.length === 0) + return; // Database contains no stores. + var trans = idbdb.transaction(safariMultiStoreFix(dbStoreNames), 'readonly'); + dbStoreNames.forEach(function (storeName) { + var store = trans.objectStore(storeName), keyPath = store.keyPath, dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1; + var primKey = new IndexSpec(keyPath, keyPath || "", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== 'string', dotted); + var indexes = []; + for (var j = 0; j < store.indexNames.length; ++j) { + var idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1; + var index = new IndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== 'string', dotted); + indexes.push(index); + } + globalSchema[storeName] = new TableSchema(storeName, primKey, indexes, {}); + }); + setApiOnPlace([allTables], keys(globalSchema), globalSchema); + } + function adjustToExistingIndexNames(schema, idbtrans) { + /// + /// Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db + /// + /// Map between name and TableSchema + /// + var storeNames = idbtrans.db.objectStoreNames; + for (var i = 0; i < storeNames.length; ++i) { + var storeName = storeNames[i]; + var store = idbtrans.objectStore(storeName); + hasGetAll = 'getAll' in store; + for (var j = 0; j < store.indexNames.length; ++j) { + var indexName = store.indexNames[j]; + var keyPath = store.index(indexName).keyPath; + var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + var indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) + indexSpec.name = indexName; + } + } + } + // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579 + if (/Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + hasGetAll = false; + } + } + function fireOnBlocked(ev) { + db.on("blocked").fire(ev); + // Workaround (not fully*) for missing "versionchange" event in IE,Edge and Safari: + connections + .filter(function (c) { return c.name === db.name && c !== db && !c._vcFired; }) + .map(function (c) { return c.on("versionchange").fire(ev); }); + } + extend(this, { + Collection: Collection, + Table: Table, + Transaction: Transaction, + Version: Version, + WhereClause: WhereClause + }); + init(); + addons.forEach(function (fn) { + fn(db); + }); +} +function parseType(type) { + if (typeof type === 'function') { + return new type(); + } + else if (isArray(type)) { + return [parseType(type[0])]; + } + else if (type && typeof type === 'object') { + var rv = {}; + applyStructure(rv, type); + return rv; + } + else { + return type; + } +} +function applyStructure(obj, structure) { + keys(structure).forEach(function (member) { + var value = parseType(structure[member]); + obj[member] = value; + }); + return obj; +} +function hookedEventSuccessHandler(resolve) { + // wrap() is needed when calling hooks because the rare scenario of: + // * hook does a db operation that fails immediately (IDB throws exception) + // For calling db operations on correct transaction, wrap makes sure to set PSD correctly. + // wrap() will also execute in a virtual tick. + // * If not wrapped in a virtual tick, direct exception will launch a new physical tick. + // * If this was the last event in the bulk, the promise will resolve after a physical tick + // and the transaction will have committed already. + // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise, + // because it is always marked with _lib = true when created using Transaction._promise(). + return wrap(function (event) { + var req = event.target, ctx = req._hookCtx, // Contains the hook error handler. Put here instead of closure to boost performance. + result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key. + hookSuccessHandler = ctx && ctx.onsuccess; + hookSuccessHandler && hookSuccessHandler(result); + resolve && resolve(result); + }, resolve); +} +function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function eventSuccessHandler(resolve) { + return wrap(function (event) { + resolve(event.target.result); + }); +} +function hookedEventRejectHandler(reject) { + return wrap(function (event) { + // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks. + var req = event.target, err = req.error, ctx = req._hookCtx, // Contains the hook error handler. Put here instead of closure to boost performance. + hookErrorHandler = ctx && ctx.onerror; + hookErrorHandler && hookErrorHandler(err); + preventDefault(event); + reject(err); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} +function awaitIterator(iterator) { + var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return function (val) { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); +} +// +// IndexSpec struct +// +function IndexSpec(name, keyPath, unique, multi, auto, compound, dotted) { + /// + /// + /// + /// + /// + /// + /// + this.name = name; + this.keyPath = keyPath; + this.unique = unique; + this.multi = multi; + this.auto = auto; + this.compound = compound; + this.dotted = dotted; + var keyPathSrc = typeof keyPath === 'string' ? keyPath : keyPath && ('[' + [].join.call(keyPath, '+') + ']'); + this.src = (unique ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + keyPathSrc; +} +// +// TableSchema struct +// +function TableSchema(name, primKey, indexes, instanceTemplate) { + /// + /// + /// + /// + this.name = name; + this.primKey = primKey || new IndexSpec(); + this.indexes = indexes || [new IndexSpec()]; + this.instanceTemplate = instanceTemplate; + this.mappedClass = null; + this.idxByName = arrayToObject(indexes, function (index) { return [index.name, index]; }); +} +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +function getNativeGetDatabaseNamesFn(indexedDB) { + var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames); + return fn && fn.bind(indexedDB); +} +// Export Error classes +props(Dexie, fullNameExceptions); // Dexie.XXXError = class XXXError {...}; +// +// Static methods and properties +// +props(Dexie, { + // + // Static delete() method. + // + delete: function (databaseName) { + var db = new Dexie(databaseName), promise = db.delete(); + promise.onblocked = function (fn) { + db.on("blocked", fn); + return this; + }; + return promise; + }, + // + // Static exists() method. + // + exists: function (name) { + return new Dexie(name).open().then(function (db) { + db.close(); + return true; + }).catch(Dexie.NoSuchDatabaseError, function () { return false; }); + }, + // + // Static method for retrieving a list of all existing databases at current host. + // + getDatabaseNames: function (cb) { + var getDatabaseNames = getNativeGetDatabaseNamesFn(Dexie.dependencies.indexedDB); + return getDatabaseNames ? new Promise(function (resolve, reject) { + var req = getDatabaseNames(); + req.onsuccess = function (event) { + resolve(slice(event.target.result, 0)); // Converst DOMStringList to Array + }; + req.onerror = eventRejectHandler(reject); + }).then(cb) : dbNamesDB.dbnames.toCollection().primaryKeys(cb); + }, + defineClass: function () { + // Default constructor able to copy given properties into this object. + function Class(properties) { + /// Properties to initialize object with. + /// + if (properties) + extend(this, properties); + } + return Class; + }, + applyStructure: applyStructure, + ignoreTransaction: function (scopeFunc) { + // In case caller is within a transaction but needs to create a separate transaction. + // Example of usage: + // + // Let's say we have a logger function in our app. Other application-logic should be unaware of the + // logger function and not need to include the 'logentries' table in all transaction it performs. + // The logging should always be done in a separate transaction and not be dependant on the current + // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction. + // + // Dexie.ignoreTransaction(function() { + // db.logentries.add(newLogEntry); + // }); + // + // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction + // in current Promise-scope. + // + // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an + // API for this because + // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout(). + // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate(). + // 3) setImmediate() is not supported in the ES standard. + // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough. + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional. + scopeFunc(); // No need to change scope because there is no ongoing transaction. + }, + vip: function (fn) { + // To be used by subscribers to the on('ready') event. + // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing. + // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD + // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since + // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that. + // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip() + // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by + // the caller will not resolve until database is opened. + return newScope(function () { + PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing. + return fn(); + }); + }, + async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return Promise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, + spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return Promise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + // Dexie.currentTransaction property + currentTransaction: { + get: function () { return PSD.trans || null; } + }, + waitFor: function (promiseOrFunction, optionalTimeout) { + // If a function is provided, invoke it and pass the returning value to Transaction.waitFor() + var promise = Promise.resolve(typeof promiseOrFunction === 'function' ? Dexie.ignoreTransaction(promiseOrFunction) : promiseOrFunction) + .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. + // Run given promise on current transaction. If no current transaction, just return a Dexie promise based + // on given value. + return PSD.trans ? PSD.trans.waitFor(promise) : promise; + }, + // Export our Promise implementation since it can be handy as a standalone Promise implementation + Promise: Promise, + // Dexie.debug proptery: + // Dexie.debug = false + // Dexie.debug = true + // Dexie.debug = "dexie" - don't hide dexie's stack frames. + debug: { + get: function () { return debug; }, + set: function (value) { + setDebug(value, value === 'dexie' ? function () { return true; } : dexieStackFrameFilter); + } + }, + // Export our derive/extend/override methodology + derive: derive, + extend: extend, + props: props, + override: override, + // Export our Events() function - can be handy as a toolkit + Events: Events, + // Utilities + getByKeyPath: getByKeyPath, + setByKeyPath: setByKeyPath, + delByKeyPath: delByKeyPath, + shallowClone: shallowClone, + deepClone: deepClone, + getObjectDiff: getObjectDiff, + asap: asap, + maxKey: maxKey, + minKey: minKey, + // Addon registry + addons: [], + // Global DB connection list + connections: connections, + MultiModifyError: exceptions.Modify, + errnames: errnames, + // Export other static classes + IndexSpec: IndexSpec, + TableSchema: TableSchema, + // + // Dependencies + // + // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included. + // + // In node.js, however, these properties must be set "manually" before instansiating a new Dexie(). + // For node.js, you need to require indexeddb-js or similar and then set these deps. + // + dependencies: (function () { + try { + return { + // Required: + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; + } + catch (e) { + return { + indexedDB: null, + IDBKeyRange: null + }; + } + })(), + // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc. + semVer: DEXIE_VERSION, + version: DEXIE_VERSION.split('.') + .map(function (n) { return parseInt(n); }) + .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }), + // https://github.com/dfahlander/Dexie.js/issues/186 + // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return + // x.default. Workaround: Set Dexie.default = Dexie. + default: Dexie, + // Make it possible to import {Dexie} (non-default import) + // Reason 1: May switch to that in future. + // Reason 2: We declare it both default and named exported in d.ts to make it possible + // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely + // exporting the symbol, not just default exporting) + Dexie: Dexie +}); +// Map DOMErrors and DOMExceptions to corresponding Dexie errors. May change in Dexie v2.0. +Promise.rejectionMapper = mapError; +// Initialize dbNamesDB (won't ever be opened on chromium browsers') +dbNamesDB = new Dexie('__dbnames'); +dbNamesDB.version(1).stores({ dbnames: 'name' }); +(function () { + // Migrate from Dexie 1.x database names stored in localStorage: + var DBNAMES = 'Dexie.DatabaseNames'; + try { + if (typeof localStorage !== undefined && _global.document !== undefined) { + // Have localStorage and is not executing in a worker. Lets migrate from Dexie 1.x. + JSON.parse(localStorage.getItem(DBNAMES) || "[]") + .forEach(function (name) { return dbNamesDB.dbnames.put({ name: name }).catch(nop); }); + localStorage.removeItem(DBNAMES); + } + } + catch (_e) { } +})(); + +return Dexie; + +}))); +//# sourceMappingURL=dexie.js.map diff --git a/loader.js b/loader.js new file mode 100644 index 0000000..52802ed --- /dev/null +++ b/loader.js @@ -0,0 +1,40 @@ +import * as dicomViewer from "./dicomViewer.js" + + +$(document).ready(function () { + + loadDicomViewer(); +}); + +function loadDicomViewer(images_to_load) { + console.log("loadDicomViewer", images_to_load); + let single_dicom = document.getElementById("dicom-viewer"); + if (single_dicom) { + + let images = single_dicom.dataset.images; + + if (images_to_load != undefined) { + images = images_to_load; + console.log("i1", images) + } else if (images.indexOf(",") > 0) { + images = images.split(","); + } + + console.log(images); + + let annotations = single_dicom.dataset.annotations; + if (annotations != undefined && annotations.indexOf(",") > 0) { + annotations = annotations; + } + let load_as_stack; + if (images.length > 5) { + load_as_stack = true; + } else { + load_as_stack = false; + } + + if (images) { + dicomViewer.loadCornerstone($(single_dicom), null, images, annotations, load_as_stack); + } + } +} \ No newline at end of file diff --git a/test_images/IMG1.dcm b/test_images/IMG1.dcm new file mode 100644 index 0000000..5485090 Binary files /dev/null and b/test_images/IMG1.dcm differ diff --git a/test_images/IMG10.dcm b/test_images/IMG10.dcm new file mode 100644 index 0000000..8e7a072 Binary files /dev/null and b/test_images/IMG10.dcm differ diff --git a/test_images/IMG11.dcm b/test_images/IMG11.dcm new file mode 100644 index 0000000..16bddc4 Binary files /dev/null and b/test_images/IMG11.dcm differ diff --git a/test_images/IMG12.dcm b/test_images/IMG12.dcm new file mode 100644 index 0000000..622633e Binary files /dev/null and b/test_images/IMG12.dcm differ diff --git a/test_images/IMG13.dcm b/test_images/IMG13.dcm new file mode 100644 index 0000000..3953f81 Binary files /dev/null and b/test_images/IMG13.dcm differ diff --git a/test_images/IMG14.dcm b/test_images/IMG14.dcm new file mode 100644 index 0000000..717141e Binary files /dev/null and b/test_images/IMG14.dcm differ diff --git a/test_images/IMG15.dcm b/test_images/IMG15.dcm new file mode 100644 index 0000000..b3c5ce2 Binary files /dev/null and b/test_images/IMG15.dcm differ diff --git a/test_images/IMG16.dcm b/test_images/IMG16.dcm new file mode 100644 index 0000000..bc29ccf Binary files /dev/null and b/test_images/IMG16.dcm differ diff --git a/test_images/IMG17.dcm b/test_images/IMG17.dcm new file mode 100644 index 0000000..c65d836 Binary files /dev/null and b/test_images/IMG17.dcm differ diff --git a/test_images/IMG18.dcm b/test_images/IMG18.dcm new file mode 100644 index 0000000..8baa512 Binary files /dev/null and b/test_images/IMG18.dcm differ diff --git a/test_images/IMG19.dcm b/test_images/IMG19.dcm new file mode 100644 index 0000000..e4aee97 Binary files /dev/null and b/test_images/IMG19.dcm differ diff --git a/test_images/IMG2.dcm b/test_images/IMG2.dcm new file mode 100644 index 0000000..b5c5b8a Binary files /dev/null and b/test_images/IMG2.dcm differ diff --git a/test_images/IMG20.dcm b/test_images/IMG20.dcm new file mode 100644 index 0000000..45c333c Binary files /dev/null and b/test_images/IMG20.dcm differ diff --git a/test_images/IMG21.dcm b/test_images/IMG21.dcm new file mode 100644 index 0000000..6af5f98 Binary files /dev/null and b/test_images/IMG21.dcm differ diff --git a/test_images/IMG22.dcm b/test_images/IMG22.dcm new file mode 100644 index 0000000..c80a1be Binary files /dev/null and b/test_images/IMG22.dcm differ diff --git a/test_images/IMG23.dcm b/test_images/IMG23.dcm new file mode 100644 index 0000000..573dbcd Binary files /dev/null and b/test_images/IMG23.dcm differ diff --git a/test_images/IMG24.dcm b/test_images/IMG24.dcm new file mode 100644 index 0000000..0457531 Binary files /dev/null and b/test_images/IMG24.dcm differ diff --git a/test_images/IMG25.dcm b/test_images/IMG25.dcm new file mode 100644 index 0000000..2a27f10 Binary files /dev/null and b/test_images/IMG25.dcm differ diff --git a/test_images/IMG26.dcm b/test_images/IMG26.dcm new file mode 100644 index 0000000..bff44d0 Binary files /dev/null and b/test_images/IMG26.dcm differ diff --git a/test_images/IMG27.dcm b/test_images/IMG27.dcm new file mode 100644 index 0000000..7b76e90 Binary files /dev/null and b/test_images/IMG27.dcm differ diff --git a/test_images/IMG28.dcm b/test_images/IMG28.dcm new file mode 100644 index 0000000..c234dad Binary files /dev/null and b/test_images/IMG28.dcm differ diff --git a/test_images/IMG29.dcm b/test_images/IMG29.dcm new file mode 100644 index 0000000..ca4c6c6 Binary files /dev/null and b/test_images/IMG29.dcm differ diff --git a/test_images/IMG3.dcm b/test_images/IMG3.dcm new file mode 100644 index 0000000..1a55c42 Binary files /dev/null and b/test_images/IMG3.dcm differ diff --git a/test_images/IMG30.dcm b/test_images/IMG30.dcm new file mode 100644 index 0000000..0d8ac42 Binary files /dev/null and b/test_images/IMG30.dcm differ diff --git a/test_images/IMG31.dcm b/test_images/IMG31.dcm new file mode 100644 index 0000000..56bf37a Binary files /dev/null and b/test_images/IMG31.dcm differ diff --git a/test_images/IMG32.dcm b/test_images/IMG32.dcm new file mode 100644 index 0000000..b4c3977 Binary files /dev/null and b/test_images/IMG32.dcm differ diff --git a/test_images/IMG4.dcm b/test_images/IMG4.dcm new file mode 100644 index 0000000..60d4c75 Binary files /dev/null and b/test_images/IMG4.dcm differ diff --git a/test_images/IMG5.dcm b/test_images/IMG5.dcm new file mode 100644 index 0000000..3ea02c5 Binary files /dev/null and b/test_images/IMG5.dcm differ diff --git a/test_images/IMG6.dcm b/test_images/IMG6.dcm new file mode 100644 index 0000000..a49efb5 Binary files /dev/null and b/test_images/IMG6.dcm differ diff --git a/test_images/IMG7.dcm b/test_images/IMG7.dcm new file mode 100644 index 0000000..c882489 Binary files /dev/null and b/test_images/IMG7.dcm differ diff --git a/test_images/IMG8.dcm b/test_images/IMG8.dcm new file mode 100644 index 0000000..c1b76b8 Binary files /dev/null and b/test_images/IMG8.dcm differ diff --git a/test_images/IMG9.dcm b/test_images/IMG9.dcm new file mode 100644 index 0000000..b2903f2 Binary files /dev/null and b/test_images/IMG9.dcm differ