diff --git a/format.json b/format.json deleted file mode 100644 index 8220f73..0000000 --- a/format.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "content": { - "modules": [ - { - "instances": [ - { - "instparams": null, - "instports": { - "end": { - "character": 10, - "line": 21 - }, - "start": { - "character": 4, - "line": 18 - } - }, - "name": "dependence_1", - "range": { - "end": { - "character": 0, - "line": 22 - }, - "start": { - "character": 13, - "line": 17 - } - }, - "type": "dependence_1" - }, - { - "instparams": null, - "instports": { - "end": { - "character": 9, - "line": 28 - }, - "start": { - "character": 4, - "line": 25 - } - }, - "name": "dependence_2", - "range": { - "end": { - "character": 0, - "line": 29 - }, - "start": { - "character": 13, - "line": 24 - } - }, - "type": "dependence_2" - } - ], - "name": "Main", - "params": [], - "ports": [ - { - "name": "a", - "range": { - "end": { - "character": 17, - "line": 11 - }, - "start": { - "character": 16, - "line": 11 - } - }, - "type": "input", - "width": "[3:0]" - }, - { - "name": "b", - "range": { - "end": { - "character": 17, - "line": 12 - }, - "start": { - "character": 16, - "line": 12 - } - }, - "type": "input", - "width": "[2:0]" - }, - { - "name": "c", - "range": { - "end": { - "character": 11, - "line": 13 - }, - "start": { - "character": 10, - "line": 13 - } - }, - "type": "input", - "width": "Unknown" - }, - { - "name": "Qus", - "range": { - "end": { - "character": 14, - "line": 14 - }, - "start": { - "character": 11, - "line": 14 - } - }, - "type": "output", - "width": "Unknown" - }, - { - "name": "Qs", - "range": { - "end": { - "character": 18, - "line": 14 - }, - "start": { - "character": 16, - "line": 14 - } - }, - "type": "output", - "width": "Unknown" - }, - { - "name": "`main_o", - "range": { - "end": { - "character": 27, - "line": 14 - }, - "start": { - "character": 20, - "line": 14 - } - }, - "type": "output", - "width": "Unknown" - } - ], - "range": { - "end": { - "character": 0, - "line": 31 - }, - "start": { - "character": 0, - "line": 10 - } - } - } - ] - }, - "languageId": "verilog", - "macro": { - "defines": [ - { - "name": "main_o", - "range": { - "end": { - "character": 19, - "line": 9 - }, - "start": { - "character": 1, - "line": 9 - } - }, - "value": "out" - } - ], - "includes": [ - { - "path": "child_1.v", - "range": { - "end": { - "character": 9, - "line": 8 - }, - "start": { - "character": 1, - "line": 8 - } - } - } - ], - "invalid": [] - } - } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index aba767e..7aff3f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "showdown": "^2.1.0", "state-machine-cat": "^9.2.5", "temp": "^0.9.4", + "vscode-textmate": "^9.0.0", "wavedrom": "^2.9.1" }, "devDependencies": { @@ -2829,6 +2830,11 @@ "integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==", "deprecated": "no longer supported" }, + "node_modules/vscode-textmate": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz", + "integrity": "sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==" + }, "node_modules/wavedrom": { "version": "2.9.1", "resolved": "https://registry.npmmirror.com/wavedrom/-/wavedrom-2.9.1.tgz", @@ -5216,6 +5222,11 @@ "resolved": "https://registry.npmmirror.com/viz.js/-/viz.js-1.8.2.tgz", "integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==" }, + "vscode-textmate": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz", + "integrity": "sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==" + }, "wavedrom": { "version": "2.9.1", "resolved": "https://registry.npmmirror.com/wavedrom/-/wavedrom-2.9.1.tgz", diff --git a/package.json b/package.json index ccbe09e..0942180 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,52 @@ "type": "boolean", "default": false, "description": "run the simulation command in terminal instead of output" - } + }, + "function.lsp.formatter.vlog.default.style": { + "scope": "window", + "type": "string", + "enum": [ + "kr", + "ansi", + "gnu" + ], + "default": "kr", + "description": "Select the verilog and systemverilog formatter style." + }, + "function.lsp.formatter.vlog.default.args": { + "scope": "window", + "type": "string", + "default": "", + "description": "Add verilog formatter arguments here (like istyle)." + }, + "function.lsp.formatter.vhdl.default.keyword-case": { + "description": "Keyword case", + "type": "string", + "default": "LowerCase", + "enum": [ + "LowerCase", + "UpperCase" + ] + }, + "function.lsp.formatter.vhdl.default.align-comments": { + "description": "Align comments", + "type": "boolean", + "default": false + }, + "function.lsp.formatter.vhdl.default.type-name-case": { + "description": "Type name case", + "type": "string", + "default": "LowerCase", + "enum": [ + "LowerCase", + "UpperCase" + ] + }, + "function.lsp.formatter.vhdl.default.indentation": { + "description": "Indentation", + "type": "number", + "default": 4 + } } }, "commands": [ @@ -749,6 +794,7 @@ "showdown": "^2.1.0", "state-machine-cat": "^9.2.5", "temp": "^0.9.4", + "vscode-textmate": "^9.0.0", "wavedrom": "^2.9.1" } -} \ No newline at end of file +} diff --git a/resources/formatter/index.d.ts b/resources/formatter/index.d.ts new file mode 100644 index 0000000..d556410 --- /dev/null +++ b/resources/formatter/index.d.ts @@ -0,0 +1,8 @@ +import * as vscode from 'vscode'; + + +declare module formatterProvider { + export const hdlFormatterProvider: vscode.DocumentFormattingEditProvider; +} + +export = formatterProvider; \ No newline at end of file diff --git a/resources/formatter/index.js b/resources/formatter/index.js new file mode 100644 index 0000000..dc907cc --- /dev/null +++ b/resources/formatter/index.js @@ -0,0 +1,137 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +"use strict"; +const os = require('os'); +const fs = require('fs'); +const path = require('path'); +const vscode = require('vscode'); +const temp = require("temp"); + +const vlogFormatter = require("./vlogFormatter.js"); +const vhdlFormatter = require("./vhdlFormatter.js"); + +class Formatter { + constructor() { + this.vlogFormatter = new VlogFormatter(); + this.vhdlFormatter = new VhdlFormatter(); + } + + async provideDocumentFormattingEdits(document, options, token) { + const edits = []; + //Get document code + let code_document = document.getText(); + let selection_document = this.getDocumentRange(document); + //Get selected text + let editor = vscode.window.activeTextEditor; + let selection_selected_text = ''; + let code_selected_text = ''; + if (editor !== undefined) { + selection_selected_text = editor.selection; + code_selected_text = editor.document.getText(editor.selection); + } + //Code to format + let code_to_format = ''; + let selection_to_format = ''; + if (code_selected_text !== '') { + code_to_format = code_selected_text; + selection_to_format = selection_selected_text; + } else { + code_to_format = code_document; + selection_to_format = selection_document; + } + + let code_format = await this.format(document.languageId, code_to_format); + if (code_format === null) { + console.log("Error format code."); + return edits; + } else { + const replacement = vscode.TextEdit.replace(selection_to_format, code_format); + edits.push(replacement); + return edits; + } + } + + async format(language, code) { + let options = null; + let formatted_code = ''; + try { + if (language === "vhdl") { + options = this.get_vhdl_config(); + formatted_code = await this.vhdlFormatter.format_from_code(code, options); + } + else { + options = this.get_vlog_config(); + formatted_code = await this.vlogFormatter.format_from_code(code, options); + } + return formatted_code; + } catch (error) { + return code; + } + } + + get_vlog_config() { + let style = vscode.workspace.getConfiguration("function.lsp.formatter.vlog.default").get("style"); + let args = vscode.workspace.getConfiguration("function.lsp.formatter.vlog.default").get("args"); + return `--style=${style} ${args}`; + } + + get_vhdl_config() { + let configuration = vscode.workspace.getConfiguration('function.lsp.formatter.vhdl.default'); + let settings = { + "RemoveComments": false, + "RemoveAsserts": false, + "CheckAlias": false, + "AlignComments": configuration.get('align-comments'), + "SignAlignSettings": { + "isRegional": true, + "isAll": true, + "mode": 'local', + "keyWords": [ + "FUNCTION", + "IMPURE FUNCTION", + "GENERIC", + "PORT", + "PROCEDURE" + ] + }, + "KeywordCase": configuration.get('keyword-case'), + "TypeNameCase": configuration.get('type-name-case'), + "Indentation": ' '.repeat(configuration.get('indentation')), + "NewLineSettings": { + "newLineAfter": [ + ";", + "then" + ], + "noNewLineAfter": [] + }, + "EndOfLine": "\n" + }; + return settings; + } + + getDocumentRange(document) { + const lastLineId = document.lineCount - 1; + return new vscode.Range(0, 0, lastLineId, document.lineAt(lastLineId).text.length); + } +} + +class VlogFormatter { + async format_from_code(code, options) { + let verilogFormatter = await vlogFormatter(); + verilogFormatter.FS.writeFile("/share/FILE_IN.v", code, { encoding: 'utf8' }); + verilogFormatter.ccall('run', '', ['string'], [`${options} finish`]); + let formatted_code = verilogFormatter.FS.readFile("/share/FILE_OUT.v", { encoding: 'utf8' }); + return formatted_code; + } +} + +class VhdlFormatter { + async format_from_code(code, options) { + let beautifuler = new vhdlFormatter.Beautifuler(); + let formatted_code = beautifuler.beauty(code, options); + return formatted_code; + } +} + + +const hdlFormatterProvider = new Formatter(); +module.exports = { hdlFormatterProvider }; \ No newline at end of file diff --git a/resources/formatter/vhdlFormatter.js b/resources/formatter/vhdlFormatter.js new file mode 100644 index 0000000..44486de --- /dev/null +++ b/resources/formatter/vhdlFormatter.js @@ -0,0 +1,910 @@ +"use strict"; + +class Beautifuler { + beauty(input, options) { + let new_line_after_symbols = new NewLineSettings(); + new_line_after_symbols.newLineAfter = ["then", ";"]; + new_line_after_symbols.noNewLineAfter = ["port", "generic"]; + let settings = this.getDefaultBeautifierSettings(new_line_after_symbols); + settings.SignAlignSettings = new signAlignSettings(true, true, "local", ["PORT", "GENERIC"]); + + const result = this.beautifyIntern(input, options); + if (result.err !== null) { + console.error(`-- [ERROR]: could not beautify`); + } + return result.data; + } + + beautifyIntern(input, settings) { + try { + const data = beautify(input, settings); + return { + data, + err: null, + }; + } + catch (err) { + return { + data: null, + err, + }; + } + } + + getDefaultBeautifierSettings(newLineSettings, signAlignSettings = null, indentation = " ") { + return new BeautifierSettings(false, false, false, signAlignSettings, "lowercase", "lowercase", indentation, newLineSettings, "\r\n"); + } +} +exports.Beautifuler = Beautifuler; + +// VHDLFormatter +const ILEscape = "@@"; +const ILCommentPrefix = ILEscape + "comments"; +const ILIndentedReturnPrefix = ILEscape; +const ILQuote = "⨵"; +const ILSingleQuote = "⦼"; +const ILBackslash = "⨸"; +const ILSemicolon = "⨴"; +var FormatMode; +(function (FormatMode) { + FormatMode[FormatMode["Default"] = 0] = "Default"; + FormatMode[FormatMode["EndsWithSemicolon"] = 1] = "EndsWithSemicolon"; + FormatMode[FormatMode["CaseWhen"] = 2] = "CaseWhen"; + FormatMode[FormatMode["IfElse"] = 3] = "IfElse"; + FormatMode[FormatMode["PortGeneric"] = 4] = "PortGeneric"; +})(FormatMode || (FormatMode = {})); +let Mode = FormatMode.Default; +exports.RemoveAsserts = exports.ApplyNoNewLineAfter = exports.beautify3 = exports.beautifySemicolonBlock = exports.beautifyPackageIsNewBlock = exports.beautifyComponentBlock = exports.beautifyCaseBlock = exports.AlignSign = exports.AlignSigns = exports.beautifyPortGenericBlock = exports.FormattedLineToString = exports.FormattedLine = exports.beautify = exports.BeautifierSettings = exports.signAlignSettings = exports.SetNewLinesAfterSymbols = exports.NewLineSettings = void 0; +class NewLineSettings { + constructor() { + this.newLineAfter = []; + this.noNewLineAfter = []; + } + newLineAfterPush(keyword) { + this.newLineAfter.push(keyword); + } + noNewLineAfterPush(keyword) { + this.noNewLineAfter.push(keyword); + } + push(keyword, addNewLine) { + let str = addNewLine.toLowerCase(); + if (str == "none") { + return; + } + else if (!str.startsWith("no")) { + this.newLineAfterPush(keyword); + } + else { + this.noNewLineAfterPush(keyword); + } + } +} +exports.NewLineSettings = NewLineSettings; +function ConstructNewLineSettings(dict) { + let settings = new NewLineSettings(); + for (let key in dict) { + settings.push(key, dict[key]); + } + return settings; +} +String.prototype.regexCount = function (pattern) { + if (pattern.flags.indexOf("g") < 0) { + pattern = new RegExp(pattern.source, pattern.flags + "g"); + } + return (this.match(pattern) || []).length; +}; +String.prototype.count = function (text) { + return this.split(text).length - 1; +}; +String.prototype.regexStartsWith = function (pattern) { + var searchResult = this.search(pattern); + return searchResult == 0; +}; +String.prototype.regexIndexOf = function (pattern, startIndex) { + startIndex = startIndex || 0; + var searchResult = this.substr(startIndex).search(pattern); + return (-1 === searchResult) ? -1 : searchResult + startIndex; +}; +String.prototype.regexLastIndexOf = function (pattern, startIndex) { + pattern = (pattern.global) ? pattern : + new RegExp(pattern.source, 'g' + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '')); + if (typeof (startIndex) === 'undefined') { + startIndex = this.length; + } + else if (startIndex < 0) { + startIndex = 0; + } + const stringToWorkWith = this.substring(0, startIndex + 1); + let lastIndexOf = -1; + let nextStop = 0; + let result; + while ((result = pattern.exec(stringToWorkWith)) != null) { + lastIndexOf = result.index; + pattern.lastIndex = ++nextStop; + } + return lastIndexOf; +}; +String.prototype.reverse = function () { + return this.split('').reverse().join(''); +}; +String.prototype.convertToRegexBlockWords = function () { + let result = new RegExp("(" + this + ")([^\\w]|$)"); + return result; +}; +Array.prototype.convertToRegexBlockWords = function () { + let wordsStr = this.join("|"); + let result = new RegExp("(" + wordsStr + ")([^\\w]|$)"); + return result; +}; +function EscapeComments(arr) { + var comments = []; + var count = 0; + for (var i = 0; i < arr.length; i++) { + var line = arr[i]; + var commentStartIndex = line.indexOf("--"); + if (commentStartIndex >= 0) { + comments.push(line.substr(commentStartIndex)); + arr[i] = line.substr(0, commentStartIndex) + ILCommentPrefix + count; + count++; + } + } + var isInComment = false; + var commentRegex = new RegExp("(?<=" + ILCommentPrefix + "[\\d]+)."); + for (var i = 0; i < arr.length; i++) { + var commentStartIndex = 0; + var hasComment = true; + var commentEndInlineIndex = 0; + while (hasComment) { + var line = arr[i]; + if (!isInComment) { + commentStartIndex = line.indexOf("/*"); + var commentEndIndex = line.indexOf("*/", commentStartIndex); + if (commentStartIndex >= 0) { + if (commentEndIndex >= 0) { + commentEndInlineIndex = commentEndIndex + 2; + isInComment = false; + comments.push(line.substring(commentStartIndex, commentEndInlineIndex)); + arr[i] = line.substr(0, commentStartIndex) + ILCommentPrefix + count + line.substr(commentEndInlineIndex); + count++; + hasComment = true; + if (commentStartIndex + 2 == line.length) { + hasComment = false; + } + } + else { + isInComment = true; + comments.push(line.substr(commentStartIndex)); + arr[i] = line.substr(0, commentStartIndex) + ILCommentPrefix + count; + count++; + hasComment = false; + } + } + else { + hasComment = false; + } + continue; + } + if (isInComment) { + var lastCommentEndIndex = line.regexLastIndexOf(commentRegex, line.length); + if (commentStartIndex == 0) { + var commentEndIndex = line.indexOf("*/", lastCommentEndIndex); + } + else { + var commentEndIndex = line.indexOf("*/", commentStartIndex); + } + if (commentEndIndex >= 0) { + isInComment = false; + comments.push(line.substr(0, commentEndIndex + 2)); + arr[i] = ILCommentPrefix + count + line.substr(commentEndIndex + 2); + count++; + hasComment = true; + } + else { + comments.push(line); + arr[i] = ILCommentPrefix + count; + count++; + hasComment = false; + } + } + } + } + return comments; +} +function ToLowerCases(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].toLowerCase(); + } +} +function ToUpperCases(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].toUpperCase(); + } +} +function ToCamelCases(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].charAt(0) + arr[i].slice(1).toLowerCase(); + } +} +function ReplaceKeyWords(text, keywords) { + for (var k = 0; k < keywords.length; k++) { + text = text.replace(new RegExp("([^a-zA-Z0-9_@]|^)" + keywords[k] + "([^a-zA-Z0-9_]|$)", 'gi'), "$1" + keywords[k] + "$2"); + } + return text; +} +function SetKeywordCase(input, keywordcase, keywords) { + let inputcase = keywordcase.toLowerCase(); + switch (inputcase) { + case "lowercase": + ToLowerCases(keywords); + break; + case "defaultcase": + ToCamelCases(keywords); + break; + case "uppercase": + ToUpperCases(keywords); + } + input = ReplaceKeyWords(input, keywords); + return input; +} +function SetNewLinesAfterSymbols(text, newLineSettings) { + if (newLineSettings == null) { + return text; + } + if (newLineSettings.newLineAfter != null) { + newLineSettings.newLineAfter.forEach(symbol => { + let upper = symbol.toUpperCase(); + var rexString = "(" + upper + ")[ ]?([^ \r\n@])"; + let regex = null; + if (upper.regexStartsWith(/\w/)) { + regex = new RegExp("\\b" + rexString, "g"); + } + else { + regex = new RegExp(rexString, "g"); + } + text = text.replace(regex, '$1\r\n$2'); + if (upper == "PORT") { + text = text.replace(/\bPORT\b\s+MAP/, "PORT MAP"); + } + }); + } + if (newLineSettings.noNewLineAfter != null) { + newLineSettings.noNewLineAfter.forEach(symbol => { + let rexString = "(" + symbol.toUpperCase() + ")[ \r\n]+([^@])"; + let regex = null; + if (symbol.regexStartsWith(/\w/)) { + regex = new RegExp("\\b" + rexString, "g"); + text = text.replace(regex, '$1 $2'); + } + else { + regex = new RegExp(rexString, "g"); + } + text = text.replace(regex, '$1 $2'); + }); + } + return text; +} +exports.SetNewLinesAfterSymbols = SetNewLinesAfterSymbols; +class signAlignSettings { + constructor(isRegional, isAll, mode, keyWords) { + this.isRegional = isRegional; + this.isAll = isAll; + this.mode = mode; + this.keyWords = keyWords; + } +} +exports.signAlignSettings = signAlignSettings; +class BeautifierSettings { + constructor(removeComments, removeReport, checkAlias, alignComments, signAlignSettings, keywordCase, typeNameCase, indentation, newLineSettings, endOfLine, addNewLine) { + this.RemoveComments = removeComments; + this.RemoveAsserts = removeReport; + this.CheckAlias = checkAlias; + this.AlignComments = alignComments; + this.SignAlignSettings = signAlignSettings; + this.KeywordCase = keywordCase; + this.TypeNameCase = typeNameCase; + this.Indentation = indentation; + this.NewLineSettings = newLineSettings; + this.EndOfLine = endOfLine; + this.AddNewLine = addNewLine; + } +} +exports.BeautifierSettings = BeautifierSettings; +let KeyWords = ["ABS", "ACCESS", "AFTER", "ALIAS", "ALL", "AND", "ARCHITECTURE", "ARRAY", "ASSERT", "ATTRIBUTE", "BEGIN", "BLOCK", "BODY", "BUFFER", "BUS", "CASE", "COMPONENT", "CONFIGURATION", "CONSTANT", "CONTEXT", "COVER", "DISCONNECT", "DOWNTO", "DEFAULT", "ELSE", "ELSIF", "END", "ENTITY", "EXIT", "FAIRNESS", "FILE", "FOR", "FORCE", "FUNCTION", "GENERATE", "GENERIC", "GROUP", "GUARDED", "IF", "IMPURE", "IN", "INERTIAL", "INOUT", "IS", "LABEL", "LIBRARY", "LINKAGE", "LITERAL", "LOOP", "MAP", "MOD", "NAND", "NEW", "NEXT", "NOR", "NOT", "NULL", "OF", "ON", "OPEN", "OR", "OTHERS", "OUT", "PACKAGE", "PORT", "POSTPONED", "PROCEDURE", "PROCESS", "PROPERTY", "PROTECTED", "PURE", "RANGE", "RECORD", "REGISTER", "REJECT", "RELEASE", "REM", "REPORT", "RESTRICT", "RESTRICT_GUARANTEE", "RETURN", "ROL", "ROR", "SELECT", "SEQUENCE", "SEVERITY", "SHARED", "SIGNAL", "SLA", "SLL", "SRA", "SRL", "STRONG", "SUBTYPE", "THEN", "TO", "TRANSPORT", "TYPE", "UNAFFECTED", "UNITS", "UNTIL", "USE", "VARIABLE", "VMODE", "VPROP", "VUNIT", "WAIT", "WHEN", "WHILE", "WITH", "XNOR", "XOR"]; +let TypeNames = ["BOOLEAN", "BIT", "CHARACTER", "INTEGER", "TIME", "NATURAL", "POSITIVE", "STD_LOGIC", "STD_LOGIC_VECTOR", "STD_ULOGIC", "STD_ULOGIC_VECTOR", "STRING"]; +function beautify(input, settings) { + input = input.replace(/\r\n/g, "\n"); + input = input.replace(/\n/g, "\r\n"); + var arr = input.split("\r\n"); + var comments = EscapeComments(arr); + var backslashes = escapeText(arr, "\\\\[^\\\\]+\\\\", ILBackslash); + let quotes = escapeText(arr, '"([^"]+)"', ILQuote); + let singleQuotes = escapeText(arr, "'[^']'", ILSingleQuote); + RemoveLeadingWhitespaces(arr); + input = arr.join("\r\n"); + if (settings.RemoveComments) { + input = input.replace(/\r\n[ \t]*@@comments[0-9]+[ \t]*\r\n/g, '\r\n'); + input = input.replace(/@@comments[0-9]+/g, ''); + comments = []; + } + input = SetKeywordCase(input, "uppercase", KeyWords); + input = SetKeywordCase(input, "uppercase", TypeNames); + input = RemoveExtraNewLines(input); + input = input.replace(/[\t ]+/g, ' '); + input = input.replace(/\([\t ]+/g, '\('); + input = input.replace(/[ ]+;/g, ';'); + input = input.replace(/:[ ]*(PROCESS|ENTITY)/gi, ':$1'); + arr = input.split("\r\n"); + if (settings.RemoveAsserts) { + RemoveAsserts(arr); //RemoveAsserts must be after EscapeQuotes + } + ReserveSemicolonInKeywords(arr); + input = arr.join("\r\n"); + input = input.replace(/\b(PORT|GENERIC)\b\s+MAP/g, '$1 MAP'); + input = input.replace(/\b(PORT|PROCESS|GENERIC)\b[\s]*\(/g, '$1 ('); + let newLineSettings = settings.NewLineSettings; + if (newLineSettings != null) { + input = SetNewLinesAfterSymbols(input, newLineSettings); + arr = input.split("\r\n"); + ApplyNoNewLineAfter(arr, newLineSettings.noNewLineAfter); + input = arr.join("\r\n"); + } + input = input.replace(/([a-zA-Z0-9\); ])\);(@@comments[0-9]+)?@@end/g, '$1\r\n);$2@@end'); + input = input.replace(/[ ]?([&=:\-\+|\*]|[<>]+)[ ]?/g, ' $1 '); + input = input.replace(/(\d+e) +([+\-]) +(\d+)/g, '$1$2$3'); // fix exponential notation format broken by previous step + input = input.replace(/[ ]?([,])[ ]?/g, '$1 '); + input = input.replace(/[ ]?(['"])(THEN)/g, '$1 $2'); + input = input.replace(/[ ]?(\?)?[ ]?(<|:|>|\/)?[ ]+(=)?[ ]?/g, ' $1$2$3 '); + input = input.replace(/(IF)[ ]?([\(\)])/g, '$1 $2'); + input = input.replace(/([\(\)])[ ]?(THEN)/gi, '$1 $2'); + input = input.replace(/(^|[\(\)])[ ]?(AND|OR|XOR|XNOR)[ ]*([\(])/g, '$1 $2 $3'); + input = input.replace(/ ([\-\*\/=+<>])[ ]*([\-\*\/=+<>]) /g, " $1$2 "); + //input = input.replace(/\r\n[ \t]+--\r\n/g, "\r\n"); + input = input.replace(/[ ]+/g, ' '); + input = input.replace(/[ \t]+\r\n/g, "\r\n"); + input = input.replace(/\r\n\r\n\r\n/g, '\r\n'); + input = input.replace(/[\r\n\s]+$/g, ''); + input = input.replace(/[ \t]+\)/g, ')'); + input = input.replace(/\s*\)\s+RETURN\s+([\w]+;)/g, '\r\n) RETURN $1'); //function(..)\r\nreturn type; -> function(..\r\n)return type; + input = input.replace(/\)\s*(@@\w+)\r\n\s*RETURN\s+([\w]+;)/g, ') $1\r\n' + ILIndentedReturnPrefix + 'RETURN $2'); //function(..)\r\nreturn type; -> function(..\r\n)return type; + let keywordAndSignRegex = new RegExp("(\\b" + KeyWords.join("\\b|\\b") + "\\b) +([\\-+]) +(\\w)", "g"); + input = input.replace(keywordAndSignRegex, "$1 $2$3"); // `WHEN - 2` -> `WHEN -2` + input = input.replace(/([,|]) +([+\-]) +(\w)/g, '$1 $2$3'); // `1, - 2)` -> `1, -2)` + input = input.replace(/(\() +([+\-]) +(\w)/g, '$1$2$3'); // `( - 2)` -> `(-2)` + arr = input.split("\r\n"); + let result = []; + beautify3(arr, result, settings, 0, 0); + var alignSettings = settings.SignAlignSettings; + if (alignSettings != null && alignSettings.isAll) { + AlignSigns(result, 0, result.length - 1, alignSettings.mode, settings.AlignComments); + } + arr = FormattedLineToString(result, settings.Indentation); + input = arr.join("\r\n"); + input = input.replace(/@@RETURN/g, "RETURN"); + input = SetKeywordCase(input, settings.KeywordCase, KeyWords); + input = SetKeywordCase(input, settings.TypeNameCase, TypeNames); + input = replaceEscapedWords(input, quotes, ILQuote); + input = replaceEscapedWords(input, singleQuotes, ILSingleQuote); + input = replaceEscapedComments(input, comments, ILCommentPrefix); + input = replaceEscapedWords(input, backslashes, ILBackslash); + input = input.replace(new RegExp(ILSemicolon, "g"), ";"); + input = input.replace(/@@[a-z]+/g, ""); + var escapedTexts = new RegExp("[" + ILBackslash + ILQuote + ILSingleQuote + "]", "g"); + input = input.replace(escapedTexts, ""); + input = input.replace(/\r\n/g, settings.EndOfLine); + if (settings.AddNewLine && !input.endsWith(settings.EndOfLine)) { + input += settings.EndOfLine; + } + return input; +} +exports.beautify = beautify; +function replaceEscapedWords(input, arr, prefix) { + for (var i = 0; i < arr.length; i++) { + var text = arr[i]; + var regex = new RegExp("(" + prefix + "){" + text.length + "}"); + input = input.replace(regex, text); + } + return input; +} +function replaceEscapedComments(input, arr, prefix) { + for (var i = 0; i < arr.length; i++) { + input = input.replace(prefix + i, arr[i]); + } + return input; +} +function RemoveLeadingWhitespaces(arr) { + for (var i = 0; i < arr.length; i++) { + arr[i] = arr[i].replace(/^\s+/, ""); + } +} +class FormattedLine { + constructor(line, indent) { + this.Line = line; + this.Indent = indent; + } +} +exports.FormattedLine = FormattedLine; +function FormattedLineToString(arr, indentation) { + let result = []; + if (arr == null) { + return result; + } + if (indentation == null) { + indentation = ""; + } + arr.forEach(i => { + if (i instanceof FormattedLine) { + if (i.Line.length > 0) { + result.push((Array(i.Indent + 1).join(indentation)) + i.Line); + } + else { + result.push(""); + } + } + else { + result = result.concat(FormattedLineToString(i, indentation)); + } + }); + return result; +} +exports.FormattedLineToString = FormattedLineToString; +function GetCloseparentheseEndIndex(inputs, startIndex) { + let openParentheseCount = 0; + let closeParentheseCount = 0; + for (let i = startIndex; i < inputs.length; i++) { + let input = inputs[i]; + openParentheseCount += input.count("("); + closeParentheseCount += input.count(")"); + if (openParentheseCount > 0 + && openParentheseCount <= closeParentheseCount) { + return i; + } + } + return startIndex; +} +function beautifyPortGenericBlock(inputs, result, settings, startIndex, parentEndIndex, indent, mode) { + let firstLine = inputs[startIndex]; + let regex = new RegExp("[\\w\\s:]*(" + mode + ")([\\s]|$)"); + if (!firstLine.regexStartsWith(regex)) { + return [startIndex, parentEndIndex]; + } + let firstLineHasParenthese = firstLine.indexOf("(") >= 0; + let hasParenthese = firstLineHasParenthese; + let blockBodyStartIndex = startIndex; + let secondLineHasParenthese = startIndex + 1 < inputs.length && inputs[startIndex + 1].startsWith("("); + if (secondLineHasParenthese) { + hasParenthese = true; + blockBodyStartIndex++; + } + let endIndex = hasParenthese ? GetCloseparentheseEndIndex(inputs, startIndex) : startIndex; + if (endIndex != startIndex && firstLineHasParenthese) { + inputs[startIndex] = inputs[startIndex].replace(/\b(PORT|GENERIC|PROCEDURE)\b([\w ]+)\(([\w\(\) ]+)/, '$1$2(\r\n$3'); + let newInputs = inputs[startIndex].split("\r\n"); + if (newInputs.length == 2) { + inputs[startIndex] = newInputs[0]; + inputs.splice(startIndex + 1, 0, newInputs[1]); + endIndex++; + parentEndIndex++; + } + } + else if (endIndex > startIndex + 1 && secondLineHasParenthese) { + inputs[startIndex + 1] = inputs[startIndex + 1].replace(/\(([\w\(\) ]+)/, '(\r\n$1'); + let newInputs = inputs[startIndex + 1].split("\r\n"); + if (newInputs.length == 2) { + inputs[startIndex + 1] = newInputs[0]; + inputs.splice(startIndex + 2, 0, newInputs[1]); + endIndex++; + parentEndIndex++; + } + } + if (firstLineHasParenthese && inputs[startIndex].indexOf("MAP") > 0) { + inputs[startIndex] = inputs[startIndex].replace(/([^\w])(MAP)\s+\(/g, '$1$2('); + } + result.push(new FormattedLine(inputs[startIndex], indent)); + if (secondLineHasParenthese) { + let secondLineIndent = indent; + if (endIndex == startIndex + 1) { + secondLineIndent++; + } + result.push(new FormattedLine(inputs[startIndex + 1], secondLineIndent)); + } + let blockBodyEndIndex = endIndex; + let i = beautify3(inputs, result, settings, blockBodyStartIndex + 1, indent + 1, endIndex); + if (inputs[i].startsWith(")")) { + result[i].Indent--; + blockBodyEndIndex--; + } + var alignSettings = settings.SignAlignSettings; + if (alignSettings != null) { + if (alignSettings.isRegional && !alignSettings.isAll + && alignSettings.keyWords != null + && alignSettings.keyWords.indexOf(mode) >= 0) { + blockBodyStartIndex++; + AlignSigns(result, blockBodyStartIndex, blockBodyEndIndex, alignSettings.mode, settings.AlignComments); + } + } + return [i, parentEndIndex]; +} +exports.beautifyPortGenericBlock = beautifyPortGenericBlock; +function AlignSigns(result, startIndex, endIndex, mode, alignComments) { + AlignSign_(result, startIndex, endIndex, ":", mode); + AlignSign_(result, startIndex, endIndex, ":=", mode); + AlignSign_(result, startIndex, endIndex, "<=", mode); + AlignSign_(result, startIndex, endIndex, "=>", mode); + if (alignComments) { + AlignSign_(result, startIndex, endIndex, "@@comments", mode); + } +} +exports.AlignSigns = AlignSigns; +function AlignSign_(result, startIndex, endIndex, symbol, mode) { + let maxSymbolIndex = -1; + let symbolIndices = {}; + let startLine = startIndex; + let labelAndKeywords = [ + "([\\w\\s]*:(\\s)*PROCESS)", + "([\\w\\s]*:(\\s)*POSTPONED PROCESS)", + "([\\w\\s]*:\\s*$)", + "([\\w\\s]*:.*\\s+GENERATE)" + ]; + let labelAndKeywordsStr = labelAndKeywords.join("|"); + let labelAndKeywordsRegex = new RegExp("(" + labelAndKeywordsStr + ")([^\\w]|$)"); + for (let i = startIndex; i <= endIndex; i++) { + let line = result[i].Line; + if (symbol == ":" && line.regexStartsWith(labelAndKeywordsRegex)) { + continue; + } + let regex = new RegExp("([\\s\\w\\\\]|^)" + symbol + "([\\s\\w\\\\]|$)"); + if (line.regexCount(regex) > 1) { + continue; + } + let colonIndex = line.regexIndexOf(regex); + if (colonIndex > 0) { + maxSymbolIndex = Math.max(maxSymbolIndex, colonIndex); + symbolIndices[i] = colonIndex; + } + else if ((mode != "local" && !line.startsWith(ILCommentPrefix) && line.length != 0) + || (mode == "local")) { + if (startLine < i - 1) // if cannot find the symbol, a block of symbols ends + { + AlignSign(result, startLine, i - 1, symbol, maxSymbolIndex, symbolIndices); + } + maxSymbolIndex = -1; + symbolIndices = {}; + startLine = i; + } + } + if (startLine < endIndex) // if cannot find the symbol, a block of symbols ends + { + AlignSign(result, startLine, endIndex, symbol, maxSymbolIndex, symbolIndices); + } +} +function AlignSign(result, startIndex, endIndex, symbol, maxSymbolIndex = -1, symbolIndices = {}) { + if (maxSymbolIndex < 0) { + return; + } + for (let lineIndex in symbolIndices) { + let symbolIndex = symbolIndices[lineIndex]; + if (symbolIndex == maxSymbolIndex) { + continue; + } + let line = result[lineIndex].Line; + result[lineIndex].Line = line.substring(0, symbolIndex) + + (Array(maxSymbolIndex - symbolIndex + 1).join(" ")) + + line.substring(symbolIndex); + } +} +exports.AlignSign = AlignSign; +function beautifyCaseBlock(inputs, result, settings, startIndex, indent) { + if (!inputs[startIndex].regexStartsWith(/(.+:\s*)?(CASE)([\s]|$)/)) { + return startIndex; + } + result.push(new FormattedLine(inputs[startIndex], indent)); + let i = beautify3(inputs, result, settings, startIndex + 1, indent + 2); + result[i].Indent = indent; + return i; +} +exports.beautifyCaseBlock = beautifyCaseBlock; +function getSemicolonBlockEndIndex(inputs, settings, startIndex, parentEndIndex) { + let endIndex = 0; + let openBracketsCount = 0; + let closeBracketsCount = 0; + for (let i = startIndex; i < inputs.length; i++) { + let input = inputs[i]; + let indexOfSemicolon = input.indexOf(";"); + let splitIndex = indexOfSemicolon < 0 ? input.length : indexOfSemicolon + 1; + let stringBeforeSemicolon = input.substring(0, splitIndex); + let stringAfterSemicolon = input.substring(splitIndex); + stringAfterSemicolon = stringAfterSemicolon.replace(new RegExp(ILCommentPrefix + "[0-9]+"), ""); + openBracketsCount += stringBeforeSemicolon.count("("); + closeBracketsCount += stringBeforeSemicolon.count(")"); + if (indexOfSemicolon < 0) { + continue; + } + if (openBracketsCount == closeBracketsCount) { + endIndex = i; + if (stringAfterSemicolon.trim().length > 0 && settings.NewLineSettings.newLineAfter.indexOf(";") >= 0) { + inputs[i] = stringBeforeSemicolon; + inputs.splice(i, 0, stringAfterSemicolon); + parentEndIndex++; + } + break; + } + } + return [endIndex, parentEndIndex]; +} +function beautifyComponentBlock(inputs, result, settings, startIndex, parentEndIndex, indent) { + let endIndex = startIndex; + for (let i = startIndex; i < inputs.length; i++) { + if (inputs[i].regexStartsWith(/END(\s|$)/)) { + endIndex = i; + break; + } + } + result.push(new FormattedLine(inputs[startIndex], indent)); + if (endIndex != startIndex) { + let actualEndIndex = beautify3(inputs, result, settings, startIndex + 1, indent + 1, endIndex); + let incremental = actualEndIndex - endIndex; + endIndex += incremental; + parentEndIndex += incremental; + } + return [endIndex, parentEndIndex]; +} +exports.beautifyComponentBlock = beautifyComponentBlock; +function beautifyPackageIsNewBlock(inputs, result, settings, startIndex, parentEndIndex, indent) { + let endIndex = startIndex; + for (let i = startIndex; i < inputs.length; i++) { + if (inputs[i].regexIndexOf(/;(\s|$)/) >= 0) { + endIndex = i; + break; + } + } + result.push(new FormattedLine(inputs[startIndex], indent)); + if (endIndex != startIndex) { + let actualEndIndex = beautify3(inputs, result, settings, startIndex + 1, indent + 1, endIndex); + let incremental = actualEndIndex - endIndex; + endIndex += incremental; + parentEndIndex += incremental; + } + return [endIndex, parentEndIndex]; +} +exports.beautifyPackageIsNewBlock = beautifyPackageIsNewBlock; +function beautifySemicolonBlock(inputs, result, settings, startIndex, parentEndIndex, indent) { + let endIndex = startIndex; + [endIndex, parentEndIndex] = getSemicolonBlockEndIndex(inputs, settings, startIndex, parentEndIndex); + result.push(new FormattedLine(inputs[startIndex], indent)); + if (endIndex != startIndex) { + let i = beautify3(inputs, result, settings, startIndex + 1, indent + 1, endIndex); + } + return [endIndex, parentEndIndex]; +} +exports.beautifySemicolonBlock = beautifySemicolonBlock; +function beautify3(inputs, result, settings, startIndex, indent, endIndex) { + let i; + let regexOneLineBlockKeyWords = new RegExp(/(PROCEDURE)[^\w](?!.+[^\w]IS([^\w]|$))/); //match PROCEDURE..; but not PROCEDURE .. IS; + let regexFunctionMultiLineBlockKeyWords = new RegExp(/(FUNCTION|IMPURE FUNCTION)[^\w](?=.+[^\w]IS([^\w]|$))/); //match FUNCTION .. IS; but not FUNCTION + let blockMidKeyWords = ["BEGIN"]; + let blockStartsKeyWords = [ + "IF", + "CASE", + "ARCHITECTURE", + "PROCEDURE", + "PACKAGE", + "(([\\w\\s]*:)?(\\s)*PROCESS)", + "(([\\w\\s]*:)?(\\s)*POSTPONED PROCESS)", + "(.*\\s*PROTECTED)", + "(COMPONENT)", + "(ENTITY(?!.+;))", + "FOR", + "WHILE", + "LOOP", + "(.*\\s*GENERATE)", + "(CONTEXT[\\w\\s\\\\]+IS)", + "(CONFIGURATION(?!.+;))", + "BLOCK", + "UNITS", + "\\w+\\s+\\w+\\s+IS\\s+RECORD" + ]; + let blockEndsKeyWords = ["END", ".*\\)\\s*RETURN\\s+[\\w]+;"]; + let indentedEndsKeyWords = [ILIndentedReturnPrefix + "RETURN\\s+\\w+;"]; + let blockEndsWithSemicolon = [ + "(WITH\\s+[\\w\\s\\\\]+SELECT)", + "([\\w\\\\]+[\\s]*<=)", + "([\\w\\\\]+[\\s]*:=)", + "FOR\\s+[\\w\\s,]+:\\s*\\w+\\s+USE", + "REPORT" + ]; + let newLineAfterKeyWordsStr = blockStartsKeyWords.join("|"); + let regexBlockMidKeyWords = blockMidKeyWords.convertToRegexBlockWords(); + let regexBlockStartsKeywords = new RegExp("([\\w]+\\s*:\\s*)?(" + newLineAfterKeyWordsStr + ")([^\\w]|$)"); + let regexBlockEndsKeyWords = blockEndsKeyWords.convertToRegexBlockWords(); + let regexBlockIndentedEndsKeyWords = indentedEndsKeyWords.convertToRegexBlockWords(); + let regexblockEndsWithSemicolon = blockEndsWithSemicolon.convertToRegexBlockWords(); + let regexMidKeyWhen = "WHEN".convertToRegexBlockWords(); + let regexMidKeyElse = "ELSE|ELSIF".convertToRegexBlockWords(); + if (endIndex == null) { + endIndex = inputs.length - 1; + } + for (i = startIndex; i <= endIndex; i++) { + if (indent < 0) { + indent = 0; + } + let input = inputs[i].trim(); + if (input.regexStartsWith(regexBlockIndentedEndsKeyWords)) { + result.push(new FormattedLine(input, indent)); + return i; + } + if (input.regexStartsWith(/COMPONENT\s/)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifyComponentBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/PACKAGE[\s\w]+IS\s+NEW/)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifyPackageIsNewBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/\w+\s*:\s*ENTITY/)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifySemicolonBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (Mode != FormatMode.EndsWithSemicolon && input.regexStartsWith(regexblockEndsWithSemicolon)) { + let modeCache = Mode; + Mode = FormatMode.EndsWithSemicolon; + [i, endIndex] = beautifySemicolonBlock(inputs, result, settings, i, endIndex, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/(.+:\s*)?(CASE)([\s]|$)/)) { + let modeCache = Mode; + Mode = FormatMode.CaseWhen; + i = beautifyCaseBlock(inputs, result, settings, i, indent); + Mode = modeCache; + continue; + } + if (input.regexStartsWith(/.*?\:\=\s*\($/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, ":="); + continue; + } + if (input.regexStartsWith(/[\w\s:]*\bPORT\b([\s]|$)/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "PORT"); + continue; + } + if (input.regexStartsWith(/TYPE\s+\w+\s+IS\s+\(/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "IS"); + continue; + } + if (input.regexStartsWith(/[\w\s:]*GENERIC([\s]|$)/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "GENERIC"); + continue; + } + if (input.regexStartsWith(/[\w\s:]*PROCEDURE[\s\w]+\($/)) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "PROCEDURE"); + if (inputs[i].regexStartsWith(/.*\)[\s]*IS/)) { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + continue; + } + if (input.regexStartsWith(/FUNCTION[^\w]/) + && input.regexIndexOf(/[^\w]RETURN[^\w]/) < 0) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "FUNCTION"); + if (!inputs[i].regexStartsWith(regexBlockEndsKeyWords)) { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + else { + result[i].Indent++; + } + continue; + } + if (input.regexStartsWith(/IMPURE FUNCTION[^\w]/) + && input.regexIndexOf(/[^\w]RETURN[^\w]/) < 0) { + [i, endIndex] = beautifyPortGenericBlock(inputs, result, settings, i, endIndex, indent, "IMPURE FUNCTION"); + if (!inputs[i].regexStartsWith(regexBlockEndsKeyWords)) { + if (inputs[i].regexStartsWith(regexBlockIndentedEndsKeyWords)) { + result[i].Indent++; + } + else { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + } + else { + result[i].Indent++; + } + continue; + } + result.push(new FormattedLine(input, indent)); + if (startIndex != 0 + && (input.regexStartsWith(regexBlockMidKeyWords) + || (Mode != FormatMode.EndsWithSemicolon && input.regexStartsWith(regexMidKeyElse)) + || (Mode == FormatMode.CaseWhen && input.regexStartsWith(regexMidKeyWhen)))) { + result[i].Indent--; + } + else if (startIndex != 0 + && (input.regexStartsWith(regexBlockEndsKeyWords))) { + result[i].Indent--; + return i; + } + if (input.regexStartsWith(regexOneLineBlockKeyWords)) { + continue; + } + if (input.regexStartsWith(regexFunctionMultiLineBlockKeyWords) + || input.regexStartsWith(regexBlockStartsKeywords)) { + i = beautify3(inputs, result, settings, i + 1, indent + 1); + } + } + i--; + return i; +} +exports.beautify3 = beautify3; +function ReserveSemicolonInKeywords(arr) { + for (let i = 0; i < arr.length; i++) { + if (arr[i].match(/FUNCTION|PROCEDURE/) != null) { + arr[i] = arr[i].replace(/;/g, ILSemicolon); + } + } +} +function ApplyNoNewLineAfter(arr, noNewLineAfter) { + if (noNewLineAfter == null) { + return; + } + for (let i = 0; i < arr.length; i++) { + noNewLineAfter.forEach(n => { + let regex = new RegExp("(" + n.toUpperCase + ")[ a-z0-9]+[a-z0-9]+"); + if (arr[i].regexIndexOf(regex) >= 0) { + arr[i] += "@@singleline"; + } + }); + } +} +exports.ApplyNoNewLineAfter = ApplyNoNewLineAfter; +function RemoveAsserts(arr) { + let need_semi = false; + let inAssert = false; + let n = 0; + for (let i = 0; i < arr.length; i++) { + let has_semi = arr[i].indexOf(";") >= 0; + if (need_semi) { + arr[i] = ''; + } + n = arr[i].indexOf("ASSERT "); + if (n >= 0) { + inAssert = true; + arr[i] = ''; + } + if (!has_semi) { + if (inAssert) { + need_semi = true; + } + } + else { + need_semi = false; + } + } +} +exports.RemoveAsserts = RemoveAsserts; +function escapeText(arr, regex, escapedChar) { + let quotes = []; + let regexEpr = new RegExp(regex, "g"); + for (let i = 0; i < arr.length; i++) { + let matches = arr[i].match(regexEpr); + if (matches != null) { + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + arr[i] = arr[i].replace(match, escapedChar.repeat(match.length)); + quotes.push(match); + } + } + } + return quotes; +} +function RemoveExtraNewLines(input) { + input = input.replace(/(?:\r\n|\r|\n)/g, '\r\n'); + input = input.replace(/ \r\n/g, '\r\n'); + input = input.replace(/\r\n\r\n\r\n/g, '\r\n'); + return input; +} \ No newline at end of file diff --git a/resources/formatter/vlogFormatter.js b/resources/formatter/vlogFormatter.js new file mode 100644 index 0000000..45ca65e --- /dev/null +++ b/resources/formatter/vlogFormatter.js @@ -0,0 +1,35 @@ + +var Module = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(Module) { + Module = Module || {}; + +var Module=typeof Module!=="undefined"?Module:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){var loadPackage=function(metadata){function runWithFS(){Module["FS_createPath"]("/","share",true,true);var fileData0="";Module["FS_createDataFile"]("/share","FILE_IN.v",decodeBase64(fileData0),true,true,false);var fileData1="";Module["FS_createDataFile"]("/share","FILE_OUT.v",decodeBase64(fileData1),true,true,false)}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[]})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;var WebAssembly={Memory:function(opts){this.buffer=new ArrayBuffer(opts["initial"]*65536)},Module:function(binary){},Instance:function(module,info){this.exports=( +// EMSCRIPTEN_START_ASM +function instantiate(ua){function c(d){d.set=function(a,b){this[a]=b};d.get=function(a){return this[a]};return d}var e;var f=new Uint8Array(123);for(var a=25;a>=0;--a){f[48+a]=52+a;f[65+a]=a;f[97+a]=26+a}f[43]=62;f[47]=63;function l(m,n,o){var g,h,a=0,i=n,j=o.length,k=n+(j*3>>2)-(o[j-2]=="=")-(o[j-1]=="=");for(;a>4;if(i>2;if(i>>0<=2){c=c<<2;A=H[c+8620>>2];z=H[c+8608>>2];while(1){c=H[b+4>>2];b:{if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break b}c=La(b)}if(Yc(c)){continue}break}l=1;c:{d:{switch(c-43|0){case 0:case 2:break d;default:break c}}l=(c|0)==45?-1:1;c=H[b+4>>2];if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break c}c=La(b)}e:{f:{while(1){if(F[f+1055|0]==(c|32)){g:{if(f>>>0>6){break g}c=H[b+4>>2];if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break g}c=La(b)}f=f+1|0;if((f|0)!=8){continue}break f}break}if((f|0)!=3){if((f|0)==8){break f}if(!d|f>>>0<4){break e}if((f|0)==8){break f}}c=H[b+104>>2];if(c){H[b+4>>2]=H[b+4>>2]-1}if(!d|f>>>0<4){break f}while(1){if(c){H[b+4>>2]=H[b+4>>2]-1}f=f-1|0;if(f>>>0>3){continue}break}}b=s;h=oa-16|0;oa=h;g=(C(O(O(l|0)*O(Z))),v(2));c=g&2147483647;h:{if(c-8388608>>>0<=2130706431){d=c;c=c>>>7|0;l=d<<25;d=c+1065353216|0;break h}l=g<<25;d=g>>>7|2147418112;if(c>>>0>=2139095040){break h}l=0;d=0;if(!c){break h}d=c;c=Q(c);xb(h,d,0,0,0,c+81|0);j=H[h>>2];k=H[h+4>>2];l=H[h+8>>2];d=H[h+12>>2]^65536|16265-c<<16}H[b>>2]=j;H[b+4>>2]=k;H[b+8>>2]=l;H[b+12>>2]=g&-2147483648|d;oa=h+16|0;j=H[s+8>>2];k=H[s+12>>2];h=H[s>>2];g=H[s+4>>2];break a}i:{j:{k:{if(f){break k}f=0;while(1){if(F[f+1807|0]!=(c|32)){break k}l:{if(f>>>0>1){break l}c=H[b+4>>2];if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break l}c=La(b)}f=f+1|0;if((f|0)!=3){continue}break}break j}m:{switch(f|0){case 0:n:{if((c|0)!=48){break n}f=H[b+4>>2];o:{if(f>>>0>2]){H[b+4>>2]=f+1;f=I[f|0];break o}f=La(b)}if((f&-33)==88){f=oa-432|0;oa=f;c=b;u=H[b+104>>2];b=H[b+4>>2];p:{if(u>>>0>b>>>0){H[c+4>>2]=b+1;b=I[b|0];break p}b=La(c)}q:{r:{while(1){if((b|0)!=48){s:{if((b|0)!=46){break q}b=H[c+4>>2];if(b>>>0>=K[c+104>>2]){break s}H[c+4>>2]=b+1;b=I[b|0];break r}}else{b=H[c+4>>2];if(b>>>0>2]){B=1;H[c+4>>2]=b+1;b=I[b|0]}else{B=1;b=La(c)}continue}break}b=La(c)}y=1;if((b|0)!=48){break q}while(1){b=j;j=b-1|0;k=k-(b>>>0<1)|0;b=H[c+4>>2];t:{if(b>>>0>2]){H[c+4>>2]=b+1;b=I[b|0];break t}b=La(c)}if((b|0)==48){continue}break}B=1}u=1073676288;u:{while(1){v:{n=b|32;w:{x:{w=b-48|0;if(w>>>0<10){break x}if((b|0)!=46?n-97>>>0>=6:0){break u}if((b|0)!=46){break x}if(y){break v}y=1;j=h;k=g;break w}b=(b|0)>57?n-87|0:w;y:{if((g|0)<0?1:(g|0)<=0?h>>>0<=7:0){i=b+(i<<4)|0;break y}if((g|0)<0?1:(g|0)<=0?h>>>0<=28:0){Qb(f+48|0,b);Ta(f+32|0,p,t,x,u,0,0,0,1073414144);p=H[f+32>>2];t=H[f+36>>2];x=H[f+40>>2];u=H[f+44>>2];Ta(f+16|0,p,t,x,u,H[f+48>>2],H[f+52>>2],H[f+56>>2],H[f+60>>2]);Lb(f,o,e,q,r,H[f+16>>2],H[f+20>>2],H[f+24>>2],H[f+28>>2]);q=H[f+8>>2];r=H[f+12>>2];o=H[f>>2];e=H[f+4>>2];break y}if(!b|m){break y}Ta(f+80|0,p,t,x,u,0,0,0,1073610752);Lb(f- -64|0,o,e,q,r,H[f+80>>2],H[f+84>>2],H[f+88>>2],H[f+92>>2]);q=H[f+72>>2];r=H[f+76>>2];m=1;o=H[f+64>>2];e=H[f+68>>2]}b=h+1|0;g=b>>>0<1?g+1|0:g;h=b;B=1}b=H[c+4>>2];if(b>>>0>2]){H[c+4>>2]=b+1;b=I[b|0]}else{b=La(c)}continue}break}b=46}z:{A:{B:{if(!B){if(!H[c+104>>2]){if(d){break A}break B}b=H[c+4>>2];H[c+4>>2]=b-1;if(!d){break B}H[c+4>>2]=b-2;if(!y){break A}H[c+4>>2]=b-3;break A}if((g|0)<0?1:(g|0)<=0?h>>>0<=7:0){x=h;u=g;while(1){i=i<<4;m=u;u=x+1|0;m=u>>>0<1?m+1|0:m;x=u;u=m;if((x|0)!=8|m){continue}break}}C:{D:{E:{if((b&-33)==80){x=jj(c,d);b=pa;u=b;if(x|(b|0)!=-2147483648){break C}if(d){if(H[c+104>>2]){break E}break D}o=0;e=0;kc(c,0,0);c=0;b=0;break z}if(!H[c+104>>2]){break D}}H[c+4>>2]=H[c+4>>2]-1}x=0;u=0}if(!i){wc(f+112|0,+(l|0)*0);o=H[f+112>>2];e=H[f+116>>2];c=H[f+124>>2];b=H[f+120>>2];break z}b=y?j:h;c=(y?k:g)<<2|b>>>30;b=x+(b<<2)|0;c=c+u|0;c=b>>>0>>0?c+1|0:c;h=b-32|0;g=c-(b>>>0<32)|0;b=g;if((b|0)>0?1:(b|0)>=0?h>>>0>0-A>>>0:0){H[6070]=68;Qb(f+160|0,l);Ta(f+144|0,H[f+160>>2],H[f+164>>2],H[f+168>>2],H[f+172>>2],-1,-1,-1,2147418111);Ta(f+128|0,H[f+144>>2],H[f+148>>2],H[f+152>>2],H[f+156>>2],-1,-1,-1,2147418111);o=H[f+128>>2];e=H[f+132>>2];c=H[f+140>>2];b=H[f+136>>2];break z}b=A-226|0;c=h>>>0>=b>>>0;b=b>>31;if((b|0)<(g|0)?1:(g|0)>=(b|0)?c:0){if((i|0)>-1){while(1){Lb(f+416|0,o,e,q,r,0,0,0,-1073807360);c=gg(o,e,q,r,1073610752);b=(c|0)<0;Lb(f+400|0,o,e,q,r,b?o:H[f+416>>2],b?e:H[f+420>>2],b?q:H[f+424>>2],b?r:H[f+428>>2]);b=h;h=b-1|0;g=g-(b>>>0<1)|0;q=H[f+408>>2];r=H[f+412>>2];o=H[f+400>>2];e=H[f+404>>2];i=i<<1|(c|0)>-1;if((i|0)>-1){continue}break}}b=h;c=A;d=(b-c|0)+32|0;c=g-((c>>31)+(b>>>0>>0)|0)|0;c=d>>>0<32?c+1|0:c;b=d;c=((c|0)<0?1:(c|0)<=0?b>>>0>>0:0)?(b|0)>0?b:0:z;F:{if((c|0)>=113){Qb(f+384|0,l);j=H[f+392>>2];k=H[f+396>>2];p=H[f+384>>2];t=H[f+388>>2];g=0;b=0;break F}wc(f+352|0,ef(144-c|0));Qb(f+336|0,l);p=H[f+336>>2];t=H[f+340>>2];j=H[f+344>>2];k=H[f+348>>2];nj(f+368|0,H[f+352>>2],H[f+356>>2],H[f+360>>2],H[f+364>>2],p,t,j,k);D=H[f+376>>2];E=H[f+380>>2];g=H[f+372>>2];b=H[f+368>>2]}c=!(i&1)&((gd(o,e,q,r,0,0,0,0)|0)!=0&(c|0)<32);Hd(f+320|0,c+i|0);Ta(f+304|0,p,t,j,k,H[f+320>>2],H[f+324>>2],H[f+328>>2],H[f+332>>2]);d=b;Lb(f+272|0,H[f+304>>2],H[f+308>>2],H[f+312>>2],H[f+316>>2],b,g,D,E);b=c;Ta(f+288|0,b?0:o,b?0:e,b?0:q,b?0:r,p,t,j,k);Lb(f+256|0,H[f+288>>2],H[f+292>>2],H[f+296>>2],H[f+300>>2],H[f+272>>2],H[f+276>>2],H[f+280>>2],H[f+284>>2]);fg(f+240|0,H[f+256>>2],H[f+260>>2],H[f+264>>2],H[f+268>>2],d,g,D,E);b=H[f+240>>2];c=H[f+244>>2];d=H[f+248>>2];g=H[f+252>>2];if(!gd(b,c,d,g,0,0,0,0)){H[6070]=68}mj(f+224|0,b,c,d,g,h);o=H[f+224>>2];e=H[f+228>>2];c=H[f+236>>2];b=H[f+232>>2];break z}H[6070]=68;Qb(f+208|0,l);Ta(f+192|0,H[f+208>>2],H[f+212>>2],H[f+216>>2],H[f+220>>2],0,0,0,65536);Ta(f+176|0,H[f+192>>2],H[f+196>>2],H[f+200>>2],H[f+204>>2],0,0,0,65536);o=H[f+176>>2];e=H[f+180>>2];c=H[f+188>>2];b=H[f+184>>2];break z}kc(c,0,0)}wc(f+96|0,+(l|0)*0);o=H[f+96>>2];e=H[f+100>>2];c=H[f+108>>2];b=H[f+104>>2]}H[s+16>>2]=o;H[s+20>>2]=e;H[s+24>>2]=b;H[s+28>>2]=c;oa=f+432|0;j=H[s+24>>2];k=H[s+28>>2];h=H[s+16>>2];g=H[s+20>>2];break a}if(!H[b+104>>2]){break n}H[b+4>>2]=H[b+4>>2]-1}i=b;o=l;l=0;f=0;e=oa-8976|0;oa=e;B=z+A|0;J=0-B|0;G:{H:{while(1){if((c|0)!=48){I:{if((c|0)!=46){break G}b=H[i+4>>2];if(b>>>0>=K[i+104>>2]){break I}H[i+4>>2]=b+1;c=I[b|0];break H}}else{b=H[i+4>>2];if(b>>>0>2]){l=1;H[i+4>>2]=b+1;c=I[b|0]}else{l=1;c=La(i)}continue}break}c=La(i)}n=1;if((c|0)!=48){break G}while(1){b=j;j=b-1|0;k=k-(b>>>0<1)|0;b=H[i+4>>2];J:{if(b>>>0>2]){H[i+4>>2]=b+1;c=I[b|0];break J}c=La(i)}if((c|0)==48){continue}break}l=1}H[e+784>>2]=0;K:{L:{b=(c|0)==46;m=c-48|0;M:{N:{O:{P:{if(m>>>0>9?b:1){while(1){Q:{if(b&1){if(!n){j=h;k=g;n=1;break Q}b=!l;break P}b=h+1|0;g=b>>>0<1?g+1|0:g;h=b;if((f|0)<=2044){y=(c|0)==48?y:h;b=(e+784|0)+(f<<2)|0;l=b;if(w){m=(N(H[b>>2],10)+c|0)-48|0}H[l>>2]=m;l=1;c=w+1|0;b=(c|0)==9;w=b?0:c;f=b+f|0;break Q}if((c|0)==48){break Q}H[e+8960>>2]=H[e+8960>>2]|1;y=18396}b=H[i+4>>2];R:{if(b>>>0>2]){H[i+4>>2]=b+1;c=I[b|0];break R}c=La(i)}b=(c|0)==46;m=c-48|0;if(b|m>>>0<10){continue}break}}j=n?j:h;k=n?k:g;if(!(!l|(c&-33)!=69)){p=jj(i,d);b=pa;t=b;S:{if(p|(b|0)!=-2147483648){break S}if(!d){break M}p=0;t=0;if(!H[i+104>>2]){break S}H[i+4>>2]=H[i+4>>2]-1}if(!l){break N}m=k+t|0;b=j+p|0;m=b>>>0

>>0?m+1|0:m;j=b;k=m;break L}b=!l;if((c|0)<0){break O}}if(!H[i+104>>2]){break O}H[i+4>>2]=H[i+4>>2]-1}if(!b){break L}}H[6070]=28}h=0;g=0;kc(i,0,0);c=0;b=0;break K}b=H[e+784>>2];if(!b){wc(e,+(o|0)*0);h=H[e>>2];g=H[e+4>>2];c=H[e+12>>2];b=H[e+8>>2];break K}if(!((h|0)!=(j|0)|(g|0)!=(k|0)|((g|0)>0?1:(g|0)>=0?h>>>0>9:0)|(b>>>z|0?(z|0)<=30:0))){Qb(e+48|0,o);Hd(e+32|0,b);Ta(e+16|0,H[e+48>>2],H[e+52>>2],H[e+56>>2],H[e+60>>2],H[e+32>>2],H[e+36>>2],H[e+40>>2],H[e+44>>2]);h=H[e+16>>2];g=H[e+20>>2];c=H[e+28>>2];b=H[e+24>>2];break K}if((k|0)>0?1:(k|0)>=0?j>>>0>(A|0)/-2>>>0:0){H[6070]=68;Qb(e+96|0,o);Ta(e+80|0,H[e+96>>2],H[e+100>>2],H[e+104>>2],H[e+108>>2],-1,-1,-1,2147418111);Ta(e- -64|0,H[e+80>>2],H[e+84>>2],H[e+88>>2],H[e+92>>2],-1,-1,-1,2147418111);h=H[e+64>>2];g=H[e+68>>2];c=H[e+76>>2];b=H[e+72>>2];break K}b=A-226|0;c=j>>>0>>0;b=b>>31;if((b|0)>(k|0)?1:(k|0)<=(b|0)?c:0){H[6070]=68;Qb(e+144|0,o);Ta(e+128|0,H[e+144>>2],H[e+148>>2],H[e+152>>2],H[e+156>>2],0,0,0,65536);Ta(e+112|0,H[e+128>>2],H[e+132>>2],H[e+136>>2],H[e+140>>2],0,0,0,65536);h=H[e+112>>2];g=H[e+116>>2];c=H[e+124>>2];b=H[e+120>>2];break K}if(w){if((w|0)<=8){b=(e+784|0)+(f<<2)|0;i=H[b>>2];while(1){i=N(i,10);w=w+1|0;if((w|0)!=9){continue}break}H[b>>2]=i}f=f+1|0}T:{n=j;if((y|0)>(j|0)|(y|0)>=9|(j|0)>17){break T}if((n|0)==9){Qb(e+192|0,o);Hd(e+176|0,H[e+784>>2]);Ta(e+160|0,H[e+192>>2],H[e+196>>2],H[e+200>>2],H[e+204>>2],H[e+176>>2],H[e+180>>2],H[e+184>>2],H[e+188>>2]);h=H[e+160>>2];g=H[e+164>>2];c=H[e+172>>2];b=H[e+168>>2];break K}if((n|0)<=8){Qb(e+272|0,o);Hd(e+256|0,H[e+784>>2]);Ta(e+240|0,H[e+272>>2],H[e+276>>2],H[e+280>>2],H[e+284>>2],H[e+256>>2],H[e+260>>2],H[e+264>>2],H[e+268>>2]);Qb(e+224|0,H[(0-n<<2)+8608>>2]);lj(e+208|0,H[e+240>>2],H[e+244>>2],H[e+248>>2],H[e+252>>2],H[e+224>>2],H[e+228>>2],H[e+232>>2],H[e+236>>2]);h=H[e+208>>2];g=H[e+212>>2];c=H[e+220>>2];b=H[e+216>>2];break K}b=(N(n,-3)+z|0)+27|0;c=H[e+784>>2];if(c>>>b|0?(b|0)<=30:0){break T}Qb(e+352|0,o);Hd(e+336|0,c);Ta(e+320|0,H[e+352>>2],H[e+356>>2],H[e+360>>2],H[e+364>>2],H[e+336>>2],H[e+340>>2],H[e+344>>2],H[e+348>>2]);Qb(e+304|0,H[(n<<2)+8536>>2]);Ta(e+288|0,H[e+320>>2],H[e+324>>2],H[e+328>>2],H[e+332>>2],H[e+304>>2],H[e+308>>2],H[e+312>>2],H[e+316>>2]);h=H[e+288>>2];g=H[e+292>>2];c=H[e+300>>2];b=H[e+296>>2];break K}while(1){c=f;f=f-1|0;if(!H[(e+784|0)+(f<<2)>>2]){continue}break}w=0;b=(n|0)%9|0;U:{if(!b){b=0;break U}d=(n|0)>-1?b:b+9|0;V:{if(!c){b=0;c=0;break V}g=H[(0-d<<2)+8608>>2];h=1e9/(g|0)|0;m=0;i=0;b=0;while(1){j=m;k=(e+784|0)+(i<<2)|0;m=H[k>>2];l=(m>>>0)/(g>>>0)|0;j=j+l|0;H[k>>2]=j;j=!j&(b|0)==(i|0);b=j?b+1&2047:b;n=j?n-9|0:n;m=N(h,m-N(g,l)|0);i=i+1|0;if((i|0)!=(c|0)){continue}break}if(!m){break V}H[(e+784|0)+(c<<2)>>2]=m;c=c+1|0}n=(n-d|0)+9|0}while(1){h=(e+784|0)+(b<<2)|0;W:{while(1){if((n|0)!=36|K[h>>2]>=10384593?(n|0)>=36:0){break W}l=c+2047|0;m=0;while(1){k=m;g=l&2047;l=(e+784|0)+(g<<2)|0;d=H[l>>2];m=d>>>3|0;j=d<<29;d=k+j|0;m=d>>>0>>0?m+1|0:m;j=d;k=m;if(!k&j>>>0<1000000001){m=0}else{m=Fq(j,k,1e9);j=j-Eq(m,pa,1e9,0)|0}H[l>>2]=j;c=(g|0)!=(c-1&2047)?c:(b|0)==(g|0)?c:j?c:g;l=g-1|0;if((b|0)!=(g|0)){continue}break}w=w-29|0;if(!m){continue}break}b=b-1&2047;if((c|0)==(b|0)){d=(e+784|0)+((c+2046&2047)<<2)|0;c=c-1&2047;H[d>>2]=H[d>>2]|H[(e+784|0)+(c<<2)>>2]}n=n+9|0;H[(e+784|0)+(b<<2)>>2]=m;continue}break}X:{Y:while(1){d=c+1&2047;j=(e+784|0)+((c-1&2047)<<2)|0;while(1){g=(n|0)>45?9:1;Z:{while(1){l=b;i=0;_:{while(1){$:{b=i+l&2047;if((b|0)==(c|0)){break $}b=H[(e+784|0)+(b<<2)>>2];h=H[(i<<2)+8560>>2];if(b>>>0>>0){break $}if(b>>>0>h>>>0){break _}i=i+1|0;if((i|0)!=4){continue}}break}if((n|0)!=36){break _}j=0;k=0;i=0;h=0;g=0;while(1){b=i+l&2047;if((b|0)==(c|0)){c=c+1&2047;H[(e+(c<<2)|0)+780>>2]=0}Ta(e+768|0,j,k,h,g,0,0,1342177280,1075633366);Hd(e+752|0,H[(e+784|0)+(b<<2)>>2]);Lb(e+736|0,H[e+768>>2],H[e+772>>2],H[e+776>>2],H[e+780>>2],H[e+752>>2],H[e+756>>2],H[e+760>>2],H[e+764>>2]);h=H[e+744>>2];g=H[e+748>>2];j=H[e+736>>2];k=H[e+740>>2];i=i+1|0;if((i|0)!=4){continue}break}Qb(e+720|0,o);Ta(e+704|0,j,k,h,g,H[e+720>>2],H[e+724>>2],H[e+728>>2],H[e+732>>2]);h=H[e+712>>2];g=H[e+716>>2];j=0;k=0;p=H[e+704>>2];t=H[e+708>>2];n=w+113|0;d=n-A|0;m=(d|0)<(z|0);b=m?(d|0)>0?d:0:z;if((b|0)<=112){break Z}break X}w=g+w|0;b=c;if((l|0)==(b|0)){continue}break}k=1e9>>>g|0;m=-1<>2];h=h+(i>>>g|0)|0;H[f>>2]=h;h=!h&(b|0)==(l|0);b=h?b+1&2047:b;n=h?n-9|0:n;i=N(k,i&m);l=l+1&2047;if((l|0)!=(c|0)){continue}break}if(!i){continue}if((b|0)!=(d|0)){H[(e+784|0)+(c<<2)>>2]=i;c=d;continue Y}H[j>>2]=H[j>>2]|1;b=d;continue}break}break}wc(e+656|0,ef(225-b|0));nj(e+688|0,H[e+656>>2],H[e+660>>2],H[e+664>>2],H[e+668>>2],p,t,h,g);x=H[e+696>>2];u=H[e+700>>2];D=H[e+688>>2];E=H[e+692>>2];wc(e+640|0,ef(113-b|0));Cg(e+672|0,p,t,h,g,H[e+640>>2],H[e+644>>2],H[e+648>>2],H[e+652>>2]);j=H[e+672>>2];k=H[e+676>>2];q=H[e+680>>2];r=H[e+684>>2];fg(e+624|0,p,t,h,g,j,k,q,r);Lb(e+608|0,D,E,x,u,H[e+624>>2],H[e+628>>2],H[e+632>>2],H[e+636>>2]);h=H[e+616>>2];g=H[e+620>>2];p=H[e+608>>2];t=H[e+612>>2]}f=l+4&2047;aa:{if((f|0)==(c|0)){break aa}f=H[(e+784|0)+(f<<2)>>2];ba:{if(f>>>0<=499999999){if(!((l+5&2047)==(c|0)?f:1)){break ba}wc(e+496|0,+(o|0)*.25);Lb(e+480|0,j,k,q,r,H[e+496>>2],H[e+500>>2],H[e+504>>2],H[e+508>>2]);q=H[e+488>>2];r=H[e+492>>2];j=H[e+480>>2];k=H[e+484>>2];break ba}if((f|0)!=5e8){wc(e+592|0,+(o|0)*.75);Lb(e+576|0,j,k,q,r,H[e+592>>2],H[e+596>>2],H[e+600>>2],H[e+604>>2]);q=H[e+584>>2];r=H[e+588>>2];j=H[e+576>>2];k=H[e+580>>2];break ba}G=+(o|0);if((l+5&2047)==(c|0)){wc(e+528|0,G*.5);Lb(e+512|0,j,k,q,r,H[e+528>>2],H[e+532>>2],H[e+536>>2],H[e+540>>2]);q=H[e+520>>2];r=H[e+524>>2];j=H[e+512>>2];k=H[e+516>>2];break ba}wc(e+560|0,G*.75);Lb(e+544|0,j,k,q,r,H[e+560>>2],H[e+564>>2],H[e+568>>2],H[e+572>>2]);q=H[e+552>>2];r=H[e+556>>2];j=H[e+544>>2];k=H[e+548>>2]}if((b|0)>111){break aa}Cg(e+464|0,j,k,q,r,0,0,0,1073676288);if(gd(H[e+464>>2],H[e+468>>2],H[e+472>>2],H[e+476>>2],0,0,0,0)){break aa}Lb(e+448|0,j,k,q,r,0,0,0,1073676288);q=H[e+456>>2];r=H[e+460>>2];j=H[e+448>>2];k=H[e+452>>2]}Lb(e+432|0,p,t,h,g,j,k,q,r);fg(e+416|0,H[e+432>>2],H[e+436>>2],H[e+440>>2],H[e+444>>2],D,E,x,u);h=H[e+424>>2];g=H[e+428>>2];p=H[e+416>>2];t=H[e+420>>2];ca:{if((-2-B|0)>=(n&2147483647)){break ca}H[e+408>>2]=h;H[e+412>>2]=g&2147483647;H[e+400>>2]=p;H[e+404>>2]=t;Ta(e+384|0,p,t,h,g,0,0,0,1073610752);u=H[e+400>>2];x=H[e+404>>2];f=H[e+408>>2];n=H[e+412>>2];c=gg(u,x,f,n,1081081856);l=(c|0)<0;i=l;h=i?h:H[e+392>>2];g=i?g:H[e+396>>2];p=i?p:H[e+384>>2];t=i?t:H[e+388>>2];w=((c|0)>-1)+w|0;if((w+110|0)<=(J|0)){if((((gg(u,x,f,n,1081081856)|0)<0?m:m&(b|0)!=(d|0))|0)!=1){break ca}if(!gd(j,k,q,r,0,0,0,0)){break ca}}H[6070]=68}mj(e+368|0,p,t,h,g,w);h=H[e+368>>2];g=H[e+372>>2];c=H[e+380>>2];b=H[e+376>>2]}H[s+32>>2]=h;H[s+36>>2]=g;H[s+40>>2]=b;H[s+44>>2]=c;oa=e+8976|0;j=H[s+40>>2];k=H[s+44>>2];h=H[s+32>>2];g=H[s+36>>2];break a;case 3:break j;default:break m}}if(H[b+104>>2]){H[b+4>>2]=H[b+4>>2]-1}break i}da:{c=H[b+4>>2];ea:{if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break ea}c=La(b)}if((c|0)==40){f=1;break da}k=2147450880;if(!H[b+104>>2]){break a}H[b+4>>2]=H[b+4>>2]-1;break a}while(1){c=H[b+4>>2];fa:{if(c>>>0>2]){H[b+4>>2]=c+1;c=I[c|0];break fa}c=La(b)}if(c-97>>>0>=26?c-48>>>0<10|c-65>>>0<26|(c|0)==95:1){f=f+1|0;continue}break}k=2147450880;if((c|0)==41){break a}c=H[b+104>>2];if(c){H[b+4>>2]=H[b+4>>2]-1}if(d){if(!f){break a}while(1){f=f-1|0;if(c){H[b+4>>2]=H[b+4>>2]-1}if(f){continue}break}break a}}H[6070]=28;kc(b,0,0)}k=0}H[a>>2]=h;H[a+4>>2]=g;H[a+8>>2]=j;H[a+12>>2]=k;oa=s+48|0}function co(a){a=a|0;var 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;c=oa-752|0;oa=c;f=c+496|0;e=f;H[e>>2]=7640;Ea(e+48|0);b=oa-16|0;oa=b;if(!I[21784]){F[21784]=1;H[b+12>>2]=21924;ya(21788,b+12|0);H[b+12>>2]=21936;ya(21788,b+12|0);H[b+12>>2]=21948;ya(21788,b+12|0);H[b+12>>2]=21972;ya(21788,b+12|0);H[b+12>>2]=22644;ya(21788,b+12|0);H[b+12>>2]=22656;ya(21788,b+12|0);H[b+12>>2]=22668;ya(21788,b+12|0);H[b+12>>2]=22680;ya(21788,b+12|0);H[b+12>>2]=21960;ya(21788,b+12|0);H[b+12>>2]=22692;ya(21788,b+12|0);H[b+12>>2]=22704;ya(21788,b+12|0);H[b+12>>2]=22716;ya(21788,b+12|0);H[b+12>>2]=21936;ya(21800,b+12|0);H[b+12>>2]=22644;ya(21800,b+12|0);H[b+12>>2]=22656;ya(21800,b+12|0);H[b+12>>2]=22668;ya(21800,b+12|0);H[b+12>>2]=22680;ya(21800,b+12|0);H[b+12>>2]=22692;ya(21800,b+12|0);H[b+12>>2]=22704;ya(21800,b+12|0);H[b+12>>2]=22716;ya(21800,b+12|0);H[b+12>>2]=22728;ya(21812,b+12|0);H[b+12>>2]=22740;ya(21812,b+12|0);H[b+12>>2]=22752;ya(21812,b+12|0);H[b+12>>2]=22764;ya(21812,b+12|0);H[b+12>>2]=22776;ya(21812,b+12|0);H[b+12>>2]=22788;ya(21812,b+12|0);H[b+12>>2]=22800;ya(21812,b+12|0);H[b+12>>2]=22812;ya(21812,b+12|0);H[b+12>>2]=22824;ya(21812,b+12|0);H[b+12>>2]=22836;ya(21812,b+12|0);H[b+12>>2]=22848;ya(21812,b+12|0);H[b+12>>2]=22860;ya(21812,b+12|0);H[b+12>>2]=22872;ya(21812,b+12|0);H[b+12>>2]=22884;ya(21812,b+12|0);H[b+12>>2]=22896;ya(21812,b+12|0);H[b+12>>2]=22908;ya(21812,b+12|0);H[b+12>>2]=22920;ya(21812,b+12|0);H[b+12>>2]=22932;ya(21812,b+12|0);H[b+12>>2]=22944;ya(21812,b+12|0);H[b+12>>2]=22956;ya(21812,b+12|0);H[b+12>>2]=22968;ya(21812,b+12|0);H[b+12>>2]=22980;ya(21812,b+12|0);H[b+12>>2]=22992;ya(21824,b+12|0);H[b+12>>2]=23004;ya(21824,b+12|0);H[b+12>>2]=23016;ya(21824,b+12|0);H[b+12>>2]=23028;ya(21824,b+12|0);H[b+12>>2]=23040;ya(21824,b+12|0);H[b+12>>2]=23052;ya(21824,b+12|0);H[b+12>>2]=23064;ya(21824,b+12|0);H[b+12>>2]=23076;ya(21824,b+12|0);H[b+12>>2]=23088;ya(21824,b+12|0);H[b+12>>2]=23100;ya(21824,b+12|0);H[b+12>>2]=23112;ya(21824,b+12|0);H[b+12>>2]=23124;ya(21824,b+12|0);H[b+12>>2]=23136;ya(21824,b+12|0);H[b+12>>2]=23148;ya(21824,b+12|0);H[b+12>>2]=23160;ya(21824,b+12|0);H[b+12>>2]=23172;ya(21824,b+12|0);H[b+12>>2]=23184;ya(21824,b+12|0);H[b+12>>2]=23196;ya(21824,b+12|0);H[b+12>>2]=23208;ya(21824,b+12|0);H[b+12>>2]=23220;ya(21824,b+12|0);H[b+12>>2]=22008;ya(21836,b+12|0);H[b+12>>2]=22020;ya(21836,b+12|0);H[b+12>>2]=22032;ya(21836,b+12|0);H[b+12>>2]=22044;ya(21836,b+12|0);H[b+12>>2]=22056;ya(21836,b+12|0);H[b+12>>2]=22068;ya(21836,b+12|0);H[b+12>>2]=22080;ya(21836,b+12|0);H[b+12>>2]=22092;ya(21836,b+12|0);H[b+12>>2]=22104;ya(21836,b+12|0);H[b+12>>2]=22116;ya(21836,b+12|0);H[b+12>>2]=22128;ya(21836,b+12|0);H[b+12>>2]=22140;ya(21836,b+12|0);H[b+12>>2]=22152;ya(21836,b+12|0)}oa=b+16|0;G[e+88>>1]=0;Vb(e+4|0,0,44);Nd(e,4);kk(e,40);xg(e,0);he(e,0);F[e+85|0]=0;jk(e,0);ik(e,0);H[f>>2]=7756;Ea(f+148|0);Ea(f+160|0);Ea(f+172|0);b=oa-16|0;oa=b;if(!I[21848]){F[21848]=1;H[b+12>>2]=21924;ya(21852,b+12|0);H[b+12>>2]=21936;ya(21852,b+12|0);H[b+12>>2]=21972;ya(21852,b+12|0);H[b+12>>2]=21948;ya(21852,b+12|0);H[b+12>>2]=22728;ya(21852,b+12|0);H[b+12>>2]=22752;ya(21852,b+12|0);H[b+12>>2]=22740;ya(21852,b+12|0);H[b+12>>2]=22644;ya(21852,b+12|0);H[b+12>>2]=22656;ya(21852,b+12|0);H[b+12>>2]=22992;ya(21852,b+12|0);H[b+12>>2]=23040;ya(21852,b+12|0);H[b+12>>2]=23076;ya(21852,b+12|0);H[b+12>>2]=23004;ya(21852,b+12|0);H[b+12>>2]=23016;ya(21852,b+12|0);H[b+12>>2]=22644;ya(21864,b+12|0);H[b+12>>2]=21936;ya(21864,b+12|0);H[b+12>>2]=22656;ya(21864,b+12|0);H[b+12>>2]=22992;ya(21864,b+12|0);H[b+12>>2]=23040;ya(21864,b+12|0);H[b+12>>2]=23076;ya(21864,b+12|0);H[b+12>>2]=23004;ya(21864,b+12|0);H[b+12>>2]=23016;ya(21864,b+12|0);H[b+12>>2]=22008;ya(21876,b+12|0);H[b+12>>2]=22020;ya(21876,b+12|0);H[b+12>>2]=22032;ya(21876,b+12|0);H[b+12>>2]=21936;ya(21876,b+12|0);H[b+12>>2]=22056;ya(21876,b+12|0);H[b+12>>2]=22068;ya(21876,b+12|0);H[b+12>>2]=22080;ya(21876,b+12|0);H[b+12>>2]=22092;ya(21876,b+12|0);H[b+12>>2]=22104;ya(21876,b+12|0);H[b+12>>2]=22116;ya(21876,b+12|0);H[b+12>>2]=22128;ya(21876,b+12|0);H[b+12>>2]=22140;ya(21876,b+12|0);H[b+12>>2]=22152;ya(21876,b+12|0);H[b+12>>2]=22272;ya(21888,b+12|0);H[b+12>>2]=22284;ya(21888,b+12|0);H[b+12>>2]=22296;ya(21888,b+12|0);H[b+12>>2]=22308;ya(21888,b+12|0);H[b+12>>2]=22320;ya(21888,b+12|0);H[b+12>>2]=22332;ya(21888,b+12|0);H[b+12>>2]=22248;ya(21888,b+12|0);H[b+12>>2]=22260;ya(21888,b+12|0);H[b+12>>2]=22344;ya(21888,b+12|0);H[b+12>>2]=22356;ya(21888,b+12|0);H[b+12>>2]=22368;ya(21888,b+12|0);H[b+12>>2]=22380;ya(21888,b+12|0);H[b+12>>2]=22392;ya(21888,b+12|0);H[b+12>>2]=22404;ya(21888,b+12|0);H[b+12>>2]=22500;ya(21888,b+12|0);H[b+12>>2]=22440;ya(21888,b+12|0);H[b+12>>2]=22452;ya(21888,b+12|0);H[b+12>>2]=22464;ya(21888,b+12|0);H[b+12>>2]=22476;ya(21888,b+12|0);H[b+12>>2]=22488;ya(21888,b+12|0);H[b+12>>2]=22596;ya(21888,b+12|0);H[b+12>>2]=22608;ya(21888,b+12|0);H[b+12>>2]=22224;ya(21888,b+12|0);H[b+12>>2]=22524;ya(21888,b+12|0);H[b+12>>2]=22512;ya(21888,b+12|0);H[b+12>>2]=22536;ya(21888,b+12|0);H[b+12>>2]=22548;ya(21888,b+12|0);H[b+12>>2]=22560;ya(21888,b+12|0);H[b+12>>2]=22572;ya(21888,b+12|0);H[b+12>>2]=22584;ya(21888,b+12|0);H[b+12>>2]=22620;ya(21888,b+12|0);H[b+12>>2]=22788;ya(21900,b+12|0);H[b+12>>2]=22800;ya(21900,b+12|0);H[b+12>>2]=22824;ya(21900,b+12|0);H[b+12>>2]=22860;ya(21900,b+12|0);H[b+12>>2]=23028;ya(21912,b+12|0);H[b+12>>2]=23052;ya(21912,b+12|0);H[b+12>>2]=23064;ya(21912,b+12|0);H[b+12>>2]=23100;ya(21912,b+12|0)}oa=b+16|0;H[f+144>>2]=0;H[f+136>>2]=0;H[f+140>>2]=0;H[f+204>>2]=0;F[f+227|0]=1;F[f+225|0]=1;G[f+234>>1]=0;F[f+209|0]=0;F[f+210|0]=0;F[f+211|0]=0;F[f+212|0]=0;F[f+229|0]=0;m=Sa(c+480|0);l=Sa(c+464|0);j=xa(c+448|0,7628);g=Ea(c+432|0);H[5266]=27752;Ga(21760,2023);a:{if((wa(a)|0)!=-1){n=1;while(1){b:{c:{d:{e:{if(I[Aa(a,h)|0]!=32){if((wa(a)|0)!=(h|0)){break e}}b=d;d=0;if(!b){break b}f:{if(wa(g)>>>0<14){break f}b=xa(c+192|0,2294);e=Ra(g,0,14,b);va(b);if(e){break f}n=0;break c}g:{if(wa(g)>>>0<10){break g}b=xa(c+192|0,2719);e=Ra(g,0,10,b);va(b);if(e){break g}Eb(c+192|0,g,10);Ua(j,c+192|0);va(c+192|0);break c}if(Ma(g,1991)){break d}if(Ma(g,1660)){break d}if(Ma(g,2657)){break d}if(I[Aa(g,0)|0]==45){og(l,g);break c}og(m,g);break c}q=F[Aa(a,h)|0];o=oa-16|0;oa=o;d=oa-16|0;oa=d;e=c+192|0;ng(e);oa=d+16|0;i=wa(g);r=Ca(g);k=oa-16|0;oa=k;b=e;h:{d=i+1|0;if(d>>>0<=4294967279){i:{if(d>>>0<=10){ub(b,i);d=b;break i}p=cd(d)+1|0;d=Na(p);_b(b,d);Zb(b,p);yb(b,i)}Yb(d,r,i);F[k+15|0]=0;nb(d+i|0,k+15|0);oa=k+16|0;break h}Xb();X()}Od(e,q);oa=o+16|0;Ua(g,c+192|0);va(c+192|0);d=1;break b}s=1}Ga(g,7628)}h=h+1|0;if(h>>>0>>0){continue}break}if(!n){break a}}j:{if(of(j)){break j}a=jd(2575);if(!a){break j}a=xa(c+192|0,a);Ua(j,a);va(a)}k:{if(of(j)){break k}a=jd(2648);if(!a){break k}a=xa(c+8|0,a);d=xa(c+416|0,2473);Ue(c+192|0,a,d);Ua(j,c+192|0);va(c+192|0);va(d);va(a)}l:{if(of(j)){break l}a=jd(2620);if(!a){break l}d=xa(c+416|0,jd(2638));a=xa(c+400|0,a);Ue(c+8|0,d,a);b=xa(c+384|0,2473);Ue(c+192|0,c+8|0,b);Ua(j,c+192|0);va(c+192|0);va(b);va(c+8|0);va(a);va(d)}if($b(j)){break a}d=Bj(c+192|0,Ca(j));m:{if(Ui(H[H[d>>2]-12>>2]+(c+192|0)|0)){i=Sa(c+8|0);k=i;b=oa-16|0;oa=b;e=Ea(b);a=d;if((te(a)|0)!=-1){while(1){Ga(e,7628);while(1){n:{Ej(a,b+15|0);o:{p:{q:{r:{h=I[b+15|0];switch(h-32|0){case 0:break n;case 3:break p;case 1:case 2:break q;default:break r}}if((h|0)==13|h-9>>>0<2){break n}}mc(e,1,h<<24>>24);break o}while(1){if((te(a)|0)==-1){break o}Ej(a,b+15|0);if(I[b+15|0]!=10){continue}break}}if((te(a)|0)!=-1){continue}}break}if(wa(e)){og(k,e)}if((te(a)|0)!=-1){continue}break}}va(e);oa=b+16|0;H[c+400>>2]=Ed(i);H[c+384>>2]=Xc(i);a=xa(c+416|0,3200);b=Ii(f,c+400|0,c+384|0,a);va(a);Zf(i);mg(d);if(b){break m}Cj();_(1);X()}mg(d)}ae(d)}H[c+8>>2]=Ed(l);H[c+416>>2]=Xc(l);a=xa(c+192|0,3170);d=Ii(f,c+8|0,c+416|0,a);va(a);s:{t:{u:{if(d){if(s){break u}i=Bj(c+192|0,1235);if(je(H[H[i>>2]-12>>2]+(c+192|0)|0)){break t}a=c+8|0;d=Xe(a+104|0);H[a>>2]=19952;H[d>>2]=19972;b=H[4996];H[a>>2]=b;H[a+H[b-12>>2]>>2]=H[4997];b=a+4|0;pd(a+H[H[a>>2]-12>>2]|0,b);H[a>>2]=19952;H[d>>2]=19972;if(!bh(ah(b),1217,16)){ac(a+H[H[a>>2]-12>>2]|0,4)}if(je(H[H[a>>2]-12>>2]+(c+8|0)|0)){break s}b=a;e=oa-16|0;oa=e;h=Na(12);H[h+8>>2]=0;H[h+4>>2]=i;H[h>>2]=7832;d=f;qa[H[H[d>>2]+8>>2]](d,h);if(qa[H[H[d>>2]+16>>2]](d)|0){while(1){qa[H[H[d>>2]+20>>2]](e,d);Tb(b,e);va(e);if(qa[H[H[d>>2]+16>>2]](d)|0){Ha(b)}if(qa[H[H[d>>2]+16>>2]](d)|0){continue}break}}oa=e+16|0;sd(a);if(!xf(a+4|0)){ac(b+H[H[b>>2]-12>>2]|0,4)}mg(i);_e(a);ae(i);va(g);va(j);Zf(l);Zf(m);qg(f);oa=c+752|0;return 0}Cj();_(1);X()}Dj();za(27584,4927);za(27584,5029);za(27584,7575);Ha(27584);za(27584,7501);za(27584,7075);za(27584,6110);Ha(27584);za(27584,5142);za(27584,6999);za(27584,6294);za(27584,6005);za(27584,6483);Ha(27584);za(27584,5219);za(27584,6988);za(27584,4457);za(27584,6218);Ha(27584);za(27584,3975);za(27584,6130);Ha(27584);za(27584,3287);za(27584,6181);Ha(27584);za(27584,5176);za(27584,6995);za(27584,7231);za(27584,7372);za(27584,5451);Ha(27584);za(27584,7312);za(27584,4506);za(27584,3494);za(27584,6433);Ha(27584);za(27584,7275);za(27584,4506);za(27584,3890);za(27584,5863);Ha(27584);za(27584,3633);za(27584,5536);Ha(27584);za(27584,3666);za(27584,6587);Ha(27584);za(27584,7190);za(27584,4345);za(27584,6070);Ha(27584);za(27584,7149);za(27584,7017);za(27584,6256);Ha(27584);za(27584,3775);za(27584,3991);za(27584,5751);Ha(27584);za(27584,3948);za(27584,3591);Ha(27584);za(27584,5198);za(27584,6996);za(27584,4427);za(27584,6712);Ha(27584);za(27584,4475);za(27584,6650);Ha(27584);za(27584,3550);za(27584,4126);za(27584,5713);Ha(27584);za(27584,3697);za(27584,4667);Ha(27584);za(27584,4043);za(27584,5348);Ha(27584);za(27584,4210);za(27584,5398);za(27584,4404);za(27584,5927);Ha(27584);za(27584,4321);za(27584,5772);Ha(27584);za(27584,3870);za(27584,5834);Ha(27584);za(27584,3734);za(27584,6526);Ha(27584);za(27584,4297);za(27584,7443);za(27584,6777);Ha(27584);za(27584,3754);za(27584,5653);Ha(27584);za(27584,5160);za(27584,7002);za(27584,7353);za(27584,6364);Ha(27584);Ha(za(27584,2267));Ha(za(27584,2840));Ha(za(27584,2907));Ha(27584);za(27584,3304);za(27584,4227);za(27584,5903);Ha(27584);za(27584,4185);za(27584,4068);Ha(27584);za(27584,4094);za(27584,5e3);Ha(27584);za(27584,4559);za(27584,4598);za(27584,3807);Ha(27584);za(27584,5317);za(27584,6994);za(27584,5248);za(27584,3439);za(27584,5505);za(27584,4858);za(27584,6894);za(27584,4789);za(27584,6825);za(27584,4723);za(27584,5600);za(27584,3346);za(27584,6954);Ha(27584);_(1);X()}cg(3137,1235);X()}cg(2360,1217);X()}function cb(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=oa-16|0;oa=m;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(a>>>0<=244){f=H[7133];i=a>>>0<11?16:a+11&-8;c=i>>>3|0;b=f>>>c|0;if(b&3){d=c+((b^-1)&1)|0;b=d<<3;e=H[b+28580>>2];a=e+8|0;c=H[e+8>>2];b=b+28572|0;m:{if((c|0)==(b|0)){H[7133]=Gq(-2,d)&f;break m}H[c+12>>2]=b;H[b+8>>2]=c}b=d<<3;H[e+4>>2]=b|3;b=b+e|0;H[b+4>>2]=H[b+4>>2]|1;break a}k=H[7135];if(k>>>0>=i>>>0){break l}if(b){a=2<>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;c=(c|a)+(b>>>a|0)|0;a=c<<3;g=H[a+28580>>2];b=H[g+8>>2];a=a+28572|0;n:{if((b|0)==(a|0)){f=Gq(-2,c)&f;H[7133]=f;break n}H[b+12>>2]=a;H[a+8>>2]=b}a=g+8|0;H[g+4>>2]=i|3;d=g+i|0;b=c<<3;e=b-i|0;H[d+4>>2]=e|1;H[b+g>>2]=e;if(k){b=k>>>3|0;c=(b<<3)+28572|0;g=H[7138];b=1<>2]}H[c+8>>2]=g;H[b+12>>2]=g;H[g+12>>2]=c;H[g+8>>2]=b}H[7138]=d;H[7135]=e;break a}h=H[7134];if(!h){break l}b=(h&0-h)-1|0;a=b>>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;b=H[((c|a)+(b>>>a|0)<<2)+28836>>2];d=(H[b+4>>2]&-8)-i|0;c=b;while(1){p:{a=H[c+16>>2];if(!a){a=H[c+20>>2];if(!a){break p}}c=(H[a+4>>2]&-8)-i|0;e=c>>>0>>0;d=e?c:d;b=e?a:b;c=a;continue}break}j=b+i|0;if(j>>>0<=b>>>0){break k}l=H[b+24>>2];e=H[b+12>>2];if((e|0)!=(b|0)){a=H[b+8>>2];H[a+12>>2]=e;H[e+8>>2]=a;break b}c=b+20|0;a=H[c>>2];if(!a){a=H[b+16>>2];if(!a){break j}c=b+16|0}while(1){g=c;e=a;c=a+20|0;a=H[c>>2];if(a){continue}c=e+16|0;a=H[e+16>>2];if(a){continue}break}H[g>>2]=0;break b}i=-1;if(a>>>0>4294967231){break l}a=a+11|0;i=a&-8;j=H[7134];if(!j){break l}d=0-i|0;f=0;q:{if(i>>>0<256){break q}f=31;if(i>>>0>16777215){break q}a=a>>>8|0;g=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(c|g))|0;f=(a<<1|i>>>a+21&1)+28|0}c=H[(f<<2)+28836>>2];r:{s:{t:{if(!c){a=0;break t}a=0;b=i<<((f|0)==31?0:25-(f>>>1|0)|0);while(1){u:{g=(H[c+4>>2]&-8)-i|0;if(g>>>0>=d>>>0){break u}e=c;d=g;if(d){break u}d=0;a=c;break s}g=H[c+20>>2];c=H[((b>>>29&4)+c|0)+16>>2];a=g?(g|0)==(c|0)?a:g:a;b=b<<1;if(c){continue}break}}if(!(a|e)){e=0;a=2<>>12&16;c=a;b=b>>>a|0;a=b>>>5&8;c=c|a;b=b>>>a|0;a=b>>>2&4;c=c|a;b=b>>>a|0;a=b>>>1&2;c=c|a;b=b>>>a|0;a=b>>>1&1;a=H[((c|a)+(b>>>a|0)<<2)+28836>>2]}if(!a){break r}}while(1){b=(H[a+4>>2]&-8)-i|0;c=b>>>0>>0;d=c?b:d;e=c?a:e;b=H[a+16>>2];if(b){a=b}else{a=H[a+20>>2]}if(a){continue}break}}if(!e|H[7135]-i>>>0<=d>>>0){break l}h=e+i|0;if(h>>>0<=e>>>0){break k}f=H[e+24>>2];b=H[e+12>>2];if((e|0)!=(b|0)){a=H[e+8>>2];H[a+12>>2]=b;H[b+8>>2]=a;break c}c=e+20|0;a=H[c>>2];if(!a){a=H[e+16>>2];if(!a){break i}c=e+16|0}while(1){g=c;b=a;c=a+20|0;a=H[c>>2];if(a){continue}c=b+16|0;a=H[b+16>>2];if(a){continue}break}H[g>>2]=0;break c}c=H[7135];if(c>>>0>=i>>>0){d=H[7138];b=c-i|0;v:{if(b>>>0>=16){H[7135]=b;a=d+i|0;H[7138]=a;H[a+4>>2]=b|1;H[c+d>>2]=b;H[d+4>>2]=i|3;break v}H[7138]=0;H[7135]=0;H[d+4>>2]=c|3;a=c+d|0;H[a+4>>2]=H[a+4>>2]|1}a=d+8|0;break a}h=H[7136];if(h>>>0>i>>>0){b=h-i|0;H[7136]=b;c=H[7139];a=c+i|0;H[7139]=a;H[a+4>>2]=b|1;H[c+4>>2]=i|3;a=c+8|0;break a}a=0;j=i+47|0;b=j;if(H[7251]){c=H[7253]}else{H[7254]=-1;H[7255]=-1;H[7252]=4096;H[7253]=4096;H[7251]=m+12&-16^1431655768;H[7256]=0;H[7244]=0;c=4096}g=b+c|0;e=0-c|0;c=g&e;if(c>>>0<=i>>>0){break a}d=H[7243];if(d){b=H[7241];f=b+c|0;if(d>>>0>>0|b>>>0>=f>>>0){break a}}if(I[28976]&4){break f}w:{x:{d=H[7139];if(d){a=28980;while(1){b=H[a>>2];if(d>>>0>2]>>>0?b>>>0<=d>>>0:0){break x}a=H[a+8>>2];if(a){continue}break}}b=_c(0);if((b|0)==-1){break g}f=c;d=H[7252];a=d-1|0;if(a&b){f=(c-b|0)+(a+b&0-d)|0}if(f>>>0<=i>>>0|f>>>0>2147483646){break g}d=H[7243];if(d){a=H[7241];e=a+f|0;if(d>>>0>>0|a>>>0>=e>>>0){break g}}a=_c(f);if((b|0)!=(a|0)){break w}break e}f=e&g-h;if(f>>>0>2147483646){break g}b=_c(f);if((b|0)==(H[a>>2]+H[a+4>>2]|0)){break h}a=b}if(!((a|0)==-1|i+48>>>0<=f>>>0)){b=H[7253];b=b+(j-f|0)&0-b;if(b>>>0>2147483646){b=a;break e}if((_c(b)|0)!=-1){f=b+f|0;b=a;break e}_c(0-f|0);break g}b=a;if((a|0)!=-1){break e}break g}X()}e=0;break b}b=0;break c}if((b|0)!=-1){break e}}H[7244]=H[7244]|4}if(c>>>0>2147483646){break d}b=_c(c);a=_c(0);if((b|0)==-1|(a|0)==-1|a>>>0<=b>>>0){break d}f=a-b|0;if(f>>>0<=i+40>>>0){break d}}a=H[7241]+f|0;H[7241]=a;if(a>>>0>K[7242]){H[7242]=a}y:{z:{A:{g=H[7139];if(g){a=28980;while(1){d=H[a>>2];c=H[a+4>>2];if((d+c|0)==(b|0)){break A}a=H[a+8>>2];if(a){continue}break}break z}a=H[7137];if(!(a>>>0<=b>>>0?a:0)){H[7137]=b}a=0;H[7246]=f;H[7245]=b;H[7141]=-1;H[7142]=H[7251];H[7248]=0;while(1){d=a<<3;c=d+28572|0;H[d+28580>>2]=c;H[d+28584>>2]=c;a=a+1|0;if((a|0)!=32){continue}break}d=f-40|0;a=b+8&7?-8-b&7:0;c=d-a|0;H[7136]=c;a=a+b|0;H[7139]=a;H[a+4>>2]=c|1;H[(b+d|0)+4>>2]=40;H[7140]=H[7255];break y}if(I[a+12|0]&8|d>>>0>g>>>0|b>>>0<=g>>>0){break z}H[a+4>>2]=c+f;a=g+8&7?-8-g&7:0;c=a+g|0;H[7139]=c;b=H[7136]+f|0;a=b-a|0;H[7136]=a;H[c+4>>2]=a|1;H[(b+g|0)+4>>2]=40;H[7140]=H[7255];break y}if(K[7137]>b>>>0){H[7137]=b}c=b+f|0;a=28980;B:{C:{D:{E:{F:{G:{while(1){if((c|0)!=H[a>>2]){a=H[a+8>>2];if(a){continue}break G}break}if(!(I[a+12|0]&8)){break F}}a=28980;while(1){c=H[a>>2];if(c>>>0<=g>>>0){e=c+H[a+4>>2]|0;if(e>>>0>g>>>0){break E}}a=H[a+8>>2];continue}}H[a>>2]=b;H[a+4>>2]=H[a+4>>2]+f;j=(b+8&7?-8-b&7:0)+b|0;H[j+4>>2]=i|3;f=c+(c+8&7?-8-c&7:0)|0;h=i+j|0;c=f-h|0;if((g|0)==(f|0)){H[7139]=h;a=H[7136]+c|0;H[7136]=a;H[h+4>>2]=a|1;break C}if(H[7138]==(f|0)){H[7138]=h;a=H[7135]+c|0;H[7135]=a;H[h+4>>2]=a|1;H[a+h>>2]=a;break C}a=H[f+4>>2];if((a&3)==1){g=a&-8;H:{if(a>>>0<=255){d=H[f+8>>2];a=a>>>3|0;b=H[f+12>>2];if((b|0)==(d|0)){H[7133]=H[7133]&Gq(-2,a);break H}H[d+12>>2]=b;H[b+8>>2]=d;break H}i=H[f+24>>2];b=H[f+12>>2];I:{if((f|0)!=(b|0)){a=H[f+8>>2];H[a+12>>2]=b;H[b+8>>2]=a;break I}J:{a=f+20|0;d=H[a>>2];if(d){break J}a=f+16|0;d=H[a>>2];if(d){break J}b=0;break I}while(1){e=a;b=d;a=b+20|0;d=H[a>>2];if(d){continue}a=b+16|0;d=H[b+16>>2];if(d){continue}break}H[e>>2]=0}if(!i){break H}d=H[f+28>>2];a=(d<<2)+28836|0;K:{if(H[a>>2]==(f|0)){H[a>>2]=b;if(b){break K}H[7134]=H[7134]&Gq(-2,d);break H}H[i+(H[i+16>>2]==(f|0)?16:20)>>2]=b;if(!b){break H}}H[b+24>>2]=i;a=H[f+16>>2];if(a){H[b+16>>2]=a;H[a+24>>2]=b}a=H[f+20>>2];if(!a){break H}H[b+20>>2]=a;H[a+24>>2]=b}f=g+f|0;c=c+g|0}H[f+4>>2]=H[f+4>>2]&-2;H[h+4>>2]=c|1;H[c+h>>2]=c;if(c>>>0<=255){a=c>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=h;H[a+12>>2]=h;H[h+12>>2]=b;H[h+8>>2]=a;break C}a=31;if(c>>>0<=16777215){a=c>>>8|0;e=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(d|e))|0;a=(a<<1|c>>>a+21&1)+28|0}H[h+28>>2]=a;H[h+16>>2]=0;H[h+20>>2]=0;e=(a<<2)+28836|0;d=H[7134];b=1<>2]=h;H[h+24>>2]=e;break M}a=c<<((a|0)==31?0:25-(a>>>1|0)|0);b=H[e>>2];while(1){d=b;if((H[b+4>>2]&-8)==(c|0)){break D}b=a>>>29|0;a=a<<1;e=d+(b&4)|0;b=H[e+16>>2];if(b){continue}break}H[e+16>>2]=h;H[h+24>>2]=d}H[h+12>>2]=h;H[h+8>>2]=h;break C}d=f-40|0;a=b+8&7?-8-b&7:0;c=d-a|0;H[7136]=c;a=a+b|0;H[7139]=a;H[a+4>>2]=c|1;H[(b+d|0)+4>>2]=40;H[7140]=H[7255];a=(e+(e-39&7?39-e&7:0)|0)-47|0;c=a>>>0>>0?g:a;H[c+4>>2]=27;a=H[7248];H[c+16>>2]=H[7247];H[c+20>>2]=a;a=H[7246];H[c+8>>2]=H[7245];H[c+12>>2]=a;H[7247]=c+8;H[7246]=f;H[7245]=b;H[7248]=0;a=c+24|0;while(1){H[a+4>>2]=7;b=a+8|0;a=a+4|0;if(b>>>0>>0){continue}break}if((c|0)==(g|0)){break y}H[c+4>>2]=H[c+4>>2]&-2;e=c-g|0;H[g+4>>2]=e|1;H[c>>2]=e;if(e>>>0<=255){a=e>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=g;H[a+12>>2]=g;H[g+12>>2]=b;H[g+8>>2]=a;break y}a=31;H[g+16>>2]=0;H[g+20>>2]=0;if(e>>>0<=16777215){a=e>>>8|0;d=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(c|d))|0;a=(a<<1|e>>>a+21&1)+28|0}H[g+28>>2]=a;d=(a<<2)+28836|0;c=H[7134];b=1<>2]=g;H[g+24>>2]=d;break O}a=e<<((a|0)==31?0:25-(a>>>1|0)|0);b=H[d>>2];while(1){c=b;if((e|0)==(H[b+4>>2]&-8)){break B}b=a>>>29|0;a=a<<1;d=c+(b&4)|0;b=H[d+16>>2];if(b){continue}break}H[d+16>>2]=g;H[g+24>>2]=c}H[g+12>>2]=g;H[g+8>>2]=g;break y}a=H[d+8>>2];H[a+12>>2]=h;H[d+8>>2]=h;H[h+24>>2]=0;H[h+12>>2]=d;H[h+8>>2]=a}a=j+8|0;break a}a=H[c+8>>2];H[a+12>>2]=g;H[c+8>>2]=g;H[g+24>>2]=0;H[g+12>>2]=c;H[g+8>>2]=a}a=H[7136];if(a>>>0<=i>>>0){break d}b=a-i|0;H[7136]=b;c=H[7139];a=c+i|0;H[7139]=a;H[a+4>>2]=b|1;H[c+4>>2]=i|3;a=c+8|0;break a}H[6070]=48;a=0;break a}P:{if(!f){break P}c=H[e+28>>2];a=(c<<2)+28836|0;Q:{if(H[a>>2]==(e|0)){H[a>>2]=b;if(b){break Q}j=Gq(-2,c)&j;H[7134]=j;break P}H[f+(H[f+16>>2]==(e|0)?16:20)>>2]=b;if(!b){break P}}H[b+24>>2]=f;a=H[e+16>>2];if(a){H[b+16>>2]=a;H[a+24>>2]=b}a=H[e+20>>2];if(!a){break P}H[b+20>>2]=a;H[a+24>>2]=b}R:{if(d>>>0<=15){a=d+i|0;H[e+4>>2]=a|3;a=a+e|0;H[a+4>>2]=H[a+4>>2]|1;break R}H[e+4>>2]=i|3;H[h+4>>2]=d|1;H[d+h>>2]=d;if(d>>>0<=255){a=d>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=h;H[a+12>>2]=h;H[h+12>>2]=b;H[h+8>>2]=a;break R}a=31;if(d>>>0<=16777215){a=d>>>8|0;g=a+1048320>>>16&8;a=a<>>16&4;a=a<>>16&2;a=(a<>>15|0)-(b|(c|g))|0;a=(a<<1|d>>>a+21&1)+28|0}H[h+28>>2]=a;H[h+16>>2]=0;H[h+20>>2]=0;c=(a<<2)+28836|0;T:{b=1<>2]=h;H[h+24>>2]=c;break U}a=d<<((a|0)==31?0:25-(a>>>1|0)|0);i=H[c>>2];while(1){b=i;if((H[b+4>>2]&-8)==(d|0)){break T}c=a>>>29|0;a=a<<1;c=b+(c&4)|0;i=H[c+16>>2];if(i){continue}break}H[c+16>>2]=h;H[h+24>>2]=b}H[h+12>>2]=h;H[h+8>>2]=h;break R}a=H[b+8>>2];H[a+12>>2]=h;H[b+8>>2]=h;H[h+24>>2]=0;H[h+12>>2]=b;H[h+8>>2]=a}a=e+8|0;break a}V:{if(!l){break V}c=H[b+28>>2];a=(c<<2)+28836|0;W:{if(H[a>>2]==(b|0)){H[a>>2]=e;if(e){break W}H[7134]=Gq(-2,c)&h;break V}H[(H[l+16>>2]==(b|0)?16:20)+l>>2]=e;if(!e){break V}}H[e+24>>2]=l;a=H[b+16>>2];if(a){H[e+16>>2]=a;H[a+24>>2]=e}a=H[b+20>>2];if(!a){break V}H[e+20>>2]=a;H[a+24>>2]=e}X:{if(d>>>0<=15){a=d+i|0;H[b+4>>2]=a|3;a=a+b|0;H[a+4>>2]=H[a+4>>2]|1;break X}H[b+4>>2]=i|3;H[j+4>>2]=d|1;H[d+j>>2]=d;if(k){a=k>>>3|0;c=(a<<3)+28572|0;e=H[7138];a=1<>2]}H[c+8>>2]=e;H[a+12>>2]=e;H[e+12>>2]=c;H[e+8>>2]=a}H[7138]=j;H[7135]=d}a=b+8|0}oa=m+16|0;return a|0}function gj(a,b,c){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,y=0,z=0;d=oa-144|0;oa=d;t=Vb(d,0,144);H[t+76>>2]=-1;H[t+44>>2]=a;H[t+32>>2]=147;H[t+84>>2]=a;u=c;c=0;j=oa-304|0;oa=j;e=t;d=b;a=I[b|0];a:{if(!a){break a}b:{c:{d:{e:{while(1){f:{g:{if(Yc(a&255)){while(1){a=d;d=d+1|0;if(Yc(I[a+1|0])){continue}break}kc(e,0,0);while(1){b=H[e+4>>2];h:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break h}b=La(e)}if(Yc(b)){continue}break}d=H[e+4>>2];if(H[e+104>>2]){d=d-1|0;H[e+4>>2]=d}b=d-H[e+8>>2]|0;f=b>>31;k=b;l=m+H[e+124>>2]|0;b=q+H[e+120>>2]|0;l=b>>>0>>0?l+1|0:l;d=b;b=k+b|0;f=f+l|0;q=b;m=b>>>0>>0?f+1|0:f;break g}i:{j:{k:{b=I[d|0];if((b|0)==37){a=I[d+1|0];if((a|0)==42){break k}if((a|0)!=37){break j}}kc(e,0,0);a=((b|0)==37)+d|0;b=H[e+4>>2];l:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break l}b=La(e)}if((b|0)!=I[a|0]){if(H[e+104>>2]){H[e+4>>2]=H[e+4>>2]-1}if((b|0)>-1){break a}s=0;if(v){break a}break c}b=q+1|0;m=b>>>0<1?m+1|0:m;q=b;break g}n=0;a=d+2|0;break i}if(!(!Rb(a)|I[d+2|0]!=36)){a=I[d+1|0]-48|0;b=oa-16|0;H[b+12>>2]=u;a=a>>>0>1?((a<<2)+u|0)-4|0:u;H[b+8>>2]=a+4;n=H[a>>2];a=d+3|0;break i}n=H[u>>2];u=u+4|0;a=d+1|0}s=0;d=0;if(Rb(I[a|0])){while(1){d=(I[a|0]+N(d,10)|0)-48|0;b=I[a+1|0];a=a+1|0;if(Rb(b)){continue}break}}h=I[a|0];if((h|0)==109){c=0;s=(n|0)!=0;h=I[a+1|0];p=0;a=a+1|0}b=a;a=b+1|0;i=3;m:{n:{switch(h-65|0){case 39:k=b+2|0;b=I[b+1|0]==104;a=b?k:a;i=b?-2:-1;break m;case 43:k=b+2|0;b=I[b+1|0]==108;a=b?k:a;i=b?3:1;break m;case 51:case 57:i=1;break m;case 11:i=2;break m;case 41:break m;case 0:case 2:case 4:case 5:case 6:case 18:case 23:case 26:case 32:case 34:case 35:case 36:case 37:case 38:case 40:case 45:case 46:case 47:case 50:case 52:case 55:break n;default:break d}}i=0;a=b}b=I[a|0];f=(b&47)==3;w=f?1:i;r=f?b|32:b;o:{if((r|0)==91){break o}p:{if((r|0)!=110){if((r|0)!=99){break p}d=(d|0)>1?d:1;break o}hj(n,w,q,m);break g}kc(e,0,0);while(1){b=H[e+4>>2];q:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break q}b=La(e)}if(Yc(b)){continue}break}b=H[e+4>>2];if(H[e+104>>2]){b=b-1|0;H[e+4>>2]=b}b=b-H[e+8>>2]|0;f=b;h=b>>31;m=m+H[e+124>>2]|0;b=q+H[e+120>>2]|0;m=b>>>0>>0?m+1|0:m;k=b;b=b+f|0;f=h+m|0;q=b;m=b>>>0>>0?f+1|0:f}k=d;g=d>>31;kc(e,d,g);b=H[e+104>>2];f=H[e+4>>2];r:{if(b>>>0>f>>>0){H[e+4>>2]=f+1;break r}if((La(e)|0)<0){break d}b=H[e+104>>2]}if(b){H[e+4>>2]=H[e+4>>2]-1}b=16;s:{t:{u:{v:{w:{x:{y:{switch(r-88|0){default:b=r-65|0;if(b>>>0>6|!(1<>2]-H[e+8>>2]|0;if(H[e+120>>2]==(0-b|0)&H[e+124>>2]==(0-((b>>31)+((b|0)!=0)|0)|0)){break b}if(!n){break s}b=H[j+8>>2];d=H[j+12>>2];f=H[j>>2];h=H[j+4>>2];switch(w|0){case 2:break u;case 1:break v;case 0:break w;default:break s};case 3:case 11:case 27:if((r&239)==99){Vb(j+32|0,-1,257);F[j+32|0]=0;if((r|0)!=115){break t}F[j+65|0]=0;F[j+46|0]=0;G[j+42>>1]=0;G[j+44>>1]=0;break t}f=I[a+1|0];h=(f|0)==94;Vb(j+32|0,h,257);F[j+32|0]=0;b=h?a+2|0:a+1|0;z:{A:{B:{a=I[(h?2:1)+a|0];if((a|0)!=45){if((a|0)==93){break B}i=(f|0)!=94;a=b;break z}i=(f|0)!=94;F[j+78|0]=i;break A}i=(f|0)!=94;F[j+126|0]=i}a=b+1|0}while(1){b=I[a|0];C:{if((b|0)!=45){if(!b){break d}if((b|0)!=93){break C}break t}b=45;f=I[a+1|0];if(!f|(f|0)==93){break C}h=a+1|0;a=I[a-1|0];D:{if(f>>>0<=a>>>0){b=f;break D}while(1){a=a+1|0;F[a+(j+32|0)|0]=i;b=I[h|0];if(b>>>0>a>>>0){continue}break}}a=h}F[(b+j|0)+33|0]=i;a=a+1|0;continue};case 23:b=8;break x;case 12:case 29:b=10;break x;case 1:case 2:case 4:case 5:case 6:case 7:case 8:case 10:case 16:case 18:case 19:case 20:case 21:case 22:case 25:case 26:case 28:case 30:case 31:break s;case 0:case 24:case 32:break x;case 17:break y}}b=0}g=e;k=0;f=0;h=0;i=0;y=0;x=oa-16|0;oa=x;E:{F:{G:{H:{I:{J:{if(b>>>0<=36){while(1){d=H[g+4>>2];K:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break K}d=La(g)}if(Yc(d)){continue}break}L:{M:{switch(d-43|0){case 0:case 2:break M;default:break L}}y=(d|0)==45?-1:0;d=H[g+4>>2];if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break L}d=La(g)}N:{if(!(b&-17|(d|0)!=48)){d=H[g+4>>2];O:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break O}d=La(g)}if((d&-33)==88){b=16;d=H[g+4>>2];P:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break P}d=La(g)}if(I[d+8641|0]<16){break I}if(!H[g+104>>2]){break F}H[g+4>>2]=H[g+4>>2]-1;break F}if(b){break N}b=8;break I}b=b?b:10;if(b>>>0>I[d+8641|0]){break N}if(H[g+104>>2]){H[g+4>>2]=H[g+4>>2]-1}kc(g,0,0);H[6070]=28;b=0;d=0;break E}if((b|0)!=10){break I}h=d-48|0;if(h>>>0<=9){b=0;while(1){b=N(b,10)+h|0;d=H[g+4>>2];Q:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break Q}d=La(g)}h=d-48|0;if(b>>>0<429496729?h>>>0<=9:0){continue}break}k=b}if(h>>>0>9){break J}i=Eq(k,0,10,0);l=pa;b=h;while(1){d=H[g+4>>2];R:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break R}d=La(g)}h=d-48|0;o=h>>>0>9;f=l;b=b+i|0;f=b>>>0>>0?f+1|0:f;k=b;if((f|0)==429496729&b>>>0>=2576980378|f>>>0>429496729|o){break J}i=Eq(k,f,10,0);l=pa;b=h;if((l|0)==-1&i>>>0<=(b^-1)>>>0|(l|0)!=-1){continue}break}b=10;break H}H[6070]=28;b=0;d=0;break E}b=10;if(h>>>0<=9){break H}break G}if(b-1&b){i=I[d+8641|0];if(i>>>0>>0){while(1){h=N(b,h)+i|0;d=H[g+4>>2];S:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break S}d=La(g)}i=I[d+8641|0];if(h>>>0<119304647?i>>>0>>0:0){continue}break}k=h}if(b>>>0<=i>>>0){break H}h=b;while(1){l=Eq(k,f,h,0);o=pa;i=i&255;if((o|0)==-1&(i^-1)>>>0>>0){break H}f=o;d=i+l|0;f=d>>>0>>0?f+1|0:f;k=d;l=b;d=H[g+4>>2];T:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break T}d=La(g)}i=I[d+8641|0];if(l>>>0<=i>>>0){break H}rb(x,h,0,0,0,k,f,0,0);if(!(H[x+8>>2]|H[x+12>>2])){continue}break}break H}l=F[(N(b,23)>>>5&7)+8897|0];h=I[d+8641|0];if(h>>>0>>0){while(1){i=i<>2];U:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break U}d=La(g)}h=I[d+8641|0];if(i>>>0<134217728?h>>>0>>0:0){continue}break}k=i}if(b>>>0<=h>>>0){break H}i=l;o=i&31;if((i&63)>>>0>=32){l=0;o=-1>>>o|0}else{l=-1>>>o|0;o=(1<>>o}if(!l&k>>>0>o>>>0){break H}while(1){z=h&255;d=i;h=d&31;if((d&63)>>>0>=32){f=k<>>32-h|f<>2];V:{if(d>>>0>2]){H[g+4>>2]=d+1;d=I[d|0];break V}d=La(g)}h=I[d+8641|0];if(z>>>0<=h>>>0){break H}if((f|0)==(l|0)&k>>>0<=o>>>0|f>>>0>>0){continue}break}}if(I[d+8641|0]>=b>>>0){break G}while(1){f=H[g+4>>2];W:{if(f>>>0>2]){H[g+4>>2]=f+1;d=I[f|0];break W}d=La(g)}if(I[d+8641|0]>>0){continue}break}H[6070]=68;y=0;k=-1;f=-1}if(H[g+104>>2]){H[g+4>>2]=H[g+4>>2]-1}if((k|0)==-1&(f|0)==-1){if(!(y|1)){H[6070]=68;b=-2;d=-1;break E}}b=y;h=b^k;d=b;b=h-b|0;k=f;f=d>>31;d=(k^f)-((d>>>0>h>>>0)+f|0)|0;break E}kc(g,0,0);b=0;d=0}oa=x+16|0;f=H[e+4>>2]-H[e+8>>2]|0;if(H[e+120>>2]==(0-f|0)&H[e+124>>2]==(0-((f>>31)+((f|0)!=0)|0)|0)){break b}if(!(!n|(r|0)!=112)){H[n>>2]=b;break s}hj(n,w,b,d);break s}L[n>>2]=ij(f,h,b,d);break s}M[n>>3]=ig(f,h,b,d);break s}H[n>>2]=f;H[n+4>>2]=h;H[n+8>>2]=b;H[n+12>>2]=d;break s}f=(r|0)==99;i=f?d+1|0:31;h=(w|0)!=1;X:{if(!h){b=n;if(s){b=cb(i<<2);if(!b){break e}}H[j+296>>2]=0;H[j+300>>2]=0;d=0;c=s;while(1){p=b;Y:{while(1){b=H[e+4>>2];Z:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break Z}b=La(e)}if(!I[(b+j|0)+33|0]){break Y}F[j+27|0]=b;b=Ve(j+28|0,j+27|0,1,j+296|0);if((b|0)==-2){continue}if((b|0)==-1){break f}if(p){H[(d<<2)+p>>2]=H[j+28>>2];d=d+1|0}if(!(c&(d|0)==(i|0))){continue}break}i=i<<1|1;b=ke(p,i<<2);if(b){continue}break f}break}if(j+296|0?H[j+296>>2]:0){break f}c=0;break X}if(s){d=0;b=cb(i);if(!b){break e}while(1){c=b;while(1){b=H[e+4>>2];_:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break _}b=La(e)}if(!I[(b+j|0)+33|0]){p=0;break X}F[c+d|0]=b;d=d+1|0;if((i|0)!=(d|0)){continue}break}p=0;i=i<<1|1;b=ke(c,i);if(b){continue}break}break d}d=0;if(n){while(1){b=H[e+4>>2];$:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break $}b=La(e)}if(I[(b+j|0)+33|0]){F[d+n|0]=b;d=d+1|0;continue}else{p=0;c=n;break X}}}while(1){b=H[e+4>>2];aa:{if(b>>>0>2]){H[e+4>>2]=b+1;b=I[b|0];break aa}b=La(e)}if(I[(b+j|0)+33|0]){continue}break}c=0;p=0}b=H[e+4>>2];if(H[e+104>>2]){b=b-1|0;H[e+4>>2]=b}i=b-H[e+8>>2]|0;b=i+H[e+120>>2]|0;l=H[e+124>>2]+(i>>31)|0;l=b>>>0>>0?l+1|0:l;if(!(l|b)|((b|0)!=(k|0)|(g|0)!=(l|0)?(r|0)==99:0)){break b}ba:{if(!s){break ba}if(!h){H[n>>2]=p;break ba}H[n>>2]=c}if(f){break s}if(p){H[(d<<2)+p>>2]=0}if(!c){c=0;break s}F[c+d|0]=0}b=H[e+4>>2]-H[e+8>>2]|0;f=b>>31;k=b;m=m+H[e+124>>2]|0;b=q+H[e+120>>2]|0;m=b>>>0>>0?m+1|0:m;d=b;b=k+b|0;m=f+m|0;m=b>>>0>>0?m+1|0:m;q=b;v=((n|0)!=0)+v|0}d=a+1|0;a=I[a+1|0];if(a){continue}break a}break}c=0;break d}c=0;p=0}if(v){break b}}v=-1}if(!s){break a}Ba(c);Ba(p)}oa=j+304|0;oa=t+144|0;return v}function Bq(a,b,c){a=a|0;b=b|0;c=c|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;e=oa+-64|0;oa=e;h=Ea(e+48|0);j=Ea(e+32|0);f=Pa(H[b+24>>2]);H[b+60>>2]=0;u=I[b+69|0];a:{if(u){b:{if((wa(c)|0)<=0){break b}while(1){if(H[b+104>>2]<=(g|0)){break b}if(F[Aa(c,g)|0]>32){break b}g=g+1|0;if((wa(c)|0)>(g|0)){continue}break}}Eb(e+16|0,c,g);break a}H[b+104>>2]=0;c:{if((wa(c)|0)<1){break c}while(1){if(F[Aa(c,H[b+104>>2])|0]>32){break c}d=H[b+104>>2]+1|0;H[b+104>>2]=d;if((wa(c)|0)>(d|0)){continue}break}}cf(e+16|0,c)}Ua(h,e+16|0);va(e+16|0);d:{if(!wa(h)){if(I[b+128|0]){dk(a,b,H[b+120>>2],H[b+124>>2]);break d}Vd(a,h);break d}d=I[Aa(h,0)|0];e:{s=I[7820];f:{g:{if((d|0)==(s|0)){d=nd(h,0,21836);if(I[b+69|0]){break e}if(d){break f}break g}if(I[b+69|0]){break e}}if(!I[b+129|0]){break e}}if(I[Aa(h,0)|0]==(s|0)){d=xa(e,Ca(h)+1|0);cf(e+16|0,d);va(d);h:{i:{if(!I[b+86|0]){break i}d=xa(e,2337);if(Ra(e+16|0,0,6,d)){va(d);break i}g=I[Aa(h,wa(h)-1|0)|0];va(d);if((g|0)!=92){break i}if(!I[b+80|0]){F[b+80|0]=1;d=Na(136);hk(d,b);H[e>>2]=d;xc(H[b+12>>2],e);break h}F[b+79|0]=1;break h}d=xa(e,2037);g=Ra(e+16|0,0,2,d);va(d);if(!g){d=H[b+16>>2];H[e>>2]=Pa(H[b+8>>2]);ya(d,e);d=H[b+20>>2];H[e>>2]=Pa(H[b+12>>2]);ya(d,e);d=H[b+8>>2];g=Na(136);hk(g,b);H[e>>2]=g;ya(d,e);break h}d=xa(e,2217);g=Ra(e+16|0,0,4,d);va(d);if(!g){if(mb(H[b+8>>2])){break h}xc(H[b+12>>2],Qa(H[b+8>>2]));ob(H[b+8>>2]);break h}d=xa(e,2034);g=Ra(e+16|0,0,5,d);va(d);if(g){break h}j:{if(mb(H[b+16>>2])){break j}g=H[Qa(H[b+16>>2])>>2];ob(H[b+16>>2]);if((Pa(H[b+8>>2])|0)<=(g|0)){break j}while(1){d=H[Qa(H[b+8>>2])>>2];ob(H[b+8>>2]);if(d){qa[H[H[d>>2]+4>>2]](d)}if((Pa(H[b+8>>2])|0)>(g|0)){continue}break}}if(mb(H[b+20>>2])){break h}g=H[Qa(H[b+20>>2])>>2];ob(H[b+20>>2]);if((Pa(H[b+12>>2])|0)<=(g|0)){break h}while(1){d=H[Qa(H[b+12>>2])>>2];ob(H[b+12>>2]);if(d){qa[H[H[d>>2]+4>>2]](d)}if((Pa(H[b+12>>2])|0)>(g|0)){continue}break}}va(e+16|0)}k:{l:{if(!wa(h)){F[b+129|0]=0;break l}d=I[Aa(h,wa(h)-1|0)|0]==92;F[b+129|0]=d;if(d){break k}}if(I[b+79|0]|!I[b+80|0]){break k}c=Ea(a);F[b+80|0]=0;a=H[Qa(H[b+12>>2])>>2];ob(H[b+12>>2]);qa[H[H[a>>2]+24>>2]](e+16|0,a,h);Ua(c,e+16|0);va(e+16|0);qa[H[H[a>>2]+4>>2]](a);break d}if(I[b+79|0]|I[b+80|0]){break e}Td(a,c);break d}m:{if(I[b+79|0]){break m}c=H[b+12>>2];if(!c){break m}if(mb(c)){break m}c=a;a=H[Qa(H[b+12>>2])>>2];qa[H[H[a>>2]+24>>2]](c,a,h);break d}g=0;if(!mb(H[b+36>>2])){n=H[Qa(H[b+36>>2])>>2]}v=1;if((f|0)>=1){c=0;while(1){n:{o:{if(I[b+84|0]|!c){break o}if(H[lc(H[b+24>>2],c-1|0)>>2]==22164){break o}if(H[lc(H[b+24>>2],c)>>2]==22164){break n}}g=g+1|0}c=c+1|0;if((f|0)!=(c|0)){continue}break}}k=g-(F[b+87|0]&1)|0;m=wa(h);if((m|0)>=1){o=b+96|0;g=32;c=0;while(1){f=F[Aa(h,c)|0];mc(j,1,f);p:{q:{if(Db(f)){break q}d=i&1;i=0;if(d){break q}r:{s:{t:{u:{d=I[b+69|0];if(!((d|0)!=0|l)){d=xa(e+16|0,2543);q=Ra(h,c,2,d);va(d);if(!q){break u}d=I[b+69|0]}q=(d&255)!=0|l;if(q|(f|0)!=92){break t}g=92;i=1;break p}mc(j,1,92);break s}w=I[b+68|0];if((q^1)&(f|0)==34){if(!w){F[b+68|0]=1;g=34;F[b+112|0]=34;break p}g=34;if(I[b+112|0]!=34){break p}F[b+68|0]=0;break p}if(w){break q}v:{w:{x:{y:{z:{A:{B:{C:{if(!(q&1)){if(!Ra(h,c,2,22188)){break C}d=I[b+69|0]}if(!((d&255)!=0|l)){if(!Ra(h,c,2,22200)){break B}d=I[b+69|0]}if(d&255|l){if(!Ra(h,c,2,22212)){F[b+69|0]=0;mc(j,1,47);c=c+1|0;break q}if(I[b+69|0]){break q}}if(l){g=f;l=1;break p}d=91;D:{E:{switch((f&255)-123|0){case 2:d=93;break D;case 0:break D;default:break E}}l=nd(h,c,21824);i=nd(h,c,21812);if(l){Eb(e+16|0,l,1);Bd(j,e+16|0);va(e+16|0);c=(wa(l)+c|0)-1|0;d=125;if((l|0)!=22992){break D}H[b+72>>2]=H[b+72>>2]-1;break D}if(!i){d=f;break D}Eb(e+16|0,i,1);Bd(j,e+16|0);va(e+16|0);c=(wa(i)+c|0)-1|0;d=123;if(!((i|0)!=22752?(i|0)==22740|(i|0)==22728:1)){break D}H[b+72>>2]=H[b+72>>2]+1}f=I[b+114|0];F[b+114|0]=d;F[b+113|0]=f;if(!(md(d)|(d|0)==44|(d&255)==59)){F[b+116|0]=I[b+115|0];F[b+115|0]=d}f=b;if(I[b+78|0]){F[b+78|0]=0;i=H[Qa(H[b+24>>2])>>2]}else{i=0}H[f+60>>2]=i;F:{G:{H:{I:{J:{f=d&255;switch(f-40|0){case 1:break H;case 0:break I;default:break J}}switch(f-91|0){case 1:break F;case 2:break H;case 0:break I;default:break G}}H[b+96>>2]=H[b+96>>2]+1;f=H[b+40>>2];H[e+16>>2]=Pa(H[b+36>>2]);ya(f,e+16|0);if(H[b+60>>2]){ug(b,h,c,n,H[b+92>>2],1);break w}i=0;ug(b,h,c,n,0,1);break v}f=H[o>>2]-1|0;H[o>>2]=f;if(!f){F[b+87|0]=0;d=32}i=0;if(mb(H[b+40>>2])){break v}f=H[Qa(H[b+40>>2])>>2];ob(H[b+40>>2]);if((Pa(H[b+36>>2])|0)>(f|0)){while(1){ob(H[b+36>>2]);if((Pa(H[b+36>>2])|0)>(f|0)){continue}break}}if(mb(H[b+44>>2])){break v}f=H[Qa(H[b+44>>2])>>2];ob(H[b+44>>2]);n=v?f:c?n:f;break v}if((f|0)==123){break x}}K:{if((g&255)!=32){break K}g=nd(h,c,21788);H[e>>2]=g;if(!g){break K}F[b+78|0]=1;g=0;if(!mb(H[b+28>>2])){g=H[Qa(H[b+28>>2])>>2]}f=H[e>>2];if(!((f|0)!=21924|(p|0)!=21936)){ob(H[b+24>>2]);break y}if(!g|(f|0)!=21936){break y}f=tg(g,21924);if((f|0)==-1){break y}i=0;f=Pa(g)+(f^-1)|0;if((f|0)>0){break A}break z}i=1;L:{M:{N:{O:{P:{Q:{switch(f-58|0){case 0:if(H[o>>2]){break L}R:{switch(I[b+113|0]-123|0){case 0:case 2:break L;default:break R}}F[b+114|0]=59;if(H[b+72>>2]>=1){F[b+78|0]=1;f=H[b+24>>2];p=22728;H[e+16>>2]=22728;ya(f,e+16|0);break L}if(I[b+76|0]){F[b+76|0]=0;break L}k=I[b+85|0]?k-1|0:0;break L;default:if(H[o>>2]<1){break P}i=0;if((d|0)!=44){break P}break;case 5:break M;case 1:break Q}}S:{if(mb(H[b+40>>2])){break S}if((H[Qa(H[b+40>>2])>>2]+(H[b+96>>2]>0)|0)>=(Pa(H[b+36>>2])|0)){break S}while(1){ob(H[b+36>>2]);if((H[Qa(H[b+40>>2])>>2]+(H[b+96>>2]>0)|0)<(Pa(H[b+36>>2])|0)){continue}break}}if(!i){break P}if((d|0)!=125?H[o>>2]:0){break L}F[b+76|0]=0;if((d|0)==125){break O}break N}if((d|0)!=125){break L}F[b+76|0]=0}if(!mb(H[b+40>>2])){ob(H[b+40>>2])}if(!mb(H[b+32>>2])){H[b+96>>2]=H[Qa(H[b+32>>2])>>2];ob(H[b+32>>2])}t=t+1|0;d=32;x=1;if((tg(H[b+24>>2],22164)|0)==-1){break N}if(H[Qa(H[b+24>>2])>>2]!=22164){while(1){ob(H[b+24>>2]);if(H[Qa(H[b+24>>2])>>2]!=22164){continue}break}}ob(H[b+24>>2]);if(mb(H[b+28>>2])){break N}f=H[Qa(H[b+28>>2])>>2];ob(H[b+28>>2]);if(!f){break N}Ba(Va(f))}T:{if(mb(H[Qa(H[b+28>>2])>>2])){break T}if(mb(H[Qa(H[b+28>>2])>>2])){break T}while(1){ob(H[Qa(H[b+28>>2])>>2]);if(!mb(H[Qa(H[b+28>>2])>>2])){continue}break}}U:{if(mb(H[b+24>>2])){break U}while(1){if(H[Qa(H[b+24>>2])>>2]==22164){break U}xc(H[Qa(H[b+28>>2])>>2],Qa(H[b+24>>2]));ob(H[b+24>>2]);if(!mb(H[b+24>>2])){continue}break}}i=0;if((d|0)!=59){break v}F[b+77|0]=0;d=59;break r}F[b+76|0]=1}i=0;if(I[b+77|0]|c){break v}c=0;if(!(H[b+96>>2]|H[b+72>>2])){g=1;i=-1;if(md(F[Aa(h,0)|0])){V:{W:{while(1){c=c+1|0;if((m|0)==(c|0)){break W}if(md(F[Aa(h,c)|0])){continue}break}f=c;break V}f=m}g=(c|0)<(m|0)}else{f=0}g=f-(g^1)|0;X:{if((m|0)<=(g|0)){break X}while(1){if(!Db(F[Aa(h,g)|0])){i=0;break X}g=g+1|0;if((m|0)>(g|0)){continue}break}g=m}c=g+i|0;f=xa(e+16|0,Ca(h)+c|0);ug(b,f,0,n,c,0);va(f);F[b+77|0]=1;c=0}i=0;break r}l=1;mc(j,1,47);c=c+1|0;break q}F[b+69|0]=1;mc(j,1,42);break s}while(1){xc(H[b+24>>2],Qa(g));ob(g);i=i+1|0;if((f|0)!=(i|0)){continue}break}}k=(x?0:f)+k|0}xc(H[b+24>>2],e);if((tg(21800,H[e>>2])|0)==-1){F[b+87|0]=1}p=H[e>>2];Eb(e+16|0,p,1);Bd(j,e+16|0);va(e+16|0);c=(wa(H[e>>2])+c|0)-1|0;break w}xc(H[b+32>>2],o);d=H[b+40>>2];H[e+16>>2]=Pa(H[b+36>>2]);ya(d,e+16|0);i=0;F[b+77|0]=0;H[b+96>>2]=0;d=H[b+28>>2];f=Na(12);Sa(f);H[e+16>>2]=f;ya(d,e+16|0);d=H[b+24>>2];p=22164;H[e+16>>2]=22164;ya(d,e+16|0);r=r+1|0;d=123;break r}i=0}break r}c=c+1|0;d=f}g=d;l=0;break p}g=f}v=0;c=c+1|0;if((m|0)>(c|0)){continue}break}}d=nd(j,0,21812);f=nd(j,0,21824);Y:{if(u){break Y}Z:{if(I[b+84|0]){break Z}if(!wa(j)|!d|((r|0)==(t|0)?(r|0)>=1:0)){break Z}if(Pa(H[b+24>>2])>>>0>=2){c=H[b+24>>2];if(H[lc(c,Pa(c)-2|0)>>2]==22164){break Z}}k=k-1|0;break Y}if(!(!wa(j)|!f)){k=k-1|0;break Y}if(!wa(j)|(r|0)<1|(r|0)!=(t|0)){break Y}c=H[b+64>>2];k=k-((c|0)!=0&(c|0)!=22164)|0}c=(k|0)>0?k:0;_:{if(!I[b+83|0]){break _}if(!wa(j)){break _}c=((d|f)!=0)+c|0}if(I[b+79|0]){if(I[Aa(j,0)|0]==(s|0)){d=xa(e,Ca(j)+1|0);cf(e+16|0,d);va(d);d=xa(e,2337);f=Ra(e+16|0,0,6,d);va(d);if(!f){$:{if(!mb(H[b+36>>2])){if(H[Qa(H[b+36>>2])>>2]>0){break $}}c=c-1|0}H[b+132>>2]=c}va(e+16|0)}c=c-H[b+132>>2]|0}H[b+120>>2]=n;c=(c|0)>0?c:0;H[b+124>>2]=c;d=e;f=b;if(I[b+89|0]){g=H[b+100>>2];m=(n|0)/(g|0)|0;c=m+c|0;n=n-N(g,m)|0}dk(d,f,n,c);Ue(e+16|0,e,j);Ua(j,e+16|0);va(e+16|0);va(e);if(p){H[b+64>>2]=p}Vd(a,j)}va(j);va(h);oa=e- -64|0}function lj(a,b,c,d,e,f,g,h,i){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,I=0,J=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0,U=0;k=oa-336|0;oa=k;m=h;n=i&65535;o=d;q=e&65535;t=(e^i)&-2147483648;z=i>>>16&32767;C=e>>>16&32767;a:{b:{if(z-1>>>0<32766?C-1>>>0<=32765:0){break b}u=e&2147483647;l=u;j=d;if(!(!j&(l|0)==2147418112?!(b|c):l>>>0<2147418112)){D=d;t=e|32768;break a}u=i&2147483647;e=u;d=h;if(!(!d&(e|0)==2147418112?!(f|g):e>>>0<2147418112)){D=h;t=i|32768;b=f;c=g;break a}if(!(b|j|(l^2147418112|c))){if(!(d|f|(e^2147418112|g))){b=0;c=0;t=2147450880;break a}t=t|2147418112;b=0;c=0;break a}if(!(d|f|(e^2147418112|g))){b=0;c=0;break a}if(!(b|j|(c|l))){b=!(d|f|(e|g));D=b?0:D;t=b?2147450880:t;b=0;c=0;break a}if(!(d|f|(e|g))){t=t|2147418112;b=0;c=0;break a}if((l|0)==65535|l>>>0<65535){i=b;d=!(o|q);h=d<<6;j=Q(d?b:o)+32|0;b=Q(d?c:q);b=h+((b|0)==32?j:b)|0;xb(k+320|0,i,c,o,q,b-15|0);p=16-b|0;o=H[k+328>>2];q=H[k+332>>2];c=H[k+324>>2];b=H[k+320>>2]}if(e>>>0>65535){break b}d=!(m|n);e=d<<6;h=Q(d?f:m)+32|0;d=Q(d?g:n);d=e+((d|0)==32?h:d)|0;xb(k+304|0,f,g,m,n,d-15|0);p=(d+p|0)-16|0;m=H[k+312>>2];n=H[k+316>>2];f=H[k+304>>2];g=H[k+308>>2]}e=n|65536;B=e;u=m;d=m;j=e<<15|d>>>17;d=d<<15|g>>>17;h=0-d|0;e=j;i=1963258675-(j+((d|0)!=0)|0)|0;rb(k+288|0,d,j,0,0,h,i,0,0);j=H[k+296>>2];rb(k+272|0,0-j|0,0-(H[k+300>>2]+((j|0)!=0)|0)|0,0,0,h,i,0,0);h=H[k+280>>2];i=h<<1|H[k+276>>2]>>>31;h=H[k+284>>2]<<1|h>>>31;rb(k+256|0,i,h,0,0,d,e,0,0);j=h;h=H[k+264>>2];rb(k+240|0,i,j,0,0,0-h|0,0-(H[k+268>>2]+((h|0)!=0)|0)|0,0,0);h=H[k+248>>2];l=H[k+252>>2]<<1|h>>>31;i=h<<1|H[k+244>>2]>>>31;h=l;rb(k+224|0,i,h,0,0,d,e,0,0);h=H[k+232>>2];rb(k+208|0,i,l,0,0,0-h|0,0-(H[k+236>>2]+((h|0)!=0)|0)|0,0,0);h=H[k+216>>2];i=h<<1|H[k+212>>2]>>>31;h=H[k+220>>2]<<1|h>>>31;rb(k+192|0,i,h,0,0,d,e,0,0);j=h;h=H[k+200>>2];rb(k+176|0,i,j,0,0,0-h|0,0-(H[k+204>>2]+((h|0)!=0)|0)|0,0,0);j=d;h=H[k+184>>2];l=H[k+188>>2]<<1|h>>>31;d=h<<1|H[k+180>>2]>>>31;i=d-1|0;l=l-(d>>>0<1)|0;rb(k+160|0,j,e,0,0,i,l,0,0);e=f;rb(k+144|0,e<<15,g<<15|e>>>17,0,0,i,l,0,0);h=H[k+172>>2];n=H[k+160>>2];e=H[k+152>>2];d=n+e|0;m=H[k+164>>2];j=m+H[k+156>>2]|0;j=d>>>0>>0?j+1|0:j;e=d;d=j;n=(m|0)==(j|0)&n>>>0>e>>>0|j>>>0>>0;m=n+H[k+168>>2]|0;j=h;j=m>>>0>>0?j+1|0:j;h=m;m=!d&e>>>0>1|(d|0)!=0;h=h+m|0;j=h>>>0>>0?j+1|0:j;rb(k+112|0,i,l,0,0,0-h|0,0-(((h|0)!=0)+j|0)|0,0,0);rb(k+128|0,1-e|0,0-((e>>>0>1)+d|0)|0,0,0,i,l,0,0);O=(C-z|0)+p|0;e=H[k+116>>2];x=e;d=H[k+112>>2];j=e<<1|d>>>31;m=d<<1;n=j;e=j;i=H[k+140>>2];E=i;h=H[k+136>>2];j=i<<1|h>>>31;i=h<<1|H[k+132>>2]>>>31;d=i+m|0;l=e+j|0;l=d>>>0>>0?l+1|0:l;i=d;d=l;e=i;j=d-(e>>>0<13927)|0;e=e-13927|0;l=j;F=j;h=0;p=h;j=q|65536;z=j;C=o;v=(j&2147483647)<<1|o>>>31;y=Eq(l,h,v,0);h=pa;r=y;s=h;h=c;J=(h&2147483647)<<1|b>>>31;G=J;w=0;l=(d|0)==(l|0)&e>>>0>>0|d>>>0>l>>>0;m=(d|0)==(n|0)&i>>>0>>0|d>>>0>>0;d=H[k+120>>2];j=H[k+124>>2]<<1|d>>>31;i=E>>>31|0;d=i+(d<<1|x>>>31)|0;j=d>>>0>>0?j+1|0:j;h=d;d=m+d|0;j=d>>>0>>0?j+1|0:j;i=d;d=l+d|0;h=d>>>0>>0?j+1|0:j;i=d-1|0;A=h-(d>>>0<1)|0;m=0;h=Eq(G,w,A,m);d=h+r|0;j=pa+s|0;j=d>>>0>>0?j+1|0:j;h=j;r=(s|0)==(j|0)&d>>>0>>0|j>>>0>>0;j=0;y=j;x=j;R=0;j=o;P=c>>>31|0;G=P|j<<1;L=0;q=Eq(i,x,G,L);l=q+d|0;j=pa+h|0;j=l>>>0>>0?j+1|0:j;n=l;q=j;j=(h|0)==(j|0)&d>>>0>l>>>0|h>>>0>j>>>0;d=j+r|0;h=0;h=d>>>0>>0?1:h;l=Eq(v,I,A,m);d=l+d|0;j=pa+h|0;h=d>>>0>>0?j+1|0:j;o=Eq(v,I,i,x);l=pa;s=d;x=Eq(A,m,G,L);d=x+o|0;j=pa+l|0;j=d>>>0>>0?j+1|0:j;r=d;d=j;j=(l|0)==(j|0)&o>>>0>r>>>0|j>>>0>>0;o=s+d|0;l=h+j|0;l=o>>>0>>0?l+1|0:l;s=o;o=0;d=o+n|0;j=q+r|0;j=d>>>0>>0?j+1|0:j;h=j;o=(q|0)==(j|0)&n>>>0>d>>>0|j>>>0>>0;q=s+o|0;j=l;M=q;l=o>>>0>q>>>0?j+1|0:j;s=d;n=h;o=b<<1;q=c<<1|b>>>31;N=o&-2;r=Eq(i,y,N,0);h=pa;x=e;e=Eq(e,0,G,L);d=e+r|0;j=pa+h|0;j=d>>>0>>0?j+1|0:j;r=(h|0)==(j|0)&d>>>0>>0|h>>>0>j>>>0;h=d;e=j;S=r;E=Eq(F,p,J,w);d=E+d|0;j=pa+j|0;j=d>>>0>>0?j+1|0:j;E=d;r=d;d=j;j=(j|0)==(e|0)&h>>>0>r>>>0|e>>>0>j>>>0;e=S+j|0;h=0;h=e>>>0>>0?1:h;r=e;e=s+e|0;j=h+n|0;j=e>>>0>>0?j+1|0:j;r=e;h=e;e=j;n=(j|0)==(n|0)&h>>>0>>0|j>>>0>>0;h=n+M|0;j=l;M=h;n=h>>>0>>0?j+1|0:j;I=Eq(v,I,x,T);v=pa;l=Eq(A,m,N,U);h=l+I|0;j=pa+v|0;j=h>>>0>>0?j+1|0:j;A=h;l=Eq(J,w,i,y);i=h+l|0;h=j;j=j+pa|0;j=i>>>0>>0?j+1|0:j;m=i;y=Eq(F,p,G,L);i=i+y|0;l=j+pa|0;l=i>>>0>>0?l+1|0:l;y=i;i=l;l=0;s=(i|0)==(j|0)&y>>>0>>0|i>>>0>>0;m=(h|0)==(j|0)&A>>>0>m>>>0|h>>>0>j>>>0;j=m+((h|0)==(v|0)&I>>>0>A>>>0|h>>>0>>0)|0;h=0;m=s+j|0;j=m;h=r+i|0;j=(j|l)+e|0;j=h>>>0>>0?j+1|0:j;s=h;m=j;h=(e|0)==(j|0)&h>>>0>>0|e>>>0>j>>>0;e=h+M|0;j=n;A=e;n=e>>>0>>0?j+1|0:j;r=s;v=E;F=Eq(F,p,N,U);p=pa;h=Eq(J,w,x,T);e=h+F|0;j=pa+p|0;j=e>>>0>>0?j+1|0:j;l=j;j=0;h=(l|0)==(p|0)&e>>>0>>0|l>>>0

>>0;e=l+v|0;j=(h|j)+d|0;j=e>>>0>>0?j+1|0:j;h=e;s=(d|0)==(j|0)&h>>>0>>0|d>>>0>j>>>0;l=j+y|0;p=0;i=p+h|0;d=i;l=d>>>0

>>0?l+1|0:l;e=(j|0)==(l|0)&d>>>0>>0|j>>>0>l>>>0;d=s+e|0;j=0;j=d>>>0>>0?1:j;e=d;d=d+r|0;j=j+m|0;j=d>>>0>>0?j+1|0:j;e=j;i=(m|0)==(j|0)&d>>>0>>0|j>>>0>>0;h=i+A|0;l=n;l=h>>>0>>0?l+1|0:l;i=l;c:{if((i|0)==131071|i>>>0<131071){j=C;l=z<<1|j>>>31;C=P|j<<1;z=l|R;rb(k+80|0,d,e,h,i,f,g,u,B);l=b<<17;b=0;c=H[k+88>>2];m=b-c|0;j=H[k+80>>2];n=H[k+84>>2];p=(j|0)!=0|(n|0)!=0;w=m-p|0;p=(l-(H[k+92>>2]+(b>>>0>>0)|0)|0)-(m>>>0

>>0)|0;m=0-j|0;n=0-(((j|0)!=0)+n|0)|0;b=O+16382|0;break c}d=(e&1)<<31|d>>>1;j=h<<31|e>>>1;e=j;h=(i&1)<<31|h>>>1;i=i>>>1|0;rb(k+96|0,d,j,h,i,f,g,u,B);o=0;m=H[k+104>>2];n=o-m|0;j=H[k+96>>2];q=H[k+100>>2];p=(j|0)!=0|(q|0)!=0;w=n-p|0;p=((b<<16)-(H[k+108>>2]+(m>>>0>o>>>0)|0)|0)-(n>>>0

>>0)|0;m=0-j|0;n=0-(((j|0)!=0)+q|0)|0;o=b;q=c;b=O+16383|0}if((b|0)>=32767){t=t|2147418112;b=0;c=0;break a}d:{if((b|0)>=1){c=w;j=p<<1|c>>>31;w=c<<1|n>>>31;p=j;o=h;q=i&65535|b<<16;b=m;j=n<<1|b>>>31;b=b<<1;break d}if((b|0)<=-113){b=0;c=0;break a}hd(k- -64|0,d,e,h,i,1-b|0);xb(k+48|0,o,q,C,z,b+112|0);d=H[k+64>>2];e=H[k+68>>2];o=H[k+72>>2];q=H[k+76>>2];rb(k+32|0,f,g,u,B,d,e,o,q);c=H[k+40>>2];i=c<<1;c=H[k+44>>2]<<1|c>>>31;m=H[k+36>>2];h=m;b=H[k+56>>2];m=h>>>31|i;i=b-m|0;l=H[k+60>>2]-((b>>>0>>0)+c|0)|0;c=H[k+32>>2];h=h<<1|c>>>31;c=c<<1;z=H[k+52>>2];j=z;b=H[k+48>>2];j=(h|0)==(j|0)&c>>>0>b>>>0|h>>>0>j>>>0;w=i-j|0;p=l-(i>>>0>>0)|0;i=b;b=i-c|0;j=z-((c>>>0>i>>>0)+h|0)|0}rb(k+16|0,f,g,u,B,3,0,0,0);rb(k,f,g,u,B,5,0,0,0);i=d;c=e;l=f;f=g;r=o;m=0;h=j+m|0;n=d&1;d=b+n|0;h=d>>>0>>0?h+1|0:h;o=d;g=h;l=(h|0)==(f|0)&d>>>0>l>>>0|f>>>0>>0;d=(h|0)==(m|0)&n>>>0>d>>>0|h>>>0>>0;b=d+w|0;j=p;j=b>>>0>>0?j+1|0:j;h=b;f=j;d=(h|0)==(u|0)&(j|0)==(B|0)?l:(B|0)==(j|0)&h>>>0>u>>>0|j>>>0>B>>>0;b=i+d|0;j=e;j=b>>>0>>0?j+1|0:j;d=b;b=j;e=(j|0)==(c|0)&d>>>0>>0|c>>>0>j>>>0;c=r+e|0;j=q;i=c;j=i>>>0>>0?j+1|0:j;c=j;e=d;l=i;d=H[k+20>>2];m=(d|0)==(g|0)&K[k+16>>2]>>0|d>>>0>>0;d=H[k+28>>2];i=H[k+24>>2];i=j>>>0<2147418112&((h|0)==(i|0)&(d|0)==(f|0)?m:(d|0)==(f|0)&i>>>0>>0|d>>>0>>0);d=e+i|0;j=b;j=d>>>0>>0?j+1|0:j;i=d;d=j;e=(j|0)==(b|0)&e>>>0>i>>>0|b>>>0>j>>>0;b=l+e|0;j=c;j=b>>>0>>0?j+1|0:j;e=j;l=b;b=H[k+4>>2];g=(b|0)==(g|0)&K[k>>2]>>0|b>>>0>>0;b=H[k+12>>2];c=H[k+8>>2];c=j>>>0<2147418112&((c|0)==(h|0)&(b|0)==(f|0)?g:(b|0)==(f|0)&c>>>0>>0|b>>>0>>0);b=c+i|0;j=d;j=b>>>0>>0?j+1|0:j;c=j;f=(d|0)==(j|0)&b>>>0>>0|d>>>0>j>>>0;d=l+f|0;j=e;D=d|D;t=t|(d>>>0>>0?j+1|0:j)}H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=D;H[a+12>>2]=t;oa=k+336|0}function rq(a,b){a=a|0;b=b|0;var 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;e=oa-48|0;oa=e;m=I[b+208|0];a:{if(Mj(b)){if(!I[b+224|0]){j=b+184|0;h=b+160|0;n=I[7820];while(1){H[b+248>>2]=0;H[b+252>>2]=0;F[b+246|0]=0;b:{if(I[b+226|0]){F[b+226|0]=0;break b}if(!Lj(b)){Ld(b);qa[H[H[b>>2]+24>>2]](a,b,b+148|0);break a}if(!(!m|I[b+192|0]!=123)){F[b+195|0]=123}o=g;g=0}c:{if(I[b+213|0]){fe(b);if((H[b+200>>2]+1|0)!=(wa(h)|0)){break c}F[b+233|0]=1;F[b+213|0]=0;F[b+221|0]=1;F[b+192|0]=0;break c}d:{if(I[b+214|0]){if(!Kd(b,22212)){break d}F[b+232|0]=1;F[b+214|0]=0;Jd(b,22212,1);ee(b,1);break c}if(I[b+217|0]){if(I[b+218|0]){F[b+218|0]=0;break d}c=I[b+192|0];if((c|0)==92){F[b+218|0]=1;break d}if((c|0)!=I[b+196|0]){break d}F[b+217|0]=0;break d}if(Db(F[b+192|0])|I[b+215|0]){break d}if(Kd(b,22188)){F[b+213|0]=1;if(I[b+209|0]){Fc(b)}Jd(b,22188,1);ee(b,1);break c}if(Kd(b,22200)){F[b+214|0]=1;if(I[b+209|0]){Fc(b)}Jd(b,22200,1);ee(b,1);break c}c=I[b+192|0];if((c|0)==34){F[b+196|0]=34;F[b+217|0]=1;break d}e:{if((c|0)!=(n|0)){break e}if(!ld(b,21876)){break e}F[b+215|0]=1;break d}if(I[b+215|0]){break d}if(I[b+232|0]){F[b+232|0]=0;g=1}if(I[b+233|0]){F[b+233|0]=0;k=1}if(I[b+228|0]){F[b+226|0]=1;F[b+228|0]=0;Ld(b);break c}f:{if(!I[b+245|0]){break f}F[b+245|0]=0;if(!I[b+227|0]){break f}if(I[b+229|0]){F[b+221|0]=1;break f}c=ld(b,21852);if((c|0)==21924?H[b+184>>2]==21936:0){break f}F[b+221|0]=1;if(!I[b+210|0]){break f}c=ld(b,21900);H[b+248>>2]=c;if(c){break f}c=H[j>>2];if(!((c|0)!=21936?(c|0)==21972|(c|0)==21948|(c|0)==21924:1)){break f}F[b+192|0]=98;c=xa(e+32|0,3101);Kj(h,H[b+200>>2],c);F[b+247|0]=1;va(c)}g:{if(I[b+230|0]){F[b+230|0]=0;if(!H[Qa(H[b+144>>2])>>2]){break g}}if(I[b+231|0]){F[b+231|0]=0;if(!H[Qa(H[b+144>>2])>>2]){break g}}h:{i:{j:{k:{l:{m:{c=I[b+192|0];switch(c-123|0){case 2:break j;case 0:break l;default:break m}}if(H[b+204>>2]){n:{o:{p:{switch(c-98|0){case 3:case 8:d=ld(b,21912);H[b+252>>2]=d;f=125;if(d){break o}break n;default:if(c-115>>>0>=2){break n}break;case 1:case 2:case 5:case 6:case 7:break n;case 0:case 4:break p}}d=ld(b,21900);H[b+248>>2]=d;f=123;if(!d){break n}}F[b+192|0]=f;H[b+200>>2]=(H[b+200>>2]+wa(d)|0)-1}c=I[b+192|0]}q:{c=c&255;switch(c-40|0){case 1:break i;case 0:break k;default:break q}}switch(c-91|0){case 2:break i;case 0:break k;default:break h}}F[b+192|0]=91;F[b+246|0]=1}c=Qa(H[b+144>>2]);H[c>>2]=H[c>>2]+1;break h}F[b+192|0]=93;F[b+246|0]=1}c=Qa(H[b+144>>2]);H[c>>2]=H[c>>2]-1;if(!I[b+244|0]){break h}if(H[Qa(H[b+144>>2])>>2]){break h}G[b+244>>1]=256}r:{s:{switch(I[b+192|0]-123|0){case 0:c=H[b+144>>2];H[e+32>>2]=0;ya(c,e+32|0);xc(H[b+140>>2],j);H[b+184>>2]=0;break r;case 2:break s;default:break r}}if(!mb(H[b+144>>2])){ob(H[b+144>>2])}F[b+237|0]=0;if(!mb(H[b+140>>2])){H[b+184>>2]=H[Qa(H[b+140>>2])>>2];ob(H[b+140>>2]);break r}H[j>>2]=0}t:{c=H[b+204>>2];if(!c){break t}u:{switch(I[b+192|0]-123|0){case 0:if(!((c|0)!=1|k)){Fc(b);v:{if(g){break v}w:{x:{c=I[b+195|0];switch(c-123|0){case 0:case 2:break v;case 1:break w;default:break x}}if((c|0)==59){break v}}k=0;de(b,0);g=0;break c}de(b,1);k=0;break c}if(!(!I[b+225|0]|(c|0)!=2)){Ld(b)}de(b,1);break c;case 2:break u;default:break t}}y:{if(I[b+225|0]){Ld(b);de(b,1);break y}if(!g){F[b+221|0]=0}de(b,1);if(!I[b+225|0]){break y}F[b+228|0]=1}if(!I[b+234|0]){break c}F[b+237|0]=1;break c}z:{A:{B:{switch(I[b+195|0]-123|0){case 2:if(o&1){break z}if((af(b)|0)==32){break z}if(I[b+225|0]){break A}break z;case 0:break B;default:break z}}if(!I[b+225|0]){break z}}F[b+221|0]=1;c=I[b+195|0];F[b+195|0]=32;p=(c|0)==125;q=(c|0)==123}c=ld(b,21852);H[e+44>>2]=c;if(c){f=H[b+184>>2];H[b+184>>2]=c;H[e+32>>2]=ak(Ed(21864),Xc(21864),e+44|0);H[e+16>>2]=Xc(21864);F[b+219|0]=zb(e+32|0,e+16|0);Jd(b,H[b+184>>2],1);ee(b,wa(H[b+184>>2])-1|0);d=I[b+219|0];if(!(d|!I[b+209|0])){Fc(b);d=I[b+219|0]}F[b+244|0]=1;if(d&255){G[b+244>>1]=256}c=H[j>>2];if(!((c|0)!=21924|(f|0)!=21936)){F[b+221|0]=0}if(!I[b+234|0]){break c}c=(c|0)==21936|k|g;if(f|q?c:1){F[b+236|0]=(c^-1)&1}if(!I[b+235|0]|!p){break c}F[b+236|0]=1;break c}d=I[b+192|0];if(!((d|0)!=59?I[b+194|0]!=125:0)){C:{if(!I[b+225|0]|(!I[b+227|0]|(d&255)!=59)){break C}F[b+230|0]=1;if(!I[b+247|0]){break C}F[b+247|0]=0;c=xa(e+32|0,3164);Kj(h,H[b+200>>2]+1|0,c);va(c);d=I[b+192|0]}if((d&255)!=59){H[j>>2]=0}F[b+220|0]=0}c=d&255;D:{if((c|0)!=63){if((c|0)!=58){break D}E:{switch(I[b+194|0]-123|0){case 0:case 2:F[b+221|0]=0;fe(b);if(I[b+225|0]){F[b+228|0]=1}F[b+213|0]=1;break c;default:break E}}if(I[b+220|0]|!I[b+227|0]|I[b+195|0]==41){break D}F[b+231|0]=1;break D}d=h;f=H[b+200>>2];i=Aa(d,f);F:{G:{if((f|0)<0){break G}H:{I:{while(1){i=F[i|0];if(Db(i)){break G}J:{K:{L:{M:{c=i&255;if(c>>>0<=94){l=c-48|0;if(l>>>0<=15){break M}break L}N:{switch(c-120|0){case 1:break J;case 0:case 2:break K;default:break N}}switch(c-95|0){case 3:break I;case 0:break K;default:break J}}if(!(1<0;f=f-1|0;i=Aa(d,f);if(l){continue}break H}break}if((i|0)!=66){break G}}c=0;if((f|0)<=0){break H}c=I[Aa(d,f-1|0)|0]==39}break F}c=0}if(c){break D}F[b+220|0]=1}O:{if(!I[b+209|0]){break O}d=ld(b,21888);H[e+44>>2]=d;if(!d){break O}f=0;P:{if((d|0)==22320|(d|0)==22332|((d|0)==22308|(d|0)==22296)|((d|0)==22572|(d|0)==22536|((d|0)==22416|(d|0)==22428))){break P}if((d|0)==22452){if(Jj(b)){break P}d=H[e+44>>2]}if((d|0)==22440){if(Jj(b)){break P}d=H[e+44>>2]}Q:{R:{if((d|0)==22608){if(I[b+220|0]){break R}break Q}f=1;if((d|0)==22632|(d|0)==22620){break P}}Fc(b)}f=1}Jd(b,H[e+44>>2],1);ee(b,wa(H[e+44>>2])-1|0);c=b;d=H[e+44>>2];if(!((d|0)!=22428?(d|0)!=22416:0)){d=Qa(H[b+144>>2]);H[d>>2]=H[d>>2]-1;d=H[e+44>>2]}F[c+192|0]=I[Aa(d,wa(d)-1|0)|0];S:{if(!f){break S}if(H[e+44>>2]==22452){c=F[b+195|0];f=vj(c);d=!f;T:{if(f){break T}c=c-41|0;if((c&255)>>>0>=53){break T}d=c&31;d=((c&63)>>>0>=32?1048575>>>d|0:((1<>>d)&1}if(d){break S}}Fc(b)}H[b+188>>2]=H[e+44>>2];break c}if(!I[b+211|0]){break d}U:{V:{W:{X:{c=I[b+192|0];switch(c-40|0){case 1:break V;case 0:break W;default:break X}}switch(c-91|0){case 2:break V;case 0:break W;default:break d}}c=af(b);fe(b);d=I[b+192|0];if((c|0)==41?(d|0)==40:0){break c}if((d|0)!=91){break U}if((c|0)==93){break c}break U}c=af(b);d=I[b+193|0];f=I[b+192|0];if(!(((f|0)==41?(d|0)==40:0)|((f|0)==93?(d|0)==91:0))){Fc(b)}fe(b);Y:{Z:{d=c&255;switch(d-44|0){case 1:break Y;case 0:case 2:break c;default:break Z}}if((d|0)==59){break c}}if(I[b+192|0]!=93){break U}if((c|0)==91){break c}}Fc(b);break c}F[b+221|0]=1;F[b+226|0]=1;break c}fe(b)}if(!I[b+224|0]){continue}break}}g=Ea(e+32|0);c=b+148|0;cf(e+16|0,c);h=wa(e+16|0);va(e+16|0);_:{if(!(!I[b+238|0]|(h|0)<1|H[b+240>>2]<1)){F[b+224|0]=1;c=xa(e,7628);qa[H[H[b>>2]+24>>2]](e+16|0,b,c);Ua(g,e+16|0);va(e+16|0);va(c);break _}F[b+224|0]=0;qa[H[H[b>>2]+24>>2]](e+16|0,b,c);Ua(g,e+16|0);va(e+16|0)}H[b+240>>2]=h;F[b+238|0]=0;Vd(a,g);va(g);break a}ek(a,b)}oa=e+48|0}function go(a,b,c,d,e,f){a=a|0;b=+b;c=c|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,w=0,x=0,y=0,z=0,B=0,C=0;j=oa-560|0;oa=j;H[j+44>>2]=0;A(+b);g=v(1)|0;v(0)|0;a:{if((g|0)<-1?1:(g|0)<=-1){u=1;w=1192;b=-b;A(+b);g=v(1)|0;v(0)|0;break a}if(e&2048){u=1;w=1195;break a}u=e&1;w=u?1198:1193;C=!u}b:{if((g&2146435072)==2146435072){n=u+3|0;Jb(a,32,c,n,e&-65537);sb(a,w,u);d=f&32;sb(a,b!=b?d?1807:2603:d?2029:2634,3);break b}s=j+16|0;c:{d:{e:{b=rj(b,j+44|0);b=b+b;if(b!=0){g=H[j+44>>2];H[j+44>>2]=g-1;x=f|32;if((x|0)!=97){break e}break c}x=f|32;if((x|0)==97){break c}l=H[j+44>>2];m=(d|0)<0?6:d;break d}l=g-29|0;H[j+44>>2]=l;b=b*268435456;m=(d|0)<0?6:d}q=(l|0)<0?j+48|0:j+336|0;h=q;while(1){d=h;if(b<4294967296&b>=0){g=~~b>>>0}else{g=0}H[d>>2]=g;h=h+4|0;b=(b-+(g>>>0))*1e9;if(b!=0){continue}break}f:{if((l|0)<1){d=l;g=h;i=q;break f}i=q;d=l;while(1){r=(d|0)<29?d:29;g=h-4|0;g:{if(i>>>0>g>>>0){break g}d=r;o=0;while(1){p=g;n=0;z=o;o=H[g>>2];k=d&31;if((d&63)>>>0>=32){B=o<>>32-k;k=o<>>0>o>>>0?n+1|0:n;k=o;o=Fq(k,n,1e9);z=p;p=Eq(o,pa,1e9,0);H[z>>2]=k-p;g=g-4|0;if(i>>>0<=g>>>0){continue}break}d=o;if(!d){break g}i=i-4|0;H[i>>2]=d}while(1){g=h;if(i>>>0>>0){h=g-4|0;if(!H[h>>2]){continue}}break}d=H[j+44>>2]-r|0;H[j+44>>2]=d;h=g;if((d|0)>0){continue}break}}h=(m+25|0)/9|0;if((d|0)<=-1){r=h+1|0;y=(x|0)==102;while(1){o=(d|0)<-9?9:0-d|0;h:{if(g>>>0>i>>>0){p=1e9>>>o|0;k=-1<>2];H[h>>2]=z+(d>>>o|0);d=N(p,d&k);h=h+4|0;if(h>>>0>>0){continue}break}i=H[i>>2]?i:i+4|0;if(!d){break h}H[g>>2]=d;g=g+4|0;break h}i=H[i>>2]?i:i+4|0}d=H[j+44>>2]+o|0;H[j+44>>2]=d;h=y?q:i;g=(r|0)>2?h+(r<<2)|0:g;if((d|0)<0){continue}break}}h=0;i:{if(g>>>0<=i>>>0){break i}h=N(q-i>>2,9);d=10;k=H[i>>2];if(k>>>0<10){break i}while(1){h=h+1|0;d=N(d,10);if(k>>>0>=d>>>0){continue}break}}d=(m-((x|0)==102?0:h)|0)-((x|0)==103&(m|0)!=0)|0;if((d|0)<(N(g-q>>2,9)-9|0)){p=d+9216|0;k=(p|0)/9|0;n=((k<<2)+((l|0)<0?j+48|4:j+340|0)|0)-4096|0;d=10;p=p-N(k,9)|0;if((p|0)<=7){while(1){d=N(d,10);p=p+1|0;if((p|0)!=8){continue}break}}p=H[n>>2];k=(p>>>0)/(d>>>0)|0;r=p-N(d,k)|0;l=n+4|0;j:{if(!((l|0)==(g|0)?r:1)){break j}b=(g|0)==(l|0)?1:1.5;l=d>>>1|0;t=l>>>0>r>>>0?.5:(l|0)==(r|0)?b:1.5;b=k&1?9007199254740994:9007199254740992;if(!(I[w|0]!=45|C)){t=-t;b=-b}l=p-r|0;H[n>>2]=l;if(b+t==b){break j}d=d+l|0;H[n>>2]=d;if(d>>>0>=1e9){while(1){H[n>>2]=0;n=n-4|0;if(n>>>0>>0){i=i-4|0;H[i>>2]=0}d=H[n>>2]+1|0;H[n>>2]=d;if(d>>>0>999999999){continue}break}}h=N(q-i>>2,9);d=10;l=H[i>>2];if(l>>>0<10){break j}while(1){h=h+1|0;d=N(d,10);if(l>>>0>=d>>>0){continue}break}}d=n+4|0;g=d>>>0>>0?d:g}while(1){k=g;l=g>>>0<=i>>>0;if(!l){g=k-4|0;if(!H[g>>2]){continue}}break}k:{if((x|0)!=103){o=e&8;break k}g=m?m:1;d=(g|0)>(h|0)&(h|0)>-5;m=(d?h^-1:-1)+g|0;f=(d?-1:-2)+f|0;o=e&8;if(o){break k}g=-9;l:{if(l){break l}l=H[k-4>>2];if(!l){break l}p=10;g=0;if((l>>>0)%10|0){break l}while(1){d=g;g=g+1|0;p=N(p,10);if(!((l>>>0)%(p>>>0)|0)){continue}break}g=d^-1}d=N(k-q>>2,9);if((f&-33)==70){o=0;d=(d+g|0)-9|0;d=(d|0)>0?d:0;m=(d|0)>(m|0)?m:d;break k}o=0;d=((d+h|0)+g|0)-9|0;d=(d|0)>0?d:0;m=(d|0)>(m|0)?m:d}r=(m|o)!=0;d=a;l=c;p=f&-33;if((p|0)==70){f=(h|0)>0?h:0}else{g=h>>31;g=Id(g+h^g,0,s);if((s-g|0)<=1){while(1){g=g-1|0;F[g|0]=48;if((s-g|0)<2){continue}break}}y=g-2|0;F[y|0]=f;F[g-1|0]=(h|0)<0?45:43;f=s-y|0}n=(f+(r+(m+u|0)|0)|0)+1|0;Jb(d,32,l,n,e);sb(a,w,u);Jb(a,48,c,n,e^65536);m:{n:{o:{if((p|0)==70){d=j+16|8;h=j+16|9;f=i>>>0>q>>>0?q:i;i=f;while(1){g=Id(H[i>>2],0,h);p:{if((f|0)!=(i|0)){if(j+16>>>0>=g>>>0){break p}while(1){g=g-1|0;F[g|0]=48;if(j+16>>>0>>0){continue}break}break p}if((g|0)!=(h|0)){break p}F[j+24|0]=48;g=d}sb(a,g,h-g|0);i=i+4|0;if(q>>>0>=i>>>0){continue}break}g=0;if(!r){break n}sb(a,2981,1);if((m|0)<1|i>>>0>=k>>>0){break o}while(1){g=Id(H[i>>2],0,h);if(g>>>0>j+16>>>0){while(1){g=g-1|0;F[g|0]=48;if(j+16>>>0>>0){continue}break}}sb(a,g,(m|0)<9?m:9);g=m-9|0;i=i+4|0;if(k>>>0<=i>>>0){break n}d=(m|0)>9;m=g;if(d){continue}break}break n}q:{if((m|0)<0){break q}f=i>>>0>>0?k:i+4|0;l=j+16|9;d=j+16|8;h=i;while(1){g=Id(H[h>>2],0,l);if((l|0)==(g|0)){F[j+24|0]=48;g=d}r:{if((h|0)!=(i|0)){if(j+16>>>0>=g>>>0){break r}while(1){g=g-1|0;F[g|0]=48;if(j+16>>>0>>0){continue}break}break r}sb(a,g,1);g=g+1|0;if(o?0:(m|0)<=0){break r}sb(a,2981,1)}k=g;g=l-g|0;sb(a,k,(g|0)<(m|0)?g:m);m=m-g|0;h=h+4|0;if(f>>>0<=h>>>0){break q}if((m|0)>-1){continue}break}}Jb(a,48,m+18|0,18,0);sb(a,y,s-y|0);break m}g=m}Jb(a,48,g+9|0,9,0)}break b}m=f&32;q=m?w+9|0:w;s:{if(d>>>0>11){break s}g=12-d|0;if(!g){break s}t=8;while(1){t=t*16;g=g-1|0;if(g){continue}break}if(I[q|0]==45){b=-(t+(-b-t));break s}b=b+t-t}g=H[j+44>>2];h=g>>31;g=Id(h^g+h,0,s);if((s|0)==(g|0)){F[j+15|0]=48;g=j+15|0}l=u|2;h=H[j+44>>2];k=g-2|0;F[k|0]=f+15;F[g-1|0]=(h|0)<0?45:43;g=e&8;i=j+16|0;while(1){f=i;o=m;if(P(b)<2147483648){h=~~b}else{h=-2147483648}F[i|0]=o|I[h+8400|0];b=(b-+(h|0))*16;i=f+1|0;if(!(!(g?1:(d|0)>0|b!=0)|(i-(j+16|0)|0)!=1)){F[f+1|0]=46;i=f+2|0}if(b!=0){continue}break}f=!d|((i-j|0)-18|0)>=(d|0)?(s-(k+(j+16|0)|0)|0)+i|0:((d+s|0)-k|0)+2|0;n=f+l|0;Jb(a,32,c,n,e);sb(a,q,l);Jb(a,48,c,n,e^65536);d=i-(j+16|0)|0;sb(a,j+16|0,d);g=d;d=s-k|0;Jb(a,48,f-(g+d|0)|0,0,0);sb(a,k,d)}Jb(a,32,c,n,e^8192);oa=j+560|0;return((c|0)>(n|0)?c:n)|0}function hg(a,b,c,d,e){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;f=oa-80|0;oa=f;H[f+76>>2]=b;t=f+55|0;r=f+56|0;b=0;a:{b:while(1){c:{if((n|0)<0){break c}if((2147483647-n|0)<(b|0)){H[6070]=61;n=-1;break c}n=b+n|0}d:{e:{f:{j=H[f+76>>2];b=j;h=I[b|0];if(h){while(1){g:{h=h&255;h:{if(!h){h=b;break h}if((h|0)!=37){break g}h=b;while(1){if(I[b+1|0]!=37){break h}g=b+2|0;H[f+76>>2]=g;h=h+1|0;k=I[b+2|0];b=g;if((k|0)==37){continue}break}}b=h-j|0;if(a){sb(a,j,b)}if(b){continue b}o=-1;h=1;g=f;p=!Rb(F[H[f+76>>2]+1|0]);b=H[f+76>>2];if(!(p|I[b+2|0]!=36)){o=F[b+1|0]-48|0;s=1;h=3}b=h+b|0;H[g+76>>2]=b;q=0;i=F[b|0];g=i-32|0;i:{if(g>>>0>31){h=b;break i}h=b;g=1<>2]=h;q=g|q;i=F[b+1|0];g=i-32|0;if(g>>>0>=32){break i}b=h;g=1<>2];if(I[b+2|0]!=36){break l}H[((F[b+1|0]<<2)+e|0)-192>>2]=10;l=H[((F[b+1|0]<<3)+d|0)-384>>2];s=1;b=b+3|0;break k}if(s){break f}s=0;l=0;if(a){b=H[c>>2];H[c>>2]=b+4;l=H[b>>2]}b=H[f+76>>2]+1|0}H[g+76>>2]=b;if((l|0)>-1){break j}l=0-l|0;q=q|8192;break j}l=qj(f+76|0);if((l|0)<0){break f}b=H[f+76>>2]}k=-1;m:{if(I[b|0]!=46){break m}if(I[b+1|0]==42){n:{if(!Rb(F[b+2|0])){break n}b=H[f+76>>2];if(I[b+3|0]!=36){break n}H[((F[b+2|0]<<2)+e|0)-192>>2]=10;k=H[((F[b+2|0]<<3)+d|0)-384>>2];b=b+4|0;H[f+76>>2]=b;break m}if(s){break f}if(a){b=H[c>>2];H[c>>2]=b+4;k=H[b>>2]}else{k=0}b=H[f+76>>2]+2|0;H[f+76>>2]=b;break m}H[f+76>>2]=b+1;k=qj(f+76|0);b=H[f+76>>2]}h=0;while(1){p=h;m=-1;if(F[b|0]-65>>>0>57){break a}i=b+1|0;H[f+76>>2]=i;h=F[b|0];b=i;h=I[(h+N(p,58)|0)+7871|0];if(h-1>>>0<8){continue}break}o:{p:{if((h|0)!=19){if(!h){break a}if((o|0)>=0){H[(o<<2)+e>>2]=h;b=(o<<3)+d|0;h=H[b+4>>2];H[f+64>>2]=H[b>>2];H[f+68>>2]=h;break p}if(!a){break d}pj(f- -64|0,h,c);i=H[f+76>>2];break o}if((o|0)>-1){break a}}b=0;if(!a){continue b}}g=q&-65537;h=q&8192?g:q;m=0;o=1182;q=r;q:{r:{s:{t:{u:{v:{w:{x:{y:{z:{A:{B:{C:{D:{E:{F:{b=F[i-1|0];b=p?(b&15)==3?b&-33:b:b;switch(b-88|0){case 11:break q;case 9:case 13:case 14:case 15:break r;case 27:break w;case 12:case 17:break z;case 23:break A;case 0:case 32:break B;case 24:break C;case 22:break D;case 29:break E;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 10:case 16:case 18:case 19:case 20:case 21:case 25:case 26:case 28:case 30:case 31:break e;default:break F}}G:{switch(b-65|0){case 0:case 4:case 5:case 6:break r;case 2:break u;case 1:case 3:break e;default:break G}}if((b|0)==83){break v}break e}i=H[f+64>>2];g=H[f+68>>2];o=1182;break y}b=0;H:{switch(p&255){case 0:H[H[f+64>>2]>>2]=n;continue b;case 1:H[H[f+64>>2]>>2]=n;continue b;case 2:h=H[f+64>>2];H[h>>2]=n;H[h+4>>2]=n>>31;continue b;case 3:G[H[f+64>>2]>>1]=n;continue b;case 4:F[H[f+64>>2]]=n;continue b;case 6:H[H[f+64>>2]>>2]=n;continue b;case 7:break H;default:continue b}}h=H[f+64>>2];H[h>>2]=n;H[h+4>>2]=n>>31;continue b}k=k>>>0>8?k:8;h=h|8;b=120}j=r;u=b&32;p=H[f+68>>2];g=p;i=H[f+64>>2];if(g|i){while(1){j=j-1|0;F[j|0]=u|I[(i&15)+8400|0];v=!g&i>>>0>15|(g|0)!=0;p=g;g=g>>>4|0;i=(p&15)<<28|i>>>4;if(v){continue}break}}if(!(h&8)|!(H[f+64>>2]|H[f+68>>2])){break x}o=(b>>>4|0)+1182|0;m=2;break x}b=r;j=H[f+68>>2];g=j;i=H[f+64>>2];if(g|i){while(1){b=b-1|0;F[b|0]=i&7|48;p=!g&i>>>0>7|(g|0)!=0;j=g;g=g>>>3|0;i=(j&7)<<29|i>>>3;if(p){continue}break}}j=b;if(!(h&8)){break x}b=r-j|0;k=(b|0)<(k|0)?k:b+1|0;break x}b=H[f+68>>2];g=b;i=H[f+64>>2];if((b|0)<-1?1:(b|0)<=-1){g=0-(g+((i|0)!=0)|0)|0;i=0-i|0;H[f+64>>2]=i;H[f+68>>2]=g;m=1;o=1182;break y}if(h&2048){m=1;o=1183;break y}m=h&1;o=m?1184:1182}j=Id(i,g,r)}h=(k|0)>-1?h&-65537:h;b=H[f+68>>2];g=b;i=H[f+64>>2];if(!((i|0)!=0|(b|0)!=0|k)){k=0;j=r;break e}b=!(g|i)+(r-j|0)|0;k=(b|0)<(k|0)?k:b;break e}b=H[f+64>>2];j=b?b:3003;b=tj(j,k);q=b?b:k+j|0;h=g;k=b?b-j|0:k;break e}g=H[f+64>>2];if(k){break t}b=0;Jb(a,32,l,0,h);break s}H[f+12>>2]=0;H[f+8>>2]=H[f+64>>2];H[f+64>>2]=f+8;k=-1;g=f+8|0}b=0;I:{while(1){j=H[g>>2];if(!j){break I}j=sj(f+4|0,j);i=(j|0)<0;if(!(i|j>>>0>k-b>>>0)){g=g+4|0;b=b+j|0;if(k>>>0>b>>>0){continue}break I}break}m=-1;if(i){break a}}Jb(a,32,l,b,h);if(!b){b=0;break s}g=0;i=H[f+64>>2];while(1){j=H[i>>2];if(!j){break s}j=sj(f+4|0,j);g=j+g|0;if((g|0)>(b|0)){break s}sb(a,f+4|0,j);i=i+4|0;if(b>>>0>g>>>0){continue}break}}Jb(a,32,l,b,h^8192);b=(b|0)<(l|0)?l:b;continue b}b=qa[144](a,M[f+64>>3],l,k,h,b)|0;continue b}F[f+55|0]=H[f+64>>2];k=1;j=t;h=g;break e}g=b+1|0;H[f+76>>2]=g;h=I[b+1|0];b=g;continue}}m=n;if(a){break a}if(!s){break d}b=1;while(1){a=H[(b<<2)+e>>2];if(a){pj((b<<3)+d|0,a,c);m=1;b=b+1|0;if((b|0)!=10){continue}break a}break}m=1;if(b>>>0>=10){break a}while(1){if(H[(b<<2)+e>>2]){break f}b=b+1|0;if((b|0)!=10){continue}break}break a}m=-1;break a}i=q-j|0;k=(i|0)>(k|0)?i:k;g=k+m|0;b=(g|0)>(l|0)?g:l;Jb(a,32,b,g,h);sb(a,o,m);Jb(a,48,b,g,h^65536);Jb(a,48,k,i,0);sb(a,j,i);Jb(a,32,b,g,h^8192);continue}break}m=0}oa=f+80|0;return m}function Ta(a,b,c,d,e,f,g,h,i){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,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,R=0,S=0,T=0;l=oa-96|0;oa=l;p=c;u=(g&131071)<<15|f>>>17;j=i&65535;s=j;k=h;B=k<<15|g>>>17;n=(e^i)&-2147483648;o=e&65535;w=o;m=d;x=o;o=0;C=(j&131071)<<15|k>>>17;D=i>>>16&32767;L=e>>>16&32767;a:{b:{if(L-1>>>0<=32765){j=0;if(D-1>>>0<32766){break b}}q=e&2147483647;v=q;j=d;if(!(!j&(q|0)==2147418112?!(b|c):q>>>0<2147418112)){y=d;n=e|32768;break a}e=i&2147483647;q=e;d=h;if(!(!d&(e|0)==2147418112?!(f|g):e>>>0<2147418112)){y=h;n=i|32768;b=f;c=g;break a}if(!(b|j|(v^2147418112|c))){if(!(d|f|(g|q))){n=2147450880;b=0;c=0;break a}n=n|2147418112;b=0;c=0;break a}if(!(d|f|(q^2147418112|g))){d=b|j;e=c|v;b=0;c=0;if(!(d|e)){n=2147450880;break a}n=n|2147418112;break a}if(!(b|j|(c|v))){b=0;c=0;break a}if(!(d|f|(g|q))){b=0;c=0;break a}if((v|0)==65535|v>>>0<65535){h=b;i=c;d=!(m|w);e=d<<6;j=Q(d?b:m)+32|0;b=Q(d?c:w);b=e+((b|0)==32?j:b)|0;xb(l+80|0,h,i,m,w,b-15|0);m=H[l+88>>2];p=H[l+84>>2];x=H[l+92>>2];t=16-b|0;b=H[l+80>>2]}j=t;if(q>>>0>65535){break b}c=!(k|s);d=c<<6;e=Q(c?f:k)+32|0;c=Q(c?g:s);c=d+((c|0)==32?e:c)|0;i=c;xb(l- -64|0,f,g,k,s,c-15|0);e=H[l+76>>2];c=e;h=H[l+72>>2];d=h;d=d<<15;e=H[l+68>>2];B=e>>>17|d;d=0;f=H[l+64>>2];u=d|((e&131071)<<15|f>>>17);C=(c&131071)<<15|h>>>17;j=(t-i|0)+16|0}t=j;d=u;c=b;s=0;q=Eq(d,0,b,s);b=pa;E=b;e=f;z=e<<15&-32768;k=p;g=Eq(z,0,k,0);f=g+q|0;e=pa+b|0;e=f>>>0>>0?e+1|0:e;h=f;j=f;i=0;g=Eq(c,s,z,A);f=i+g|0;b=j;j=j+pa|0;j=f>>>0>>0?j+1|0:j;u=f;g=j;I=(b|0)==(j|0)&f>>>0>>0|b>>>0>j>>>0;M=Eq(d,r,k,F);J=pa;p=m;f=Eq(z,A,m,0);b=f+M|0;j=pa+J|0;N=b;m=Eq(B,0,c,s);i=b+m|0;b=b>>>0>>0?j+1|0:j;f=b+pa|0;v=i;f=i>>>0>>0?f+1|0:f;w=f;j=f;f=(e|0)==(E|0)&h>>>0>>0|e>>>0>>0;h=e+v|0;j=f+j|0;q=h;j=h>>>0>>0?j+1|0:j;m=j;e=h;h=j;P=Eq(d,r,p,O);E=pa;f=z;G=x|65536;z=o;i=Eq(f,A,G,o);f=i+P|0;j=pa+E|0;j=f>>>0>>0?j+1|0:j;R=f;A=Eq(B,S,k,F);i=f+A|0;o=j;f=j+pa|0;f=i>>>0>>0?f+1|0:f;K=i;C=C&2147483647|-2147483648;i=Eq(c,s,C,0);c=K+i|0;s=f;j=f+pa|0;A=c;c=c>>>0>>0?j+1|0:j;x=I;i=0;f=i+e|0;j=h+A|0;I=f;h=f;e=x+f|0;x=f>>>0>>0?j+1|0:j;f=x;f=e>>>0>>0?f+1|0:f;h=e;i=f;t=(t+(D+L|0)|0)-16383|0;f=Eq(p,O,B,S);e=pa;r=Eq(d,r,G,z);d=r+f|0;j=pa+e|0;j=d>>>0>>0?j+1|0:j;r=d;f=(e|0)==(j|0)&f>>>0>d>>>0|e>>>0>j>>>0;e=j;D=f;f=Eq(C,T,k,F);d=f+d|0;j=pa+j|0;j=d>>>0>>0?j+1|0:j;f=d;d=j;k=(j|0)==(e|0)&f>>>0>>0|e>>>0>j>>>0;j=D+k|0;e=0;e=j>>>0>>0?1:e;r=f;k=d;D=j;f=(b|0)==(w|0)&v>>>0>>0|b>>>0>w>>>0;b=f+((b|0)==(J|0)&M>>>0>N>>>0|b>>>0>>0)|0;j=0;j=b>>>0>>0?1:j;f=b;b=r+f|0;j=d+j|0;j=b>>>0>>0?j+1|0:j;F=b;d=j;j=(j|0)==(k|0)&b>>>0>>0|j>>>0>>0;b=D+j|0;f=e;f=b>>>0>>0?f+1|0:f;e=Eq(C,T,G,z);b=e+b|0;j=pa+f|0;r=b;e=b>>>0>>0?j+1|0:j;k=Eq(C,T,p,O);f=pa;p=Eq(B,S,G,z);b=p+k|0;j=pa+f|0;j=b>>>0

>>0?j+1|0:j;p=b;b=j;j=(f|0)==(j|0)&k>>>0>p>>>0|f>>>0>j>>>0;k=b+r|0;e=e+j|0;e=k>>>0>>0?e+1|0:e;r=k;k=0;b=k+F|0;j=d+p|0;j=b>>>0>>0?j+1|0:j;f=j;k=(d|0)==(j|0)&b>>>0>>0|d>>>0>j>>>0;d=r+k|0;j=e;B=d;d=d>>>0>>0?j+1|0:j;p=b;k=f;f=(o|0)==(s|0)&R>>>0>K>>>0|o>>>0>s>>>0;e=f+((o|0)==(E|0)&P>>>0>R>>>0|o>>>0>>0)|0;f=e;e=f+((c|0)==(s|0)&A>>>0>>0|c>>>0>>0)|0;f=e;b=c+b|0;e=f+k|0;e=b>>>0>>0?e+1|0:e;o=b;c=b;b=e;e=(e|0)==(k|0)&c>>>0

>>0|e>>>0>>0;c=e+B|0;j=d;j=c>>>0>>0?j+1|0:j;d=c;k=d;e=(m|0)==(x|0)&q>>>0>I>>>0|m>>>0>x>>>0;d=e+((m|0)==(w|0)&q>>>0>>0|m>>>0>>0)|0;f=0;f=d>>>0>>0?1:f;m=d;d=d+o|0;e=b+f|0;e=d>>>0>>0?e+1|0:e;c=(b|0)==(e|0)&d>>>0>>0|b>>>0>e>>>0;b=k+c|0;j=b>>>0>>0?j+1|0:j;c=j;c:{if(j&65536){t=t+1|0;break c}m=g>>>31|0;j=c<<1|b>>>31;b=b<<1|e>>>31;c=j;j=e<<1|d>>>31;d=d<<1|i>>>31;e=j;o=u;j=g<<1|o>>>31;u=o<<1;g=j;j=i<<1|h>>>31;h=h<<1|m;i=j}if((t|0)>=32767){n=n|2147418112;b=0;c=0;break a}d:{if((t|0)<=0){f=1-t|0;if(f>>>0>=128){b=0;c=0;break a}j=t+127|0;xb(l+48|0,u,g,h,i,j);xb(l+32|0,d,e,b,c,j);hd(l+16|0,u,g,h,i,f);hd(l,d,e,b,c,f);u=(H[l+48>>2]|H[l+56>>2])!=0|(H[l+52>>2]|H[l+60>>2])!=0|(H[l+32>>2]|H[l+16>>2]);g=H[l+36>>2]|H[l+20>>2];h=H[l+40>>2]|H[l+24>>2];i=H[l+44>>2]|H[l+28>>2];d=H[l>>2];e=H[l+4>>2];c=H[l+12>>2];b=H[l+8>>2];break d}c=c&65535|t<<16}y=b|y;n=c|n;if(!(!h&(i|0)==-2147483648?!(g|u):(i|0)>-1)){j=e;b=d+1|0;j=b>>>0<1?j+1|0:j;f=b;c=j;f=(e|0)==(j|0)&d>>>0>f>>>0|e>>>0>j>>>0;d=f+y|0;e=n;y=d;n=d>>>0>>0?e+1|0:e;break a}if(h|u|(i^-2147483648|g)){b=d;c=e;break a}c=d&1;b=c+d|0;j=e;j=b>>>0>>0?j+1|0:j;f=b;c=j;e=(e|0)==(j|0)&d>>>0>f>>>0|e>>>0>j>>>0;d=e+y|0;j=n;y=d;n=d>>>0>>0?j+1|0:j}H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=y;H[a+12>>2]=n;oa=l+96|0}function ne(a,b,c){var d=0,e=0,f=0,g=0;e=oa-112|0;oa=e;a:{b:{if(!Ma(b,1813)){if(!Ma(b,2282)){break b}}F[21068]=0;a=1;break a}c:{if(wa(b)>>>0<7){break c}d=xa(e+96|0,2663);f=Ra(b,0,7,d);va(d);if(f){break c}Eb(e+96|0,b,7);if(wa(e+96|0)){bf(21760,e+96|0)}va(e+96|0);a=1;break a}if(Ma(b,1926)){he(a,0);Nd(a,4);ce(a,2);a=1;break a}if(Ma(b,1252)){xg(a,1);Nd(a,2);ce(a,2);a=1;break a}if(Ma(b,1558)){he(a,0);Nd(a,4);ce(a,1);a=1;break a}d:{e:{f:{g:{h:{f=wa(b);if(f){d=xa(e+96|0,1358);if(!Ra(b,0,1,d)){va(d);break f}if(wa(b)>>>0<11){break h}break g}if(wa(b)>>>0>=11){break g}break e}va(d);break e}d=xa(e+80|0,2751);g=Ra(b,0,11,d);va(d);if(f){va(e+96|0)}if(g){break e}}i:{if(!wa(b)){Eb(e+80|0,b,11);break i}d=xa(e- -64|0,1358);Eb(e+80|0,b,Ra(b,0,1,d)?11:1);va(d)}if(!wa(e+80|0)){d=4;break d}d=be(Ca(e+80|0));if(d){break d}Ha(Tb(Tb(H[5266],c),b));va(e+80|0);a=0;break a}j:{k:{l:{m:{n:{f=wa(b);if(f){d=xa(e+80|0,2573);if(!Ra(b,0,1,d)){va(d);break l}if(wa(b)>>>0<17){break n}break m}if(wa(b)>>>0>=17){break m}break k}va(d);break k}d=xa(e- -64|0,2745);g=Ra(b,0,17,d);va(d);if(f){va(e+80|0)}if(g){break k}}o:{if(!wa(b)){Eb(e- -64|0,b,17);break o}d=xa(e+48|0,2573);Eb(e- -64|0,b,Ra(b,0,1,d)?17:1);va(d)}if(!wa(e- -64|0)){d=4;break j}d=be(Ca(e- -64|0));if(d){break j}Ha(Tb(Tb(H[5266],c),b));va(e- -64|0);a=0;break a}p:{if(wa(b)>>>0<10){break p}d=xa(e- -64|0,2510);f=Ra(b,0,10,d);va(d);if(f){break p}vg(a,4,0);a=1;break a}q:{r:{s:{t:{u:{f=wa(b);if(f){d=xa(e- -64|0,1521);if(!Ra(b,0,1,d)){va(d);break s}if(wa(b)>>>0<14){break u}break t}if(wa(b)>>>0>=14){break t}break r}va(d);break r}d=xa(e+48|0,2730);g=Ra(b,0,14,d);va(d);if(f){va(e- -64|0)}if(g){break r}}v:{if(!wa(b)){Eb(e+48|0,b,14);break v}d=xa(e+32|0,1521);Eb(e+48|0,b,Ra(b,0,1,d)?14:1);va(d)}if(!wa(e+48|0)){d=4;break q}d=be(Ca(e+48|0));if(d){break q}Ha(Tb(Tb(H[5266],c),b));va(e+48|0);a=0;break a}w:{if(wa(b)>>>0<13){break w}d=xa(e+48|0,1496);f=Ra(b,0,13,d);va(d);if(f){break w}Nd(a,4);a=1;break a}x:{y:{z:{A:{B:{f=wa(b);if(f){d=xa(e+48|0,2611);if(!Ra(b,0,1,d)){va(d);break z}if(wa(b)>>>0<23){break B}break A}if(wa(b)>>>0>=23){break A}break y}va(d);break y}d=xa(e+32|0,2671);g=Ra(b,0,23,d);va(d);if(f){va(e+48|0)}if(g){break y}}C:{if(!wa(b)){Eb(e+32|0,b,23);break C}d=xa(e+16|0,2611);Eb(e+32|0,b,Ra(b,0,1,d)?23:1);va(d)}if(!wa(e+32|0)){d=40;break x}d=be(Ca(e+32|0));if(d){break x}Ha(Tb(Tb(H[5266],c),b));va(e+32|0);a=0;break a}D:{E:{F:{G:{H:{f=wa(b);if(f){d=xa(e+32|0,1824);if(!Ra(b,0,1,d)){va(d);break F}if(wa(b)>>>0<23){break H}break G}if(wa(b)>>>0>=23){break G}break E}va(d);break E}d=xa(e+16|0,2695);g=Ra(b,0,23,d);va(d);if(f){va(e+32|0)}if(g){break E}}I:{if(!wa(b)){Eb(e+16|0,b,23);break I}d=xa(e,1824);Eb(e+16|0,b,Ra(b,0,1,d)?23:1);va(d)}if(!wa(e+16|0)){d=0;break D}d=be(Ca(e+16|0));if(d){break D}Ha(Tb(Tb(H[5266],c),b));va(e+16|0);a=0;break a}J:{if(!Ma(b,2655)){if(!Ma(b,1392)){break J}}he(a,1);a=1;break a}K:{if(!Ma(b,2632)){if(!Ma(b,1417)){break K}}xg(a,1);a=1;break a}L:{if(!Ma(b,2531)){if(!Ma(b,1911)){break L}}ce(a,2);a=1;break a}M:{if(!Ma(b,2535)){if(!Ma(b,1967)){break M}}ce(a,1);a=1;break a}N:{if(!Ma(b,2601)){if(!Ma(b,1431)){break N}}F[a+225|0]=0;a=1;break a}O:{if(!Ma(b,1683)){if(!Ma(b,1367)){break O}}F[a+227|0]=0;a=1;break a}if(Ma(b,1797)){Hj(a);a=1;break a}P:{if(!Ma(b,1886)){if(!Ma(b,1901)){break P}}Gj(a);a=1;break a}Q:{if(!Ma(b,2599)){if(!Ma(b,1866)){break Q}}Ij(a);Hj(a);Gj(a);a=1;break a}R:{if(!Ma(b,1681)){if(!Ma(b,1575)){break R}}Ij(a);a=1;break a}S:{if(!Ma(b,2651)){if(!Ma(b,1479)){break S}}jk(a,1);a=1;break a}if(Ma(b,1534)){ik(a,1);a=1;break a}if(Ma(b,1510)){F[a+212|0]=1;a=1;break a}if(Ma(b,1849)){Fj(a);F[a+235|0]=1;a=1;break a}if(Ma(b,1452)){Fj(a);a=1;break a}if(Ma(b,1465)){F[a+229|0]=1;a=1;break a}T:{if(!Ma(b,2571)){if(!Ma(b,1266)){break T}}H[5266]=27584;a=1;break a}U:{if(!Ma(b,1250)){if(!Ma(b,1774)){break U}}Ha(Tb(za(H[5266],3129),21772));a=1;break a}Ha(Tb(Tb(H[5266],c),b));a=0;break a}F[a+88|0]=1;H[a+92>>2]=d;va(e+16|0);a=1;break a}kk(a,d);va(e+32|0);a=1;break a}Nd(a,d);va(e+48|0);a=1;break a}vg(a,d,1);va(e- -64|0);a=1;break a}vg(a,d,0);va(e+80|0);a=1}oa=e+112|0;return a}function li(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=oa-560|0;oa=l;H[l+548>>2]=k;H[l+552>>2]=b;H[l+104>>2]=152;q=Ya(l+136|0,l+144|0,l+104|0);b=H[q>>2];H[l+132>>2]=b;H[l+128>>2]=b+400;t=Ea(l+104|0);p=Ea(l+88|0);n=Ea(l+72|0);o=Ea(l+56|0);r=Ea(l+40|0);b=t;k=p;s=n;u=o;m=oa-16|0;oa=m;v=l;a:{if(c){c=ii(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);Ua(u,m);va(m);fc(m,c);Ua(s,m);va(m);F[l+119|0]=ec(c);F[l+118|0]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);Ua(k,m);va(m);b=Mc(c);break a}c=hi(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);Ua(u,m);va(m);fc(m,c);Ua(s,m);va(m);F[l+119|0]=ec(c);F[l+118|0]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);Ua(k,m);va(m);b=Mc(c)}H[v+36>>2]=b;oa=m+16|0;H[j>>2]=H[i>>2];s=e&512;u=s>>>9|0;b=0;c=0;while(1){k=c;b:{c:{d:{e:{if((b|0)==4){break e}if(!Bb(a,l+552|0)){break e}e=0;f:{g:{h:{i:{j:{switch(F[(l+120|0)+b|0]){case 1:if((b|0)==3){break c}if(dc(h,8192,bb(a))){ki(l+24|0,a);Od(r,F[l+24|0]);break i}H[f>>2]=H[f>>2]|4;a=0;break d;case 3:break h;case 0:break j;case 4:break f;case 2:break g;default:break b}}if((b|0)==3){break c}}while(1){if(!Bb(a,l+552|0)){break c}if(!dc(h,8192,bb(a))){break c}ki(l+24|0,a);Od(r,F[l+24|0]);continue}}if((wa(n)|0)==(0-wa(o)|0)){break c}k:{if(wa(n)){if(wa(o)){break k}}d=wa(n);c=bb(a);if(d){if(I[Aa(n,0)|0]==(c&255)){ib(a);c=wa(n)>>>0>1?n:k;break b}F[g|0]=1;break c}if(I[Aa(o,0)|0]!=(c&255)){break c}ib(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}if((bb(a)&255)==I[Aa(n,0)|0]){ib(a);c=wa(n)>>>0>1?n:k;break b}if((bb(a)&255)==I[Aa(o,0)|0]){ib(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}H[f>>2]=H[f>>2]|4;a=0;break d}if(!(k|b>>>0<2)){c=0;if(!(u|(b|0)==2&I[l+123|0]!=0)){break b}}H[l+16>>2]=Ob(p);c=ge(l+24|0,l+16|0);l:{if(!b|I[(b+l|0)+119|0]>1){break l}while(1){m:{H[l+16>>2]=Vc(p);if(!zb(c,l+16|0)){break m}if(!dc(h,8192,F[H[c>>2]])){break m}Wd(c);continue}break}H[l+16>>2]=Ob(p);c=H[c>>2]-H[l+16>>2]|0;if(wa(r)>>>0>=c>>>0){H[l+16>>2]=Vc(r);d=gi(l+16|0,0-c|0);e=Vc(r);m=Ob(p);c=oa-32|0;oa=c;H[c+16>>2]=e;H[c+24>>2]=d;H[c+8>>2]=m;while(1){d=zb(c+24|0,c+16|0);if(!(!d|I[H[c+24>>2]]!=I[H[c+8>>2]])){Wd(c+24|0);Wd(c+8|0);continue}break}oa=c+32|0;if(d^1){break l}}H[l+8>>2]=Ob(p);ge(l+16|0,l+8|0);H[l+24>>2]=H[l+16>>2]}H[l+16>>2]=H[l+24>>2];while(1){n:{H[l+8>>2]=Vc(p);if(!zb(l+16|0,l+8|0)){break n}if(!Bb(a,l+552|0)){break n}if((bb(a)&255)!=I[H[l+16>>2]]){break n}ib(a);Wd(l+16|0);continue}break}if(!s){break c}H[l+8>>2]=Vc(p);if(!zb(l+16|0,l+8|0)){break c}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){o:{if(!Bb(a,l+552|0)){break o}c=bb(a);p:{if(dc(h,2048,c)){d=H[j>>2];if((d|0)==H[l+548>>2]){ji(i,j,l+548|0);d=H[j>>2]}H[j>>2]=d+1;F[d|0]=c;e=e+1|0;break p}if(!wa(t)|!e|I[l+118|0]!=(c&255)){break o}c=H[l+132>>2];if((c|0)==H[l+128>>2]){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e;e=0}ib(a);continue}break}c=H[l+132>>2];if(!(!e|(c|0)==H[q>>2])){if(H[l+128>>2]==(c|0)){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e}q:{if(H[l+36>>2]<1){break q}r:{if(!kb(a,l+552|0)){if((bb(a)&255)==I[l+119|0]){break r}}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){ib(a);if(H[l+36>>2]<1){break q}s:{if(!kb(a,l+552|0)){if(dc(h,2048,bb(a))){break s}}H[f>>2]=H[f>>2]|4;a=0;break d}if(H[j>>2]==H[l+548>>2]){ji(i,j,l+548|0)}c=bb(a);d=H[j>>2];H[j>>2]=d+1;F[d|0]=c;H[l+36>>2]=H[l+36>>2]-1;continue}}c=k;if(H[i>>2]!=H[j>>2]){break b}H[f>>2]=H[f>>2]|4;a=0;break d}t:{if(!k){break t}e=1;while(1){if(wa(k)>>>0<=e>>>0){break t}u:{if(!kb(a,l+552|0)){if((bb(a)&255)==I[Aa(k,e)|0]){break u}}H[f>>2]=H[f>>2]|4;a=0;break d}ib(a);e=e+1|0;continue}}a=1;if(H[q>>2]==H[l+132>>2]){break d}a=0;H[l+24>>2]=0;wb(t,H[q>>2],H[l+132>>2],l+24|0);if(H[l+24>>2]){H[f>>2]=H[f>>2]|4;break d}a=1}va(r);va(o);va(n);va(p);va(t);_a(q);oa=l+560|0;return a}c=k}b=b+1|0;continue}}function ei(a,b,c,d,e,f,g,h,i,j,k){var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=oa-560|0;oa=l;H[l+548>>2]=k;H[l+552>>2]=b;H[l+96>>2]=152;q=Ya(l+136|0,l+144|0,l+96|0);b=H[q>>2];H[l+132>>2]=b;H[l+128>>2]=b+400;t=Ea(l+96|0);p=bc(l+80|0);n=bc(l- -64|0);o=bc(l+48|0);r=bc(l+32|0);b=t;k=p;s=n;u=o;m=oa-16|0;oa=m;v=l;a:{if(c){c=ci(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);qc(u,m);va(m);fc(m,c);qc(s,m);va(m);H[l+116>>2]=ec(c);H[l+112>>2]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);qc(k,m);va(m);b=Mc(c);break a}c=bi(d);Oc(m,c);d=H[m>>2];F[l+120|0]=d;F[l+121|0]=d>>>8;F[l+122|0]=d>>>16;F[l+123|0]=d>>>24;Nc(m,c);qc(u,m);va(m);fc(m,c);qc(s,m);va(m);H[l+116>>2]=ec(c);H[l+112>>2]=Hb(c);Gb(m,c);Ua(b,m);va(m);gc(m,c);qc(k,m);va(m);b=Mc(c)}H[v+28>>2]=b;oa=m+16|0;H[j>>2]=H[i>>2];s=e&512;u=s>>>9|0;b=0;c=0;while(1){k=c;b:{c:{d:{e:{if((b|0)==4){break e}if(!Ab(a,l+552|0)){break e}e=0;f:{g:{h:{i:{j:{switch(F[(l+120|0)+b|0]){case 1:if((b|0)==3){break c}if(cc(h,8192,ab(a))){di(l+16|0,a);mf(r,H[l+16>>2]);break i}H[f>>2]=H[f>>2]|4;a=0;break d;case 3:break h;case 0:break j;case 4:break f;case 2:break g;default:break b}}if((b|0)==3){break c}}while(1){if(!Ab(a,l+552|0)){break c}if(!cc(h,8192,ab(a))){break c}di(l+16|0,a);mf(r,H[l+16>>2]);continue}}if((wa(n)|0)==(0-wa(o)|0)){break c}k:{if(wa(n)){if(wa(o)){break k}}d=wa(n);c=ab(a);if(d){if((c|0)==H[Ca(n)>>2]){hb(a);c=wa(n)>>>0>1?n:k;break b}F[g|0]=1;break c}if((c|0)!=H[Ca(o)>>2]){break c}hb(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}if((ab(a)|0)==H[Ca(n)>>2]){hb(a);c=wa(n)>>>0>1?n:k;break b}if((ab(a)|0)==H[Ca(o)>>2]){hb(a);F[g|0]=1;c=wa(o)>>>0>1?o:k;break b}H[f>>2]=H[f>>2]|4;a=0;break d}if(!(k|b>>>0<2)){c=0;if(!(u|(b|0)==2&I[l+123|0]!=0)){break b}}H[l+8>>2]=Ob(p);c=ge(l+16|0,l+8|0);l:{if(!b|I[(b+l|0)+119|0]>1){break l}while(1){m:{H[l+8>>2]=Sc(p);if(!zb(c,l+8|0)){break m}if(!cc(h,8192,H[H[c>>2]>>2])){break m}od(c);continue}break}H[l+8>>2]=Ob(p);c=$j(c,l+8|0);if(wa(r)>>>0>=c>>>0){H[l+8>>2]=Sc(r);d=ai(l+8|0,0-c|0);e=Sc(r);m=Ob(p);c=oa-32|0;oa=c;H[c+16>>2]=e;H[c+24>>2]=d;H[c+8>>2]=m;while(1){d=zb(c+24|0,c+16|0);if(!(!d|H[H[c+24>>2]>>2]!=H[H[c+8>>2]>>2])){od(c+24|0);od(c+8|0);continue}break}oa=c+32|0;if(d^1){break l}}H[l>>2]=Ob(p);ge(l+8|0,l);H[l+16>>2]=H[l+8>>2]}H[l+8>>2]=H[l+16>>2];while(1){n:{H[l>>2]=Sc(p);if(!zb(l+8|0,l)){break n}if(!Ab(a,l+552|0)){break n}if((ab(a)|0)!=H[H[l+8>>2]>>2]){break n}hb(a);od(l+8|0);continue}break}if(!s){break c}H[l>>2]=Sc(p);if(!zb(l+8|0,l)){break c}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){o:{if(!Ab(a,l+552|0)){break o}c=ab(a);p:{if(cc(h,2048,c)){d=H[j>>2];if((d|0)==H[l+548>>2]){xd(i,j,l+548|0);d=H[j>>2]}H[j>>2]=d+4;H[d>>2]=c;e=e+1|0;break p}if(!wa(t)|!e|(c|0)!=H[l+112>>2]){break o}c=H[l+132>>2];if((c|0)==H[l+128>>2]){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e;e=0}hb(a);continue}break}c=H[l+132>>2];if(!(!e|(c|0)==H[q>>2])){if(H[l+128>>2]==(c|0)){xd(q,l+132|0,l+128|0);c=H[l+132>>2]}H[l+132>>2]=c+4;H[c>>2]=e}q:{if(H[l+28>>2]<1){break q}r:{if(!jb(a,l+552|0)){if((ab(a)|0)==H[l+116>>2]){break r}}H[f>>2]=H[f>>2]|4;a=0;break d}while(1){hb(a);if(H[l+28>>2]<1){break q}s:{if(!jb(a,l+552|0)){if(cc(h,2048,ab(a))){break s}}H[f>>2]=H[f>>2]|4;a=0;break d}if(H[j>>2]==H[l+548>>2]){xd(i,j,l+548|0)}c=ab(a);d=H[j>>2];H[j>>2]=d+4;H[d>>2]=c;H[l+28>>2]=H[l+28>>2]-1;continue}}c=k;if(H[i>>2]!=H[j>>2]){break b}H[f>>2]=H[f>>2]|4;a=0;break d}t:{if(!k){break t}e=1;while(1){if(wa(k)>>>0<=e>>>0){break t}u:{if(!jb(a,l+552|0)){if((ab(a)|0)==H[Qe(k,e)>>2]){break u}}H[f>>2]=H[f>>2]|4;a=0;break d}hb(a);e=e+1|0;continue}}a=1;if(H[q>>2]==H[l+132>>2]){break d}a=0;H[l+16>>2]=0;wb(t,H[q>>2],H[l+132>>2],l+16|0);if(H[l+16>>2]){H[f>>2]=H[f>>2]|4;break d}a=1}va(r);va(o);va(n);va(p);va(t);_a(q);oa=l+560|0;return a}c=k}b=b+1|0;continue}}function an(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;var i=0;h=oa+-64|0;oa=h;H[h+56>>2]=b;H[e>>2]=0;Ia(h,d);i=Ib(h);Fa(h);a:{b:{c:{d:{switch(g-65|0){case 0:case 32:ti(a,f+24|0,h+56|0,c,e,i);break b;case 1:case 33:case 39:si(a,f+16|0,h+56|0,c,e,i);break b;case 34:g=a;a=qa[H[H[a+8>>2]+12>>2]](a+8|0)|0;H[h+56>>2]=Bc(g,b,c,d,e,f,Ca(a),Ca(a)+(wa(a)<<2)|0);break b;case 35:case 36:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];e:{if(!(c&4|(b|0)<1|(b|0)>31)){H[f+12>>2]=b;break e}H[a>>2]=c|4}break b;case 3:g=H[3331];H[h+24>>2]=H[3330];H[h+28>>2]=g;g=H[3329];H[h+16>>2]=H[3328];H[h+20>>2]=g;g=H[3327];H[h+8>>2]=H[3326];H[h+12>>2]=g;g=H[3325];H[h>>2]=H[3324];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+32|0);break b;case 5:g=H[3339];H[h+24>>2]=H[3338];H[h+28>>2]=g;g=H[3337];H[h+16>>2]=H[3336];H[h+20>>2]=g;g=H[3335];H[h+8>>2]=H[3334];H[h+12>>2]=g;g=H[3333];H[h>>2]=H[3332];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+32|0);break b;case 7:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];f:{if(!(c&4|(b|0)>23)){H[f+8>>2]=b;break f}H[a>>2]=c|4}break b;case 8:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];g:{if(!(c&4|(b|0)<1|(b|0)>12)){H[f+8>>2]=b;break g}H[a>>2]=c|4}break b;case 41:a=e;b=rc(h+56|0,c,a,i,3);c=H[a>>2];h:{if(!(c&4|(b|0)>365)){H[f+28>>2]=b;break h}H[a>>2]=c|4}break b;case 44:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];i:{if(!(c&4|(b|0)>12)){H[f+16>>2]=b-1;break i}H[a>>2]=c|4}break b;case 12:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];j:{if(!(c&4|(b|0)>59)){H[f+4>>2]=b;break j}H[a>>2]=c|4}break b;case 45:case 51:a=h+56|0;b=oa-16|0;oa=b;H[b+8>>2]=c;while(1){k:{if(!Ab(a,b+8|0)){break k}if(!cc(i,8192,ab(a))){break k}hb(a);continue}break};if(jb(a,b+8|0)){H[e>>2]=H[e>>2]|2}oa=b+16|0;break b;case 47:b=h+56|0;a=qa[H[H[a+8>>2]+8>>2]](a+8|0)|0;l:{if((wa(a)|0)==(0-wa(a+12|0)|0)){H[e>>2]=H[e>>2]|4;break l}a=Re(b,c,a,a+24|0,i,e,0)-a|0;b=H[f+8>>2];if(!(a|(b|0)!=12)){H[f+8>>2]=0;break l}if(!((a|0)!=12|(b|0)>11)){H[f+8>>2]=b+12}}break b;case 49:g=Wb(h,13360,44);H[g+56>>2]=Bc(a,b,c,d,e,f,g,g+44|0);break b;case 17:H[h+16>>2]=H[3356];g=H[3355];H[h+8>>2]=H[3354];H[h+12>>2]=g;g=H[3353];H[h>>2]=H[3352];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+20|0);break b;case 18:a=e;b=rc(h+56|0,c,a,i,2);c=H[a>>2];m:{if(!(c&4|(b|0)>60)){H[f>>2]=b;break m}H[a>>2]=c|4}break b;case 19:g=H[3367];H[h+24>>2]=H[3366];H[h+28>>2]=g;g=H[3365];H[h+16>>2]=H[3364];H[h+20>>2]=g;g=H[3363];H[h+8>>2]=H[3362];H[h+12>>2]=g;g=H[3361];H[h>>2]=H[3360];H[h+4>>2]=g;H[h+56>>2]=Bc(a,b,c,d,e,f,h,h+32|0);break b;case 54:a=e;b=rc(h+56|0,c,a,i,1);c=H[a>>2];n:{if(!(c&4|(b|0)>6)){H[f+24>>2]=b;break n}H[a>>2]=c|4}break b;case 55:a=qa[H[H[a>>2]+20>>2]](a,b,c,d,e,f)|0;break a;case 23:g=a;a=qa[H[H[a+8>>2]+24>>2]](a+8|0)|0;H[h+56>>2]=Bc(g,b,c,d,e,f,Ca(a),Ca(a)+(wa(a)<<2)|0);break b;case 56:ri(f+20|0,h+56|0,c,e,i);break b;case 24:a=rc(h+56|0,c,e,i,4);if(!(I[e|0]&4)){H[f+20>>2]=a-1900}break b;default:if((g|0)==37){break c}break;case 2:case 4:case 6:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 20:case 21:case 22:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 37:case 38:case 40:case 42:case 43:case 46:case 48:case 50:case 52:case 53:break d}}H[e>>2]=H[e>>2]|4;break b}a=oa-16|0;oa=a;H[a+8>>2]=c;b=6;c=h+56|0;o:{p:{if(jb(c,a+8|0)){break p}b=4;if((yd(i,ab(c))|0)!=37){break p}b=2;if(!jb(hb(c),a+8|0)){break o}}H[e>>2]=H[e>>2]|b}oa=a+16|0}a=H[h+56>>2]}oa=h- -64|0;return a|0}function Lb(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=oa-112|0;oa=k;l=h;o=i&2147483647;m=c-(b>>>0<1)|0;j=b-1|0;q=(j|0)==-1&(m|0)==-1;r=d;p=(c|0)==(m|0)&b>>>0>j>>>0|c>>>0>m>>>0;n=d+p|0;m=e&2147483647;j=m;j=n>>>0

>>0?j+1|0:j;p=n-1|0;a:{b:{j=j-(n>>>0<1)|0;if(!((p|0)==-1&(j|0)==2147418111?q:j>>>0>2147418111)){j=f;n=g-(j>>>0<1)|0;j=j-1|0;q=(j|0)!=-1|(n|0)!=-1;p=(g|0)==(n|0)&f>>>0>j>>>0|g>>>0>n>>>0;n=p+l|0;j=o;j=n>>>0

>>0?j+1|0:j;p=n;n=n-1|0;j=j-(p>>>0<1)|0;if((n|0)==-1&(j|0)==2147418111?q:(j|0)==2147418111&(n|0)!=-1|j>>>0<2147418111){break b}}if(!(!r&(m|0)==2147418112?!(b|c):m>>>0<2147418112)){h=d;i=e|32768;f=b;g=c;break a}if(!(!l&(o|0)==2147418112?!(f|g):o>>>0<2147418112)){i=i|32768;break a}if(!(b|r|(m^2147418112|c))){j=d;d=!(b^f|d^h|(c^g|e^i^-2147483648));h=d?0:j;i=d?2147450880:e;f=d?0:b;g=d?0:c;break a}if(!(f|l|(o^2147418112|g))){break a}if(!(b|r|(c|m))){if(f|l|(g|o)){break a}f=b&f;g=c&g;h=d&h;i=e&i;break a}if(f|l|(g|o)){break b}f=b;g=c;h=d;i=e;break a}q=(l|0)==(r|0)&(m|0)==(o|0)?(c|0)==(g|0)&b>>>0>>0|c>>>0>>0:(m|0)==(o|0)&l>>>0>r>>>0|m>>>0>>0;j=q;n=j?f:b;o=j?g:c;l=j?i:e;r=l;m=j?h:d;j=l&65535;i=q?e:i;e=i;h=q?d:h;p=i>>>16&32767;l=l>>>16&32767;if(!l){d=!(j|m);i=d<<6;l=Q(d?n:m)+32|0;d=Q(d?o:j);d=i+((d|0)==32?l:d)|0;xb(k+96|0,n,o,m,j,d-15|0);m=H[k+104>>2];n=H[k+96>>2];o=H[k+100>>2];l=16-d|0;j=H[k+108>>2]}f=q?b:f;g=q?c:g;i=e&65535;if(!p){b=!(h|i);c=b<<6;d=Q(b?f:h)+32|0;b=Q(b?g:i);b=c+((b|0)==32?d:b)|0;xb(k+80|0,f,g,h,i,b-15|0);p=16-b|0;h=H[k+88>>2];i=H[k+92>>2];g=H[k+84>>2];f=H[k+80>>2]}b=h;c=i<<3|b>>>29;h=b<<3|g>>>29;i=c|524288;b=m;d=j<<3|b>>>29;m=b<<3|o>>>29;s=d;q=e^r;b=f;j=g<<3|b>>>29;b=b<<3;c=j;d=l-p|0;e=b;c:{if(!d){break c}if(d>>>0>127){h=0;i=0;j=0;e=1;break c}xb(k- -64|0,b,c,h,i,128-d|0);hd(k+48|0,b,c,h,i,d);h=H[k+56>>2];i=H[k+60>>2];j=H[k+52>>2];e=H[k+48>>2]|((H[k+64>>2]|H[k+72>>2])!=0|(H[k+68>>2]|H[k+76>>2])!=0)}f=j;d=m;p=s|524288;b=n;j=o<<3|b>>>29;c=b<<3;d:{if((q|0)<-1?1:(q|0)<=-1){o=e;b=c-e|0;m=h;n=d-h|0;e=(f|0)==(j|0)&c>>>0>>0|f>>>0>j>>>0;h=n-e|0;c=j-((c>>>0>>0)+f|0)|0;i=(p-((d>>>0>>0)+i|0)|0)-(e>>>0>n>>>0)|0;if(!(b|h|(c|i))){f=0;g=0;h=0;i=0;break a}if(i>>>0>524287){break d}f=b;d=!(h|i);e=d<<6;g=Q(d?b:h)+32|0;b=Q(d?c:i);b=e+((b|0)==32?g:b)|0;b=b-12|0;xb(k+32|0,f,c,h,i,b);l=l-b|0;h=H[k+40>>2];i=H[k+44>>2];b=H[k+32>>2];c=H[k+36>>2];break d}b=c;g=b+e|0;c=f+j|0;c=b>>>0>g>>>0?c+1|0:c;b=g;g=(c|0)==(f|0)&e>>>0>b>>>0|c>>>0>>0;e=d;f=d+h|0;d=i+p|0;d=e>>>0>f>>>0?d+1|0:d;e=g+f|0;h=e;i=h>>>0>>0?d+1|0:d;if(!(i&1048576)){break d}b=b&1|((c&1)<<31|b>>>1);c=h<<31|c>>>1;l=l+1|0;h=(i&1)<<31|h>>>1;i=i>>>1|0}o=0;r=r&-2147483648;if((l|0)>=32767){h=o;i=r|2147418112;f=0;g=0;break a}e=0;e:{if((l|0)>0){e=l;break e}xb(k+16|0,b,c,h,i,l+127|0);hd(k,b,c,h,i,1-l|0);b=H[k>>2]|((H[k+16>>2]|H[k+24>>2])!=0|(H[k+20>>2]|H[k+28>>2])!=0);c=H[k+4>>2];h=H[k+8>>2];i=H[k+12>>2]}j=(c&7)<<29|b>>>3;l=b&7;b=j+(l>>>0>4)|0;d=h<<29|c>>>3;c=b>>>0>>0?d+1|0:d;f=b;g=c;b=(d|0)==(c|0)&b>>>0>>0|c>>>0>>0;d=o|((i&7)<<29|h>>>3);b=b+d|0;j=r|(i>>>3&65535|e<<16);h=b;i=b>>>0>>0?j+1|0:j;f:{if((l|0)==4){j=i;c=0;d=g+c|0;e=f&1;b=f+e|0;d=b>>>0>>0?d+1|0:d;f=b;g=d;c=(c|0)==(d|0)&b>>>0>>0|c>>>0>d>>>0;b=c+h|0;h=b;i=b>>>0>>0?j+1|0:j;break f}if(!l){break a}}}H[a>>2]=f;H[a+4>>2]=g;H[a+8>>2]=h;H[a+12>>2]=i;oa=k+112|0}function gn(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;var i=0;h=oa-32|0;oa=h;H[h+24>>2]=b;H[e>>2]=0;Ia(h+8|0,d);i=Fb(h+8|0);Fa(h+8|0);a:{b:{c:{d:{switch(g-65|0){case 0:case 32:yi(a,f+24|0,h+24|0,c,e,i);break b;case 1:case 33:case 39:wi(a,f+16|0,h+24|0,c,e,i);break b;case 34:g=a;a=qa[H[H[a+8>>2]+12>>2]](a+8|0)|0;H[h+24>>2]=Cc(g,b,c,d,e,f,Ca(a),Ca(a)+wa(a)|0);break b;case 35:case 36:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];e:{if(!(c&4|(b|0)<1|(b|0)>31)){H[f+12>>2]=b;break e}H[a>>2]=c|4}break b;case 3:H[h+8>>2]=623865125;H[h+12>>2]=2032480100;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+16|0);break b;case 5:H[h+8>>2]=623728933;H[h+12>>2]=1680158061;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+16|0);break b;case 7:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];f:{if(!(c&4|(b|0)>23)){H[f+8>>2]=b;break f}H[a>>2]=c|4}break b;case 8:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];g:{if(!(c&4|(b|0)<1|(b|0)>12)){H[f+8>>2]=b;break g}H[a>>2]=c|4}break b;case 41:a=e;b=sc(h+24|0,c,a,i,3);c=H[a>>2];h:{if(!(c&4|(b|0)>365)){H[f+28>>2]=b;break h}H[a>>2]=c|4}break b;case 44:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];i:{if(!(c&4|(b|0)>12)){H[f+16>>2]=b-1;break i}H[a>>2]=c|4}break b;case 12:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];j:{if(!(c&4|(b|0)>59)){H[f+4>>2]=b;break j}H[a>>2]=c|4}break b;case 45:case 51:a=h+24|0;b=oa-16|0;oa=b;H[b+8>>2]=c;while(1){k:{if(!Bb(a,b+8|0)){break k}if(!dc(i,8192,bb(a))){break k}ib(a);continue}break};if(kb(a,b+8|0)){H[e>>2]=H[e>>2]|2}oa=b+16|0;break b;case 47:b=h+24|0;a=qa[H[H[a+8>>2]+8>>2]](a+8|0)|0;l:{if((wa(a)|0)==(0-wa(a+12|0)|0)){H[e>>2]=H[e>>2]|4;break l}a=Te(b,c,a,a+24|0,i,e,0)-a|0;b=H[f+8>>2];if(!(a|(b|0)!=12)){H[f+8>>2]=0;break l}if(!((a|0)!=12|(b|0)>11)){H[f+8>>2]=b+12}}break b;case 49:g=I[13284]|I[13285]<<8|(I[13286]<<16|I[13287]<<24);F[h+15|0]=g;F[h+16|0]=g>>>8;F[h+17|0]=g>>>16;F[h+18|0]=g>>>24;g=I[13281]|I[13282]<<8|(I[13283]<<16|I[13284]<<24);H[h+8>>2]=I[13277]|I[13278]<<8|(I[13279]<<16|I[13280]<<24);H[h+12>>2]=g;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+19|0);break b;case 17:F[h+12|0]=I[13292];H[h+8>>2]=I[13288]|I[13289]<<8|(I[13290]<<16|I[13291]<<24);H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+13|0);break b;case 18:a=e;b=sc(h+24|0,c,a,i,2);c=H[a>>2];m:{if(!(c&4|(b|0)>60)){H[f>>2]=b;break m}H[a>>2]=c|4}break b;case 19:H[h+8>>2]=624576549;H[h+12>>2]=1394948685;H[h+24>>2]=Cc(a,b,c,d,e,f,h+8|0,h+16|0);break b;case 54:a=e;b=sc(h+24|0,c,a,i,1);c=H[a>>2];n:{if(!(c&4|(b|0)>6)){H[f+24>>2]=b;break n}H[a>>2]=c|4}break b;case 55:a=qa[H[H[a>>2]+20>>2]](a,b,c,d,e,f)|0;break a;case 23:g=a;a=qa[H[H[a+8>>2]+24>>2]](a+8|0)|0;H[h+24>>2]=Cc(g,b,c,d,e,f,Ca(a),Ca(a)+wa(a)|0);break b;case 56:vi(f+20|0,h+24|0,c,e,i);break b;case 24:a=sc(h+24|0,c,e,i,4);if(!(I[e|0]&4)){H[f+20>>2]=a-1900}break b;default:if((g|0)==37){break c}break;case 2:case 4:case 6:case 9:case 10:case 11:case 13:case 14:case 15:case 16:case 20:case 21:case 22:case 25:case 26:case 27:case 28:case 29:case 30:case 31:case 37:case 38:case 40:case 42:case 43:case 46:case 48:case 50:case 52:case 53:break d}}H[e>>2]=H[e>>2]|4;break b}a=oa-16|0;oa=a;H[a+8>>2]=c;b=6;c=h+24|0;o:{p:{if(kb(c,a+8|0)){break p}b=4;if((zd(i,bb(c))|0)!=37){break p}b=2;if(!kb(ib(c),a+8|0)){break o}}H[e>>2]=H[e>>2]|b}oa=a+16|0}a=H[h+24>>2]}oa=h+32|0;return a|0}function lk(){var a=0,b=0,c=0;a=oa-16|0;oa=a;a:{if(ga(a+12|0,a+8|0)|0){break a}b=cb((H[a+12>>2]<<2)+4|0);H[6069]=b;if(!b){break a}b=cb(H[a+8>>2]);if(b){H[H[6069]+(H[a+12>>2]<<2)>>2]=0;if(!(fa(H[6069],b|0)|0)){break a}}H[6069]=0}oa=a+16|0;b:{if(F[28448]&1){break b}if(!fb(28448)){break b}b=H[1969];a=oa-16|0;oa=a;c=Hf(28092);H[7033]=28148;H[7031]=b;H[7023]=20172;F[28144]=0;H[7035]=-1;rd(a+8|0,c);qa[H[H[7023]+8>>2]](28092,a+8|0);Fa(a+8|0);oa=a+16|0;a=Xe(27416);H[6852]=18988;H[a>>2]=19008;H[6853]=0;pd(H[4744]+27408|0,28092);a=oa-16|0;oa=a;c=hh(28156);H[7049]=28212;H[7047]=b;H[7039]=20272;F[28208]=0;H[7051]=-1;rd(a+8|0,c);qa[H[H[7039]+8>>2]](28156,a+8|0);Fa(a+8|0);oa=a+16|0;a=Vg(27504);H[6874]=19036;H[a>>2]=19056;H[6875]=0;pd(H[4756]+27496|0,28156);a=H[5039];Xg(28220,a,28268);uf(27584,28220);Wg(28276,a,28324);tf(27668,28276);a=H[5040];Xg(28332,a,28380);uf(27752,28332);uf(27920,H[(H[H[6938]-12>>2]+27752|0)+24>>2]);Wg(28388,a,28436);tf(27836,28388);tf(28004,H[(H[H[6959]-12>>2]+27836|0)+24>>2]);oe(H[H[6852]-12>>2]+27408|0,27584);oe(H[H[6874]-12>>2]+27496|0,27668);Ug(H[H[6938]-12>>2]+27752|0);Ug(H[H[6959]-12>>2]+27836|0);oe(H[H[6938]-12>>2]+27752|0,27584);oe(H[H[6959]-12>>2]+27836|0,27668);eb(28448)}xa(21760,2023);xa(21772,2806);Sa(21788);Sa(21800);Sa(21812);Sa(21824);Sa(21836);Sa(21852);Sa(21864);Sa(21876);Sa(21888);Sa(21900);Sa(21912);xa(21924,2037);xa(21936,2217);xa(21948,1554);xa(21960,1983);xa(21972,2354);xa(21984,1941);xa(21996,1337);xa(22008,2324);xa(22020,2245);xa(22032,2336);xa(22044,2216);xa(22056,2309);xa(22068,2033);xa(22080,2057);xa(22092,2418);xa(22104,2155);xa(22116,1830);xa(22128,2396);xa(22140,2176);xa(22152,2050);xa(22164,1035);xa(22176,1027);xa(22188,2811);xa(22200,2997);xa(22212,2814);xa(22224,2778);xa(22236,2774);xa(22248,2771);xa(22260,2777);xa(22272,2766);xa(22284,2770);xa(22296,3063);xa(22308,1029);xa(22320,2537);xa(22332,1024);xa(22344,2763);xa(22356,2660);xa(22368,2774);xa(22380,2780);xa(22392,3066);xa(22404,1032);xa(22416,3022);xa(22428,2540);xa(22440,2995);xa(22452,2984);xa(22464,3001);xa(22476,2815);xa(22488,3069);xa(22500,3e3);xa(22512,2661);xa(22524,2781);xa(22536,3099);xa(22548,1033);xa(22560,3067);xa(22572,1025);xa(22584,2538);xa(22596,2658);xa(22608,2785);xa(22620,2986);xa(22632,2783);xa(22644,1880);xa(22656,1567);xa(22668,1360);xa(22680,1349);xa(22692,2040);xa(22704,2494);xa(22716,1948);xa(22728,2240);xa(22740,1176);xa(22752,1037);xa(22764,2207);xa(22776,1711);xa(22788,1896);xa(22800,2390);xa(22812,1891);xa(22824,1098);xa(22836,2145);xa(22848,2347);xa(22860,1791);xa(22872,2236);xa(22884,1411);xa(22896,2014);xa(22908,1640);xa(22920,2455);xa(22932,2410);xa(22944,1818);xa(22956,1046);xa(22968,2443);xa(22980,2439);xa(22992,2228);xa(23004,2204);xa(23016,1708);xa(23028,1786);xa(23040,1888);xa(23052,2387);xa(23064,1095);xa(23076,2142);xa(23088,2344);xa(23100,2465);xa(23112,1081);xa(23124,1840);xa(23136,1408);xa(23148,2011);xa(23160,1651);xa(23172,2452);xa(23184,2407);xa(23196,1815);xa(23208,1043);xa(23220,2427)}function Ba(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0,h=0;a:{if(!a){break a}d=a-8|0;b=H[a-4>>2];a=b&-8;f=d+a|0;b:{if(b&1){break b}if(!(b&3)){break a}b=H[d>>2];d=d-b|0;if(d>>>0>>0<=255){e=H[d+8>>2];b=b>>>3|0;c=H[d+12>>2];if((c|0)==(e|0)){H[7133]=H[7133]&Gq(-2,b);break b}H[e+12>>2]=c;H[c+8>>2]=e;break b}h=H[d+24>>2];b=H[d+12>>2];c:{if((d|0)!=(b|0)){c=H[d+8>>2];H[c+12>>2]=b;H[b+8>>2]=c;break c}d:{e=d+20|0;c=H[e>>2];if(c){break d}e=d+16|0;c=H[e>>2];if(c){break d}b=0;break c}while(1){g=e;b=c;e=b+20|0;c=H[e>>2];if(c){continue}e=b+16|0;c=H[b+16>>2];if(c){continue}break}H[g>>2]=0}if(!h){break b}e=H[d+28>>2];c=(e<<2)+28836|0;e:{if(H[c>>2]==(d|0)){H[c>>2]=b;if(b){break e}H[7134]=H[7134]&Gq(-2,e);break b}H[h+(H[h+16>>2]==(d|0)?16:20)>>2]=b;if(!b){break b}}H[b+24>>2]=h;c=H[d+16>>2];if(c){H[b+16>>2]=c;H[c+24>>2]=b}c=H[d+20>>2];if(!c){break b}H[b+20>>2]=c;H[c+24>>2]=b;break b}b=H[f+4>>2];if((b&3)!=3){break b}H[7135]=a;H[f+4>>2]=b&-2;H[d+4>>2]=a|1;H[a+d>>2]=a;return}if(d>>>0>=f>>>0){break a}b=H[f+4>>2];if(!(b&1)){break a}f:{if(!(b&2)){if(H[7139]==(f|0)){H[7139]=d;a=H[7136]+a|0;H[7136]=a;H[d+4>>2]=a|1;if(H[7138]!=(d|0)){break a}H[7135]=0;H[7138]=0;return}if(H[7138]==(f|0)){H[7138]=d;a=H[7135]+a|0;H[7135]=a;H[d+4>>2]=a|1;H[a+d>>2]=a;return}a=(b&-8)+a|0;g:{if(b>>>0<=255){e=H[f+8>>2];b=b>>>3|0;c=H[f+12>>2];if((c|0)==(e|0)){H[7133]=H[7133]&Gq(-2,b);break g}H[e+12>>2]=c;H[c+8>>2]=e;break g}h=H[f+24>>2];b=H[f+12>>2];h:{if((f|0)!=(b|0)){c=H[f+8>>2];H[c+12>>2]=b;H[b+8>>2]=c;break h}i:{e=f+20|0;c=H[e>>2];if(c){break i}e=f+16|0;c=H[e>>2];if(c){break i}b=0;break h}while(1){g=e;b=c;e=b+20|0;c=H[e>>2];if(c){continue}e=b+16|0;c=H[b+16>>2];if(c){continue}break}H[g>>2]=0}if(!h){break g}e=H[f+28>>2];c=(e<<2)+28836|0;j:{if(H[c>>2]==(f|0)){H[c>>2]=b;if(b){break j}H[7134]=H[7134]&Gq(-2,e);break g}H[h+(H[h+16>>2]==(f|0)?16:20)>>2]=b;if(!b){break g}}H[b+24>>2]=h;c=H[f+16>>2];if(c){H[b+16>>2]=c;H[c+24>>2]=b}c=H[f+20>>2];if(!c){break g}H[b+20>>2]=c;H[c+24>>2]=b}H[d+4>>2]=a|1;H[a+d>>2]=a;if(H[7138]!=(d|0)){break f}H[7135]=a;return}H[f+4>>2]=b&-2;H[d+4>>2]=a|1;H[a+d>>2]=a}if(a>>>0<=255){a=a>>>3|0;b=(a<<3)+28572|0;c=H[7133];a=1<>2]}H[b+8>>2]=d;H[a+12>>2]=d;H[d+12>>2]=b;H[d+8>>2]=a;return}e=31;H[d+16>>2]=0;H[d+20>>2]=0;if(a>>>0<=16777215){b=a>>>8|0;g=b+1048320>>>16&8;b=b<>>16&4;b=b<>>16&2;b=(b<>>15|0)-(c|(e|g))|0;e=(b<<1|a>>>b+21&1)+28|0}H[d+28>>2]=e;g=(e<<2)+28836|0;l:{m:{c=H[7134];b=1<>2]=d;H[d+24>>2]=g;break n}e=a<<((e|0)==31?0:25-(e>>>1|0)|0);b=H[g>>2];while(1){c=b;if((H[b+4>>2]&-8)==(a|0)){break m}b=e>>>29|0;e=e<<1;g=c+(b&4)|0;b=H[g+16>>2];if(b){continue}break}H[g+16>>2]=d;H[d+24>>2]=c}H[d+12>>2]=d;H[d+8>>2]=d;break l}a=H[c+8>>2];H[a+12>>2]=d;H[c+8>>2]=d;H[d+24>>2]=0;H[d+12>>2]=c;H[d+8>>2]=a}a=H[7141]-1|0;H[7141]=a?a:-1}}function Dg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;f=a+b|0;c=H[a+4>>2];a:{b:{if(c&1){break b}if(!(c&3)){break a}c=H[a>>2];b=c+b|0;c:{a=a-c|0;if((a|0)!=H[7138]){if(c>>>0<=255){e=H[a+8>>2];c=c>>>3|0;d=H[a+12>>2];if((d|0)!=(e|0)){break c}H[7133]=H[7133]&Gq(-2,c);break b}h=H[a+24>>2];c=H[a+12>>2];d:{if((c|0)!=(a|0)){d=H[a+8>>2];H[d+12>>2]=c;H[c+8>>2]=d;break d}e:{e=a+20|0;d=H[e>>2];if(d){break e}e=a+16|0;d=H[e>>2];if(d){break e}c=0;break d}while(1){g=e;c=d;e=c+20|0;d=H[e>>2];if(d){continue}e=c+16|0;d=H[c+16>>2];if(d){continue}break}H[g>>2]=0}if(!h){break b}e=H[a+28>>2];d=(e<<2)+28836|0;f:{if(H[d>>2]==(a|0)){H[d>>2]=c;if(c){break f}H[7134]=H[7134]&Gq(-2,e);break b}H[h+(H[h+16>>2]==(a|0)?16:20)>>2]=c;if(!c){break b}}H[c+24>>2]=h;d=H[a+16>>2];if(d){H[c+16>>2]=d;H[d+24>>2]=c}d=H[a+20>>2];if(!d){break b}H[c+20>>2]=d;H[d+24>>2]=c;break b}c=H[f+4>>2];if((c&3)!=3){break b}H[7135]=b;H[f+4>>2]=c&-2;H[a+4>>2]=b|1;H[f>>2]=b;return}H[e+12>>2]=d;H[d+8>>2]=e}c=H[f+4>>2];g:{if(!(c&2)){if(H[7139]==(f|0)){H[7139]=a;b=H[7136]+b|0;H[7136]=b;H[a+4>>2]=b|1;if(H[7138]!=(a|0)){break a}H[7135]=0;H[7138]=0;return}if(H[7138]==(f|0)){H[7138]=a;b=H[7135]+b|0;H[7135]=b;H[a+4>>2]=b|1;H[a+b>>2]=b;return}b=(c&-8)+b|0;h:{if(c>>>0<=255){e=H[f+8>>2];c=c>>>3|0;d=H[f+12>>2];if((d|0)==(e|0)){H[7133]=H[7133]&Gq(-2,c);break h}H[e+12>>2]=d;H[d+8>>2]=e;break h}h=H[f+24>>2];c=H[f+12>>2];i:{if((f|0)!=(c|0)){d=H[f+8>>2];H[d+12>>2]=c;H[c+8>>2]=d;break i}j:{d=f+20|0;e=H[d>>2];if(e){break j}d=f+16|0;e=H[d>>2];if(e){break j}c=0;break i}while(1){g=d;c=e;d=c+20|0;e=H[d>>2];if(e){continue}d=c+16|0;e=H[c+16>>2];if(e){continue}break}H[g>>2]=0}if(!h){break h}e=H[f+28>>2];d=(e<<2)+28836|0;k:{if(H[d>>2]==(f|0)){H[d>>2]=c;if(c){break k}H[7134]=H[7134]&Gq(-2,e);break h}H[h+(H[h+16>>2]==(f|0)?16:20)>>2]=c;if(!c){break h}}H[c+24>>2]=h;d=H[f+16>>2];if(d){H[c+16>>2]=d;H[d+24>>2]=c}d=H[f+20>>2];if(!d){break h}H[c+20>>2]=d;H[d+24>>2]=c}H[a+4>>2]=b|1;H[a+b>>2]=b;if(H[7138]!=(a|0)){break g}H[7135]=b;return}H[f+4>>2]=c&-2;H[a+4>>2]=b|1;H[a+b>>2]=b}if(b>>>0<=255){b=b>>>3|0;c=(b<<3)+28572|0;d=H[7133];b=1<>2]}H[c+8>>2]=a;H[b+12>>2]=a;H[a+12>>2]=c;H[a+8>>2]=b;return}e=31;H[a+16>>2]=0;H[a+20>>2]=0;if(b>>>0<=16777215){c=b>>>8|0;g=c+1048320>>>16&8;c=c<>>16&4;c=c<>>16&2;c=(c<>>15|0)-(d|(e|g))|0;e=(c<<1|b>>>c+21&1)+28|0}H[a+28>>2]=e;g=(e<<2)+28836|0;m:{d=H[7134];c=1<>2]=a;H[a+24>>2]=g;break n}e=b<<((e|0)==31?0:25-(e>>>1|0)|0);c=H[g>>2];while(1){d=c;if((H[c+4>>2]&-8)==(b|0)){break m}c=e>>>29|0;e=e<<1;g=d+(c&4)|0;c=H[g+16>>2];if(c){continue}break}H[g+16>>2]=a;H[a+24>>2]=d}H[a+12>>2]=a;H[a+8>>2]=a;return}b=H[d+8>>2];H[b+12>>2]=a;H[d+8>>2]=a;H[a+24>>2]=0;H[a+12>>2]=d;H[a+8>>2]=b}}function pm(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;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;u=oa-16|0;oa=u;k=c;while(1){a:{if((d|0)==(k|0)){k=d;break a}if(!H[k>>2]){break a}k=k+4|0;continue}break}H[h>>2]=f;H[e>>2]=c;while(1){b:{c:{if(!((c|0)==(d|0)|(f|0)==(g|0))){p=H[b+4>>2];H[u+8>>2]=H[b>>2];H[u+12>>2]=p;x=1;v=oa-16|0;oa=v;H[v+12>>2]=H[a+8>>2];y=jc(v+8|0,v+12|0);r=k-c>>2;p=0;l=oa-272|0;oa=l;z=e;i=H[e>>2];H[l+12>>2]=i;t=f?f:l+16|0;A=f;d:{e:{f:{q=f?g-f|0:256;if(!i|!q){break f}m=r>>>0>=q>>>0;if(!(m|r>>>0>32)){break e}while(1){m=m?q:r;r=r-m|0;s=0;w=oa-16|0;oa=w;g:{h:{i:{j:{j=t;if(j){if(m>>>0>=4){break j}i=m;break i}m=0;j=H[l+12>>2];i=H[j>>2];if(!i){break g}while(1){o=1;if(i>>>0>=128){s=-1;o=id(w+12|0,i);if((o|0)==-1){break g}}i=H[j+4>>2];j=j+4|0;m=m+o|0;s=m;if(i){continue}break}break g}o=H[l+12>>2];i=m;while(1){n=H[o>>2];k:{if(n-1>>>0>=127){if(!n){F[j|0]=0;H[l+12>>2]=0;break h}s=-1;n=id(j,n);if((n|0)==-1){break g}i=i-n|0;j=j+n|0;break k}F[j|0]=n;i=i-1|0;o=H[l+12>>2];j=j+1|0}o=o+4|0;H[l+12>>2]=o;if(i>>>0>3){continue}break}}if(i){o=H[l+12>>2];while(1){n=H[o>>2];l:{if(n-1>>>0>=127){if(!n){F[j|0]=0;H[l+12>>2]=0;break h}s=-1;n=id(w+12|0,n);if((n|0)==-1){break g}if(i>>>0>>0){break h}id(j,H[o>>2]);i=i-n|0;j=j+n|0;break l}F[j|0]=n;i=i-1|0;o=H[l+12>>2];j=j+1|0}o=o+4|0;H[l+12>>2]=o;if(i){continue}break}}s=m;break g}s=m-i|0}oa=w+16|0;if((s|0)==-1){q=0;i=H[l+12>>2];p=-1;break f}j=(l+16|0)==(t|0);q=q-(j?0:s)|0;t=j?t:s+t|0;p=p+s|0;i=H[l+12>>2];if(!i|!q){break f}m=r>>>0>=q>>>0;if(m|r>>>0>=33){continue}break}break e}if(!i){break d}}if(!q|!r){break d}m=p;while(1){m:{j=id(t,H[i>>2]);n:{if(j+1>>>0<=1){p=-1;if(j){break d}H[l+12>>2]=0;break n}i=H[l+12>>2]+4|0;H[l+12>>2]=i;m=j+m|0;q=q-j|0;if(q){break m}}p=m;break d}t=j+t|0;p=m;r=r-1|0;if(r){continue}break}}if(A){H[z>>2]=H[l+12>>2]}oa=l+272|0;ic(y);oa=v+16|0;o:{p:{q:{r:{switch(p+1|0){case 0:H[h>>2]=f;while(1){s:{if(H[e>>2]==(c|0)){break s}b=Of(f,H[c>>2],H[a+8>>2]);if((b|0)==-1){break s}f=b+H[h>>2]|0;H[h>>2]=f;c=c+4|0;continue}break};H[e>>2]=c;break q;case 1:break c;default:break r}}f=p+H[h>>2]|0;H[h>>2]=f;if((f|0)==(g|0)){break o}if((d|0)==(k|0)){c=H[e>>2];k=d;continue}k=Of(u+4|0,0,H[a+8>>2]);if((k|0)!=-1){break p}}x=2;break c}c=u+4|0;if(g-H[h>>2]>>>0>>0){break c}while(1){if(k){f=I[c|0];p=H[h>>2];H[h>>2]=p+1;F[p|0]=f;k=k-1|0;c=c+1|0;continue}break}c=H[e>>2]+4|0;H[e>>2]=c;k=c;while(1){if((d|0)==(k|0)){k=d;break b}if(!H[k>>2]){break b}k=k+4|0;continue}}c=H[e>>2]}x=(c|0)!=(d|0)}oa=u+16|0;return x|0}f=H[h>>2];continue}}function Cg(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;j=oa-128|0;oa=j;a:{b:{c:{if(!gd(f,g,h,i,0,0,0,0)){break c}m=f;n=g;l=h;o=i&65535;k=i>>>16&32767;d:{e:{if((k|0)!=32767){p=4;if(k){break e}m=l|m|(n|o)?3:2;break d}p=!(l|m|(n|o))}m=p}if(!m){break c}r=e>>>16|0;o=r&32767;if((o|0)!=32767){break b}}Ta(j+16|0,b,c,d,e,f,g,h,i);e=H[j+16>>2];d=H[j+20>>2];c=H[j+24>>2];b=H[j+28>>2];lj(j,e,d,c,b,e,d,c,b);d=H[j+8>>2];e=H[j+12>>2];h=H[j>>2];i=H[j+4>>2];break a}l=o<<16;p=d;q=l|e&65535;m=q;n=h;q=i>>>16&32767;k=i&65535|q<<16;if((gd(b,c,p,m,f,g,h,k)|0)<=0){if(gd(b,c,p,m,f,g,n,k)){h=b;i=c;break a}Ta(j+112|0,b,c,d,e,0,0,0,0);d=H[j+120>>2];e=H[j+124>>2];h=H[j+112>>2];i=H[j+116>>2];break a}if(o){i=c;h=b}else{Ta(j+96|0,b,c,p,m,0,0,0,1081540608);h=H[j+108>>2];m=h;p=H[j+104>>2];o=(h>>>16|0)-120|0;i=H[j+100>>2];h=H[j+96>>2]}if(!q){Ta(j+80|0,f,g,n,k,0,0,0,1081540608);f=H[j+92>>2];k=f;n=H[j+88>>2];q=(k>>>16|0)-120|0;g=H[j+84>>2];f=H[j+80>>2]}s=k&65535|65536;m=m&65535|65536;if((o|0)>(q|0)){while(1){k=p;l=n;t=k-l|0;l=m-((k>>>0>>0)+s|0)|0;k=(g|0)==(i|0)&f>>>0>h>>>0|g>>>0>i>>>0;l=l-(k>>>0>t>>>0)|0;k=t-k|0;f:{if((l|0)>0?1:(l|0)>=0){m=h;h=h-f|0;i=i-((f>>>0>m>>>0)+g|0)|0;if(!(h|k|(i|l))){Ta(j+32|0,b,c,d,e,0,0,0,0);d=H[j+40>>2];e=H[j+44>>2];h=H[j+32>>2];i=H[j+36>>2];break a}l=l<<1|k>>>31;p=k<<1|i>>>31;break f}l=m<<1|p>>>31;p=p<<1|i>>>31}m=l;l=i<<1|h>>>31;h=h<<1;i=l;o=o-1|0;if((q|0)<(o|0)){continue}break}o=q}l=p;q=l-n|0;n=m-((l>>>0>>0)+s|0)|0;l=(g|0)==(i|0)&f>>>0>h>>>0|g>>>0>i>>>0;k=n-(l>>>0>q>>>0)|0;n=q-l|0;g:{if((k|0)<0){n=p;k=m;break g}p=h;h=h-f|0;i=i-((f>>>0>p>>>0)+g|0)|0;if(h|n|(i|k)){break g}Ta(j+48|0,b,c,d,e,0,0,0,0);d=H[j+56>>2];e=H[j+60>>2];h=H[j+48>>2];i=H[j+52>>2];break a}if((k|0)==65535|k>>>0<65535){while(1){b=i>>>31|0;o=o-1|0;m=i<<1|h>>>31;h=h<<1;i=m;c=b;b=n;k=k<<1|b>>>31;n=c|b<<1;if(k>>>0<65536){continue}break}}b=r&32768;if((o|0)<=0){Ta(j- -64|0,h,i,n,k&65535|(b|o+120)<<16,0,0,0,1065811968);d=H[j+72>>2];e=H[j+76>>2];h=H[j+64>>2];i=H[j+68>>2];break a}d=n;e=k&65535|(b|o)<<16}H[a>>2]=h;H[a+4>>2]=i;H[a+8>>2]=d;H[a+12>>2]=e;oa=j+128|0}function $i(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=H[b>>2];a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(!d){break l}g=H[d>>2];if(!g){break l}if(!a){d=c;break j}H[d>>2]=0;d=c;break k}m:{if(!H[H[5347]>>2]){if(!a){break m}if(!c){break a}g=c;while(1){d=F[e|0];if(d){H[a>>2]=d&57343;a=a+4|0;e=e+1|0;g=g-1|0;if(g){continue}break a}break}H[a>>2]=0;H[b>>2]=0;return c-g|0}d=c;if(!a){break i}break g}return yc(e)}f=1;break g}f=0;break h}f=1}while(1){if(!f){f=I[e|0]>>>3|0;if((f-16|f+(g>>26))>>>0>7){break f}h=e+1|0;f=h;n:{if(!(g&33554432)){break n}if((I[h|0]&192)!=128){e=e-1|0;break d}h=e+2|0;f=h;if(!(g&524288)){break n}if((I[h|0]&192)!=128){e=e-1|0;break d}f=e+3|0}e=f;d=d-1|0;f=1;continue}while(1){g=I[e|0];o:{if(e&3|g-1>>>0>126){break o}g=H[e>>2];if((g|g-16843009)&-2139062144){break o}while(1){d=d-4|0;g=H[e+4>>2];f=e+4|0;e=f;if(!((g-16843009|g)&-2139062144)){continue}break}e=f}f=g&255;if(f-1>>>0<=126){d=d-1|0;e=e+1|0;continue}break}f=f-194|0;if(f>>>0>50){break e}e=e+1|0;g=H[(f<<2)+8912>>2];f=0;continue}}while(1){if(!f){if(!d){break a}while(1){p:{f=I[e|0];h=f-1|0;q:{r:{if(h>>>0>126){g=f;break r}if(e&3|d>>>0<5){break q}s:{while(1){g=H[e>>2];if((g|g-16843009)&-2139062144){break s}H[a>>2]=g&255;H[a+4>>2]=I[e+1|0];H[a+8>>2]=I[e+2|0];H[a+12>>2]=I[e+3|0];a=a+16|0;e=e+4|0;d=d-4|0;if(d>>>0>4){continue}break}g=I[e|0]}f=g&255;h=f-1|0}if(h>>>0>126){break p}}H[a>>2]=f;a=a+4|0;e=e+1|0;d=d-1|0;if(d){continue}break a}break}f=f-194|0;if(f>>>0>50){break e}e=e+1|0;g=H[(f<<2)+8912>>2];f=1;continue}h=I[e|0];f=h>>>3|0;if((f-16|f+(g>>26))>>>0>7){break f}t:{u:{i=e+1|0;f=h-128|g<<6;h=i;v:{if((f|0)>-1){break v}h=I[i|0]-128|0;if(h>>>0>63){break u}i=e+2|0;f=h|f<<6;h=i;if((f|0)>-1){break v}h=I[i|0]-128|0;if(h>>>0>63){break u}f=h|f<<6;h=e+3|0}e=h;H[a>>2]=f;d=d-1|0;a=a+4|0;break t}H[6070]=25;e=e-1|0;break c}f=0;continue}}e=e-1|0;if(g){break d}g=I[e|0]}if(g&255){break d}if(a){H[a>>2]=0;H[b>>2]=0}return c-d|0}H[6070]=25;if(!a){break b}}H[b>>2]=e}return-1}H[b>>2]=e;return c}function Rf(a){var b=0;a:{if(F[24556]&1){break a}if(!fb(24556)){break a}b:{if(F[24544]&1){break b}if(!fb(24544)){break b}Xa(26160);H[6540]=13480;b=oa-16|0;oa=b;H[6544]=0;H[6545]=0;H[b+12>>2]=0;rf(26192);F[26336]=0;oa=b+16|0;if(Bh()>>>0<30){$d();X()}b=Ah(ed(26176),30);H[6544]=b;H[6545]=b;H[Ce(26176)>>2]=b+120;zh(0);Uh(30);xa(26352,2653);Pa(26176);Th(26176);Sh();Xa(25840);H[6460]=14804;Za(25840,Wa(24368));Xa(25848);H[6462]=14836;Za(25848,Wa(24376));Xa(25856);F[25868]=0;H[6466]=0;H[6464]=13500;H[6466]=H[2322];Za(25856,Wa(24572));Xa(25872);H[6468]=13984;Za(25872,Wa(24564));Xa(25880);H[6470]=14132;Za(25880,Wa(24580));Xa(25888);H[6472]=13552;H[6474]=Oa();Za(25888,Wa(24588));Xa(25904);H[6476]=14280;Za(25904,Wa(24596));Xa(25912);H[6478]=14396;Za(25912,Wa(24604));Xa(25920);G[12964]=11310;H[6480]=13600;Ea(25932);Za(25920,Wa(24612));Xa(25952);H[6490]=46;H[6491]=44;H[6488]=13640;Ea(25968);Za(25952,Wa(24620));Xa(25984);H[6496]=14868;Za(25984,Wa(24384));Xa(25992);H[6498]=15112;Za(25992,Wa(24392));Xa(26e3);H[6500]=15324;Za(26e3,Wa(24400));Xa(26008);H[6502]=15556;Za(26008,Wa(24408));Xa(26016);H[6504]=16540;Za(26016,Wa(24448));Xa(26024);H[6506]=16688;Za(26024,Wa(24456));Xa(26032);H[6508]=16804;Za(26032,Wa(24464));Xa(26040);H[6510]=16920;Za(26040,Wa(24472));Xa(26048);H[6512]=17036;Za(26048,Wa(24480));Xa(26056);H[6514]=17200;Za(26056,Wa(24488));Xa(26064);H[6516]=17364;Za(26064,Wa(24496));Xa(26072);H[6518]=17528;Za(26072,Wa(24504));Xa(26080);H[6522]=18784;H[6520]=15756;H[6522]=15804;Za(26080,Wa(24416));Xa(26096);H[6526]=18820;H[6524]=16020;H[6526]=16068;Za(26096,Wa(24424));Xa(26112);uh(26120);H[6528]=16256;Za(26112,Wa(24432));Xa(26128);uh(26136);H[6532]=16412;Za(26128,Wa(24440));Xa(26144);H[6536]=17692;Za(26144,Wa(24512));Xa(26152);H[6538]=17812;Za(26152,Wa(24520));H[6134]=26160;H[6135]=24536;eb(24544)}Sf(24548,H[6135]);H[6138]=24548;eb(24556)}b=a;a=H[H[6138]>>2];H[b>>2]=a;Tf(a)}function bh(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:{b:{if(H[a+64>>2]){break b}d=1211;c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{e=c&-3;switch(e-1|0){case 4:case 20:break i;case 19:break j;case 8:case 24:break k;case 23:break m;case 7:break n;case 0:case 16:break o;case 15:break c;case 1:case 2:case 3:case 5:case 6:case 9:case 10:case 13:case 14:case 17:case 18:case 21:case 22:case 25:case 26:break d;case 12:case 28:break e;case 27:break g;case 11:break h;default:break p}}q:{switch(e-48|0){case 4:break j;case 0:break c;case 1:case 2:case 3:break d;default:break q}}switch(e-56|0){case 0:break l;case 4:break f;default:break d}}d=2535;break c}d=1638;break c}d=2991;break c}d=2988;break c}d=2994;break c}d=2488;break c}d=2518;break c}d=2491;break c}d=2525;break c}d=2521;break c}d=2529;break c}d=0}if(!d){break b}e=b;b=0;i=oa-16|0;oa=i;h=d;r:{s:{if(!kd(2533,F[d|0])){H[6070]=28;break s}f=2;if(!kd(h,43)){f=I[d|0]!=114}f=kd(d,120)?f|128:f;f=kd(d,101)?f|524288:f;d=I[d|0];f=(d|0)==114?f:f|64;f=(d|0)==119?f|512:f;H[i>>2]=438;d=da(e|0,((d|0)==97?f|1024:f)|32768,i|0)|0;if(d>>>0>=4294963201){H[6070]=0-d;d=-1}if((d|0)<0){break r}f=d;g=oa-32|0;oa=g;t:{u:{v:{if(!kd(2533,F[h|0])){H[6070]=28;break v}e=cb(1176);if(e){break u}}b=0;break t}Vb(e,0,144);if(!kd(h,43)){H[e>>2]=I[h|0]==114?8:4}w:{if(I[h|0]!=97){b=H[e>>2];break w}b=ca(f|0,3,0)|0;if(!(b&1024)){H[g+16>>2]=b|1024;ca(f|0,4,g+16|0)|0}b=H[e>>2]|128;H[e>>2]=b}F[e+75|0]=255;H[e+48>>2]=1024;H[e+60>>2]=f;H[e+44>>2]=e+152;x:{if(b&8){break x}H[g>>2]=g+24;if(ma(f|0,21523,g|0)|0){break x}F[e+75|0]=10}H[e+40>>2]=141;H[e+36>>2]=394;H[e+32>>2]=140;H[e+12>>2]=139;if(!H[6072]){H[e+76>>2]=-1}H[e+56>>2]=H[6068];b=H[6068];if(b){H[b+52>>2]=e}H[6068]=e;b=e}oa=g+32|0;if(b){break r}aa(d|0)|0}b=0}oa=i+16|0;H[a+64>>2]=b;if(!b){break b}H[a+88>>2]=c;if(!(c&2)){break a}if(!Ae(b,0,0,2)){break a}If(H[a+64>>2]);H[a+64>>2]=0}return 0}return a}function ke(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!a){return cb(b)}if(b>>>0>=4294967232){H[6070]=48;return 0}g=b>>>0<11?16:b+11&-8;f=a-8|0;j=H[f+4>>2];e=j&-8;a:{if(!(j&3)){if(g>>>0<256){break a}if(e>>>0>=g+4>>>0){c=f;if(e-g>>>0<=H[7253]<<1>>>0){break a}}c=0;break a}h=e+f|0;b:{if(e>>>0>=g>>>0){d=e-g|0;if(d>>>0<16){break b}H[f+4>>2]=j&1|g|2;c=f+g|0;H[c+4>>2]=d|3;H[h+4>>2]=H[h+4>>2]|1;Dg(c,d);break b}if(H[7139]==(h|0)){e=e+H[7136]|0;if(e>>>0<=g>>>0){break a}H[f+4>>2]=j&1|g|2;d=f+g|0;c=e-g|0;H[d+4>>2]=c|1;H[7136]=c;H[7139]=d;break b}if(H[7138]==(h|0)){d=e+H[7135]|0;if(d>>>0>>0){break a}c=d-g|0;c:{if(c>>>0>=16){H[f+4>>2]=j&1|g|2;e=f+g|0;H[e+4>>2]=c|1;d=d+f|0;H[d>>2]=c;H[d+4>>2]=H[d+4>>2]&-2;break c}H[f+4>>2]=d|j&1|2;c=d+f|0;H[c+4>>2]=H[c+4>>2]|1;c=0;e=0}H[7138]=e;H[7135]=c;break b}d=H[h+4>>2];if(d&2){break a}k=e+(d&-8)|0;if(k>>>0>>0){break a}m=k-g|0;d:{if(d>>>0<=255){e=H[h+8>>2];c=d>>>3|0;d=H[h+12>>2];if((d|0)==(e|0)){H[7133]=H[7133]&Gq(-2,c);break d}H[e+12>>2]=d;H[d+8>>2]=e;break d}l=H[h+24>>2];i=H[h+12>>2];e:{if((i|0)!=(h|0)){c=H[h+8>>2];H[c+12>>2]=i;H[i+8>>2]=c;break e}f:{e=h+20|0;c=H[e>>2];if(c){break f}e=h+16|0;c=H[e>>2];if(c){break f}i=0;break e}while(1){d=e;i=c;e=c+20|0;c=H[e>>2];if(c){continue}e=i+16|0;c=H[i+16>>2];if(c){continue}break}H[d>>2]=0}if(!l){break d}d=H[h+28>>2];c=(d<<2)+28836|0;g:{if(H[c>>2]==(h|0)){H[c>>2]=i;if(i){break g}H[7134]=H[7134]&Gq(-2,d);break d}H[(H[l+16>>2]==(h|0)?16:20)+l>>2]=i;if(!i){break d}}H[i+24>>2]=l;c=H[h+16>>2];if(c){H[i+16>>2]=c;H[c+24>>2]=i}c=H[h+20>>2];if(!c){break d}H[i+20>>2]=c;H[c+24>>2]=i}if(m>>>0<=15){H[f+4>>2]=j&1|k|2;c=f+k|0;H[c+4>>2]=H[c+4>>2]|1;break b}H[f+4>>2]=j&1|g|2;d=f+g|0;H[d+4>>2]=m|3;c=f+k|0;H[c+4>>2]=H[c+4>>2]|1;Dg(d,m)}c=f}if(c){return c+8|0}f=cb(b);if(!f){return 0}c=H[a-4>>2];c=(c&3?-4:-8)+(c&-8)|0;Wb(f,a,b>>>0>c>>>0?c:b);Ba(a);return f}function om(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;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;r=oa-16|0;oa=r;j=c;while(1){a:{if((d|0)==(j|0)){j=d;break a}if(!I[j|0]){break a}j=j+1|0;continue}break}H[h>>2]=f;H[e>>2]=c;while(1){b:{c:{d:{if((c|0)==(d|0)|(f|0)==(g|0)){break d}i=H[b+4>>2];H[r+8>>2]=H[b>>2];H[r+12>>2]=i;s=oa-16|0;oa=s;H[s+12>>2]=H[a+8>>2];u=jc(s+8|0,s+12|0);n=j-c|0;t=b;m=oa-1040|0;oa=m;v=e;o=H[e>>2];H[m+12>>2]=o;p=f?f:m+16|0;l=0;w=f;e:{f:{g:{k=f?g-f>>2:256;if(!o|!k){break g}i=n>>>2|0;q=k>>>0<=i>>>0;if(i>>>0>>0?n>>>0<=131:0){break f}while(1){i=q?k:i;n=n-i|0;q=$i(p,m+12|0,i,t);if((q|0)==-1){k=0;o=H[m+12>>2];l=-1;break g}i=(m+16|0)==(p|0);k=k-(i?0:q)|0;p=i?p:(q<<2)+p|0;l=l+q|0;o=H[m+12>>2];if(!o|!k){break g}i=n>>>2|0;q=k>>>0<=i>>>0;if(n>>>0>131|i>>>0>=k>>>0){continue}break}break f}if(!o){break e}}if(!k|!n){break e}i=l;while(1){h:{l=Ve(p,o,n,t);i:{if(l+2>>>0<=2){j:{switch(l+1|0){case 1:H[m+12>>2]=0;break i;case 0:break e;default:break j}}H[t>>2]=0;break i}o=H[m+12>>2]+l|0;H[m+12>>2]=o;i=i+1|0;k=k-1|0;if(k){break h}}l=i;break e}p=p+4|0;n=n-l|0;l=i;if(n){continue}break}}if(w){H[v>>2]=H[m+12>>2]}oa=m+1040|0;ic(u);oa=s+16|0;k:{l:{m:{n:{if((l|0)==-1){while(1){o:{H[h>>2]=f;if(H[e>>2]==(c|0)){break o}g=1;p:{q:{r:{b=Ih(f,c,j-c|0,r+8|0,H[a+8>>2]);switch(b+2|0){case 2:break p;case 1:break r;case 0:break l;default:break q}}H[e>>2]=c;break n}g=b}c=c+g|0;f=H[h>>2]+4|0;continue}break}H[e>>2]=c;break d}f=H[h>>2]+(l<<2)|0;H[h>>2]=f;if((f|0)==(g|0)){break k}c=H[e>>2];if((d|0)==(j|0)){j=d;continue}if(!Ih(f,c,1,b,H[a+8>>2])){break m}}a=2;break c}H[h>>2]=H[h>>2]+4;c=H[e>>2]+1|0;H[e>>2]=c;j=c;while(1){if((d|0)==(j|0)){j=d;break b}if(!I[j|0]){break b}j=j+1|0;continue}}H[e>>2]=c;a=1;break c}c=H[e>>2]}a=(c|0)!=(d|0)}oa=r+16|0;return a|0}f=H[h>>2];continue}}function Lj(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=oa-16|0;oa=g;F[a+221|0]=0;a:{if(I[a+214|0]|!I[a+209|0]|(I[a+213|0]|I[a+217|0])){break a}if(I[a+216|0]|I[a+215|0]){break a}d=a+160|0;c=wa(d);b=H[a+200>>2];b:{while(1){b=b+1|0;e=0;if((c|0)<=(b|0)){break b}if(Db(F[Aa(d,b)|0])){continue}break}e=1;if(!Ra(d,b,2,22200)){break b}e=!Ra(d,b,2,22188)}if(e){break a}b=a+172|0;d=wa(b);if((d|0)<1){break a}f=Db(F[Aa(b,d-1|0)|0])}b=F[a+192|0];F[a+193|0]=b;c:{if(Db(b)){break c}F[a+194|0]=I[a+192|0];if(I[a+217|0]|(I[a+214|0]|I[a+213|0])){break c}if(Kd(a,22200)){break c}if(Kd(a,22188)){break c}F[a+195|0]=I[a+194|0]}d=a+160|0;e=wa(d);d:{e:{if((e|0)<=(H[a+200>>2]+1|0)){break e}if(!(i=1,j=!Db(af(a))|I[a+214|0],k=I[a+213|0],k?i:j)){break e}b=1;c=H[a+200>>2]+1|0;H[a+200>>2]=c;c=I[Aa(d,c)|0];F[a+192|0]=c;f:{if(!f){break f}if(!Db(c<<24>>24)){break f}while(1){c=H[a+200>>2]+1|0;if((c|0)>=(e|0)){break f}H[a+200>>2]=c;c=F[Aa(d,c)|0];F[a+192|0]=c;if(Db(c)){continue}break}}if(!I[a+212|0]|I[a+192|0]!=9){break d}F[a+192|0]=32;break d}if(zj(H[a+136>>2])){yj(g,H[a+136>>2]);Ua(d,g);va(g);if(!wa(d)){b=xa(g,3239);Ua(d,b);va(b)}g:{if(!I[a+208|0]){F[a+221|0]=1;break g}F[a+208|0]=0}if(I[a+213|0]){F[a+233|0]=1}F[a+213|0]=0;e=oa-16|0;oa=e;c=a+160|0;h=wa(c);H[a+200>>2]=0;b=a;h:{if(I[a+214|0]|I[a+215|0]){break h}i:{if(!Db(F[Aa(c,0)|0])){break i}while(1){f=H[b+200>>2]+1|0;if((f|0)>=(h|0)){break i}H[b+200>>2]=f;if(Db(F[Aa(c,f)|0])){continue}break}}F[b+216|0]=0;c=xa(e,2997);f=Kd(b,c);va(c);if(!f){break h}F[b+216|0]=1;H[b+200>>2]=0}oa=e+16|0;d=I[Aa(d,H[a+200>>2])|0];F[a+192|0]=d;if(I[a+194|0]!=92){F[a+215|0]=0}b=1;if(!I[a+212|0]|(d|0)!=9){break d}F[a+192|0]=32;break d}F[a+223|0]=1;b=0}oa=g+16|0;return b}function im(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;var i=0,j=0,k=0,l=0,m=0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;a:{b:{c:{while(1){c=H[a+12>>2];if(!(c>>>0>=d>>>0|f>>>0>=g>>>0)){b=2;i=I[c|0];if(i>>>0>1114111){break b}m=a;d:{if(i<<24>>24>=0){G[f>>1]=i;b=c+1|0;break d}if(i>>>0<194){break b}if(i>>>0<=223){if((d-c|0)<2){break c}j=I[c+1|0];if((j&192)!=128){break a}i=j&63|i<<6&1984;if(i>>>0>1114111){break a}G[f>>1]=i;b=c+2|0;break d}if(i>>>0<=239){if((d-c|0)<3){break c}k=I[c+2|0];j=I[c+1|0];e:{f:{if((i|0)!=237){if((i|0)!=224){break f}if((j&224)==160){break e}break a}if((j&224)==128){break e}break a}if((j&192)!=128){break a}}if((k&192)!=128){break a}i=k&63|((j&63)<<6|i<<12);if((i&65535)>>>0>1114111){break a}G[f>>1]=i;b=c+3|0;break d}if(i>>>0>244){break b}b=1;if((d-c|0)<4){break a}k=I[c+3|0];j=I[c+2|0];c=I[c+1|0];g:{h:{switch(i-240|0){case 0:if((c+112&255)>>>0>=48){break b}break g;case 4:if((c&240)!=128){break b}break g;default:break h}}if((c&192)!=128){break b}}if((j&192)!=128|(k&192)!=128){break b}if((g-f|0)<4){break a}b=2;k=k&63;l=j<<6;i=i&7;if((k|(l&4032|(c<<12&258048|i<<18)))>>>0>1114111){break a}b=c<<2;G[f>>1]=(j>>>4&3|(b&192|i<<8|b&60))+16320|55296;H[a+8>>2]=f+2;G[f+2>>1]=k|l&960|56320;b=H[a+12>>2]+4|0}H[m+12>>2]=b;f=H[a+8>>2]+2|0;H[a+8>>2]=f;continue}break}b=c>>>0>>0;break a}b=1;break a}b=2}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return b|0}function Yh(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=oa-16|0;oa=u;H[c>>2]=a;x=d&512;while(1){if((w|0)==4){if(wa(n)>>>0>1){H[u+8>>2]=Ob(n);H[c>>2]=Ge(ai(u+8|0,1),Sc(n),H[c>>2])}d=d&176;if((d|0)!=16){if((d|0)==32){a=H[c>>2]}H[b>>2]=a}oa=u+16|0}else{a:{b:{switch(F[i+w|0]){case 0:H[b>>2]=H[c>>2];break a;case 1:H[b>>2]=H[c>>2];q=Kb(g,32);p=H[c>>2];H[c>>2]=p+4;H[p>>2]=q;break a;case 3:if($b(n)){break a}q=H[Qe(n,0)>>2];p=H[c>>2];H[c>>2]=p+4;H[p>>2]=q;break a;case 2:if($b(m)|!x){break a}H[c>>2]=Ge(Ob(m),Sc(m),H[c>>2]);break a;case 4:break b;default:break a}}y=H[c>>2];e=h?e+4|0:e;r=e;while(1){c:{if(f>>>0<=r>>>0){break c}if(!cc(g,2048,H[r>>2])){break c}r=r+4|0;continue}break}p=o;if((p|0)>=1){while(1){if(!((p|0)<1|e>>>0>=r>>>0)){r=r-4|0;s=H[r>>2];q=H[c>>2];H[c>>2]=q+4;H[q>>2]=s;p=p-1|0;continue}break}if((p|0)<1){v=0}else{v=Kb(g,48)}q=H[c>>2];while(1){s=q+4|0;if((p|0)>=1){H[q>>2]=v;p=p-1|0;q=s;continue}break}H[c>>2]=s;H[q>>2]=j}d:{if((e|0)==(r|0)){q=Kb(g,48);p=H[c>>2];r=p+4|0;H[c>>2]=r;H[p>>2]=q;break d}if($b(l)){s=-1}else{s=F[Aa(l,0)|0]}p=0;t=0;while(1){if((e|0)!=(r|0)){e:{if((p|0)!=(s|0)){q=p;break e}q=H[c>>2];H[c>>2]=q+4;H[q>>2]=k;q=0;t=t+1|0;if(wa(l)>>>0<=t>>>0){s=p;break e}if(I[Aa(l,t)|0]==127){s=-1;break e}s=F[Aa(l,t)|0]}r=r-4|0;v=H[r>>2];p=H[c>>2];H[c>>2]=p+4;H[p>>2]=v;p=q+1|0;continue}break}r=H[c>>2]}Me(y,r)}w=w+1|0;continue}break}}function jm(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;var i=0,j=0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;c=H[a+12>>2];a:{b:{while(1){if(c>>>0>=d>>>0){f=0;break a}f=2;b=J[c>>1];if(b>>>0>1114111){break a}c:{d:{if(b>>>0<=127){f=1;c=H[a+8>>2];if((g-c|0)<1){break a}H[a+8>>2]=c+1;F[c|0]=b;break d}if(b>>>0<=2047){c=H[a+8>>2];if((g-c|0)<2){break b}H[a+8>>2]=c+1;F[c|0]=b>>>6|192;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break d}if(b>>>0<=55295){c=H[a+8>>2];if((g-c|0)<3){break b}H[a+8>>2]=c+1;F[c|0]=b>>>12|224;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break d}if(b>>>0<=56319){f=1;if((d-c|0)<4){break a}i=J[c+2>>1];if((i&64512)!=56320){break c}if((g-H[a+8>>2]|0)<4){break a}f=b&960;if((i&1023|(b<<10&64512|f<<10))+65536>>>0>1114111){break c}H[a+12>>2]=c+2;c=H[a+8>>2];H[a+8>>2]=c+1;j=c;c=(f>>>6|0)+1|0;F[j|0]=c>>>2|240;f=H[a+8>>2];H[a+8>>2]=f+1;F[f|0]=c<<4&48|b>>>2&15|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=i>>>6&15|b<<4&48|128;b=H[a+8>>2];H[a+8>>2]=b+1;F[b|0]=i&63|128;break d}if(b>>>0<57344){break a}c=H[a+8>>2];if((g-c|0)<3){break b}H[a+8>>2]=c+1;F[c|0]=b>>>12|224;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128}c=H[a+12>>2]+2|0;H[a+12>>2]=c;continue}break}f=2;break a}f=1}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return f|0}function jl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0,g=0;d=oa-16|0;oa=d;a:{b:{if(!H[a+64>>2]){f=-1;break b}b=a;f=H[a+92>>2]&8;if(!f){Ac(b,0,0);c:{if(I[b+98|0]){g=H[b+32>>2];c=g+H[b+52>>2]|0;break c}g=H[b+56>>2];c=g+H[b+60>>2]|0}hc(b,g,c,c);H[b+92>>2]=8}b=!f;if(!H[a+12>>2]){c=d+16|0;hc(a,d+15|0,c,c)}if(!b){b=H[a+16>>2];c=H[a+8>>2];H[d+4>>2]=4;H[d+8>>2]=(b-c|0)/2;e=H[zc(d+8|0,d+4|0)>>2]}f=-1;d:{if(H[a+12>>2]==H[a+16>>2]){ie(H[a+8>>2],H[a+16>>2]-e|0,e);if(I[a+98|0]){b=oh(H[a+8>>2]+e|0,H[a+16>>2]-(H[a+8>>2]+e|0)|0,H[a+64>>2]);if(!b){break d}hc(a,H[a+8>>2],H[a+8>>2]+e|0,b+(H[a+8>>2]+e|0)|0);f=Sb(F[H[a+12>>2]]);break d}g=a;b=H[a+40>>2];c=H[a+36>>2];e:{if((b|0)==(c|0)){c=b;break e}ie(H[a+32>>2],c,b-c|0);b=H[a+36>>2];c=H[a+40>>2]}c=c-b|0;b=H[a+32>>2];c=c+b|0;H[g+36>>2]=c;b=b+((b|0)==(a+44|0)?8:H[a+52>>2])|0;H[a+40>>2]=b;H[d+8>>2]=H[a+60>>2]-e;H[d+4>>2]=b-c;b=H[zc(d+8|0,d+4|0)>>2];c=H[a+76>>2];H[a+80>>2]=H[a+72>>2];H[a+84>>2]=c;b=oh(H[a+36>>2],b,H[a+64>>2]);if(!b){break d}c=H[a+68>>2];if(!c){break a}b=b+H[a+36>>2]|0;H[a+40>>2]=b;f:{if((wf(c,a+72|0,H[a+32>>2],b,a+36|0,H[a+8>>2]+e|0,H[a+8>>2]+H[a+60>>2]|0,d+8|0)|0)==3){b=H[a+32>>2];hc(a,b,b,H[a+40>>2]);break f}if(H[d+8>>2]==(H[a+8>>2]+e|0)){break d}hc(a,H[a+8>>2],H[a+8>>2]+e|0,H[d+8>>2])}f=Sb(F[H[a+12>>2]]);break d}f=Sb(F[H[a+12>>2]])}if(H[a+8>>2]!=(d+15|0)){break b}hc(a,0,0,0)}oa=d+16|0;return f|0}db();X()}function _h(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;u=oa-16|0;oa=u;H[c>>2]=a;x=d&512;while(1){if((v|0)==4){if(wa(n)>>>0>1){H[u+8>>2]=Ob(n);H[c>>2]=Ge(gi(u+8|0,1),Vc(n),H[c>>2])}d=d&176;if((d|0)!=16){if((d|0)==32){a=H[c>>2]}H[b>>2]=a}oa=u+16|0;return}a:{b:{switch(F[i+v|0]){case 0:H[b>>2]=H[c>>2];break a;case 1:H[b>>2]=H[c>>2];q=pb(g,32);p=H[c>>2];H[c>>2]=p+1;F[p|0]=q;break a;case 3:if($b(n)){break a}q=I[Aa(n,0)|0];p=H[c>>2];H[c>>2]=p+1;F[p|0]=q;break a;case 2:if($b(m)|!x){break a}H[c>>2]=Ge(Ob(m),Vc(m),H[c>>2]);break a;case 4:break b;default:break a}}y=H[c>>2];e=h?e+1|0:e;r=e;while(1){c:{if(f>>>0<=r>>>0){break c}if(!dc(g,2048,F[r|0])){break c}r=r+1|0;continue}break}q=o;if((q|0)>=1){while(1){if(!((q|0)<1|e>>>0>=r>>>0)){r=r-1|0;p=I[r|0];s=H[c>>2];H[c>>2]=s+1;F[s|0]=p;q=q-1|0;continue}break}if((q|0)<1){p=0}else{p=pb(g,48)}while(1){s=H[c>>2];H[c>>2]=s+1;if((q|0)>=1){F[s|0]=p;q=q-1|0;continue}break}F[s|0]=j}d:{if((e|0)==(r|0)){q=pb(g,48);p=H[c>>2];H[c>>2]=p+1;F[p|0]=q;break d}if($b(l)){p=-1}else{p=F[Aa(l,0)|0]}q=0;t=0;while(1){if((e|0)==(r|0)){break d}e:{if((q|0)!=(p|0)){s=q;break e}p=H[c>>2];H[c>>2]=p+1;F[p|0]=k;s=0;t=t+1|0;if(wa(l)>>>0<=t>>>0){p=q;break e}if(I[Aa(l,t)|0]==127){p=-1;break e}p=F[Aa(l,t)|0]}r=r-1|0;q=I[r|0];w=H[c>>2];H[c>>2]=w+1;F[w|0]=q;q=s+1|0;continue}}fd(y,H[c>>2])}v=v+1|0;continue}}function hk(a,b){var c=0,d=0,e=0,f=0;e=oa-32|0;oa=e;H[a>>2]=7640;f=Ea(a+48|0);H[a+16>>2]=0;H[a+20>>2]=0;H[a+8>>2]=0;H[a+12>>2]=0;c=Na(12);d=Sa(c);H[a+24>>2]=c;Md(d,H[b+24>>2]);c=Na(12);Sa(c);H[a+28>>2]=c;c=Uf(e+24|0);H[c>>2]=Ed(H[b+28>>2]);H[e+16>>2]=Xc(H[b+28>>2]);if(zb(c,e+16|0)){while(1){d=Na(12);Sa(d);H[e+12>>2]=d;Md(H[e+12>>2],H[H[c>>2]>>2]);xc(H[a+28>>2],e+12|0);od(c);H[e+16>>2]=Xc(H[b+28>>2]);if(zb(c,e+16|0)){continue}break}}c=Na(12);d=Sa(c);H[a+32>>2]=c;Md(d,H[b+32>>2]);c=Na(12);d=Sa(c);H[a+36>>2]=c;Md(d,H[b+36>>2]);c=Na(12);d=Sa(c);H[a+40>>2]=c;Md(d,H[b+40>>2]);c=Na(12);d=Sa(c);H[a+44>>2]=c;Md(d,H[b+44>>2]);H[a+4>>2]=H[b+4>>2];bf(f,b+48|0);H[a+60>>2]=H[b+60>>2];H[a+64>>2]=H[b+64>>2];F[a+68|0]=I[b+68|0];F[a+69|0]=I[b+69|0];H[a+72>>2]=H[b+72>>2];F[a+76|0]=I[b+76|0];F[a+77|0]=I[b+77|0];F[a+78|0]=I[b+78|0];F[a+83|0]=I[b+83|0];F[a+84|0]=I[b+84|0];F[a+85|0]=I[b+85|0];F[a+86|0]=I[b+86|0];H[a+96>>2]=H[b+96>>2];H[a+100>>2]=H[b+100>>2];H[a+104>>2]=H[b+104>>2];H[a+108>>2]=H[b+108>>2];F[a+112|0]=I[b+112|0];F[a+113|0]=I[b+113|0];F[a+114|0]=I[b+114|0];F[a+115|0]=I[b+115|0];F[a+116|0]=I[b+116|0];F[a+87|0]=I[b+87|0];H[a+92>>2]=H[b+92>>2];H[a+120>>2]=H[b+120>>2];H[a+124>>2]=H[b+124>>2];F[a+128|0]=I[b+128|0];F[a+79|0]=I[b+79|0];F[a+80|0]=I[b+80|0];F[a+129|0]=I[b+129|0];H[a+132>>2]=H[b+132>>2];oa=e+32|0}function Za(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=oa-16|0;oa=i;Tf(a);c=oa-16|0;oa=c;H[c+12>>2]=a;g=i+8|0;Cb(g,c+12|0);oa=c+16|0;if(Pa(26176)>>>0<=b>>>0){a:{a=Pa(26176);c=b+1|0;if(a>>>0>>0){j=oa-32|0;oa=j;h=c-a|0;b:{if(h>>>0<=H[Ce(26176)>>2]-H[6545]>>2>>>0){Uh(h);break b}f=ed(26176);c=j+8|0;a=Pa(26176)+h|0;d=oa-16|0;oa=d;H[d+12>>2]=a;c:{e=Bh();if(a>>>0<=e>>>0){a=dd(26176);if(a>>>0>>1>>>0){H[d+8>>2]=a<<1;e=H[ad(d+8|0,d+12|0)>>2]}oa=d+16|0;a=e;break c}$d();X()}d=Pa(26176);e=oa-16|0;oa=e;H[e+12>>2]=0;yf(c+12|0,f);if(a){k=Ah(H[c+16>>2],a)}H[c>>2]=k;d=(d<<2)+k|0;H[c+8>>2]=d;H[c+4>>2]=d;H[Ic(c)>>2]=(a<<2)+k;oa=e+16|0;d=oa-16|0;oa=d;a=c;f=d;H[d>>2]=H[c+8>>2];e=H[c+8>>2];H[d+8>>2]=c+8;H[d+4>>2]=e+(h<<2);e=H[d>>2];while(1){if(H[f+4>>2]!=(e|0)){yh(H[a+16>>2],H[f>>2]);e=H[f>>2]+4|0;H[f>>2]=e;continue}break}H[H[f+8>>2]>>2]=H[f>>2];oa=d+16|0;Ph(26176);a=c+4|0;Vj(ed(26176),H[6544],H[6545],a);nc(26176,a);nc(26180,c+8|0);nc(Ce(26176),Ic(c));H[c>>2]=H[c+4>>2];zh(Pa(26176));a=c;e=c;d=H[c+4>>2];while(1){if((d|0)!=H[e+8>>2]){H[e+8>>2]=H[e+8>>2]-4;continue}break}if(H[c>>2]){wh(H[a+16>>2],H[a>>2],Tj(a))}}oa=j+32|0;break a}if(a>>>0>c>>>0){c=H[6544]+(c<<2)|0;Pa(26176);vh(26176,c);Sh()}}}if(H[lc(26176,b)>>2]){Ee(H[lc(26176,b)>>2])}a=Ud(g);H[lc(26176,b)>>2]=a;a=H[g>>2];H[g>>2]=0;if(a){Ee(a)}oa=i+16|0}function fm(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;var i=0,j=0,k=0,l=0,m=0;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;a:{b:{while(1){i=H[a+12>>2];if(!(i>>>0>=d>>>0|f>>>0>=g>>>0)){c=F[i|0];b=c&255;c:{if((c|0)>=0){if(b>>>0<=1114111){l=1;break c}c=2;break a}c=2;if(b>>>0<194){break a}if(b>>>0<=223){if((d-i|0)<2){break b}j=I[i+1|0];if((j&192)!=128){break a}l=2;b=j&63|b<<6&1984;if(b>>>0<=1114111){break c}break a}if(b>>>0<=239){if((d-i|0)<3){break b}j=I[i+2|0];k=I[i+1|0];d:{e:{if((b|0)!=237){if((b|0)!=224){break e}if((k&224)==160){break d}break a}if((k&224)==128){break d}break a}if((k&192)!=128){break a}}if((j&192)!=128){break a}l=3;b=j&63|(b<<12&61440|(k&63)<<6);if(b>>>0<=1114111){break c}break a}if(b>>>0>244){break a}if((d-i|0)<4){break b}k=I[i+3|0];j=I[i+2|0];m=I[i+1|0];f:{g:{switch(b-240|0){case 0:if((m+112&255)>>>0<48){break f}break a;case 4:if((m&240)==128){break f}break a;default:break g}}if((m&192)!=128){break a}}if((j&192)!=128|(k&192)!=128){break a}l=4;b=k&63|(j<<6&4032|(b<<18&1835008|(m&63)<<12));if(b>>>0>1114111){break a}}H[f>>2]=b;H[a+12>>2]=i+l;f=H[a+8>>2]+4|0;H[a+8>>2]=f;continue}break}c=d>>>0>i>>>0;break a}c=1}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return c|0}function Zi(a,b,c,d,e){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;k=oa-16|0;oa=k;a:{b:{c:{if((c|0)<=36){g=I[a|0];if(g){break c}f=a;break b}H[6070]=28;d=0;e=0;break a}f=a;d:{while(1){if(!Yc(g<<24>>24)){break d}g=I[f+1|0];h=f+1|0;f=h;if(g){continue}break}f=h;break b}e:{g=I[f|0];switch(g-43|0){case 0:case 2:break e;default:break b}}m=(g|0)==45?-1:0;f=f+1|0}f:{if(!(c&-17|I[f|0]!=48)){o=1;if((I[f+1|0]&223)==88){f=f+2|0;l=16;break f}f=f+1|0;l=c?c:8;break f}l=c?c:10}p=l;q=l>>31;c=0;while(1){g:{g=-48;h=F[f|0];h:{if((h-48&255)>>>0<10){break h}g=-87;if((h-97&255)>>>0<26){break h}g=-55;if((h-65&255)>>>0>25){break g}}h=g+h|0;if((h|0)>=(l|0)){break g}rb(k,p,q,0,0,j,i,0,0);g=1;i:{if(H[k+8>>2]|H[k+12>>2]){break i}r=Eq(j,i,p,q);n=pa;s=h>>31;t=s^-1;if((n|0)==(t|0)&(h^-1)>>>0>>0|n>>>0>t>>>0){break i}i=n+s|0;g=h+r|0;i=g>>>0>>0?i+1|0:i;j=g;o=1;g=c}f=f+1|0;c=g;continue}break}if(b){H[b>>2]=o?f:a}j:{k:{if(c){H[6070]=68;a=d&1;m=a?0:m;j=d;i=e;break k}if((e|0)==(i|0)&d>>>0>j>>>0|e>>>0>i>>>0){break j}a=d&1}if(!(a|m)){H[6070]=68;a=d;d=a-1|0;e=e-(a>>>0<1)|0;break a}if((e|0)==(i|0)&d>>>0>=j>>>0|e>>>0>i>>>0){break j}H[6070]=68;break a}a=m;b=a^j;d=b-a|0;c=a>>31;e=(c^i)-((a>>>0>b>>>0)+c|0)|0}oa=k+16|0;pa=e;return d}function Ai(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;j=oa-16|0;oa=j;k=Ib(g);n=Dd(g);Gb(j,n);H[f>>2]=d;a:{b:{h=a;g=I[h|0];switch(g-43|0){case 0:case 2:break b;default:break a}}g=Kb(k,g<<24>>24);h=H[f>>2];H[f>>2]=h+4;H[h>>2]=g;h=a+1|0}c:{g=h;if(!((c-g|0)<=1|I[g|0]!=48|(I[g+1|0]|32)!=120)){g=Kb(k,48);i=H[f>>2];H[f>>2]=i+4;H[i>>2]=g;g=Kb(k,F[h+1|0]);i=H[f>>2];H[f>>2]=i+4;H[i>>2]=g;h=h+2|0;g=h;while(1){if(c>>>0<=g>>>0){break c}if(!dj(F[g|0],Oa())){break c}g=g+1|0;continue}}while(1){if(c>>>0<=g>>>0){break c}i=F[g|0];Oa();if(!Rb(i)){break c}g=g+1|0;continue}}d:{if($b(j)){Ec(k,h,g,H[f>>2]);H[f>>2]=H[f>>2]+(g-h<<2);break d}fd(h,g);p=Hb(n);i=h;while(1){if(g>>>0<=i>>>0){Me((h-a<<2)+d|0,H[f>>2])}else{e:{if(F[Aa(j,l)|0]<1){break e}if(F[Aa(j,l)|0]!=(m|0)){break e}m=H[f>>2];H[f>>2]=m+4;H[m>>2]=p;l=(wa(j)-1>>>0>l>>>0)+l|0;m=0}q=Kb(k,F[i|0]);o=H[f>>2];H[f>>2]=o+4;H[o>>2]=q;i=i+1|0;m=m+1|0;continue}break}}f:{g:{while(1){if(c>>>0<=g>>>0){break g}h=I[g|0];if((h|0)!=46){h=Kb(k,h<<24>>24);i=H[f>>2];H[f>>2]=i+4;H[i>>2]=h;g=g+1|0;continue}break}h=ec(n);l=H[f>>2];i=l+4|0;H[f>>2]=i;H[l>>2]=h;g=g+1|0;break f}i=H[f>>2]}Ec(k,g,c,i);h=f;f=H[f>>2]+(c-g<<2)|0;H[h>>2]=f;H[e>>2]=(b|0)==(c|0)?f:(b-a<<2)+d|0;va(j);oa=j+16|0}function dl(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;e=oa-16|0;oa=e;a:{b:{if(!H[a+64>>2]){break b}b=H[a+68>>2];if(!b){break a}c:{c=H[a+92>>2];d:{if(c&16){if(H[a+24>>2]!=H[a+20>>2]){b=-1;if((qa[H[H[a>>2]+52>>2]](a,-1)|0)==-1){break b}}c=a+72|0;while(1){b=H[a+32>>2];d=$g(H[a+68>>2],c,b,b+H[a+52>>2]|0,e+12|0);f=H[a+32>>2];b=H[e+12>>2]-f|0;if((Ub(f,1,b,H[a+64>>2])|0)!=(b|0)){break c}b=-1;e:{switch(d-1|0){case 1:break b;case 0:continue;default:break e}}break}if(!ze(H[a+64>>2])){break d}break b}if(!(c&8)){break d}c=H[a+84>>2];H[e>>2]=H[a+80>>2];H[e+4>>2]=c;f:{g:{h:{if(I[a+98|0]){c=H[a+16>>2]-H[a+12>>2]|0;b=c;c=b>>31;break h}d=$c(b);c=H[a+40>>2]-H[a+36>>2]|0;b=c;c=b>>31;if((d|0)>=1){f=N(d,H[a+16>>2]-H[a+12>>2]|0);d=b+f|0;c=c+(f>>31)|0;c=b>>>0>d>>>0?c+1|0:c;b=d;break h}if(H[a+12>>2]!=H[a+16>>2]){break g}}d=0;break f}d=H[a+68>>2];d=qa[H[H[d>>2]+32>>2]](d,e,H[a+32>>2],H[a+36>>2],H[a+12>>2]-H[a+8>>2]|0)|0;f=H[a+36>>2]-(d+H[a+32>>2]|0)|0;d=b+f|0;c=(f>>31)+c|0;c=b>>>0>d>>>0?c+1|0:c;b=d;d=1}if(Ae(H[a+64>>2],0-b|0,0-(c+((b|0)!=0)|0)|0,1)){break c}if(d){b=H[e+4>>2];H[a+72>>2]=H[e>>2];H[a+76>>2]=b}b=H[a+32>>2];H[a+40>>2]=b;H[a+36>>2]=b;hc(a,0,0,0);H[a+92>>2]=0}b=0;break b}b=-1}oa=e+16|0;return b|0}db();X()}function Di(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=oa-16|0;oa=k;j=Fb(g);n=Gd(g);Gb(k,n);H[f>>2]=d;a:{b:{h=a;g=I[h|0];switch(g-43|0){case 0:case 2:break b;default:break a}}g=pb(j,g<<24>>24);h=H[f>>2];H[f>>2]=h+1;F[h|0]=g;h=a+1|0}c:{g=h;if(!((c-g|0)<=1|I[g|0]!=48|(I[g+1|0]|32)!=120)){g=pb(j,48);i=H[f>>2];H[f>>2]=i+1;F[i|0]=g;g=pb(j,F[h+1|0]);i=H[f>>2];H[f>>2]=i+1;F[i|0]=g;h=h+2|0;g=h;while(1){if(c>>>0<=g>>>0){break c}if(!dj(F[g|0],Oa())){break c}g=g+1|0;continue}}while(1){if(c>>>0<=g>>>0){break c}i=F[g|0];Oa();if(!Rb(i)){break c}g=g+1|0;continue}}d:{if($b(k)){Wc(j,h,g,H[f>>2]);H[f>>2]=H[f>>2]+(g-h|0);break d}fd(h,g);p=Hb(n);i=h;while(1){if(g>>>0<=i>>>0){fd((h-a|0)+d|0,H[f>>2])}else{e:{if(F[Aa(k,m)|0]<1){break e}if(F[Aa(k,m)|0]!=(l|0)){break e}l=H[f>>2];H[f>>2]=l+1;F[l|0]=p;m=(wa(k)-1>>>0>m>>>0)+m|0;l=0}q=pb(j,F[i|0]);o=H[f>>2];H[f>>2]=o+1;F[o|0]=q;i=i+1|0;l=l+1|0;continue}break}}while(1){f:{h=j;if(c>>>0>g>>>0){i=I[g|0];if((i|0)!=46){break f}j=ec(n);i=H[f>>2];H[f>>2]=i+1;F[i|0]=j;g=g+1|0}Wc(h,g,c,H[f>>2]);h=f;f=H[f>>2]+(c-g|0)|0;H[h>>2]=f;H[e>>2]=(b|0)==(c|0)?f:(b-a|0)+d|0;va(k);oa=k+16|0;return}h=pb(j,i<<24>>24);i=H[f>>2];H[f>>2]=i+1;F[i|0]=h;g=g+1|0;continue}}function Wm(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;var h=0,i=0,j=0,k=0;a=oa-448|0;oa=a;H[a+432>>2]=c;H[a+440>>2]=b;H[a+20>>2]=152;k=Ya(a+24|0,a+32|0,a+20|0);Ia(a+16|0,e);h=Ib(a+16|0);F[a+15|0]=0;if(ei(a+440|0,c,d,a+16|0,H[e+4>>2],f,a+15|0,h,k,a+20|0,a+432|0)){c=oa-16|0;oa=c;b=g;a:{if(tb(g)){d=H[b>>2];H[c+12>>2]=0;Cb(d,c+12|0);yb(b,0);break a}H[c+8>>2]=0;Cb(b,c+8|0);ub(b,0)}oa=c+16|0;if(I[a+15|0]){mf(g,Kb(h,45))}b=Kb(h,48);e=H[k>>2];h=H[a+20>>2];c=h-4|0;while(1){if(!((b|0)!=H[e>>2]|c>>>0<=e>>>0)){e=e+4|0;continue}break}b=oa-16|0;oa=b;c=wa(g);d=Mf(g);i=rg(e,h);b:{if(!i){break b}if(qh(e,Ca(g),Ca(g)+(wa(g)<<2)|0)){c=oa-16|0;oa=c;Wi(b,e,h);oa=c+16|0;d=b;i=Ca(b);e=wa(b);h=oa-16|0;oa=h;c=g;j=Mf(c);g=wa(c);c:{if(e>>>0<=j-g>>>0){if(!e){break c}j=Ca(c);oc(j+(g<<2)|0,i,e);i=c;c=e+g|0;Lc(i,c);H[h+12>>2]=0;Cb(j+(c<<2)|0,h+12|0);break c}Jg(c,j,(e+g|0)-j|0,g,g,0,e,i)}oa=h+16|0;va(d);break b}if(i>>>0>d-c>>>0){Ig(g,d,(c+i|0)-d|0,c,c)}d=Ca(g)+(c<<2)|0;while(1){if((e|0)!=(h|0)){Cb(d,e);e=e+4|0;d=d+4|0;continue}break}H[b>>2]=0;Cb(d,b);Lc(g,c+i|0)}oa=b+16|0}if(jb(a+440|0,a+432|0)){H[f>>2]=H[f>>2]|2}b=H[a+440>>2];Fa(a+16|0);_a(k);oa=a+448|0;return b|0}function og(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(H[a+4>>2]!=H[gb(a)>>2]){c=oa-16|0;oa=c;H[c>>2]=a;e=H[a+4>>2];H[c+4>>2]=e;H[c+8>>2]=e+12;xh(gb(a),H[c+4>>2],b);H[c+4>>2]=H[c+4>>2]+12;Be(c);oa=c+16|0;return}i=oa-32|0;oa=i;j=gb(a);k=j;c=i+8|0;h=ye(a)+1|0;f=oa-16|0;oa=f;H[f+12>>2]=h;g=oa-16|0;oa=g;e=a;gb(a);H[g+12>>2]=357913941;H[g+8>>2]=2147483647;d=H[zc(g+12|0,g+8|0)>>2];oa=g+16|0;a:{if(d>>>0>=h>>>0){e=qd(e);if(e>>>0>>1>>>0){H[f+8>>2]=e<<1;d=H[ad(f+8|0,f+12|0)>>2]}oa=f+16|0;e=d;break a}$d();X()}g=ye(a);d=0;f=oa-16|0;oa=f;H[f+12>>2]=0;yf(c+12|0,j);if(e){d=e;if(d>>>0>357913941){Fe(2074);X()}d=Na(N(d,12))}H[c>>2]=d;g=N(g,12)+d|0;H[c+8>>2]=g;H[c+4>>2]=g;H[Ic(c)>>2]=N(e,12)+d;oa=f+16|0;xh(k,H[c+8>>2],b);H[c+8>>2]=H[c+8>>2]+12;ui(a);gb(a);b=c;g=c+4|0;e=g;d=H[a+4>>2];h=H[a>>2];if((d|0)!=(h|0)){f=H[e>>2];while(1){d=d-12|0;Vd(f-12|0,d);f=H[e>>2]-12|0;H[e>>2]=f;if((d|0)!=(h|0)){continue}break}}nc(a,g);nc(a+4|0,b+8|0);nc(gb(a),Ic(b));H[b>>2]=H[b+4>>2];ye(a);qd(a);qd(a);a=c;b=H[a+4>>2];if((b|0)!=H[a+8>>2]){while(1){e=H[a+16>>2];d=H[a+8>>2]-12|0;H[a+8>>2]=d;Hg(e,d);if((b|0)!=H[a+8>>2]){continue}break}}if(H[c>>2]){a=H[c>>2];Ic(c);Ba(a)}oa=i+32|0}function jj(a,b){var c=0,d=0,e=0,f=0,g=0;a:{b:{c:{c=H[a+4>>2];d:{if(c>>>0>2]){H[a+4>>2]=c+1;c=I[c|0];break d}c=La(a)}switch(c-43|0){case 0:case 2:break b;default:break c}}b=c-48|0;break a}f=(c|0)==45;g=!b;b=H[a+4>>2];e:{if(b>>>0>2]){H[a+4>>2]=b+1;c=I[b|0];break e}c=La(a)}b=c-48|0;if(!(g|b>>>0<10|!H[a+104>>2])){H[a+4>>2]=H[a+4>>2]-1}}f:{if(b>>>0<10){while(1){e=N(d,10)+c|0;b=H[a+4>>2];g:{if(b>>>0>2]){H[a+4>>2]=b+1;c=I[b|0];break g}c=La(a)}b=c-48|0;d=e-48|0;if((d|0)<214748364?b>>>0<=9:0){continue}break}e=d;d=d>>31;h:{if(b>>>0>=10){break h}while(1){e=Eq(e,d,10,0);c=e+c|0;b=pa;b=c>>>0>>0?b+1|0:b;e=c-48|0;d=b-(c>>>0<48)|0;b=H[a+4>>2];i:{if(b>>>0>2]){H[a+4>>2]=b+1;c=I[b|0];break i}c=La(a)}b=c-48|0;if(b>>>0>9){break h}if((d|0)<21474836?1:(d|0)<=21474836?e>>>0<2061584302:0){continue}break}}if(b>>>0<10){while(1){b=H[a+4>>2];j:{if(b>>>0>2]){H[a+4>>2]=b+1;b=I[b|0];break j}b=La(a)}if(b-48>>>0<10){continue}break}}if(H[a+104>>2]){H[a+4>>2]=H[a+4>>2]-1}a=e;e=f?0-a|0:a;d=f?0-(((a|0)!=0)+d|0)|0:d;break f}d=-2147483648;if(!H[a+104>>2]){break f}H[a+4>>2]=H[a+4>>2]-1;pa=-2147483648;return 0}pa=d;return e}function Ak(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(Mb(a,H[b+8>>2],e)){gf(b,c,d);return}a:{if(Mb(a,H[b>>2],e)){if(!(H[b+20>>2]!=(c|0)?H[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}H[b+32>>2]=1;return}H[b+32>>2]=d;if(H[b+44>>2]!=4){f=a+16|0;i=f+(H[a+12>>2]<<3)|0;j=b;b:{c:{while(1){d:{if(f>>>0>=i>>>0){break d}G[b+52>>1]=0;ff(f,b,c,c,1,e);if(I[b+54|0]){break d}e:{if(!I[b+53|0]){break e}if(I[b+52|0]){d=1;if(H[b+24>>2]==1){break c}h=1;g=1;if(I[a+8|0]&2){break e}break c}h=1;d=g;if(!(F[a+8|0]&1)){break c}}f=f+8|0;continue}break}d=g;a=4;if(!h){break b}}a=3}H[j+44>>2]=a;if(d&1){break a}}H[b+20>>2]=c;H[b+40>>2]=H[b+40>>2]+1;if(H[b+36>>2]!=1|H[b+24>>2]!=2){break a}F[b+54|0]=1;return}g=H[a+12>>2];f=a+16|0;le(f,b,c,d,e);if((g|0)<2){break a}g=f+(g<<3)|0;f=a+24|0;a=H[a+8>>2];if(H[b+36>>2]!=1?a&2:1){while(1){if(I[b+54|0]){break a}le(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}break a}if(!(a&1)){while(1){if(I[b+54|0]|H[b+36>>2]==1){break a}le(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break a}}while(1){if(I[b+54|0]|(H[b+24>>2]==1?H[b+36>>2]==1:0)){break a}le(f,b,c,d,e);f=f+8|0;if(g>>>0>f>>>0){continue}break}}}function Tm(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;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;a=oa-1072|0;oa=a;H[a+16>>2]=f;H[a+20>>2]=g;H[a+24>>2]=h;H[a+28>>2]=i;H[a+956>>2]=a+960;j=oj(a+960|0,a+16|0);H[a+544>>2]=151;o=Ya(a+536|0,0,a+544|0);H[a+544>>2]=151;k=Ya(a+528|0,0,a+544|0);l=a+544|0;a:{if(j>>>0>=100){j=Oa();H[a>>2]=f;H[a+4>>2]=g;H[a+8>>2]=h;H[a+12>>2]=i;j=tc(a+956|0,j,2064,a);if((j|0)==-1){break a}lb(o,H[a+956>>2]);lb(k,cb(j<<2));if(De(k)){break a}l=H[k>>2]}Ia(a+520|0,d);p=Ib(a+520|0);f=H[a+956>>2];Ec(p,f,f+j|0,l);m=(j|0)>=1?I[H[a+956>>2]]==45:m;n=Ea(a+488|0);g=bc(a+472|0);h=bc(a+456|0);Zh(c,m,a+520|0,a+512|0,a+508|0,a+504|0,n,g,h,a+452|0);H[a+48>>2]=151;i=Ya(a+40|0,0,a+48|0);c=a+48|0;f=H[a+452>>2];b:{if((f|0)<(j|0)){f=((wa(h)+(j-f<<1|1)|0)+wa(g)|0)+H[a+452>>2]|0;break b}f=((wa(h)+wa(g)|0)+H[a+452>>2]|0)+2|0}if(f>>>0>=101){lb(i,cb(f<<2));c=H[i>>2];if(!c){break a}}Yh(c,a+36|0,a+32|0,H[d+4>>2],l,(j<<2)+l|0,p,m,a+512|0,H[a+508>>2],H[a+504>>2],n,g,h,H[a+452>>2]);b=Dc(b,c,H[a+36>>2],H[a+32>>2],d,e);_a(i);va(h);va(g);va(n);Fa(a+520|0);_a(k);_a(o);oa=a+1072|0;return b|0}db();X()}function Wb(a,b,c){var d=0,e=0,f=0;if(c>>>0>=512){ka(a|0,b|0,c|0)|0;return a}e=a+c|0;a:{if(!((a^b)&3)){b:{if(!(a&3)){c=a;break b}if((c|0)<1){c=a;break b}c=a;while(1){F[c|0]=I[b|0];b=b+1|0;c=c+1|0;if(!(c&3)){break b}if(c>>>0>>0){continue}break}}d=e&-4;c:{if(d>>>0<64){break c}f=d+-64|0;if(f>>>0>>0){break c}while(1){H[c>>2]=H[b>>2];H[c+4>>2]=H[b+4>>2];H[c+8>>2]=H[b+8>>2];H[c+12>>2]=H[b+12>>2];H[c+16>>2]=H[b+16>>2];H[c+20>>2]=H[b+20>>2];H[c+24>>2]=H[b+24>>2];H[c+28>>2]=H[b+28>>2];H[c+32>>2]=H[b+32>>2];H[c+36>>2]=H[b+36>>2];H[c+40>>2]=H[b+40>>2];H[c+44>>2]=H[b+44>>2];H[c+48>>2]=H[b+48>>2];H[c+52>>2]=H[b+52>>2];H[c+56>>2]=H[b+56>>2];H[c+60>>2]=H[b+60>>2];b=b- -64|0;c=c- -64|0;if(f>>>0>=c>>>0){continue}break}}if(c>>>0>=d>>>0){break a}while(1){H[c>>2]=H[b>>2];b=b+4|0;c=c+4|0;if(d>>>0>c>>>0){continue}break}break a}if(e>>>0<4){c=a;break a}d=e-4|0;if(d>>>0>>0){c=a;break a}c=a;while(1){F[c|0]=I[b|0];F[c+1|0]=I[b+1|0];F[c+2|0]=I[b+2|0];F[c+3|0]=I[b+3|0];b=b+4|0;c=c+4|0;if(d>>>0>=c>>>0){continue}break}}if(c>>>0>>0){while(1){F[c|0]=I[b|0];b=b+1|0;c=c+1|0;if((e|0)!=(c|0)){continue}break}}return a}function Vm(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;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;a=oa-464|0;oa=a;H[a+16>>2]=f;H[a+20>>2]=g;H[a+24>>2]=h;H[a+28>>2]=i;H[a+348>>2]=a+352;j=oj(a+352|0,a+16|0);H[a+240>>2]=151;o=Ya(a+232|0,0,a+240|0);H[a+240>>2]=151;k=Ya(a+224|0,0,a+240|0);l=a+240|0;a:{if(j>>>0>=100){j=Oa();H[a>>2]=f;H[a+4>>2]=g;H[a+8>>2]=h;H[a+12>>2]=i;j=tc(a+348|0,j,2064,a);if((j|0)==-1){break a}lb(o,H[a+348>>2]);lb(k,cb(j));if(De(k)){break a}l=H[k>>2]}Ia(a+216|0,d);p=Fb(a+216|0);f=H[a+348>>2];Wc(p,f,f+j|0,l);m=(j|0)>=1?I[H[a+348>>2]]==45:m;n=Ea(a+192|0);g=Ea(a+176|0);h=Ea(a+160|0);$h(c,m,a+216|0,a+208|0,a+207|0,a+206|0,n,g,h,a+156|0);H[a+48>>2]=151;i=Ya(a+40|0,0,a+48|0);c=a+48|0;f=H[a+156>>2];b:{if((f|0)<(j|0)){f=((wa(h)+(j-f<<1|1)|0)+wa(g)|0)+H[a+156>>2]|0;break b}f=((wa(h)+wa(g)|0)+H[a+156>>2]|0)+2|0}if(f>>>0>=101){lb(i,cb(f));c=H[i>>2];if(!c){break a}}_h(c,a+36|0,a+32|0,H[d+4>>2],l,j+l|0,p,m,a+208|0,F[a+207|0],F[a+206|0],n,g,h,H[a+156>>2]);b=pc(b,c,H[a+36>>2],H[a+32>>2],d,e);_a(i);va(h);va(g);va(n);Fa(a+216|0);_a(k);_a(o);oa=a+464|0;return b|0}db();X()}function Te(a,b,c,d,e,f,g){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;i=oa-128|0;oa=i;H[i+120>>2]=b;k=Vi(c,d);H[i+16>>2]=151;p=Ya(i+8|0,0,i+16|0);j=i+16|0;a:{if(k>>>0>=101){j=cb(k);if(!j){break a}lb(p,j)}h=j;b=c;while(1)if((b|0)==(d|0)){b:while(1){c:{if(!(t=Bb(a,i+120|0),u=0,v=k,v?t:u)){if(kb(a,i+120|0)){H[f>>2]=H[f>>2]|2}break c}m=bb(a);if(!g){m=Se(e,m)}n=q+1|0;r=0;h=j;b=c;while(1)if((b|0)==(d|0)){q=n;if(!r){continue b}ib(a);h=j;b=c;if(k+l>>>0<2){continue b}while(1){if((b|0)==(d|0)){continue b}d:{if(I[h|0]!=2){break d}if((wa(b)|0)==(n|0)){break d}F[h|0]=0;l=l-1|0}h=h+1|0;b=b+12|0;continue}}else{e:{if(I[h|0]!=1){break e}o=F[Aa(b,q)|0];s=m&255;if(!g){o=Se(e,o)}f:{if((o&255)==(s|0)){r=1;if((wa(b)|0)!=(n|0)){break e}F[h|0]=2;l=l+1|0;break f}F[h|0]=0}k=k-1|0}h=h+1|0;b=b+12|0;continue}}break}g:{h:{while(1){if((c|0)==(d|0)){break h}if(I[j|0]!=2){j=j+1|0;c=c+12|0;continue}break}d=c;break g}H[f>>2]=H[f>>2]|4}_a(p);oa=i+128|0;return d}else{i:{if(!$b(b)){F[h|0]=1;break i}F[h|0]=2;l=l+1|0;k=k-1|0}h=h+1|0;b=b+12|0;continue}}db();X()}function hl(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;d=oa-16|0;oa=d;a:{b:{if(!H[a+64>>2]){break b}c=a;if(!(I[a+92|0]&16)){hc(c,0,0,0);e=H[c+52>>2];c:{if(e>>>0>=9){if(I[c+98|0]){f=H[c+32>>2];Ac(c,f,(e+f|0)-1|0);break c}e=H[c+56>>2];Ac(c,e,(e+H[c+60>>2]|0)-1|0);break c}Ac(c,0,0)}H[c+92>>2]=16}f=H[a+20>>2];h=H[a+28>>2];if(!qb(b,-1)){if(!H[a+24>>2]){Ac(a,d+15|0,d+16|0)}c=Zc(b);F[H[a+24>>2]]=c;ch(a,1)}if(H[a+24>>2]!=H[a+20>>2]){d:{if(I[a+98|0]){c=H[a+24>>2]-H[a+20>>2]|0;if((Ub(H[a+20>>2],1,c,H[a+64>>2])|0)!=(c|0)){break b}break d}H[d+8>>2]=H[a+32>>2];i=a+72|0;while(1){c=H[a+68>>2];if(c){e=c;c=H[a+32>>2];c=Qd(e,i,H[a+20>>2],H[a+24>>2],d+4|0,c,c+H[a+52>>2]|0,d+8|0);if(H[a+20>>2]==H[d+4>>2]){break b}if((c|0)==3){c=H[a+24>>2]-H[a+20>>2]|0;if((Ub(H[a+20>>2],1,c,H[a+64>>2])|0)!=(c|0)){break b}break d}if(c>>>0>1){break b}g=H[a+32>>2];e=H[d+8>>2]-g|0;if((Ub(g,1,e,H[a+64>>2])|0)!=(e|0)){break b}if((c|0)!=1){break d}Ac(a,H[d+4>>2],H[a+24>>2]);ch(a,H[a+28>>2]-H[a+20>>2]|0);continue}break}db();X()}Ac(a,f,h)}a=re(b);break a}a=-1}oa=d+16|0;return a|0}function wn(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;var i=0,j=0,k=0,l=0,m=0;a=oa-256|0;oa=a;H[a+248>>2]=37;H[a+252>>2]=0;m=Oe(a+248|1,2618,H[c+4>>2]);H[a+204>>2]=a+208;i=Oa();a:{if(m){j=H[c+8>>2];H[a+72>>2]=g;H[a+76>>2]=h;k=a- -64|0;H[k>>2]=e;H[k+4>>2]=f;H[a+48>>2]=j;i=vb(a+208|0,30,i,a+248|0,a+48|0);break a}H[a+80>>2]=e;H[a+84>>2]=f;H[a+88>>2]=g;H[a+92>>2]=h;i=vb(a+208|0,30,i,a+248|0,a+80|0)}H[a+128>>2]=151;k=Ya(a+192|0,0,a+128|0);l=a+208|0;j=l;b:{if((i|0)>=30){i=Oa();c:{if(m){j=H[c+8>>2];H[a+24>>2]=g;H[a+28>>2]=h;H[a+16>>2]=e;H[a+20>>2]=f;H[a>>2]=j;i=tc(a+204|0,i,a+248|0,a);break c}H[a+32>>2]=e;H[a+36>>2]=f;H[a+40>>2]=g;H[a+44>>2]=h;i=tc(a+204|0,i,a+248|0,a+32|0)}if((i|0)==-1){break b}lb(k,H[a+204>>2]);j=H[a+204>>2]}f=i+j|0;g=Nb(j,f,c);H[a+128>>2]=151;e=Ya(a+120|0,0,a+128|0);d:{if(H[a+204>>2]==(a+208|0)){i=a+128|0;break d}i=cb(i<<1);if(!i){break b}lb(e,i);l=H[a+204>>2]}Ia(a+104|0,c);Di(l,g,f,i,a+116|0,a+112|0,a+104|0);Fa(a+104|0);b=pc(b,i,H[a+116>>2],H[a+112>>2],c,d);_a(e);_a(k);oa=a+256|0;return b|0}db();X()}function on(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;var i=0,j=0,k=0,l=0,m=0;a=oa-432|0;oa=a;H[a+424>>2]=37;H[a+428>>2]=0;m=Oe(a+424|1,2618,H[c+4>>2]);H[a+380>>2]=a+384;i=Oa();a:{if(m){j=H[c+8>>2];H[a+72>>2]=g;H[a+76>>2]=h;k=a- -64|0;H[k>>2]=e;H[k+4>>2]=f;H[a+48>>2]=j;i=vb(a+384|0,30,i,a+424|0,a+48|0);break a}H[a+80>>2]=e;H[a+84>>2]=f;H[a+88>>2]=g;H[a+92>>2]=h;i=vb(a+384|0,30,i,a+424|0,a+80|0)}H[a+128>>2]=151;k=Ya(a+368|0,0,a+128|0);l=a+384|0;j=l;b:{if((i|0)>=30){i=Oa();c:{if(m){j=H[c+8>>2];H[a+24>>2]=g;H[a+28>>2]=h;H[a+16>>2]=e;H[a+20>>2]=f;H[a>>2]=j;i=tc(a+380|0,i,a+424|0,a);break c}H[a+32>>2]=e;H[a+36>>2]=f;H[a+40>>2]=g;H[a+44>>2]=h;i=tc(a+380|0,i,a+424|0,a+32|0)}if((i|0)==-1){break b}lb(k,H[a+380>>2]);j=H[a+380>>2]}f=i+j|0;g=Nb(j,f,c);H[a+128>>2]=151;e=Ya(a+120|0,0,a+128|0);d:{if(H[a+380>>2]==(a+384|0)){i=a+128|0;break d}i=cb(i<<3);if(!i){break b}lb(e,i);l=H[a+380>>2]}Ia(a+104|0,c);Ai(l,g,f,i,a+116|0,a+112|0,a+104|0);Fa(a+104|0);b=Dc(b,i,H[a+116>>2],H[a+112>>2],c,d);_a(e);_a(k);oa=a+432|0;return b|0}db();X()}function Xm(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;var h=0;a=oa-624|0;oa=a;H[a+608>>2]=c;H[a+616>>2]=b;H[a+16>>2]=152;b=Ya(a+200|0,a+208|0,a+16|0);Ia(a+192|0,e);h=Ib(a+192|0);F[a+191|0]=0;a:{if(!ei(a+616|0,c,d,a+192|0,H[e+4>>2],f,a+191|0,h,b,a+196|0,a+608|0)){break a}c=I[2794]|I[2795]<<8|(I[2796]<<16|I[2797]<<24);F[a+183|0]=c;F[a+184|0]=c>>>8;F[a+185|0]=c>>>16;F[a+186|0]=c>>>24;c=I[2791]|I[2792]<<8|(I[2793]<<16|I[2794]<<24);H[a+176>>2]=I[2787]|I[2788]<<8|(I[2789]<<16|I[2790]<<24);H[a+180>>2]=c;Ec(h,a+176|0,a+186|0,a+128|0);H[a+16>>2]=151;d=Ya(a+8|0,0,a+16|0);c=a+16|0;b:{if((H[a+196>>2]-H[b>>2]|0)>=393){lb(d,cb((H[a+196>>2]-H[b>>2]>>2)+2|0));if(!H[d>>2]){break b}c=H[d>>2]}if(I[a+191|0]){F[c|0]=45;c=c+1|0}e=H[b>>2];while(1){if(K[a+196>>2]<=e>>>0){c:{F[c|0]=0;H[a>>2]=g;if((cj(a+16|0,a)|0)!=1){break c}_a(d);break a}}else{F[c|0]=I[(a+176|0)+(Wf(a+128|0,a+168|0,e)-(a+128|0)>>2)|0];c=c+1|0;e=e+4|0;continue}break}db();X()}db();X()}if(jb(a+616|0,a+608|0)){H[f>>2]=H[f>>2]|2}c=H[a+616>>2];Fa(a+192|0);_a(b);oa=a+624|0;return c|0}function Re(a,b,c,d,e,f,g){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;i=oa-128|0;oa=i;H[i+120>>2]=b;k=Vi(c,d);H[i+16>>2]=151;p=Ya(i+8|0,0,i+16|0);j=i+16|0;a:{if(k>>>0>=101){j=cb(k);if(!j){break a}lb(p,j)}h=j;b=c;while(1)if((b|0)==(d|0)){b:while(1){c:{if(!(s=Ab(a,i+120|0),t=0,u=k,u?s:t)){if(jb(a,i+120|0)){H[f>>2]=H[f>>2]|2}break c}m=ab(a);if(!g){m=pb(e,m)}n=q+1|0;r=0;h=j;b=c;while(1)if((b|0)==(d|0)){q=n;if(!r){continue b}hb(a);h=j;b=c;if(k+l>>>0<2){continue b}while(1){if((b|0)==(d|0)){continue b}d:{if(I[h|0]!=2){break d}if((wa(b)|0)==(n|0)){break d}F[h|0]=0;l=l-1|0}h=h+1|0;b=b+12|0;continue}}else{e:{if(I[h|0]!=1){break e}o=H[Qe(b,q)>>2];if(!g){o=pb(e,o)}f:{if((m|0)==(o|0)){r=1;if((wa(b)|0)!=(n|0)){break e}F[h|0]=2;l=l+1|0;break f}F[h|0]=0}k=k-1|0}h=h+1|0;b=b+12|0;continue}}break}g:{h:{while(1){if((c|0)==(d|0)){break h}if(I[j|0]!=2){j=j+1|0;c=c+12|0;continue}break}d=c;break g}H[f>>2]=H[f>>2]|4}_a(p);oa=i+128|0;return d}else{i:{if(!$b(b)){F[h|0]=1;break i}F[h|0]=2;l=l+1|0;k=k-1|0}h=h+1|0;b=b+12|0;continue}}db();X()}function Zm(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;var h=0;a=oa-288|0;oa=a;H[a+272>>2]=c;H[a+280>>2]=b;H[a+16>>2]=152;b=Ya(a+152|0,a+160|0,a+16|0);Ia(a+144|0,e);h=Fb(a+144|0);F[a+143|0]=0;a:{if(!li(a+280|0,c,d,a+144|0,H[e+4>>2],f,a+143|0,h,b,a+148|0,a+260|0)){break a}c=I[2794]|I[2795]<<8|(I[2796]<<16|I[2797]<<24);F[a+135|0]=c;F[a+136|0]=c>>>8;F[a+137|0]=c>>>16;F[a+138|0]=c>>>24;c=I[2791]|I[2792]<<8|(I[2793]<<16|I[2794]<<24);H[a+128>>2]=I[2787]|I[2788]<<8|(I[2789]<<16|I[2790]<<24);H[a+132>>2]=c;Wc(h,a+128|0,a+138|0,a+118|0);H[a+16>>2]=151;d=Ya(a+8|0,0,a+16|0);c=a+16|0;b:{if((H[a+148>>2]-H[b>>2]|0)>=99){lb(d,cb((H[a+148>>2]-H[b>>2]|0)+2|0));if(!H[d>>2]){break b}c=H[d>>2]}if(I[a+143|0]){F[c|0]=45;c=c+1|0}e=H[b>>2];while(1){if(K[a+148>>2]<=e>>>0){c:{F[c|0]=0;H[a>>2]=g;if((cj(a+16|0,a)|0)!=1){break c}_a(d);break a}}else{F[c|0]=I[(($f(a+118|0,a+128|0,e)-a|0)+a|0)+10|0];c=c+1|0;e=e+1|0;continue}break}db();X()}db();X()}if(kb(a+280|0,a+272|0)){H[f>>2]=H[f>>2]|2}c=H[a+280>>2];Fa(a+144|0);_a(b);oa=a+288|0;return c|0}function ig(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;g=oa-32|0;oa=g;e=d&2147483647;h=e;f=e-1006698496|0;e=e-1140785152|0;i=c;a:{if((f|0)==(e|0)&c>>>0>c>>>0|e>>>0>f>>>0){e=d<<4|c>>>28;c=c<<4|b>>>28;b=b&268435455;h=b;if((b|0)==134217728&a>>>0>=1|b>>>0>134217728){e=e+1073741824|0;a=c+1|0;e=a>>>0<1?e+1|0:e;f=a;break a}f=c;e=e+1073741824|0;if(a|h^134217728){break a}b=c&1;a=b+f|0;e=a>>>0>>0?e+1|0:e;f=a;break a}if(!(!i&(h|0)==2147418112?!(a|b):h>>>0<2147418112)){f=c;c=d<<4|c>>>28;f=f<<4|b>>>28;e=c&524287|2146959360;break a}f=0;e=2146435072;if(h>>>0>1140785151){break a}e=0;h=h>>>16|0;if(h>>>0<15249){break a}e=d&65535|65536;xb(g+16|0,a,b,c,e,h-15233|0);hd(g,a,b,c,e,15361-h|0);e=H[g+4>>2];h=e;a=H[g+8>>2];c=H[g+12>>2]<<4|a>>>28;f=a<<4|e>>>28;e=c;a=h&268435455;c=a;b=H[g>>2]|((H[g+16>>2]|H[g+24>>2])!=0|(H[g+20>>2]|H[g+28>>2])!=0);if((a|0)==134217728&b>>>0>=1|a>>>0>134217728){a=f+1|0;e=a>>>0<1?e+1|0:e;f=a;break a}if(b|c^134217728){break a}a=f+(f&1)|0;e=a>>>0>>0?e+1|0:e;f=a}oa=g+32|0;x(0,f|0);x(1,d&-2147483648|e);return+z()}function em(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;a=c;while(1){a:{if(e>>>0<=i>>>0|a>>>0>=d>>>0){break a}g=F[a|0];b=g&255;b:{if((g|0)>=0){g=1;if(b>>>0<=1114111){break b}break a}if(b>>>0<194){break a}if(b>>>0<=223){if((d-a|0)<2){break a}f=I[a+1|0];if((f&192)!=128){break a}g=2;if((f&63|b<<6&1984)>>>0<=1114111){break b}break a}c:{d:{if(b>>>0<=239){if((d-a|0)<3){break a}h=I[a+2|0];f=I[a+1|0];if((b|0)==237){break d}if((b|0)==224){if((f&224)==160){break c}break a}if((f&192)!=128){break a}break c}if((d-a|0)<4|b>>>0>244){break a}h=I[a+3|0];j=I[a+2|0];f=I[a+1|0];e:{f:{switch(b-240|0){case 0:if((f+112&255)>>>0<48){break e}break a;case 4:if((f&240)==128){break e}break a;default:break f}}if((f&192)!=128){break a}}if((j&192)!=128|(h&192)!=128){break a}g=4;if((h&63|(j<<6&4032|(b<<18&1835008|(f&63)<<12)))>>>0>1114111){break a}break b}if((f&224)!=128){break a}}if((h&192)!=128){break a}g=3;if((h&63|(b<<12&61440|(f&63)<<6))>>>0>1114111){break a}}i=i+1|0;a=a+g|0;continue}break}return a-c|0}function hm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;a=c;while(1){a:{if(e>>>0<=g>>>0|a>>>0>=d>>>0){break a}b=I[a|0];if(b>>>0>1114111){break a}f=a+1|0;b:{if(b<<24>>24>=0){break b}if(b>>>0<194){break a}if(b>>>0<=223){if((d-a|0)<2){break a}f=I[a+1|0];if((f&192)!=128|(f&63|b<<6&1984)>>>0>1114111){break a}f=a+2|0;break b}c:{d:{if(b>>>0<=239){if((d-a|0)<3){break a}h=I[a+2|0];f=I[a+1|0];if((b|0)==237){break d}if((b|0)==224){if((f&224)==160){break c}break a}if((f&192)!=128){break a}break c}if((d-a|0)<4|b>>>0>244|e-g>>>0<2){break a}h=I[a+3|0];i=I[a+2|0];f=I[a+1|0];e:{f:{switch(b-240|0){case 0:if((f+112&255)>>>0<48){break e}break a;case 4:if((f&240)==128){break e}break a;default:break f}}if((f&192)!=128){break a}}if((i&192)!=128|(h&192)!=128|(h&63|(i<<6&4032|(b<<18&1835008|(f&63)<<12)))>>>0>1114111){break a}g=g+1|0;f=a+4|0;break b}if((f&224)!=128){break a}}if((h&192)!=128|(h&63|(b<<12&61440|(f&63)<<6))>>>0>1114111){break a}f=a+3|0}a=f;g=g+1|0;continue}break}return a-c|0}function Cq(a){a=a|0;var b=0,c=0,d=0;c=oa-16|0;oa=c;b=H[a+8>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+8>>2]=b;b=H[a+12>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+12>>2]=b;b=H[a+16>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+16>>2]=b;b=H[a+20>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+20>>2]=b;b=H[a+24>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+24>>2]=b;b=H[a+28>>2];if(b){Ba(Va(b))}b=Na(12);d=Sa(b);H[a+28>>2]=b;b=Na(12);Sa(b);H[c+12>>2]=b;ya(d,c+12|0);b=H[a+32>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+32>>2]=b;b=H[a+36>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+36>>2]=b;b=H[a+40>>2];if(b){Ba(Va(b))}b=Na(12);d=Sa(b);H[a+40>>2]=b;H[c+8>>2]=0;ya(d,c+8|0);b=H[a+44>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+104>>2]=0;H[a+96>>2]=0;F[a+87|0]=0;G[a+68>>1]=0;H[a+64>>2]=0;H[a+44>>2]=b;H[a+72>>2]=0;F[a+75|0]=0;F[a+76|0]=0;F[a+77|0]=0;F[a+78|0]=0;F[a+129|0]=0;H[a+120>>2]=0;H[a+124>>2]=0;F[a+113|0]=123;F[a+114|0]=123;F[a+115|0]=123;F[a+116|0]=123;H[a+132>>2]=0;F[a+79|0]=0;F[a+80|0]=0;oa=c+16|0}function gm(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;a=oa-16|0;oa=a;H[a+12>>2]=c;H[a+8>>2]=f;H[a+12>>2]=c;H[a+8>>2]=f;b=H[a+12>>2];a:{while(1){if(b>>>0>=d>>>0){c=0;break a}c=2;b=H[b>>2];if((b&-2048)==55296|b>>>0>1114111){break a}b:{c:{if(b>>>0<=127){c=1;f=H[a+8>>2];if((g-f|0)<1){break a}H[a+8>>2]=f+1;F[f|0]=b;break c}if(b>>>0<=2047){c=H[a+8>>2];if((g-c|0)<2){break b}H[a+8>>2]=c+1;F[c|0]=b>>>6|192;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break c}c=H[a+8>>2];f=g-c|0;if(b>>>0<=65535){if((f|0)<3){break b}H[a+8>>2]=c+1;F[c|0]=b>>>12|224;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128;break c}if((f|0)<4){break b}H[a+8>>2]=c+1;F[c|0]=b>>>18|240;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>12&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b>>>6&63|128;c=H[a+8>>2];H[a+8>>2]=c+1;F[c|0]=b&63|128}b=H[a+12>>2]+4|0;H[a+12>>2]=b;continue}break}c=1}H[e>>2]=H[a+12>>2];H[h>>2]=H[a+8>>2];oa=a+16|0;return c|0}function Xf(a,b,c,d,e,f,g,h,i,j,k,l){var m=0;m=oa-16|0;oa=m;H[m+12>>2]=a;a:{b:{if((a|0)==(f|0)){if(!I[b|0]){break b}a=0;F[b|0]=0;b=H[e>>2];H[e>>2]=b+1;F[b|0]=46;if(!wa(h)){break a}b=H[j>>2];if((b-i|0)>159){break a}c=H[k>>2];H[j>>2]=b+4;H[b>>2]=c;break a}c:{if((a|0)!=(g|0)){break c}if(!wa(h)){break c}if(!I[b|0]){break b}a=0;b=H[j>>2];if((b-i|0)>159){break a}a=H[k>>2];H[j>>2]=b+4;H[b>>2]=a;a=0;H[k>>2]=0;break a}a=-1;f=Wf(l,l+128|0,m+12|0)-l|0;if((f|0)>124){break a}g=I[(f>>2)+13232|0];d:{e:{switch(Gq(f-88|0,30)|0){case 2:case 3:b=H[e>>2];if((I[b-1|0]&95)!=(I[c|0]&127)?(b|0)!=(d|0):0){break a}H[e>>2]=b+1;F[b|0]=g;a=0;break a;case 0:case 1:F[c|0]=80;break d;default:break e}}a=F[c|0];if((a|0)!=(g&95)){break d}F[c|0]=a|128;if(!I[b|0]){break d}F[b|0]=0;if(!wa(h)){break d}a=H[j>>2];if((a-i|0)>159){break d}b=H[k>>2];H[j>>2]=a+4;H[a>>2]=b}a=H[e>>2];H[e>>2]=a+1;F[a|0]=g;a=0;if((f|0)>84){break a}H[k>>2]=H[k>>2]+1;break a}a=-1}oa=m+16|0;return a}function ag(a,b,c,d,e,f,g,h,i,j,k,l){var m=0;m=oa-16|0;oa=m;F[m+15|0]=a;a:{b:{if((a|0)==(f|0)){if(!I[b|0]){break b}a=0;F[b|0]=0;b=H[e>>2];H[e>>2]=b+1;F[b|0]=46;if(!wa(h)){break a}b=H[j>>2];if((b-i|0)>159){break a}c=H[k>>2];H[j>>2]=b+4;H[b>>2]=c;break a}c:{if((a|0)!=(g|0)){break c}if(!wa(h)){break c}if(!I[b|0]){break b}a=0;b=H[j>>2];if((b-i|0)>159){break a}a=H[k>>2];H[j>>2]=b+4;H[b>>2]=a;a=0;H[k>>2]=0;break a}a=-1;f=$f(l,l+32|0,m+15|0)-l|0;if((f|0)>31){break a}g=I[f+13232|0];d:{e:{switch(f-22|0){case 2:case 3:b=H[e>>2];if((I[b-1|0]&95)!=(I[c|0]&127)?(b|0)!=(d|0):0){break a}H[e>>2]=b+1;F[b|0]=g;a=0;break a;case 0:case 1:F[c|0]=80;break d;default:break e}}a=F[c|0];if((a|0)!=(g&95)){break d}F[c|0]=a|128;if(!I[b|0]){break d}F[b|0]=0;if(!wa(h)){break d}a=H[j>>2];if((a-i|0)>159){break d}b=H[k>>2];H[j>>2]=a+4;H[a>>2]=b}a=H[e>>2];H[e>>2]=a+1;F[a|0]=g;a=0;if((f|0)>21){break a}H[k>>2]=H[k>>2]+1;break a}a=-1}oa=m+16|0;return a}function ij(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;h=oa-32|0;oa=h;f=d&2147483647;g=f;e=f-1065418752|0;i=f-1082064896|0;f=c;a:{if((e|0)==(i|0)&f>>>0>>0|e>>>0>>0){g=(d&33554431)<<7|c>>>25;f=0;j=f;i=c&33554431;if(!(!f&(i|0)==16777216?!(a|b):!f&i>>>0<16777216)){e=g+1073741825|0;break a}e=g+1073741824|0;if(i^16777216|a|(b|j)){break a}e=(g&1)+e|0;break a}if(!(!f&(g|0)==2147418112?!(a|b):g>>>0<2147418112)){e=((d&33554431)<<7|c>>>25)&4194303|2143289344;break a}e=2139095040;if(g>>>0>1082064895){break a}e=0;f=g>>>16|0;if(f>>>0<16145){break a}g=c;e=d&65535|65536;xb(h+16|0,a,b,g,e,f-16129|0);hd(h,a,b,g,e,16257-f|0);b=H[h+8>>2];e=(H[h+12>>2]&33554431)<<7|b>>>25;g=H[h+4>>2];f=g;a=0;i=a;j=H[h>>2]|((H[h+16>>2]|H[h+24>>2])!=0|(H[h+20>>2]|H[h+28>>2])!=0);b=b&33554431;if(!(!a&(b|0)==16777216?!(f|j):!a&b>>>0<16777216)){e=e+1|0;break a}if(b^16777216|j|(f|i)){break a}e=(e&1)+e|0}oa=h+32|0;return x(2,d&-2147483648|e),B()}function We(a,b,c,d){var e=0,f=0,g=0,h=0,i=0;e=oa-160|0;oa=e;Wb(e+8|0,8416,144);a:{b:{if(b-1>>>0>=2147483647){if(b){break b}b=1;a=e+159|0}H[e+52>>2]=a;H[e+28>>2]=a;f=-2-a|0;f=b>>>0>f>>>0?f:b;H[e+56>>2]=f;a=a+f|0;H[e+36>>2]=a;H[e+24>>2]=a;a=e+8|0;b=oa-208|0;oa=b;H[b+204>>2]=d;Vb(b+160|0,0,40);H[b+200>>2]=H[b+204>>2];c:{if((hg(0,c,b+200|0,b+80|0,b+160|0)|0)<0){a=-1;break c}h=H[a+76>>2]>=0;d=H[a>>2];if(F[a+74|0]<=0){H[a>>2]=d&-33}i=d&32;d:{if(H[a+48>>2]){c=hg(a,c,b+200|0,b+80|0,b+160|0);break d}H[a+48>>2]=80;H[a+16>>2]=b+80;H[a+28>>2]=b;H[a+20>>2]=b;d=H[a+44>>2];H[a+44>>2]=b;g=hg(a,c,b+200|0,b+80|0,b+160|0);c=g;if(!d){break d}qa[H[a+36>>2]](a,0,0)|0;H[a+48>>2]=0;H[a+44>>2]=d;H[a+28>>2]=0;H[a+16>>2]=0;c=H[a+20>>2];H[a+20>>2]=0;c=c?g:-1}d=a;a=H[a>>2];H[d>>2]=a|i;a=a&32?-1:c;if(!h){break c}}oa=b+208|0;if(!f){break a}b=H[e+28>>2];F[b-((b|0)==H[e+24>>2])|0]=0;break a}H[6070]=61;a=-1}oa=e+160|0;return a}function Sg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=oa-32|0;oa=c;a:{if(I[a+52|0]){d=H[a+48>>2];if(!b){break a}F[a+52|0]=0;H[a+48>>2]=-1;break a}H[c+24>>2]=1;e=H[vf(c+24|0,a+44|0)>>2];h=(e|0)>0?e:0;b:{while(1){if((d|0)!=(h|0)){f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[(c+24|0)+d|0]=f;d=d+1|0;continue}break}c:{if(I[a+53|0]){F[c+23|0]=I[c+24|0];break c}h=c+24|0;while(1){d:{d=H[a+40>>2];f=H[d>>2];i=H[d+4>>2];e:{g=d;d=(c+24|0)+e|0;switch(wf(H[a+36>>2],g,c+24|0,d,c+16|0,c+23|0,h,c+12|0)-1|0){case 0:break e;case 1:break b;case 2:break d;default:break c}}g=H[a+40>>2];H[g>>2]=f;H[g+4>>2]=i;if((e|0)==8){break b}f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[d|0]=f;e=e+1|0;continue}break}F[c+23|0]=I[c+24|0]}f:{if(!b){while(1){if((e|0)<1){break f}e=e-1|0;if((pe(Sb(F[e+(c+24|0)|0]),H[a+32>>2])|0)!=-1){continue}break b}}H[a+48>>2]=Sb(F[c+23|0])}d=Sb(F[c+23|0]);break a}d=-1}oa=c+32|0;return d}function Fq(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{e=b;if(b){d=c;if(!d){break j}break i}a=(a>>>0)/(c>>>0)|0;pa=0;break a}if(!a){break h}break g}if(!(d-1&d)){break f}h=(Q(d)+33|0)-Q(e)|0;i=0-h|0;break d}a=(e>>>0)/0|0;pa=0;break a}d=32-Q(e)|0;if(d>>>0<31){break e}break c}if((d|0)==1){break b}d=d?31-Q(d-1^d)|0:32;c=d&31;if((d&63)>>>0>=32){e=0;a=b>>>c|0}else{e=b>>>c|0;a=((1<>>c}pa=e;break a}h=d+1|0;i=63-d|0}d=b;e=h&63;f=e&31;if(e>>>0>=32){e=0;f=d>>>f|0}else{e=d>>>f|0;f=((1<>>f}i=i&63;d=i&31;if(i>>>0>=32){b=a<>>32-d|b<>>31;j=g;e=e<<1|f>>>31;g=i-(e+(d>>>0>>0)|0)>>31;k=c&g;f=j-k|0;e=e-(j>>>0>>0)|0;b=b<<1|a>>>31;a=l|a<<1;g=g&1;l=g;h=h-1|0;if(h){continue}break}}pa=b<<1|a>>>31;a=g|a<<1;break a}a=0;b=0}pa=b}return a}function Pg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=oa-32|0;oa=c;a:{if(I[a+52|0]){d=H[a+48>>2];if(!b){break a}F[a+52|0]=0;H[a+48>>2]=-1;break a}H[c+24>>2]=1;e=H[vf(c+24|0,a+44|0)>>2];h=(e|0)>0?e:0;b:{while(1){if((d|0)!=(h|0)){f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[(c+24|0)+d|0]=f;d=d+1|0;continue}break}c:{if(I[a+53|0]){H[c+20>>2]=F[c+24|0];break c}h=c+24|0;while(1){d:{d=H[a+40>>2];f=H[d>>2];i=H[d+4>>2];e:{g=d;d=(c+24|0)+e|0;switch(wf(H[a+36>>2],g,c+24|0,d,c+16|0,c+20|0,h,c+12|0)-1|0){case 0:break e;case 1:break b;case 2:break d;default:break c}}g=H[a+40>>2];H[g>>2]=f;H[g+4>>2]=i;if((e|0)==8){break b}f=Ze(H[a+32>>2]);if((f|0)==-1){break b}F[d|0]=f;e=e+1|0;continue}break}H[c+20>>2]=F[c+24|0]}f:{if(!b){while(1){if((e|0)<1){break f}e=e-1|0;if((pe(F[e+(c+24|0)|0],H[a+32>>2])|0)!=-1){continue}break b}}H[a+48>>2]=H[c+20>>2]}d=H[c+20>>2];break a}d=-1}oa=c+32|0;return d}function Fn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-384|0;oa=a;H[a+368>>2]=c;H[a+376>>2]=b;Yf(a+216|0,d,a+240|0,a+236|0,a+232|0);b=Ea(a+200|0);Da(b,Ja(b));c=Aa(b,0);H[a+196>>2]=c;H[a+28>>2]=a+32;H[a+24>>2]=0;F[a+23|0]=1;F[a+22|0]=69;while(1){a:{if(!Ab(a+376|0,a+368|0)){break a}if(H[a+196>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+196>>2]=d+c}if(Xf(ab(a+376|0),a+23|0,a+22|0,c,a+196|0,H[a+236>>2],H[a+232>>2],a+216|0,a+32|0,a+28|0,a+24|0,a+240|0)){break a}hb(a+376|0);continue}break}b:{if(!wa(a+216|0)|!I[a+23|0]){break b}d=H[a+28>>2];if((d-(a+32|0)|0)>159){break b}H[a+28>>2]=d+4;H[d>>2]=H[a+24>>2]}Li(a,c,H[a+196>>2],e);c=H[a+4>>2];H[f>>2]=H[a>>2];H[f+4>>2]=c;c=H[a+12>>2];H[f+8>>2]=H[a+8>>2];H[f+12>>2]=c;wb(a+216|0,a+32|0,H[a+28>>2],e);if(jb(a+376|0,a+368|0)){H[e>>2]=H[e>>2]|2}c=H[a+376>>2];va(b);va(a+216|0);oa=a+384|0;return c|0}function On(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-288|0;oa=a;H[a+272>>2]=c;H[a+280>>2]=b;bg(a+224|0,d,a+240|0,a+239|0,a+238|0);b=Ea(a+208|0);Da(b,Ja(b));c=Aa(b,0);H[a+204>>2]=c;H[a+28>>2]=a+32;H[a+24>>2]=0;F[a+23|0]=1;F[a+22|0]=69;while(1){a:{if(!Bb(a+280|0,a+272|0)){break a}if(H[a+204>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+204>>2]=d+c}if(ag(bb(a+280|0),a+23|0,a+22|0,c,a+204|0,F[a+239|0],F[a+238|0],a+224|0,a+32|0,a+28|0,a+24|0,a+240|0)){break a}ib(a+280|0);continue}break}b:{if(!wa(a+224|0)|!I[a+23|0]){break b}d=H[a+28>>2];if((d-(a+32|0)|0)>159){break b}H[a+28>>2]=d+4;H[d>>2]=H[a+24>>2]}Li(a,c,H[a+204>>2],e);c=H[a+4>>2];H[f>>2]=H[a>>2];H[f+4>>2]=c;c=H[a+12>>2];H[f+8>>2]=H[a+8>>2];H[f+12>>2]=c;wb(a+224|0,a+32|0,H[a+28>>2],e);if(kb(a+280|0,a+272|0)){H[e>>2]=H[e>>2]|2}c=H[a+280>>2];va(b);va(a+224|0);oa=a+288|0;return c|0}function yn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;a=oa-208|0;oa=a;H[a+200>>2]=37;H[a+204>>2]=0;h=Oe(a+200|1,7628,H[c+4>>2]);H[a+156>>2]=a+160;f=Oa();a:{if(h){g=H[c+8>>2];M[a+40>>3]=e;H[a+32>>2]=g;f=vb(a+160|0,30,f,a+200|0,a+32|0);break a}M[a+48>>3]=e;f=vb(a+160|0,30,f,a+200|0,a+48|0)}H[a+80>>2]=151;j=Ya(a+144|0,0,a+80|0);i=a+160|0;g=i;b:{if((f|0)>=30){f=Oa();c:{if(h){g=H[c+8>>2];M[a+8>>3]=e;H[a>>2]=g;f=tc(a+156|0,f,a+200|0,a);break c}M[a+16>>3]=e;f=tc(a+156|0,f,a+200|0,a+16|0)}if((f|0)==-1){break b}lb(j,H[a+156>>2]);g=H[a+156>>2]}h=f+g|0;k=Nb(g,h,c);H[a+80>>2]=151;g=Ya(a+72|0,0,a+80|0);d:{if(H[a+156>>2]==(a+160|0)){f=a+80|0;break d}f=cb(f<<1);if(!f){break b}lb(g,f);i=H[a+156>>2]}Ia(a+56|0,c);Di(i,k,h,f,a+68|0,a- -64|0,a+56|0);Fa(a+56|0);b=pc(b,f,H[a+68>>2],H[a+64>>2],c,d);_a(g);_a(j);oa=a+208|0;return b|0}db();X()}function pn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;a=oa-384|0;oa=a;H[a+376>>2]=37;H[a+380>>2]=0;h=Oe(a+376|1,7628,H[c+4>>2]);H[a+332>>2]=a+336;f=Oa();a:{if(h){g=H[c+8>>2];M[a+40>>3]=e;H[a+32>>2]=g;f=vb(a+336|0,30,f,a+376|0,a+32|0);break a}M[a+48>>3]=e;f=vb(a+336|0,30,f,a+376|0,a+48|0)}H[a+80>>2]=151;j=Ya(a+320|0,0,a+80|0);i=a+336|0;g=i;b:{if((f|0)>=30){f=Oa();c:{if(h){g=H[c+8>>2];M[a+8>>3]=e;H[a>>2]=g;f=tc(a+332|0,f,a+376|0,a);break c}M[a+16>>3]=e;f=tc(a+332|0,f,a+376|0,a+16|0)}if((f|0)==-1){break b}lb(j,H[a+332>>2]);g=H[a+332>>2]}h=f+g|0;k=Nb(g,h,c);H[a+80>>2]=151;g=Ya(a+72|0,0,a+80|0);d:{if(H[a+332>>2]==(a+336|0)){f=a+80|0;break d}f=cb(f<<3);if(!f){break b}lb(g,f);i=H[a+332>>2]}Ia(a+56|0,c);Ai(i,k,h,f,a+68|0,a- -64|0,a+56|0);Fa(a+56|0);b=Dc(b,f,H[a+68>>2],H[a+64>>2],c,d);_a(g);_a(j);oa=a+384|0;return b|0}db();X()}function Bc(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-32|0;oa=i;H[i+16>>2]=c;H[i+24>>2]=b;Ia(i+8|0,d);j=Ib(i+8|0);Fa(i+8|0);H[e>>2]=0;c=0;a:{while(1){if((g|0)==(h|0)|c){break a}b:{if(jb(i+24|0,i+16|0)){break b}c:{if((yd(j,H[g>>2])|0)==37){c=g+4|0;if((h|0)==(c|0)){break b}k=0;b=yd(j,H[c>>2]);d:{if(!((b|0)==69|(b&255)==48)){c=g;break d}if((g+8|0)==(h|0)){break b}k=b;b=yd(j,H[g+8>>2])}H[i+24>>2]=qa[H[H[a>>2]+36>>2]](a,H[i+24>>2],H[i+16>>2],d,e,f,b,k);g=c+8|0;break c}if(cc(j,8192,H[g>>2])){while(1){e:{g=g+4|0;if((h|0)==(g|0)){g=h;break e}if(cc(j,8192,H[g>>2])){continue}}break}while(1){if(!Ab(i+24|0,i+16|0)){break c}if(!cc(j,8192,ab(i+24|0))){break c}hb(i+24|0);continue}}if((pb(j,ab(i+24|0))|0)==(pb(j,H[g>>2])|0)){g=g+4|0;hb(i+24|0);break c}H[e>>2]=4}c=H[e>>2];continue}break}H[e>>2]=4}if(jb(i+24|0,i+16|0)){H[e>>2]=H[e>>2]|2}oa=i+32|0;return H[i+24>>2]}function Ym(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;var h=0,i=0,j=0;a=oa-160|0;oa=a;H[a+144>>2]=c;H[a+152>>2]=b;H[a+20>>2]=152;j=Ya(a+24|0,a+32|0,a+20|0);Ia(a+16|0,e);b=Fb(a+16|0);F[a+15|0]=0;if(li(a+152|0,c,d,a+16|0,H[e+4>>2],f,a+15|0,b,j,a+20|0,a+132|0)){wj(g);if(I[a+15|0]){Od(g,pb(b,45))}b=pb(b,48);e=H[j>>2];h=H[a+20>>2];c=h-1|0;b=b&255;while(1){if(!((b|0)!=I[e|0]|c>>>0<=e>>>0)){e=e+1|0;continue}break}c=oa-32|0;oa=c;b=wa(g);d=Ja(g);i=th(e,h);a:{if(!i){break a}if(qh(e,Ca(g),Ca(g)+wa(g)|0)){d=oa-16|0;oa=d;b=c+16|0;Xi(b,e,h);oa=d+16|0;Lg(g,Ca(b),wa(b));va(b);break a}if(d-b>>>0>>0){pf(g,d,(b+i|0)-d|0,b,b)}d=Ca(g)+b|0;while(1){if((e|0)!=(h|0)){nb(d,e);e=e+1|0;d=d+1|0;continue}break}F[c+15|0]=0;nb(d,c+15|0);Lc(g,b+i|0)}oa=c+32|0}if(kb(a+152|0,a+144|0)){H[f>>2]=H[f>>2]|2}b=H[a+152>>2];Fa(a+16|0);_a(j);oa=a+160|0;return b|0}function Cc(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-32|0;oa=i;H[i+16>>2]=c;H[i+24>>2]=b;Ia(i+8|0,d);j=Fb(i+8|0);Fa(i+8|0);H[e>>2]=0;c=0;a:{while(1){if((g|0)==(h|0)|c){break a}b:{if(kb(i+24|0,i+16|0)){break b}c:{if((zd(j,F[g|0])|0)==37){c=g+1|0;if((h|0)==(c|0)){break b}k=0;b=zd(j,F[c|0]);d:{if(!((b|0)==69|(b&255)==48)){c=g;break d}if((g+2|0)==(h|0)){break b}k=b;b=zd(j,F[g+2|0])}H[i+24>>2]=qa[H[H[a>>2]+36>>2]](a,H[i+24>>2],H[i+16>>2],d,e,f,b,k);g=c+2|0;break c}if(dc(j,8192,F[g|0])){while(1){e:{g=g+1|0;if((h|0)==(g|0)){g=h;break e}if(dc(j,8192,F[g|0])){continue}}break}while(1){if(!Bb(i+24|0,i+16|0)){break c}if(!dc(j,8192,bb(i+24|0))){break c}ib(i+24|0);continue}}if((Se(j,bb(i+24|0))|0)==(Se(j,F[g|0])|0)){g=g+1|0;ib(i+24|0);break c}H[e>>2]=4}c=H[e>>2];continue}break}H[e>>2]=4}if(kb(i+24|0,i+16|0)){H[e>>2]=H[e>>2]|2}oa=i+32|0;return H[i+24>>2]}function ug(a,b,c,d,e,f){var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=oa-16|0;oa=g;m=wa(b)-c|0;h=1;l=wa(b)-c|0;a:{b:{if((l|0)<2){break b}n=c;while(1){j=h+n|0;k=Aa(b,j);c:{if(i){j=Ra(b,j,2,22212);i=(j|0)!=0;h=!j+h|0;break c}i=0;k=I[k|0];if(Db(k<<24>>24)){break c}if((k|0)!=47){break b}i=l;if(!Ra(b,j,2,22188)){break a}i=!Ra(b,j,2,22200);h=i+h|0}h=h+1|0;if((l|0)>(h|0)){continue}break}}i=h}d:{if((m|0)==(i|0)){H[g+12>>2]=d;if(!mb(H[a+36>>2])){d=H[Qa(H[a+36>>2])>>2];H[g+12>>2]=d}b=H[a+36>>2];H[g+8>>2]=H[a+100>>2]+d;ya(b,g+8|0);if(!f){break d}xc(H[a+44>>2],g+12|0);break d}if(f){b=H[a+44>>2];H[g+12>>2]=c+d;ya(b,g+12|0)}c=c+i|0;b=((c|0)<(e|0)?e:c)+d|0;H[g+12>>2]=b;if((c|0)>H[a+108>>2]){b=(H[a+100>>2]<<1)+d|0;H[g+12>>2]=b}e:{if(mb(H[a+36>>2])){break e}if(H[Qa(H[a+36>>2])>>2]<=(b|0)){break e}H[g+12>>2]=H[Qa(H[a+36>>2])>>2]}xc(H[a+36>>2],g+12|0)}oa=g+16|0}function Ek(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;e=oa+-64|0;oa=e;d=1;a:{if(Mb(a,b,0)){break a}d=0;if(!b){break a}d=oa+-64|0;oa=d;f=H[b>>2];g=H[f-4>>2];h=H[f-8>>2];H[d+20>>2]=0;H[d+16>>2]=20776;H[d+12>>2]=b;H[d+8>>2]=20824;f=0;Vb(d+24|0,0,39);b=b+h|0;b:{if(Mb(g,20824,0)){H[d+56>>2]=1;qa[H[H[g>>2]+20>>2]](g,d+8|0,b,b,1,0);f=H[d+32>>2]==1?b:0;break b}qa[H[H[g>>2]+24>>2]](g,d+8|0,b,1,0);c:{switch(H[d+44>>2]){case 0:f=H[d+48>>2]==1?H[d+36>>2]==1?H[d+40>>2]==1?H[d+28>>2]:0:0:0;break b;case 1:break c;default:break b}}if(H[d+32>>2]!=1){if(H[d+48>>2]|H[d+36>>2]!=1|H[d+40>>2]!=1){break b}}f=H[d+24>>2]}oa=d- -64|0;d=0;if(!f){break a}Vb(e+8|4,0,52);H[e+56>>2]=1;H[e+20>>2]=-1;H[e+16>>2]=a;H[e+8>>2]=f;qa[H[H[f>>2]+28>>2]](f,e+8|0,H[c>>2],1);a=H[e+32>>2];if((a|0)==1){H[c>>2]=H[e+24>>2]}d=(a|0)==1}oa=e- -64|0;return d|0}function Ne(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=oa-16|0;oa=k;l=Ib(g);g=Dd(g);Gb(k,g);a:{if($b(k)){Ec(l,a,c,d);g=(c-a<<2)+d|0;H[f>>2]=g;break a}H[f>>2]=d;b:{c:{i=a;h=I[i|0];switch(h-43|0){case 0:case 2:break c;default:break b}}i=Kb(l,h<<24>>24);h=H[f>>2];H[f>>2]=h+4;H[h>>2]=i;i=a+1|0}if(!(I[i|0]!=48|(c-i|0)<2|(I[i+1|0]|32)!=120)){h=Kb(l,48);j=H[f>>2];H[f>>2]=j+4;H[j>>2]=h;h=Kb(l,F[i+1|0]);j=H[f>>2];H[f>>2]=j+4;H[j>>2]=h;i=i+2|0}fd(i,c);j=0;n=Hb(g);h=0;g=i;while(1){if(c>>>0<=g>>>0){Me((i-a<<2)+d|0,H[f>>2]);g=H[f>>2]}else{d:{if(!I[Aa(k,h)|0]){break d}if(F[Aa(k,h)|0]!=(j|0)){break d}j=H[f>>2];H[f>>2]=j+4;H[j>>2]=n;h=(wa(k)-1>>>0>h>>>0)+h|0;j=0}o=Kb(l,F[g|0]);m=H[f>>2];H[f>>2]=m+4;H[m>>2]=o;g=g+1|0;j=j+1|0;continue}break}}H[e>>2]=(b|0)==(c|0)?g:(b-a<<2)+d|0;va(k);oa=k+16|0}function fj(a,b){var c=0,d=0,e=0;a:{if(I[b|0]){break a}b=jd(2613);if(I[b|0]?b:0){break a}b=jd(N(a,12)+9216|0);if(I[b|0]?b:0){break a}b=jd(2629);if(I[b|0]?b:0){break a}b=2798}b:{while(1){e=I[b+c|0];if(!(!e|(e|0)==47)){e=15;c=c+1|0;if((c|0)!=15){continue}break b}break}e=c}d=2798;c:{d:{c=I[b|0];e:{f:{if(!(I[b+e|0]|(c|0)==46)){d=b;if((c|0)!=67){break f}}if(!I[d+1|0]){break e}}if(!_d(d,2798)){break e}if(_d(d,2567)){break d}}if(!a){c=9140;if(I[d+1|0]==46){break c}}return 0}c=H[6090];if(c){while(1){if(!_d(d,c+8|0)){break c}c=H[c+24>>2];if(c){continue}break}}c=H[6090];if(c){while(1){if(!_d(d,c+8|0)){return c}c=H[c+24>>2];if(c){continue}break}}c=cb(28);g:{if(!c){c=0;break g}b=H[2286];H[c>>2]=H[2285];H[c+4>>2]=b;b=c+8|0;Wb(b,d,e);F[b+e|0]=0;H[c+24>>2]=H[6090];H[6090]=c}c=a|c?c:9140}return c}function Pe(a,b,c,d,e,f,g){var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=oa-16|0;oa=k;l=Fb(g);g=Gd(g);Gb(k,g);a:{if($b(k)){Wc(l,a,c,d);g=(c-a|0)+d|0;H[f>>2]=g;break a}H[f>>2]=d;b:{c:{i=a;h=I[i|0];switch(h-43|0){case 0:case 2:break c;default:break b}}i=pb(l,h<<24>>24);h=H[f>>2];H[f>>2]=h+1;F[h|0]=i;i=a+1|0}if(!(I[i|0]!=48|(c-i|0)<2|(I[i+1|0]|32)!=120)){h=pb(l,48);j=H[f>>2];H[f>>2]=j+1;F[j|0]=h;h=pb(l,F[i+1|0]);j=H[f>>2];H[f>>2]=j+1;F[j|0]=h;i=i+2|0}fd(i,c);j=0;n=Hb(g);h=0;g=i;while(1){if(c>>>0<=g>>>0){fd((i-a|0)+d|0,H[f>>2]);g=H[f>>2]}else{d:{if(!I[Aa(k,h)|0]){break d}if(F[Aa(k,h)|0]!=(j|0)){break d}j=H[f>>2];H[f>>2]=j+1;F[j|0]=n;h=(wa(k)-1>>>0>h>>>0)+h|0;j=0}o=pb(l,F[g|0]);m=H[f>>2];H[f>>2]=m+1;F[m|0]=o;g=g+1|0;j=j+1|0;continue}break}}H[e>>2]=(b|0)==(c|0)?g:(b-a|0)+d|0;va(k);oa=k+16|0}function Hn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-368|0;oa=a;H[a+352>>2]=c;H[a+360>>2]=b;Yf(a+200|0,d,a+224|0,a+220|0,a+216|0);b=Ea(a+184|0);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Ab(a+360|0,a+352|0)){break a}if(H[a+180>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=d+c}if(Xf(ab(a+360|0),a+7|0,a+6|0,c,a+180|0,H[a+220>>2],H[a+216>>2],a+200|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}hb(a+360|0);continue}break}b:{if(!wa(a+200|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}L[f>>2]=Ni(c,H[a+180>>2],e);wb(a+200|0,a+16|0,H[a+12>>2],e);if(jb(a+360|0,a+352|0)){H[e>>2]=H[e>>2]|2}c=H[a+360>>2];va(b);va(a+200|0);oa=a+368|0;return c|0}function Gn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-368|0;oa=a;H[a+352>>2]=c;H[a+360>>2]=b;Yf(a+200|0,d,a+224|0,a+220|0,a+216|0);b=Ea(a+184|0);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Ab(a+360|0,a+352|0)){break a}if(H[a+180>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+180>>2]=d+c}if(Xf(ab(a+360|0),a+7|0,a+6|0,c,a+180|0,H[a+220>>2],H[a+216>>2],a+200|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}hb(a+360|0);continue}break}b:{if(!wa(a+200|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}M[f>>3]=Mi(c,H[a+180>>2],e);wb(a+200|0,a+16|0,H[a+12>>2],e);if(jb(a+360|0,a+352|0)){H[e>>2]=H[e>>2]|2}c=H[a+360>>2];va(b);va(a+200|0);oa=a+368|0;return c|0}function Qn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;bg(a+208|0,d,a+224|0,a+223|0,a+222|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(ag(bb(a+264|0),a+7|0,a+6|0,c,a+188|0,F[a+223|0],F[a+222|0],a+208|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}L[f>>2]=Ni(c,H[a+188>>2],e);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Pn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;bg(a+208|0,d,a+224|0,a+223|0,a+222|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;F[a+7|0]=1;F[a+6|0]=69;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(ag(bb(a+264|0),a+7|0,a+6|0,c,a+188|0,F[a+223|0],F[a+222|0],a+208|0,a+16|0,a+12|0,a+8|0,a+224|0)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)|!I[a+7|0]){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}M[f>>3]=Mi(c,H[a+188>>2],e);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Li(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;f=oa-32|0;oa=f;a:{b:{c:{if((b|0)!=(c|0)){j=H[6070];H[6070]=0;g=oa-16|0;oa=g;Oa();h=oa-16|0;oa=h;e=oa-16|0;oa=e;dg(e,b,f+28|0,2);b=H[e+4>>2];H[h>>2]=H[e>>2];H[h+4>>2]=b;b=h;h=H[e+12>>2];H[b+8>>2]=H[e+8>>2];H[b+12>>2]=h;oa=e+16|0;e=H[b+4>>2];H[g>>2]=H[b>>2];H[g+4>>2]=e;e=g;g=H[b+12>>2];H[e+8>>2]=H[b+8>>2];H[e+12>>2]=g;oa=b+16|0;b=H[e+4>>2];H[f>>2]=H[e>>2];H[f+4>>2]=b;b=H[e+12>>2];H[f+8>>2]=H[e+8>>2];H[f+12>>2]=b;oa=e+16|0;e=H[f+8>>2];g=H[f+12>>2];h=H[f>>2];i=H[f+4>>2];b=H[6070];if(!b){break c}if(H[f+28>>2]!=(c|0)){break b}k=h;l=i;m=e;n=g;if((b|0)!=68){break a}break b}H[d>>2]=4;break a}H[6070]=j;if(H[f+28>>2]==(c|0)){break a}}H[d>>2]=4;h=k;i=l;e=m;g=n}H[a>>2]=h;H[a+4>>2]=i;H[a+8>>2]=e;H[a+12>>2]=g;oa=f+32|0}function Kn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Si(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function In(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Oi(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Ln(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Ti(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Jn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}G[f>>1]=Ri(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Hi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=uc(d);h=Yd(d,a+224|0);Xd(a+208|0,d,a+332|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Cd(ab(a+344|0),g,c,a+188|0,a+8|0,H[a+332>>2],a+208|0,a+16|0,a+12|0,h)){break a}hb(a+344|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Pi(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}c=H[a+344>>2];va(b);va(a+208|0);oa=a+352|0;return c|0}function Tn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Si(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Rn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Oi(c,H[a+188>>2],e,g);H[f+4>>2]=pa;wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Sm(a,b,c,d,e,f){a=a|0;b=b|0;c=c|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;a=oa-496|0;oa=a;Ia(a+488|0,d);l=Ib(a+488|0);if(wa(f)){m=H[Qe(f,0)>>2]==(Kb(l,45)|0)}j=Ea(a+456|0);g=bc(a+440|0);h=bc(a+424|0);Zh(c,m,a+488|0,a+480|0,a+476|0,a+472|0,j,g,h,a+420|0);H[a+16>>2]=151;k=Ya(a+8|0,0,a+16|0);c=a+16|0;a:{b:{if((wa(f)|0)>H[a+420>>2]){i=wa(f);n=H[a+420>>2];i=(((wa(h)+(i-n<<1)|0)+wa(g)|0)+H[a+420>>2]|0)+1|0;break b}i=((wa(h)+wa(g)|0)+H[a+420>>2]|0)+2|0}if(i>>>0<101){break a}lb(k,cb(i<<2));c=H[k>>2];if(c){break a}db();X()}Yh(c,a+4|0,a,H[d+4>>2],Ca(f),Ca(f)+(wa(f)<<2)|0,l,m,a+480|0,H[a+476>>2],H[a+472>>2],j,g,h,H[a+420>>2]);b=Dc(b,c,H[a+4>>2],H[a>>2],d,e);_a(k);va(h);va(g);va(j);Fa(a+488|0);oa=a+496|0;return b|0}function Un(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Ti(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Sn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}G[f>>1]=Ri(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Qi(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=uc(d);Zd(a+208|0,d,a+255|0);b=Ea(a+192|0);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=c;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(b)+c|0)){d=wa(b);Da(b,wa(b)<<1);Da(b,Ja(b));c=Aa(b,0);H[a+188>>2]=d+c}if(Fd(bb(a+264|0),g,c,a+188|0,a+8|0,F[a+255|0],a+208|0,a+16|0,a+12|0,13232)){break a}ib(a+264|0);continue}break}b:{if(!wa(a+208|0)){break b}d=H[a+12>>2];if((d-(a+16|0)|0)>159){break b}H[a+12>>2]=d+4;H[d>>2]=H[a+8>>2]}H[f>>2]=Pi(c,H[a+188>>2],e,g);wb(a+208|0,a+16|0,H[a+12>>2],e);if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}c=H[a+264>>2];va(b);va(a+208|0);oa=a+272|0;return c|0}function Um(a,b,c,d,e,f){a=a|0;b=b|0;c=c|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;a=oa-192|0;oa=a;Ia(a+184|0,d);l=Fb(a+184|0);if(wa(f)){m=I[Aa(f,0)|0]==(pb(l,45)&255)}j=Ea(a+160|0);g=Ea(a+144|0);h=Ea(a+128|0);$h(c,m,a+184|0,a+176|0,a+175|0,a+174|0,j,g,h,a+124|0);H[a+16>>2]=151;k=Ya(a+8|0,0,a+16|0);c=a+16|0;a:{b:{if((wa(f)|0)>H[a+124>>2]){i=wa(f);n=H[a+124>>2];i=(((wa(h)+(i-n<<1)|0)+wa(g)|0)+H[a+124>>2]|0)+1|0;break b}i=((wa(h)+wa(g)|0)+H[a+124>>2]|0)+2|0}if(i>>>0<101){break a}lb(k,cb(i));c=H[k>>2];if(c){break a}db();X()}_h(c,a+4|0,a,H[d+4>>2],Ca(f),Ca(f)+wa(f)|0,l,m,a+176|0,F[a+175|0],F[a+174|0],j,g,h,H[a+124>>2]);b=pc(b,c,H[a+4>>2],H[a>>2],d,e);_a(k);va(h);va(g);va(j);Fa(a+184|0);oa=a+192|0;return b|0}function ie(a,b,c){var d=0,e=0;a:{if((a|0)==(b|0)){break a}e=a+c|0;if(b-e>>>0<=0-(c<<1)>>>0){Wb(a,b,c);return}d=(a^b)&3;b:{c:{if(a>>>0>>0){if(d){break b}if(!(a&3)){break c}while(1){if(!c){break a}F[a|0]=I[b|0];b=b+1|0;c=c-1|0;a=a+1|0;if(a&3){continue}break}break c}d:{if(d){break d}if(e&3){while(1){if(!c){break a}c=c-1|0;d=c+a|0;F[d|0]=I[b+c|0];if(d&3){continue}break}}if(c>>>0<=3){break d}while(1){c=c-4|0;H[c+a>>2]=H[b+c>>2];if(c>>>0>3){continue}break}}if(!c){break a}while(1){c=c-1|0;F[c+a|0]=I[b+c|0];if(c){continue}break}break a}if(c>>>0<=3){break b}while(1){H[a>>2]=H[b>>2];b=b+4|0;a=a+4|0;c=c-4|0;if(c>>>0>3){continue}break}}if(!c){break a}while(1){F[a|0]=I[b|0];a=a+1|0;b=b+1|0;c=c-1|0;if(c){continue}break}}}function tl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=oa-32|0;oa=d;e=H[a+28>>2];H[d+16>>2]=e;f=H[a+20>>2];H[d+28>>2]=c;H[d+24>>2]=b;b=f-e|0;H[d+20>>2]=b;e=b+c|0;j=2;b=d+16|0;a:{b:{c:{if(!Ye(ba(H[a+60>>2],d+16|0,2,d+12|0)|0)){while(1){f=H[d+12>>2];if((f|0)==(e|0)){break c}if((f|0)<=-1){break b}g=H[b+4>>2];h=g>>>0>>0;i=(h<<3)+b|0;g=f-(h?g:0)|0;H[i>>2]=g+H[i>>2];i=(h?12:4)+b|0;H[i>>2]=H[i>>2]-g;e=e-f|0;b=h?b+8|0:b;j=j-h|0;if(!Ye(ba(H[a+60>>2],b|0,j|0,d+12|0)|0)){continue}break}}if((e|0)!=-1){break b}}b=H[a+44>>2];H[a+28>>2]=b;H[a+20>>2]=b;H[a+16>>2]=b+H[a+48>>2];a=c;break a}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a>>2]=H[a>>2]|32;a=0;if((j|0)==2){break a}a=c-H[b+4>>2]|0}oa=d+32|0;return a|0}function Vb(a,b,c){var d=0,e=0,f=0;a:{if(!c){break a}f=a+c|0;F[f-1|0]=b;F[a|0]=b;if(c>>>0<3){break a}F[f-2|0]=b;F[a+1|0]=b;F[f-3|0]=b;F[a+2|0]=b;if(c>>>0<7){break a}F[f-4|0]=b;F[a+3|0]=b;if(c>>>0<9){break a}f=0-a&3;e=f+a|0;d=N(b&255,16843009);H[e>>2]=d;b=c-f&-4;c=b+e|0;H[c-4>>2]=d;if(b>>>0<9){break a}H[e+8>>2]=d;H[e+4>>2]=d;H[c-8>>2]=d;H[c-12>>2]=d;if(b>>>0<25){break a}H[e+24>>2]=d;H[e+20>>2]=d;H[e+16>>2]=d;H[e+12>>2]=d;H[c-16>>2]=d;H[c-20>>2]=d;H[c-24>>2]=d;H[c-28>>2]=d;c=b;b=e&4|24;c=c-b|0;if(c>>>0<32){break a}d=Eq(d,0,1,1);f=pa;b=b+e|0;while(1){H[b+24>>2]=d;e=f;H[b+28>>2]=e;H[b+16>>2]=d;H[b+20>>2]=e;H[b+8>>2]=d;H[b+12>>2]=e;H[b>>2]=d;H[b+4>>2]=e;b=b+32|0;c=c-32|0;if(c>>>0>31){continue}break}}return a}function Fd(a,b,c,d,e,f,g,h,i,j){var k=0,l=0,m=0;k=oa-16|0;oa=k;F[k+15|0]=a;a:{b:{c:{if(H[d>>2]!=(c|0)){break c}l=43;m=a&255;if((m|0)!=I[j+24|0]){l=45;if(I[j+25|0]!=(m|0)){break c}}H[d>>2]=c+1;F[c|0]=l;break b}if(!(!wa(g)|(a|0)!=(f|0))){a=0;b=H[i>>2];if((b-h|0)>159){break a}a=H[e>>2];H[i>>2]=b+4;H[b>>2]=a;break b}a=-1;f=$f(j,j+26|0,k+15|0)-j|0;if((f|0)>23){break a}d:{e:{switch(b-8|0){case 0:case 2:if((b|0)>(f|0)){break d}break a;case 1:break d;default:break e}}if((b|0)!=16|(f|0)<22){break d}b=H[d>>2];if((b|0)==(c|0)|(b-c|0)>2|I[b-1|0]!=48){break a}a=0;H[e>>2]=0;H[d>>2]=b+1;F[b|0]=I[f+13232|0];break a}a=H[d>>2];H[d>>2]=a+1;F[a|0]=I[f+13232|0];H[e>>2]=H[e>>2]+1;a=0;break a}a=0;H[e>>2]=0}oa=k+16|0;return a}function Cd(a,b,c,d,e,f,g,h,i,j){var k=0,l=0;k=oa-16|0;oa=k;H[k+12>>2]=a;a:{b:{c:{if(H[d>>2]!=(c|0)){break c}l=43;if(H[j+96>>2]!=(a|0)){l=45;if(H[j+100>>2]!=(a|0)){break c}}H[d>>2]=c+1;F[c|0]=l;break b}if(!(!wa(g)|(a|0)!=(f|0))){a=0;b=H[i>>2];if((b-h|0)>159){break a}a=H[e>>2];H[i>>2]=b+4;H[b>>2]=a;break b}a=-1;g=Wf(j,j+104|0,k+12|0)-j|0;if((g|0)>92){break a}f=g>>2;d:{e:{switch(b-8|0){case 0:case 2:if((b|0)>(f|0)){break d}break a;case 1:break d;default:break e}}if((b|0)!=16|(g|0)<88){break d}b=H[d>>2];if((b|0)==(c|0)|(b-c|0)>2|I[b-1|0]!=48){break a}a=0;H[e>>2]=0;H[d>>2]=b+1;F[b|0]=I[f+13232|0];break a}a=H[d>>2];H[d>>2]=a+1;F[a|0]=I[f+13232|0];H[e>>2]=H[e>>2]+1;a=0;break a}a=0;H[e>>2]=0}oa=k+16|0;return a}function mj(a,b,c,d,e,f){var g=0;g=oa-80|0;oa=g;a:{if((f|0)>=16384){Ta(g+32|0,b,c,d,e,0,0,0,2147352576);d=H[g+40>>2];e=H[g+44>>2];b=H[g+32>>2];c=H[g+36>>2];if((f|0)<32767){f=f-16383|0;break a}Ta(g+16|0,b,c,d,e,0,0,0,2147352576);f=((f|0)<49149?f:49149)-32766|0;d=H[g+24>>2];e=H[g+28>>2];b=H[g+16>>2];c=H[g+20>>2];break a}if((f|0)>-16383){break a}Ta(g- -64|0,b,c,d,e,0,0,0,65536);d=H[g+72>>2];e=H[g+76>>2];b=H[g+64>>2];c=H[g+68>>2];if((f|0)>-32765){f=f+16382|0;break a}Ta(g+48|0,b,c,d,e,0,0,0,65536);f=((f|0)>-49146?f:-49146)+32764|0;d=H[g+56>>2];e=H[g+60>>2];b=H[g+48>>2];c=H[g+52>>2]}Ta(g,b,c,d,e,0,0,0,f+16383<<16);b=H[g+12>>2];H[a+8>>2]=H[g+8>>2];H[a+12>>2]=b;b=H[g+4>>2];H[a>>2]=H[g>>2];H[a+4>>2]=b;oa=g+80|0}function pj(a,b,c){a:{if(b>>>0>20){break a}b:{switch(b-9|0){case 0:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=H[b>>2];return;case 1:b=H[c>>2];H[c>>2]=b+4;b=H[b>>2];H[a>>2]=b;H[a+4>>2]=b>>31;return;case 2:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=H[b>>2];H[a+4>>2]=0;return;case 3:b=H[c>>2]+7&-8;H[c>>2]=b+8;c=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=c;return;case 4:b=H[c>>2];H[c>>2]=b+4;b=G[b>>1];H[a>>2]=b;H[a+4>>2]=b>>31;return;case 5:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=J[b>>1];H[a+4>>2]=0;return;case 6:b=H[c>>2];H[c>>2]=b+4;b=F[b|0];H[a>>2]=b;H[a+4>>2]=b>>31;return;case 7:b=H[c>>2];H[c>>2]=b+4;H[a>>2]=I[b|0];H[a+4>>2]=0;return;case 8:b=H[c>>2]+7&-8;H[c>>2]=b+8;M[a>>3]=M[b>>3];return;case 9:break b;default:break a}}qa[145](a,c)}}function Oa(){var a=0,b=0,c=0,d=0,e=0;a:{if(F[24532]&1){break a}if(!fb(24532)){break a}c=oa-32|0;oa=c;b:{if(ej(0)){while(1){if(2147483647>>>a&1){H[a<<2>>2]=fj(a,2653)}a=a+1|0;if((a|0)!=6){continue}break}break b}while(1){e=(c+8|0)+(a<<2)|0;b=1<>2]}H[e>>2]=b;d=((b|0)!=0)+d|0;a=a+1|0;if((a|0)!=6){continue}break}b=9168;c:{d:{switch(d|0){case 1:break d;case 0:break b;default:break c}}if(H[c+8>>2]!=9140){break c}b=9192;break b}b=cb(24);if(!b){break b}a=H[c+12>>2];H[b>>2]=H[c+8>>2];H[b+4>>2]=a;a=H[c+28>>2];H[b+16>>2]=H[c+24>>2];H[b+20>>2]=a;a=H[c+20>>2];H[b+8>>2]=H[c+16>>2];H[b+12>>2]=a}oa=c+32|0;H[6132]=b;eb(24532)}return H[6132]}function Nn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-272|0;oa=a;H[a+256>>2]=c;H[a+264>>2]=b;g=Ea(a+208|0);Ia(a+16|0,d);Wc(Fb(a+16|0),13232,13258,a+224|0);Fa(a+16|0);c=Ea(a+192|0);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=b;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Bb(a+264|0,a+256|0)){break a}if(H[a+188>>2]==(wa(c)+b|0)){d=wa(c);Da(c,wa(c)<<1);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=d+b}if(Fd(bb(a+264|0),16,b,a+188|0,a+8|0,0,g,a+16|0,a+12|0,a+224|0)){break a}ib(a+264|0);continue}break}Da(c,H[a+188>>2]-b|0);b=Ca(c);d=Oa();H[a>>2]=f;if((Ki(b,d,a)|0)!=1){H[e>>2]=4}if(kb(a+264|0,a+256|0)){H[e>>2]=H[e>>2]|2}b=H[a+264>>2];va(c);va(g);oa=a+272|0;return b|0}function En(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;a=oa-352|0;oa=a;H[a+336>>2]=c;H[a+344>>2]=b;g=Ea(a+208|0);Ia(a+16|0,d);Ec(Ib(a+16|0),13232,13258,a+224|0);Fa(a+16|0);c=Ea(a+192|0);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=b;H[a+12>>2]=a+16;H[a+8>>2]=0;while(1){a:{if(!Ab(a+344|0,a+336|0)){break a}if(H[a+188>>2]==(wa(c)+b|0)){d=wa(c);Da(c,wa(c)<<1);Da(c,Ja(c));b=Aa(c,0);H[a+188>>2]=d+b}if(Cd(ab(a+344|0),16,b,a+188|0,a+8|0,0,g,a+16|0,a+12|0,a+224|0)){break a}hb(a+344|0);continue}break}Da(c,H[a+188>>2]-b|0);b=Ca(c);d=Oa();H[a>>2]=f;if((Ki(b,d,a)|0)!=1){H[e>>2]=4}if(jb(a+344|0,a+336|0)){H[e>>2]=H[e>>2]|2}b=H[a+344>>2];va(c);va(g);oa=a+352|0;return b|0}function yj(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=oa-16|0;oa=g;c=Ea(a);d=c;a=H[b+4>>2];j=pg(a+H[H[a>>2]-12>>2]|0,10);h=oa-16|0;oa=h;if(I[Cf(h+8|0,a)|0]){wj(d);a:{b:{while(1){e=$e(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]);if(qb(e,-1)){break b}e=Zc(e);f=0;if(qb(e,j)){break a}Od(d,e);i=i+1|0;if((wa(d)|0)!=-17){continue}break}f=4;break a}f=i?2:6}d=f;ac(H[H[a>>2]-12>>2]+a|0,d)}oa=h+16|0;a=H[b+4>>2];c:{if(!je(H[H[a>>2]-12>>2]+a|0)){break c}a=H[b+4>>2];if((I[(H[H[a>>2]-12>>2]+a|0)+16|0]&2)>>>1|0){break c}a=Ea(g);Ga(a,3108);cg(Ca(a),3010);va(a)}if(I[Aa(c,wa(c)-1|0)|0]==13){d:{a=wa(c)-1|0;if(wa(c)>>>0>=a>>>0){xj(c,a);break d}me();X()}}H[b+8>>2]=H[b+8>>2]+1;oa=g+16|0}function fl(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;f=oa-32|0;oa=f;g=H[b+68>>2];if(g){g=$c(g);a:{b:{if(!(!H[b+64>>2]|(c|d?(g|0)<=0:0))){if(!(qa[H[H[b>>2]+24>>2]](b)|0)){break b}}Kc(a,-1,-1);break a}if(e>>>0>=3){Kc(a,-1,-1);break a}h=H[b+64>>2];d=Eq(g,g>>31,c,d);c=(g|0)>0;if(Ae(h,c?d:0,c?pa:0,e)){Kc(a,-1,-1);break a}e=f+16|0;c=H[b+64>>2];c:{if(H[c+76>>2]<=-1){c=nh(c);d=pa;break c}c=nh(c);d=pa}d=Kc(e,c,d);e=H[b+76>>2];c=f;b=H[b+72>>2];H[c>>2]=b;H[c+4>>2]=e;H[c+8>>2]=b;H[c+12>>2]=e;b=H[c+4>>2];H[d>>2]=H[c>>2];H[d+4>>2]=b;b=H[c+28>>2];H[a+8>>2]=H[c+24>>2];H[a+12>>2]=b;b=H[c+20>>2];H[a>>2]=H[c+16>>2];H[a+4>>2]=b}oa=f+32|0;return}db();X()}function Zh(a,b,c,d,e,f,g,h,i,j){var k=0;k=oa-16|0;oa=k;a:{if(a){a=ci(c);b:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break b}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}qc(i,k);va(k);H[e>>2]=ec(a);H[f>>2]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);qc(h,k);va(k);a=Mc(a);break a}a=bi(c);c:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break c}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}qc(i,k);va(k);H[e>>2]=ec(a);H[f>>2]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);qc(h,k);va(k);a=Mc(a)}H[j>>2]=a;oa=k+16|0}function sq(a,b){a=a|0;b=b|0;var c=0,d=0;c=oa-16|0;oa=c;gk(a,b);H[a+136>>2]=b;b=H[a+140>>2];if(b){Ba(Va(b))}b=Na(12);Sa(b);H[a+140>>2]=b;b=H[a+144>>2];if(b){Ba(Va(b))}b=Na(12);d=Sa(b);H[a+144>>2]=b;H[c>>2]=0;ya(d,c);H[a+184>>2]=0;b=xa(c,7628);Ua(a+160|0,b);va(b);Ga(a+172|0,7628);F[a+192|0]=32;H[a+200>>2]=0;F[a+196|0]=34;G[a+194>>1]=8224;F[a+208|0]=1;H[a+188>>2]=0;F[a+238|0]=0;G[a+236>>1]=0;F[a+228|0]=0;F[a+226|0]=0;F[a+223|0]=0;F[a+224|0]=0;F[a+221|0]=0;F[a+213|0]=0;F[a+214|0]=0;F[a+215|0]=0;F[a+216|0]=0;F[a+217|0]=0;F[a+218|0]=0;F[a+219|0]=1;F[a+220|0]=0;G[a+230>>1]=0;G[a+232>>1]=0;H[a+248>>2]=0;H[a+252>>2]=0;H[a+240>>2]=0;H[a+244>>2]=0;oa=c+16|0}function $h(a,b,c,d,e,f,g,h,i,j){var k=0;k=oa-16|0;oa=k;a:{if(a){a=ii(c);b:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break b}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}Ua(i,k);va(k);F[e|0]=ec(a);F[f|0]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);Ua(h,k);va(k);a=Mc(a);break a}a=hi(c);c:{if(b){Oc(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;Nc(k,a);break c}He(k,a);b=H[k>>2];F[d|0]=b;F[d+1|0]=b>>>8;F[d+2|0]=b>>>16;F[d+3|0]=b>>>24;fc(k,a)}Ua(i,k);va(k);F[e|0]=ec(a);F[f|0]=Hb(a);Gb(k,a);Ua(g,k);va(k);gc(k,a);Ua(h,k);va(k);a=Mc(a)}H[j>>2]=a;oa=k+16|0}function La(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;a:{c=H[a+112>>2];d=H[a+116>>2];b:{if(c|d){b=c>>>0<=K[a+120>>2];c=H[a+124>>2];if((d|0)<(c|0)?1:(d|0)<=(c|0)?b:0){break b}}g=kg(a);if((g|0)>-1){break a}}H[a+104>>2]=0;return-1}h=a;b=H[a+116>>2];i=b;d=H[a+8>>2];c=d;f=H[a+112>>2];c:{if(!(b|f)){break c}c=d;e=H[a+120>>2]^-1;f=e+f|0;b=(H[a+124>>2]^-1)+i|0;b=f>>>0>>0?b+1|0:b;i=H[a+4>>2];e=d-i|0;j=f>>>0>=e>>>0;e=e>>31;if((b|0)>(e|0)?1:(e|0)<=(b|0)?j:0){break c}c=f+i|0}H[h+104>>2]=c;h=H[a+4>>2];if(d){c=a;b=(d-h|0)+1|0;d=b+H[a+120>>2]|0;a=H[a+124>>2]+(b>>31)|0;H[c+120>>2]=d;H[c+124>>2]=d>>>0>>0?a+1|0:a}a=h-1|0;if(I[a|0]!=(g|0)){F[a|0]=g}return g}function gd(a,b,c,d,e,f,g,h){var i=0,j=0,k=0,l=0,m=0,n=0;j=1;i=d&2147483647;m=i;k=c;a:{if(!c&(i|0)==2147418112?a|b:(i|0)==2147418112&(c|0)!=0|i>>>0>2147418112){break a}l=h&2147483647;n=l;i=g;if(!g&(l|0)==2147418112?e|f:(l|0)==2147418112&(g|0)!=0|l>>>0>2147418112){break a}if(!(a|e|(i|k)|(b|f|(m|n)))){return 0}k=d&h;if((k|0)>0?1:(k|0)>=0){j=-1;if((c|0)==(g|0)&(d|0)==(h|0)?(b|0)==(f|0)&a>>>0>>0|b>>>0>>0:(d|0)<(h|0)?1:(d|0)<=(h|0)?c>>>0>>0:0){break a}return(a^e|c^g)!=0|(b^f|d^h)!=0}j=-1;if((c|0)==(g|0)&(d|0)==(h|0)?(b|0)==(f|0)&a>>>0>e>>>0|b>>>0>f>>>0:(d|0)>(h|0)?1:(d|0)>=(h|0)?c>>>0>g>>>0:0){break a}j=(a^e|c^g)!=0|(b^f|d^h)!=0}return j}function Ve(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;h=oa-16|0;oa=h;f=d?d:24348;d=H[f>>2];a:{b:{c:{if(!b){if(d){break c}break a}e=-2;if(!c){break a}i=a?a:h+12|0;d:{if(d){a=c;break d}a=I[b|0];d=a<<24>>24;if((d|0)>=0){H[i>>2]=a;e=(d|0)!=0;break a}a=F[b|0];if(!H[H[5347]>>2]){H[i>>2]=a&57343;e=1;break a}a=(a&255)-194|0;if(a>>>0>50){break c}d=H[(a<<2)+8912>>2];a=c-1|0;if(!a){break b}b=b+1|0}g=I[b|0];j=g>>>3|0;if((j-16|(d>>26)+j)>>>0>7){break c}while(1){a=a-1|0;d=g-128|d<<6;if((d|0)>=0){H[f>>2]=0;H[i>>2]=d;e=c-a|0;break a}if(!a){break b}b=b+1|0;g=I[b|0];if((g&192)==128){continue}break}}H[f>>2]=0;H[6070]=25;e=-1;break a}H[f>>2]=d}oa=h+16|0;return e}function Pl(a){a=a|0;a:{if(F[24656]&1){break a}if(!fb(24656)){break a}b:{if(F[25760]&1){break b}if(!fb(25760)){break b}a=25472;while(1){a=bc(a)+12|0;if((a|0)!=25760){continue}break}eb(25760)}Ka(25472,18232);Ka(25484,18264);Ka(25496,18300);Ka(25508,18324);Ka(25520,18348);Ka(25532,18364);Ka(25544,18384);Ka(25556,18404);Ka(25568,18432);Ka(25580,18472);Ka(25592,18504);Ka(25604,18540);Ka(25616,18576);Ka(25628,18592);Ka(25640,18608);Ka(25652,18624);Ka(25664,18348);Ka(25676,18640);Ka(25688,18656);Ka(25700,18672);Ka(25712,18688);Ka(25724,18704);Ka(25736,18720);Ka(25748,18736);H[6163]=25472;eb(24656)}return H[6163]}function Ii(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;f=oa+-64|0;oa=f;i=Uf(f+56|0);e=Ea(f+40|0);h=Ea(f+24|0);H[i>>2]=H[b>>2];g=1;if(zb(i,c)){while(1){bf(e,H[i>>2]);b=xa(f+8|0,2983);j=Ra(e,0,2,b);va(b);a:{if(!j){Eb(f+8|0,e,2);g=ne(a,f+8|0,d)&g;va(f+8|0);break a}b:{if(I[Aa(e,0)|0]==45){b=1;if(wa(e)>>>0<=1){break b}while(1){if(!(!uj(F[Aa(e,b)|0])|b>>>0<2)){j=ne(a,h,d);Ga(h,7628);g=g&j}mc(h,1,F[Aa(e,b)|0]);b=b+1|0;if(wa(e)>>>0>b>>>0){continue}break}break b}b=ne(a,e,d);Ga(h,7628);g=b&g;break a}b=ne(a,h,d);Ga(h,7628);g=b&g}H[i>>2]=H[i>>2]+12;if(zb(i,c)){continue}break}}va(h);va(e);oa=f- -64|0;return g}function gl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=oa-16|0;oa=e;H[e+12>>2]=c;hc(a,0,0,0);Ac(a,0,0);a:{if(!I[a+96|0]){break a}d=H[a+32>>2];if(!d){break a}Ba(d)}b:{if(!I[a+97|0]){break b}d=H[a+56>>2];if(!d){break b}Ba(d)}H[a+52>>2]=c;f=a;c:{d:{e:{if(c>>>0>=9){d=I[a+98|0];if(!(!d|!b)){F[a+96|0]=0;H[a+32>>2]=b;break d}c=Na(c);F[a+96|0]=1;H[a+32>>2]=c;break e}F[a+96|0]=0;H[a+52>>2]=8;H[a+32>>2]=a+44;d=I[a+98|0]}if(d){break d}H[e+8>>2]=8;d=H[vf(e+12|0,e+8|0)>>2];H[a+60>>2]=d;if(b){c=0;if(d>>>0>7){break c}}b=Na(d);c=1;break c}b=0;H[a+60>>2]=0;c=0}F[f+97|0]=c;H[a+56>>2]=b;oa=e+16|0;return a|0}function Rl(a){a=a|0;a:{if(F[24648]&1){break a}if(!fb(24648)){break a}b:{if(F[25456]&1){break b}if(!fb(25456)){break b}a=25168;while(1){a=Ea(a)+12|0;if((a|0)!=25456){continue}break}eb(25456)}Ga(25168,1073);Ga(25180,1064);Ga(25192,1961);Ga(25204,1874);Ga(25216,1163);Ga(25228,2262);Ga(25240,1090);Ga(25252,1330);Ga(25264,1601);Ga(25276,1584);Ga(25288,1592);Ga(25300,1611);Ga(25312,1811);Ga(25324,2506);Ga(25336,1636);Ga(25348,1523);Ga(25360,1163);Ga(25372,1689);Ga(25384,1826);Ga(25396,1994);Ga(25408,1667);Ga(25420,1345);Ga(25432,1213);Ga(25444,2484);H[6161]=25168;eb(24648)}return H[6161]}function xk(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;if(Mb(a,H[b+8>>2],f)){hf(b,c,d,e);return}h=I[b+53|0];g=H[a+12>>2];F[b+53|0]=0;i=I[b+52|0];F[b+52|0]=0;j=a+16|0;ff(j,b,c,d,e,f);k=I[b+53|0];h=h|k;l=I[b+52|0];i=i|l;a:{if((g|0)<2){break a}j=j+(g<<3)|0;g=a+24|0;while(1){if(I[b+54|0]){break a}b:{if(l){if(H[b+24>>2]==1){break a}if(I[a+8|0]&2){break b}break a}if(!k){break b}if(!(F[a+8|0]&1)){break a}}G[b+52>>1]=0;ff(g,b,c,d,e,f);k=I[b+53|0];h=k|h;l=I[b+52|0];i=l|i;g=g+8|0;if(j>>>0>g>>>0){continue}break}}F[b+53|0]=(h&255)!=0;F[b+52|0]=(i&255)!=0}function df(a,b,c){var d=0,e=0,f=0,g=0;g=b;d=H[c+16>>2];a:{if(!d){d=c;e=I[d+74|0];F[d+74|0]=e-1|e;e=H[d>>2];b:{if(e&8){H[d>>2]=e|32;d=-1;break b}H[d+4>>2]=0;H[d+8>>2]=0;e=H[d+44>>2];H[d+28>>2]=e;H[d+20>>2]=e;H[d+16>>2]=e+H[d+48>>2];d=0}if(d){break a}d=H[c+16>>2]}f=g;g=H[c+20>>2];if(f>>>0>d-g>>>0){return qa[H[c+36>>2]](c,a,b)|0}c:{if(F[c+75|0]<0){d=0;break c}f=b;while(1){d=f;if(!d){d=0;break c}f=d-1|0;if(I[f+a|0]!=10){continue}break}f=qa[H[c+36>>2]](c,a,d)|0;if(f>>>0>>0){break a}a=a+d|0;b=b-d|0;g=H[c+20>>2]}Wb(g,a,b);H[c+20>>2]=H[c+20>>2]+b;f=b+d|0}return f}function Uk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=oa-32|0;oa=c;d=qb(b,-1);e=I[a+52|0];f=a;a:{b:{if(d){d=b;if(e){break a}b=H[a+48>>2];a=qb(b,-1)^1;break b}if(e){F[c+19|0]=Zc(H[a+48>>2]);c:{d:{switch(Qd(H[a+36>>2],H[a+40>>2],c+19|0,c+20|0,c+12|0,c+24|0,c+32|0,c+20|0)-1|0){case 2:d=H[a+48>>2];H[c+20>>2]=c+25;F[c+24|0]=d;default:while(1){d=H[c+20>>2];e=1;if(d>>>0<=c+24>>>0){break c}d=d-1|0;H[c+20>>2]=d;if((pe(F[d|0],H[a+32>>2])|0)!=-1){continue}break};break;case 0:case 1:break d}}d=-1;e=0}if(!e){break a}}H[a+48>>2]=b;a=1}F[f+52|0]=a;d=b}oa=c+32|0;return d|0}function Qk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=oa-32|0;oa=c;d=qb(b,-1);e=I[a+52|0];f=a;a:{b:{if(d){d=b;if(e){break a}b=H[a+48>>2];a=qb(b,-1)^1;break b}if(e){H[c+16>>2]=H[a+48>>2];c:{d:{switch(Qd(H[a+36>>2],H[a+40>>2],c+16|0,c+20|0,c+12|0,c+24|0,c+32|0,c+20|0)-1|0){case 2:d=H[a+48>>2];H[c+20>>2]=c+25;F[c+24|0]=d;default:while(1){d=H[c+20>>2];e=1;if(d>>>0<=c+24>>>0){break c}d=d-1|0;H[c+20>>2]=d;if((pe(F[d|0],H[a+32>>2])|0)!=-1){continue}break};break;case 0:case 1:break d}}d=-1;e=0}if(!e){break a}}H[a+48>>2]=b;a=1}F[f+52|0]=a;d=b}oa=c+32|0;return d|0}function Nk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=oa-32|0;oa=c;a:{b:{c:{if(qb(b,-1)){break c}F[c+23|0]=Zc(b);if(I[a+44|0]){if((Ub(c+23|0,1,1,H[a+32>>2])|0)!=1){break b}break c}H[c+16>>2]=c+24;f=c+32|0;g=c+24|0;d=c+23|0;while(1){e=Qd(H[a+36>>2],H[a+40>>2],d,g,c+12|0,c+24|0,f,c+16|0);if(H[c+12>>2]==(d|0)){break b}if((e|0)==3){if((Ub(d,1,1,H[a+32>>2])|0)==1){break c}break b}if(e>>>0>1){break b}d=H[c+16>>2]-(c+24|0)|0;if((Ub(c+24|0,1,d,H[a+32>>2])|0)!=(d|0)){break b}d=H[c+12>>2];if((e|0)==1){continue}break}}a=re(b);break a}a=-1}oa=c+32|0;return a|0}function cl(a,b){a=a|0;b=b|0;var c=0;qa[H[H[a>>2]+24>>2]](a)|0;b=Rd(b);H[a+68>>2]=b;c=I[a+98|0];b=Jc(b);F[a+98|0]=b;if((b|0)!=(c|0)){hc(a,0,0,0);Ac(a,0,0);b=I[a+96|0];if(I[a+98|0]){a:{if(!b){break a}b=H[a+32>>2];if(!b){break a}Ba(b)}F[a+96|0]=I[a+97|0];H[a+52>>2]=H[a+60>>2];b=H[a+56>>2];H[a+56>>2]=0;H[a+60>>2]=0;H[a+32>>2]=b;F[a+97|0]=0;return}b:{if(b){break b}b=H[a+32>>2];if((b|0)==(a+44|0)){break b}F[a+97|0]=0;H[a+56>>2]=b;b=H[a+52>>2];H[a+60>>2]=b;b=Na(b);F[a+96|0]=1;H[a+32>>2]=b;return}b=H[a+52>>2];H[a+60>>2]=b;b=Na(b);F[a+97|0]=1;H[a+56>>2]=b}}function yg(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=oa-32|0;oa=f;e=gb(a);i=e;d=Xj(a,Pa(a)+1|0);j=Pa(a);g=oa-16|0;oa=g;H[g+12>>2]=0;c=f+8|0;yf(c+12|0,e);if(d){h=Sj(d)}H[c>>2]=h;e=(j<<2)+h|0;H[c+8>>2]=e;H[c+4>>2]=e;H[Ic(c)>>2]=(d<<2)+h;oa=g+16|0;Yj(i,H[c+8>>2],b);H[c+8>>2]=H[c+8>>2]+4;Ag(a);b=c+4|0;Vj(gb(a),H[a>>2],H[a+4>>2],b);nc(a,b);nc(a+4|0,c+8|0);nc(gb(a),Ic(c));H[c>>2]=H[c+4>>2];Uj(a,Pa(a));a=c;b=a;d=H[a+4>>2];if((d|0)!=H[a+8>>2]){while(1){H[b+8>>2]=H[b+8>>2]-4;if((d|0)!=H[b+8>>2]){continue}break}}if(H[a>>2]){b=H[a>>2];Tj(a);Ba(b)}oa=f+32|0}function wc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;f=oa-16|0;oa=f;A(+b);h=v(1)|0;e=v(0)|0;g=h&2147483647;c=g;d=e;g=c+-1048576|0;a:{if((g|0)==2145386495|g>>>0<2145386495){i=d<<28;e=c>>>4|0;c=(c&15)<<28|d>>>4;d=e+1006632960|0;break a}if((c|0)==2146435072|c>>>0>2146435072){i=e<<28;c=h;e=c>>>4|0;c=(c&15)<<28|d>>>4;d=e|2147418112;break a}if(!(c|d)){c=0;d=0;break a}g=c;c=c>>>0<1?Q(e)+32|0:Q(c);xb(f,d,g,0,0,c+49|0);j=H[f>>2];i=H[f+4>>2];e=15372-c<<16;c=H[f+8>>2];d=e|H[f+12>>2]^65536}H[a>>2]=j;H[a+4>>2]=i;H[a+8>>2]=c;H[a+12>>2]=h&-2147483648|d;oa=f+16|0}function Kk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=oa-32|0;oa=c;a:{b:{c:{if(qb(b,-1)){break c}H[c+20>>2]=b;if(I[a+44|0]){if((Ub(c+20|0,4,1,H[a+32>>2])|0)!=1){break b}break c}H[c+16>>2]=c+24;f=c+32|0;g=c+24|0;d=c+20|0;while(1){e=Qd(H[a+36>>2],H[a+40>>2],d,g,c+12|0,c+24|0,f,c+16|0);if(H[c+12>>2]==(d|0)){break b}if((e|0)==3){if((Ub(d,1,1,H[a+32>>2])|0)==1){break c}break b}if(e>>>0>1){break b}d=H[c+16>>2]-(c+24|0)|0;if((Ub(c+24|0,1,d,H[a+32>>2])|0)!=(d|0)){break b}d=H[c+12>>2];if((e|0)==1){continue}break}}a=re(b);break a}a=-1}oa=c+32|0;return a|0}function _m(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;var h=0;c=oa-416|0;oa=c;H[c+12>>2]=c+416;d=oa-144|0;oa=d;H[d+28>>2]=d+132;qi(a+8|0,d+32|0,d+28|0,e,f,g);H[d+16>>2]=0;H[d+20>>2]=0;H[d+12>>2]=d+32;f=c+16|0;g=Pj(f,H[c+12>>2]);e=oa-16|0;oa=e;H[e+12>>2]=H[a+8>>2];h=jc(e+8|0,e+12|0);a=$i(f,d+12|0,g,d+16|0);ic(h);oa=e+16|0;if((a|0)==-1){db();X()}H[c+12>>2]=f+(a<<2);oa=d+144|0;d=c+16|0;e=H[c+12>>2];a=oa-16|0;oa=a;H[a+8>>2]=b;while(1){if((d|0)!=(e|0)){Ci(a+8|0,H[d>>2]);d=d+4|0;continue}break}oa=a+16|0;oa=c+416|0;return H[a+8>>2]}function Md(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;if((a|0)!=(b|0)){c=oa-16|0;oa=c;d=H[b>>2];e=H[b+4>>2];f=rg(d,e);a:{if(f>>>0<=Gc(a)>>>0){H[c+12>>2]=e;if(Pa(a)>>>0>>0){H[c+12>>2]=d;b=Pa(a);H[c+12>>2]=H[c+12>>2]+(b<<2);Rj(d,H[c+12>>2],H[a>>2]);Qj(a,H[c+12>>2],e,f-Pa(a)|0);break a}bk(a,Rj(d,e,H[a>>2]));break a}b=a;if(H[b>>2]){Pa(b);_j(b);Nj(b);gb(b);g=H[b>>2];Gc(b);Ba(g);H[gb(b)>>2]=0;H[b>>2]=0;H[b+4>>2]=0}g=Xj(a,f);if(Wj(a)>>>0>>0){$d();X()}gb(b);h=Sj(g);H[b>>2]=h;H[b+4>>2]=h;H[gb(b)>>2]=(g<<2)+h;Uj(b,0);Qj(a,d,e,f)}oa=c+16|0}}function zk(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(Mb(a,H[b+8>>2],e)){gf(b,c,d);return}a:{if(Mb(a,H[b>>2],e)){if(!(H[b+20>>2]!=(c|0)?H[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}H[b+32>>2]=1;return}H[b+32>>2]=d;b:{if(H[b+44>>2]==4){break b}G[b+52>>1]=0;a=H[a+8>>2];qa[H[H[a>>2]+20>>2]](a,b,c,c,1,e);if(I[b+53|0]){H[b+44>>2]=3;if(!I[b+52|0]){break b}break a}H[b+44>>2]=4}H[b+20>>2]=c;H[b+40>>2]=H[b+40>>2]+1;if(H[b+36>>2]!=1|H[b+24>>2]!=2){break a}F[b+54|0]=1;return}a=H[a+8>>2];qa[H[H[a>>2]+24>>2]](a,b,c,d,e)}}function hd(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;a:{if(f&64){c=f+-64|0;b=c&31;if((c&63)>>>0>=32){c=0;b=e>>>b|0}else{c=e>>>b|0;b=((1<>>b}d=0;e=0;break a}if(!f){break a}h=e;i=d;j=64-f|0;g=j&31;if((j&63)>>>0>=32){h=i<>>32-g|h<>>0>=32){g=0;b=c>>>b|0}else{g=c>>>b|0;b=((1<>>b}b=j|b;c=g|h;g=d;d=f&31;if((f&63)>>>0>=32){h=0;d=e>>>d|0}else{h=e>>>d|0;d=((1<>>d}e=h}H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=d;H[a+12>>2]=e}function jd(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;g=yc(a);a:{if(!H[6069]|!I[a|0]){break a}if(kd(a,61)){break a}c=H[H[6069]>>2];if(!c){break a}b:{while(1){h=H[6069];d=a;i=0;f=g;b=0;c:{if(!f){break c}b=I[d|0];d:{if(!b){break d}while(1){e:{j=I[c|0];if(!j){break e}f=f-1|0;if(!f|(b|0)!=(j|0)){break e}c=c+1|0;b=I[d+1|0];d=d+1|0;if(b){continue}break d}break}i=b}b=(i&255)-I[c|0]|0}if(!b){d=H[(e<<2)+h>>2]+g|0;if(I[d|0]==61){break b}}e=e+1|0;c=H[(e<<2)+h>>2];if(c){continue}break}return 0}e=d+1|0}return e}function xb(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;a:{if(f&64){d=b;e=f+-64|0;b=e&31;if((e&63)>>>0>=32){e=d<>>32-b|c<>>0>=32){h=g<>>32-d|e<>>0>=32){f=0;d=d>>>e|0}else{f=d>>>e|0;d=((1<>>e}d=j|d;e=f|h;f=b;b=i&31;if((i&63)>>>0>=32){h=f<>>32-b|c<>2]=b;H[a+4>>2]=c;H[a+8>>2]=d;H[a+12>>2]=e}function Vn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-32|0;oa=g;H[g+24>>2]=b;a:{if(!(H[d+4>>2]&1)){H[g>>2]=-1;b=qa[H[H[a>>2]+16>>2]](a,b,c,d,e,g)|0;H[g+24>>2]=b;b:{switch(H[g>>2]){case 0:F[f|0]=0;break a;case 1:F[f|0]=1;break a;default:break b}}F[f|0]=1;H[e>>2]=4;break a}Ia(g,d);b=Fb(g);Fa(g);Ia(g,d);a=Gd(g);Fa(g);gc(g,a);fc(g|12,a);d=g+24|0;F[f|0]=(Te(g+24|0,c,g,d,b,e,1)|0)==(g|0);b=H[g+24>>2];while(1){d=va(d-12|0);if((g|0)!=(d|0)){continue}break}}oa=g+32|0;return b|0}function Mn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-32|0;oa=g;H[g+24>>2]=b;a:{if(!(H[d+4>>2]&1)){H[g>>2]=-1;b=qa[H[H[a>>2]+16>>2]](a,b,c,d,e,g)|0;H[g+24>>2]=b;b:{switch(H[g>>2]){case 0:F[f|0]=0;break a;case 1:F[f|0]=1;break a;default:break b}}F[f|0]=1;H[e>>2]=4;break a}Ia(g,d);b=Ib(g);Fa(g);Ia(g,d);a=Dd(g);Fa(g);gc(g,a);fc(g|12,a);d=g+24|0;F[f|0]=(Re(g+24|0,c,g,d,b,e,1)|0)==(g|0);b=H[g+24>>2];while(1){d=va(d-12|0);if((g|0)!=(d|0)){continue}break}}oa=g+32|0;return b|0}function bf(a,b){var c=0,d=0,e=0,f=0;if((a|0)!=(b|0)){if(!tb(a)){if(!tb(b)){H[a+8>>2]=H[b+8>>2];c=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=c;return}e=Ca(b);b=wa(b);c=oa-16|0;oa=c;a:{if(b>>>0<=10){ub(a,b);Yb(a,e,b);F[c+15|0]=0;nb(a+b|0,c+15|0);break a}f=a;a=I[a+11|0];Pd(f,10,b-10|0,a,0,a,b,e)}oa=c+16|0;return}e=Ca(b);b=wa(b);c=oa-16|0;oa=c;d=Rc(a);b:{if(d>>>0>b>>>0){d=H[a>>2];yb(a,b);Yb(d,e,b);F[c+15|0]=0;nb(b+d|0,c+15|0);break b}f=a;a=H[a+4>>2];Pd(f,d-1|0,(b-d|0)+1|0,a,0,a,b,e)}oa=c+16|0}}function nd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;h=Pa(c);a:{if((h|0)>=1){l=b-1|0;m=(b|0)<1;while(1){d=H[lc(c,g)>>2];b:{if(Ra(a,b,wa(d),d)){break b}e=wa(a);f=wa(d);i=0;j=F[Aa(d,0)|0];f=b+f|0;k=(f|0)>=(e|0);if(!k){i=F[Aa(a,f)|0]}c:{if(!m){e=I[Aa(a,l)|0];d:{if(!e){break d}if(!md(j)){break d}if(md(e<<24>>24)){break b}}if(!k){break c}break a}if((e|0)<=(f|0)){break a}}if(!md(j)){break a}if(!md(i<<24>>24)){break a}}g=g+1|0;if((h|0)!=(g|0)){continue}break}}d=0}return d}function Ti(a,b,c,d){var e=0,f=0,g=0;e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;a=Yi(a,e+12|0,d,Oa());d=pa;f=H[6070];d:{if(f){if(H[e+12>>2]!=(b|0)){break d}if((f|0)==68){break b}break c}H[6070]=g;if(H[e+12>>2]==(b|0)){break c}}}H[c>>2]=4;b=0;break a}if(((d|0)<-1?1:(d|0)<=-1?a>>>0<2147483648:0)|((d|0)>0?1:(d|0)>=0?a>>>0>2147483647:0)){break b}b=a;break a}H[c>>2]=4;b=2147483647;if((d|0)>0?1:(d|0)>=0?a>>>0>=1:0){break a}b=-2147483648}oa=e+16|0;return b}function kd(a,b){var c=0,d=0,e=0;e=b;d=e&255;a:{if(d){if(a&3){while(1){c=I[a|0];if(!c|(c|0)==(e&255)){break a}a=a+1|0;if(a&3){continue}break}}c=H[a>>2];b:{if((c^-1)&c-16843009&-2139062144){break b}d=N(d,16843009);while(1){c=c^d;if((c^-1)&c-16843009&-2139062144){break b}c=H[a+4>>2];a=a+4|0;if(!(c-16843009&(c^-1)&-2139062144)){continue}break}}while(1){c=a;d=I[a|0];if(d){a=c+1|0;if((d|0)!=(e&255)){continue}}break}a=c;break a}a=yc(a)+a|0}return I[a|0]==(b&255)?a:0}function Oi(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){d:{e:{f=I[a|0];if((f|0)!=45){break e}a=a+1|0;if((b|0)!=(a|0)){break e}break d}h=H[6070];H[6070]=0;a=eg(a,e+12|0,d,Oa());d=pa;g=H[6070];f:{if(g){if(H[e+12>>2]!=(b|0)){break f}if((g|0)==68){break c}break b}H[6070]=h;if(H[e+12>>2]==(b|0)){break b}}}}H[c>>2]=4;a=0;b=0;break a}H[c>>2]=4;a=-1;b=-1;break a}b=a;c=(f|0)==45;a=c?0-a|0:a;b=c?0-(d+((b|0)!=0)|0)|0:d}oa=e+16|0;pa=b;return a}function rb(a,b,c,d,e,f,g,h,i){var j=0,k=0,l=0,m=0;h=Eq(b,c,h,i);i=pa;j=h;h=Eq(d,e,f,g);e=j+h|0;d=pa+i|0;i=e;h=e>>>0>>0?d+1|0:d;j=g;e=0;g=e;k=i;l=c;d=0;i=Eq(j,e,c,d);e=k+i|0;c=pa+h|0;k=e;e=e>>>0>>0?c+1|0:c;h=f;c=0;i=b;f=Eq(h,c,i,0);b=pa;d=Eq(h,c,l,d);b=b+d|0;c=pa;c=b>>>0>>0?c+1|0:c;h=c;c=c+k|0;d=c>>>0>>0?e+1|0:e;h=c;c=d;d=Eq(i,m,j,g)+b|0;e=pa;e=b>>>0>d>>>0?e+1|0:e;b=h;h=e;e=b+e|0;H[a+8>>2]=e;H[a+12>>2]=e>>>0>>0?c+1|0:c;H[a>>2]=f;H[a+4>>2]=d}function nf(a,b,c,d,e){var f=0,g=0;f=oa-16|0;oa=f;H[f+8>>2]=e;H[f+12>>2]=c;c=wa(a);if(!((e|0)==-1|c>>>0>>0)){H[f>>2]=c-b;H[f+4>>2]=H[zc(f+12|0,f)>>2];a=Ca(a)+b|0;c=0;b=H[zc(f+4|0,f+8|0)>>2];e=0;a:{if(!b){break a}b:{if(!b){break b}while(1){e=I[d|0];g=I[a|0];if((e|0)==(g|0)){d=d+1|0;a=a+1|0;b=b-1|0;if(b){continue}break b}break}c=g-e|0}e=c}b=e;c:{if(b){break c}b=-1;a=H[f+4>>2];c=H[f+8>>2];if(a>>>0>>0){break c}b=a>>>0>c>>>0}oa=f+16|0;return b}me();X()}function Tl(a){a=a|0;a:{if(F[24640]&1){break a}if(!fb(24640)){break a}b:{if(F[25160]&1){break b}if(!fb(25160)){break b}a=24992;while(1){a=bc(a)+12|0;if((a|0)!=25160){continue}break}eb(25160)}Ka(24992,17892);Ka(25004,17920);Ka(25016,17948);Ka(25028,17980);Ka(25040,18020);Ka(25052,18056);Ka(25064,18084);Ka(25076,18120);Ka(25088,18136);Ka(25100,18152);Ka(25112,18168);Ka(25124,18184);Ka(25136,18200);Ka(25148,18216);H[6159]=24992;eb(24640)}return H[6159]}function Ri(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=I[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=H[6070];H[6070]=0;a=eg(a,e+12|0,d,Oa());d=pa;g=H[6070];g:{if(g){if(H[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}H[6070]=h;if(H[e+12>>2]==(b|0)){break d}}}}H[c>>2]=4;a=0;break a}if(!d&a>>>0<=65535){break b}}H[c>>2]=4;a=65535;break a}a=(f|0)==45?0-a|0:a}oa=e+16|0;return a&65535}function Jg(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-16|0;oa=i;if((b^-1)+1073741807>>>0>=c>>>0){j=Ca(a);a:{if(b>>>0<536870887){H[i+8>>2]=b<<1;H[i+12>>2]=b+c;c=ud(H[ad(i+12|0,i+8|0)>>2]);break a}c=1073741806}k=c+1|0;c=Sj(k);if(e){oc(c,j,e)}if(g){oc(c+(e<<2)|0,h,g)}d=d-(e+f|0)|0;if(d){h=e<<2;oc((h+c|0)+(g<<2)|0,(h+j|0)+(f<<2)|0,d)}if((b|0)!=1){Ba(j)}_b(a,c);Zb(a,k);b=a;a=d+(e+g|0)|0;yb(b,a);H[i+4>>2]=0;Cb(c+(a<<2)|0,i+4|0);oa=i+16|0;return}Xb();X()}function gg(a,b,c,d,e){var f=0,g=0,h=0,i=0,j=0;h=-1;f=d&2147483647;i=f;g=c;a:{if(!c&(f|0)==2147418112?a|b:(f|0)==2147418112&(c|0)!=0|f>>>0>2147418112){break a}f=e&2147483647;j=f;if((f|0)==2147418112?0:f>>>0>2147418112){break a}if(!(a|g|(i|j|b))){return 0}g=d&e;if((g|0)>0?1:(g|0)>=0){if(!c&(d|0)==(e|0)?0:(d|0)<(e|0)){break a}return(a|c)!=0|(d^e|b)!=0}if(!c&(d|0)==(e|0)?a|b:(d|0)>(e|0)?1:(d|0)>=(e|0)?c:0){break a}h=(a|c)!=0|(d^e|b)!=0}return h}function id(a,b){a:{if(a){if(b>>>0<=127){break a}b:{if(!H[H[5347]>>2]){if((b&-128)==57216){break a}break b}if(b>>>0<=2047){F[a+1|0]=b&63|128;F[a|0]=b>>>6|192;return 2}if(!((b&-8192)!=57344?b>>>0>=55296:0)){F[a+2|0]=b&63|128;F[a|0]=b>>>12|224;F[a+1|0]=b>>>6&63|128;return 3}if(b-65536>>>0<=1048575){F[a+3|0]=b&63|128;F[a|0]=b>>>18|240;F[a+2|0]=b>>>6&63|128;F[a+1|0]=b>>>12&63|128;return 4}}H[6070]=25;a=-1}else{a=1}return a}F[a|0]=b;return 1}function Vl(a){a=a|0;a:{if(F[24632]&1){break a}if(!fb(24632)){break a}b:{if(F[24984]&1){break b}if(!fb(24984)){break b}a=24816;while(1){a=Ea(a)+12|0;if((a|0)!=24984){continue}break}eb(24984)}Ga(24816,1142);Ga(24828,1149);Ga(24840,1115);Ga(24852,1123);Ga(24864,1106);Ga(24876,1156);Ga(24888,1133);Ga(24900,1685);Ga(24912,1782);Ga(24924,2200);Ga(24936,2469);Ga(24948,1262);Ga(24960,1937);Ga(24972,1356);H[6157]=24816;eb(24632)}return H[6157]}function lo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=oa-32|0;oa=d;H[d+16>>2]=b;e=H[a+48>>2];H[d+20>>2]=c-((e|0)!=0);f=H[a+44>>2];H[d+28>>2]=e;H[d+24>>2]=f;e=-1;a:{b:{if(!Ye(ha(H[a+60>>2],d+16|0,2,d+12|0)|0)){e=H[d+12>>2];if((e|0)>0){break b}}H[a>>2]=H[a>>2]|e&48^16;break a}g=H[d+20>>2];if(g>>>0>=e>>>0){break a}f=H[a+44>>2];H[a+4>>2]=f;H[a+8>>2]=f+(e-g|0);if(H[a+48>>2]){H[a+4>>2]=f+1;F[(b+c|0)-1|0]=I[f|0]}e=c}oa=d+32|0;return e|0}function tn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,1,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;e=g>>>9&1;g=vb(f,e+13|0,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-((e<<3)+107&112)|0;oa=e;Ia(a+8|0,c);Ne(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Pi(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{d:{if((a|0)!=(b|0)){e:{f:{f=I[a|0];if((f|0)!=45){break f}a=a+1|0;if((b|0)!=(a|0)){break f}break e}h=H[6070];H[6070]=0;a=eg(a,e+12|0,d,Oa());d=pa;g=H[6070];g:{if(g){if(H[e+12>>2]!=(b|0)){break g}if((g|0)==68){break c}break d}H[6070]=h;if(H[e+12>>2]==(b|0)){break d}}}}H[c>>2]=4;a=0;break a}if(!d){break b}}H[c>>2]=4;a=-1;break a}a=(f|0)==45?0-a|0:a}oa=e+16|0;return a}function nl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;while(1){a:{if((c|0)<=(f|0)){break a}d=H[a+16>>2];g=H[a+12>>2];b:{if(d>>>0>g>>>0){H[e+12>>2]=2147483647;H[e+8>>2]=d-g>>2;H[e+4>>2]=c-f;d=H[td(e+12|0,td(e+8|0,e+4|0))>>2];oc(b,H[a+12>>2],d);H[a+12>>2]=H[a+12>>2]+(d<<2);b=(d<<2)+b|0;break b}d=qa[H[H[a>>2]+40>>2]](a)|0;if((d|0)==-1){break a}H[b>>2]=d;d=1;b=b+4|0}f=d+f|0;continue}break}oa=e+16|0;return f|0}function nn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-208|0;oa=a;G[a+204>>1]=I[13275]|I[13276]<<8;H[a+200>>2]=I[13271]|I[13272]<<8|(I[13273]<<16|I[13274]<<24);f=Oa();H[a>>2]=e;h=vb(a+176|0,20,f,a+200|0,a);e=h+(a+176|0)|0;f=Nb(a+176|0,e,c);Ia(a+16|0,c);g=Ib(a+16|0);Fa(a+16|0);Ec(g,a+176|0,e,a+16|0);g=b;b=(a+16|0)+(h<<2)|0;b=Dc(g,a+16|0,(e|0)==(f|0)?b:((f-a<<2)+a|0)-688|0,b,c,d);oa=a+208|0;return b|0}function Cn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,1,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;g=vb(f,(g>>>9&1)+13|0,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-32|0;oa=e;Ia(a+8|0,c);Pe(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function rn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,0,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;g=vb(f,g>>>9&1|12,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-96|0;oa=e;Ia(a+8|0,c);Ne(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function An(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-32|0;oa=a;G[a+28>>1]=I[13269]|I[13270]<<8;H[a+24>>2]=I[13265]|I[13266]<<8|(I[13267]<<16|I[13268]<<24);Uc(a+24|1,1886,0,H[c+4>>2]);g=H[c+4>>2];f=a-16|0;oa=f;h=Oa();H[a>>2]=e;g=vb(f,g>>>9&1|12,h,a+24|0,a)+f|0;h=Nb(f,g,c);e=f-32|0;oa=e;Ia(a+8|0,c);Pe(f,h,g,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function vn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;a=oa-96|0;oa=a;G[a+92>>1]=I[13275]|I[13276]<<8;H[a+88>>2]=I[13271]|I[13272]<<8|(I[13273]<<16|I[13274]<<24);f=Oa();H[a>>2]=e;h=vb(a- -64|0,20,f,a+88|0,a);e=h+(a- -64|0)|0;f=Nb(a- -64|0,e,c);Ia(a+16|0,c);g=Fb(a+16|0);Fa(a+16|0);Wc(g,a- -64|0,e,a+16|0);g=b;b=(a+16|0)+h|0;b=pc(g,a+16|0,(e|0)==(f|0)?b:((f-a|0)+a|0)-48|0,b,c,d);oa=a+96|0;return b|0}function un(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=oa-48|0;oa=f;H[f+40>>2]=b;a:{if(!(H[c+4>>2]&1)){c=qa[H[H[a>>2]+24>>2]](a,b,c,d,e)|0;break a}Ia(f+24|0,c);a=Dd(f+24|0);Fa(f+24|0);b:{if(e){gc(f+24|0,a);break b}fc(f+24|0,a)}H[f+16>>2]=Ob(f+24|0);while(1){H[f+8>>2]=Sc(f+24|0);if(zb(f+16|0,f+8|0)){Ci(f+40|0,H[H[f+16>>2]>>2]);od(f+16|0);continue}else{c=H[f+40>>2];va(f+24|0)}break}}oa=f+48|0;return c|0}function Dn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=oa-48|0;oa=f;H[f+40>>2]=b;a:{if(!(H[c+4>>2]&1)){c=qa[H[H[a>>2]+24>>2]](a,b,c,d,e)|0;break a}Ia(f+24|0,c);a=Gd(f+24|0);Fa(f+24|0);b:{if(e){gc(f+24|0,a);break b}fc(f+24|0,a)}H[f+16>>2]=Ob(f+24|0);while(1){H[f+8>>2]=Vc(f+24|0);if(zb(f+16|0,f+8|0)){Vf(f+40|0,F[H[f+16>>2]]);Wd(f+16|0);continue}else{c=H[f+40>>2];va(f+24|0)}break}}oa=f+48|0;return c|0}function pl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=oa-16|0;oa=e;while(1){a:{if((c|0)<=(f|0)){break a}d=H[a+28>>2];g=H[a+24>>2];if(d>>>0<=g>>>0){if(((i=a,j=Sb(F[b|0]),h=H[H[a>>2]+52>>2],qa[h](i|0,j|0)|0)|0)==-1){break a}f=f+1|0;b=b+1|0}else{H[e+12>>2]=d-g;H[e+8>>2]=c-f;d=H[td(e+12|0,e+8|0)>>2];Yb(H[a+24>>2],b,d);H[a+24>>2]=d+H[a+24>>2];f=f+d|0;b=b+d|0}continue}break}oa=e+16|0;return f|0}function tj(a,b){var c=0;c=(b|0)!=0;a:{b:{c:{if(!(a&3)|!b){break c}while(1){if(!I[a|0]){break b}b=b-1|0;c=(b|0)!=0;a=a+1|0;if(!(a&3)){break c}if(b){continue}break}}if(!c){break a}}d:{if(!I[a|0]|b>>>0<4){break d}while(1){c=H[a>>2];if((c^-1)&c-16843009&-2139062144){break d}a=a+4|0;b=b-4|0;if(b>>>0>3){continue}break}}if(!b){break a}while(1){if(!I[a|0]){return a}a=a+1|0;b=b-1|0;if(b){continue}break}}return 0}function dg(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=oa-160|0;oa=e;Vb(e+16|0,0,144);H[e+92>>2]=-1;H[e+60>>2]=b;H[e+24>>2]=-1;H[e+20>>2]=b;kc(e+16|0,0,0);kj(e,e+16|0,d,1);d=H[e+8>>2];g=H[e+12>>2];h=H[e>>2];i=H[e+4>>2];if(c){j=c;f=b;b=H[e+20>>2]-H[e+24>>2]|0;k=b;c=b+H[e+136>>2]|0;b=H[e+140>>2]+(b>>31)|0;b=c>>>0>>0?b+1|0:b;H[j>>2]=!(b|c)?f:f+c|0}H[a>>2]=h;H[a+4>>2]=i;H[a+8>>2]=d;H[a+12>>2]=g;oa=e+160|0}function el(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;d=oa-16|0;oa=d;a:{b:{if(H[b+64>>2]){if(!(qa[H[H[b>>2]+24>>2]](b)|0)){break b}}Kc(a,-1,-1);break a}if(Ae(H[b+64>>2],H[c+8>>2],H[c+12>>2],0)){Kc(a,-1,-1);break a}f=H[c+4>>2];e=d;H[e+8>>2]=H[c>>2];H[e+12>>2]=f;f=H[e+12>>2];H[b+72>>2]=H[e+8>>2];H[b+76>>2]=f;b=H[c+12>>2];H[a+8>>2]=H[c+8>>2];H[a+12>>2]=b;b=H[c+4>>2];H[a>>2]=H[c>>2];H[a+4>>2]=b}oa=d+16|0}function Pd(a,b,c,d,e,f,g,h){var i=0,j=0,k=0;i=oa-16|0;oa=i;if((b^-1)-17>>>0>=c>>>0){j=Ca(a);a:{if(b>>>0<2147483623){H[i+8>>2]=b<<1;H[i+12>>2]=b+c;c=cd(H[ad(i+12|0,i+8|0)>>2]);break a}c=-18}k=c+1|0;c=Na(k);if(e){Yb(c,j,e)}if(g){Yb(c+e|0,h,g)}d=d-(e+f|0)|0;if(d){Yb((c+e|0)+g|0,(e+j|0)+f|0,d)}if((b|0)!=10){Ba(j)}_b(a,c);Zb(a,k);b=a;a=d+(e+g|0)|0;yb(b,a);F[i+7|0]=0;nb(a+c|0,i+7|0);oa=i+16|0;return}Xb();X()}function Ka(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=aj(b);e=oa-16|0;oa=e;f=a;a=Mf(a);a:{if(a>>>0>=d>>>0){g=Ca(f);c=g;a=d;if(a){b:{if(c-b>>2>>>0>>0){while(1){a=a-1|0;h=a<<2;H[h+c>>2]=H[b+h>>2];if(a){continue}break b}}if(!a){break b}while(1){H[c>>2]=H[b>>2];c=c+4|0;b=b+4|0;a=a-1|0;if(a){continue}break}}}H[e+12>>2]=0;Cb((d<<2)+g|0,e+12|0);Lc(f,d);break a}c=a;g=d-a|0;a=wa(f);Jg(f,c,g,a,0,a,d,b)}oa=e+16|0}function sn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,1,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;e=h>>>9&1;f=vb(g,e+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-((e<<3)+187&240)|0;oa=e;Ia(a+8|0,c);Ne(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function rl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;while(1){a:{if((c|0)<=(f|0)){break a}d=H[a+16>>2];g=H[a+12>>2];b:{if(d>>>0>g>>>0){H[e+12>>2]=2147483647;H[e+8>>2]=d-g;H[e+4>>2]=c-f;d=H[td(e+12|0,td(e+8|0,e+4|0))>>2];Yb(b,H[a+12>>2],d);Gf(a,d);break b}d=qa[H[H[a>>2]+40>>2]](a)|0;if((d|0)==-1){break a}F[b|0]=Zc(d);d=1}b=b+d|0;f=d+f|0;continue}break}oa=e+16|0;return f|0}function qn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,0,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;e=h>>>9&1;f=vb(g,e+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-((e<<3)+187&240)|0;oa=e;Ia(a+8|0,c);Ne(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=Dc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Kf(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0,j=0;e=oa-32|0;oa=e;f=Bf(e+24|0,a);a:{if(!I[f|0]){break a}h=Oh(e+8|0,a);i=H[(H[H[a>>2]-12>>2]+a|0)+4>>2];g=H[H[a>>2]-12>>2]+a|0;d=g;b:{if(!qb(-1,H[d+76>>2])){d=H[d+76>>2];break b}j=d;d=pg(d,32);H[j+76>>2]=d}c=b+c|0;H[e+16>>2]=pc(H[h>>2],b,(i&176)==32?c:b,c,g,d<<24>>24);if(!De(e+16|0)){break a}ac(H[H[a>>2]-12>>2]+a|0,5)}ue(f);oa=e+32|0;return a}function ll(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=oa-16|0;oa=d;while(1){a:{if((c|0)<=(e|0)){break a}f=H[a+24>>2];g=H[a+28>>2];if(f>>>0>=g>>>0){if((qa[H[H[a>>2]+52>>2]](a,H[b>>2])|0)==-1){break a}e=e+1|0;b=b+4|0}else{H[d+12>>2]=g-f>>2;H[d+8>>2]=c-e;f=H[td(d+12|0,d+8|0)>>2];oc(H[a+24>>2],b,f);g=f<<2;H[a+24>>2]=g+H[a+24>>2];e=e+f|0;b=b+g|0}continue}break}oa=d+16|0;return e|0}function Ni(a,b,c){var d=0,e=0,f=O(0),g=0,h=O(0);e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;Oa();d=oa-16|0;oa=d;dg(d,a,e+12|0,0);f=ij(H[d>>2],H[d+4>>2],H[d+8>>2],H[d+12>>2]);oa=d+16|0;a=H[6070];if(!a){break c}if(H[e+12>>2]!=(b|0)){break b}h=f;if((a|0)!=68){break a}break b}H[c>>2]=4;break a}H[6070]=g;if(H[e+12>>2]==(b|0)){break a}}H[c>>2]=4;f=h}oa=e+16|0;return f}function Si(a,b,c,d){var e=0,f=0,g=0;e=oa-16|0;oa=e;a:{b:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;d=Yi(a,e+12|0,d,Oa());a=pa;f=H[6070];c:{if(f){if(H[e+12>>2]!=(b|0)){break c}if((f|0)==68){break b}break a}H[6070]=g;if(H[e+12>>2]==(b|0)){break a}}}H[c>>2]=4;d=0;a=0;break a}H[c>>2]=4;if((a|0)>0?1:(a|0)>=0?d>>>0>=1:0){d=-1;a=2147483647;break a}d=0;a=-2147483648}oa=e+16|0;pa=a;return d}function Wa(a){var b=0,c=0,d=0,e=0,f=0;b=oa-32|0;oa=b;H[b+12>>2]=0;H[b+8>>2]=153;c=H[b+12>>2];H[b>>2]=H[b+8>>2];H[b+4>>2]=c;d=H[b+4>>2];e=b+16|0;c=e;H[c+4>>2]=H[b>>2];H[c+8>>2]=d;H[c>>2]=a;c=oa-16|0;oa=c;d=a;if(H[d>>2]!=-1){f=c+8|0;Hc(f,e);Hc(c,f);e=c;while(1){if(H[d>>2]==1){continue}break}if(!H[d>>2]){H[d>>2]=1;qa[154](e);H[d>>2]=-1}}oa=c+16|0;oa=b+32|0;return H[a+4>>2]-1|0}function zn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,0,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;f=vb(g,(h>>>9&1)+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-48|0;oa=e;Ia(a+8|0,c);Pe(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Mi(a,b,c){var d=0,e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;a:{b:{c:{if((a|0)!=(b|0)){g=H[6070];H[6070]=0;Oa();d=oa-16|0;oa=d;dg(d,a,e+12|0,1);f=ig(H[d>>2],H[d+4>>2],H[d+8>>2],H[d+12>>2]);oa=d+16|0;a=H[6070];if(!a){break c}if(H[e+12>>2]!=(b|0)){break b}h=f;if((a|0)!=68){break a}break b}H[c>>2]=4;break a}H[6070]=g;if(H[e+12>>2]==(b|0)){break a}}H[c>>2]=4;f=h}oa=e+16|0;return f}function Bn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a=oa-32|0;oa=a;H[a+24>>2]=37;H[a+28>>2]=0;Uc(a+24|1,1871,1,H[c+4>>2]);h=H[c+4>>2];g=a-32|0;oa=g;i=Oa();H[a>>2]=e;H[a+4>>2]=f;f=vb(g,(h>>>9&1)+23|0,i,a+24|0,a)+g|0;h=Nb(g,f,c);e=g-48|0;oa=e;Ia(a+8|0,c);Pe(g,h,f,e,a+20|0,a+16|0,a+8|0);Fa(a+8|0);b=pc(b,e,H[a+20>>2],H[a+16>>2],c,d);oa=a+32|0;return b|0}function Kj(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:{d=Ca(c);c=wa(c);g=oa-16|0;oa=g;f=wa(a);if(f>>>0>=b>>>0){e=Ja(a);b:{if(c>>>0<=e-f>>>0){if(!c){break b}e=Ca(a);i=e+b|0;h=f-b|0;if(h){b=b+e|0;qf(b+c|0,b,h);d=b>>>0<=d>>>0?f+e>>>0>d>>>0?c+d|0:d:d}qf(i,d,c);b=a;a=c+f|0;Lc(b,a);F[g+15|0]=0;nb(a+e|0,g+15|0);break b}Pd(a,e,(c+f|0)-e|0,f,b,0,c,d)}oa=g+16|0;break a}me();X()}}function Oe(a,b,c){var d=0,e=0;if(c&2048){F[a|0]=43;a=a+1|0}if(c&1024){F[a|0]=35;a=a+1|0}d=c&260;if((d|0)!=260){F[a|0]=46;F[a+1|0]=42;a=a+2|0}c=c&16384;while(1){e=I[b|0];if(e){F[a|0]=e;a=a+1|0;b=b+1|0;continue}break}a:{b:{if((d|0)!=256){if((d|0)!=4){break b}b=c?70:102;break a}b=c?69:101;break a}b=c?65:97;if((d|0)==260){break a}b=c?71:103}F[a|0]=b;return(d|0)!=260}function sc(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;H[f+8>>2]=b;b=0;g=6;a:{b:{if(kb(a,f+8|0)){break b}g=4;h=bb(a);if(!dc(d,2048,h)){break b}b=zd(d,h);while(1){c:{ib(a);b=b-48|0;if(!Bb(a,f+8|0)|(e|0)<2){break c}g=bb(a);if(!dc(d,2048,g)){break a}e=e-1|0;b=zd(d,g)+N(b,10)|0;continue}break}g=2;if(!kb(a,f+8|0)){break a}}H[c>>2]=H[c>>2]|g}oa=f+16|0;return b}function rc(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;H[f+8>>2]=b;b=0;g=6;a:{b:{if(jb(a,f+8|0)){break b}g=4;h=ab(a);if(!cc(d,2048,h)){break b}b=yd(d,h);while(1){c:{hb(a);b=b-48|0;if(!Ab(a,f+8|0)|(e|0)<2){break c}g=ab(a);if(!cc(d,2048,g)){break a}e=e-1|0;b=yd(d,g)+N(b,10)|0;continue}break}g=2;if(!jb(a,f+8|0)){break a}}H[c>>2]=H[c>>2]|g}oa=f+16|0;return b}function lm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;while(1){a:{if((c|0)==(d|0)|e>>>0<=h>>>0){break a}g=1;f=oa-16|0;oa=f;H[f+12>>2]=H[a+8>>2];k=jc(f+8|0,f+12|0);i=Ve(0,c,d-c|0,b?b:24364);ic(k);oa=f+16|0;b:{switch(i+2|0){default:g=i;break;case 0:case 1:break a;case 2:break b}}h=h+1|0;j=g+j|0;c=c+g|0;continue}break}return j|0}function Dc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;i=oa-16|0;oa=i;a:{if(!a){break a}h=H[e+12>>2];g=c-b|0;if((g|0)>=1){g=g>>2;if((wd(a,b,g)|0)!=(g|0)){break a}}b=d-b>>2;b=(b|0)<(h|0)?h-b|0:0;if((b|0)>=1){f=Bi(i,b,f);h=wd(a,Ca(f),b);va(f);if((b|0)!=(h|0)){break a}}b=d-c|0;if((b|0)>=1){b=b>>2;if((wd(a,c,b)|0)!=(b|0)){break a}}Dh(e);j=a}oa=i+16|0;return j}function Af(a){var b=0,c=0,d=0;d=oa-16|0;oa=d;if(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]){c=a;b=d+8|0;H[b+4>>2]=a;F[b|0]=0;if(Sd(H[H[a>>2]-12>>2]+a|0)){if(H[(H[H[c>>2]-12>>2]+c|0)+72>>2]){Af(H[(H[H[c>>2]-12>>2]+c|0)+72>>2])}F[b|0]=1}a:{if(!I[b|0]){break a}if(($c(H[(H[H[a>>2]-12>>2]+a|0)+24>>2])|0)!=-1){break a}ac(H[H[a>>2]-12>>2]+a|0,1)}ue(b)}oa=d+16|0}function hf(a,b,c,d){F[a+53|0]=1;a:{if(H[a+4>>2]!=(c|0)){break a}F[a+52|0]=1;c=H[a+16>>2];b:{if(!c){H[a+36>>2]=1;H[a+24>>2]=d;H[a+16>>2]=b;if(H[a+48>>2]!=1){break a}if((d|0)==1){break b}break a}if((b|0)==(c|0)){c=H[a+24>>2];if((c|0)==2){H[a+24>>2]=d;c=d}if(H[a+48>>2]!=1){break a}if((c|0)==1){break b}break a}H[a+36>>2]=H[a+36>>2]+1}F[a+54|0]=1}}function xd(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=oa-16|0;oa=e;f=H[Ad(a)>>2];d=H[c>>2]-H[a>>2]|0;a:{if(d>>>0<2147483647){d=d<<1;break a}d=-1}d=d?d:4;h=H[b>>2];i=H[a>>2];g=ke((f|0)==152?0:H[a>>2],d);if(g){if((f|0)!=152){Ud(a)}H[e+4>>2]=151;f=Ya(e+8|0,g,e+4|0);fi(a,f);_a(f);H[b>>2]=H[a>>2]+(h-i|0);H[c>>2]=H[a>>2]+(d&-4);oa=e+16|0;return}db();X()}function Bi(a,b,c){var d=0,e=0,f=0,g=0,h=0;h=oa-16|0;oa=h;f=oa-16|0;oa=f;d=a;a:{if(b>>>0<=1073741807){b:{if(b>>>0<=1){ub(d,b);g=d;break b}e=ud(b)+1|0;g=Sj(e);_b(d,g);Zb(d,e);yb(d,b)}e=g;d=b;if(d){if(d){while(1){H[e>>2]=c;e=e+4|0;d=d-1|0;if(d){continue}break}}}H[f+12>>2]=0;Cb((b<<2)+g|0,f+12|0);oa=f+16|0;break a}Xb();X()}oa=h+16|0;return a}function ph(a,b,c,d){var e=0,f=0;if((d|0)==1){f=b;e=H[a+8>>2]-H[a+4>>2]|0;b=b-e|0;c=c-((e>>31)+(f>>>0>>0)|0)|0}a:{if(K[a+20>>2]>K[a+28>>2]){qa[H[a+36>>2]](a,0,0)|0;if(!H[a+20>>2]){break a}}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;qa[H[a+40>>2]](a,b,c,d)|0;if((pa|0)<0){break a}H[a+4>>2]=0;H[a+8>>2]=0;H[a>>2]=H[a>>2]&-17;return 0}return-1}function ji(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;e=oa-16|0;oa=e;f=H[Ad(a)>>2];d=H[c>>2]-H[a>>2]|0;a:{if(d>>>0<2147483647){d=d<<1;break a}d=-1}d=d?d:1;h=H[b>>2];i=H[a>>2];g=ke((f|0)==152?0:H[a>>2],d);if(g){if((f|0)!=152){Ud(a)}H[e+4>>2]=151;f=Ya(e+8|0,g,e+4|0);fi(a,f);_a(f);H[b>>2]=H[a>>2]+(h-i|0);H[c>>2]=d+H[a>>2];oa=e+16|0;return}db();X()}function Qm(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;d=oa-16|0;oa=d;b=a;a:{if(!tb(f)){H[b+8>>2]=H[f+8>>2];a=H[f+4>>2];H[b>>2]=H[f>>2];H[b+4>>2]=a;break a}e=H[f>>2];b:{c:{c=H[f+4>>2];d:{if(c>>>0<=1){ub(a,c);break d}if(c>>>0>1073741807){break c}f=ud(c)+1|0;b=Sj(f);_b(a,b);Zb(a,f);yb(a,c)}oc(b,e,c+1|0);break b}Xb();X()}}oa=d+16|0}function cf(a,b){var c=0,d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;a:{b:{c:{c=wa(b)-1|0;if((c|0)<1){break c}while(1){if(!Db(F[Aa(b,d)|0])){break c}d=d+1|0;if((d|0)!=(c|0)){continue}break}d=c;break b}if((c|0)<(d|0)){break a}}while(1){if(!Db(F[Aa(b,c)|0])){break a}g=(c|0)>(d|0);f=c-1|0;c=f;if(g){continue}break}c=f}Kg(a,b,d,(c-d|0)+1|0);oa=e+16|0}function pc(a,b,c,d,e,f){var g=0,h=0,i=0,j=0;h=oa-16|0;oa=h;a:{if(!a){break a}g=H[e+12>>2];i=c-b|0;if((i|0)>=1){if((wd(a,b,i)|0)!=(i|0)){break a}}b=d-b|0;b=(b|0)<(g|0)?g-b|0:0;if((b|0)>=1){f=Nf(h,b,f);g=wd(a,Ca(f),b);va(f);if((b|0)!=(g|0)){break a}}b=d-c|0;if((b|0)>=1){if((wd(a,c,b)|0)!=(b|0)){break a}}Dh(e);j=a}oa=h+16|0;return j}function mf(a,b){var c=0,d=0,e=0;d=oa-16|0;oa=d;H[d+12>>2]=b;a:{b:{c:{d:{if(tb(a)){c=Rc(a)-1|0;e=H[a+4>>2];if((c|0)==(e|0)){break d}break b}e=1;c=1;b=I[a+11|0];if((b|0)!=1){break c}}Ig(a,c,1,c,c);b=e;if(tb(a)){break b}}c=a;ub(a,b+1|0);break a}c=H[a>>2];yb(a,e+1|0);b=e}a=(b<<2)+c|0;Cb(a,d+12|0);H[d+8>>2]=0;Cb(a+4|0,d+8|0);oa=d+16|0}function Od(a,b){var c=0,d=0,e=0;d=oa-16|0;oa=d;F[d+15|0]=b;a:{b:{c:{d:{if(tb(a)){c=Rc(a)-1|0;e=H[a+4>>2];if((c|0)==(e|0)){break d}break b}e=10;c=10;b=I[a+11|0];if((b|0)!=10){break c}}pf(a,c,1,c,c);b=e;if(tb(a)){break b}}c=a;ub(a,b+1|0);break a}c=H[a>>2];yb(a,e+1|0);b=e}a=b+c|0;nb(a,d+15|0);F[d+14|0]=0;nb(a+1|0,d+14|0);oa=d+16|0}function Ig(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;if(1073741807-b>>>0>=c>>>0){g=Ca(a);a:{if(b>>>0<536870887){H[f+8>>2]=b<<1;H[f+12>>2]=b+c;c=ud(H[ad(f+12|0,f+8|0)>>2]);break a}c=1073741806}h=c+1|0;c=Sj(h);if(e){oc(c,g,e)}d=d-e|0;if(d){e=e<<2;oc(e+c|0,e+g|0,d)}if((b|0)!=1){Ba(g)}_b(a,c);Zb(a,h);oa=f+16|0;return}Xb();X()}function yk(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(Mb(a,H[b+8>>2],e)){gf(b,c,d);return}a:{if(!Mb(a,H[b>>2],e)){break a}if(!(H[b+20>>2]!=(c|0)?H[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}H[b+32>>2]=1;return}H[b+20>>2]=c;H[b+32>>2]=d;H[b+40>>2]=H[b+40>>2]+1;if(!(H[b+36>>2]!=1|H[b+24>>2]!=2)){F[b+54|0]=1}H[b+44>>2]=4}}function oh(a,b,c){var d=0,e=0,f=0;f=b;d=I[c+74|0];F[c+74|0]=d-1|d;e=H[c+4>>2];d=H[c+8>>2]-e|0;if((d|0)<1){d=f}else{d=d>>>0>>0?d:f;Wb(a,e,d);H[c+4>>2]=d+H[c+4>>2];a=a+d|0;d=f-d|0}if(d){while(1){a:{if(!lg(c)){e=qa[H[c+32>>2]](c,a,d)|0;if(e+1>>>0>1){break a}}return f-d|0}a=a+e|0;d=d-e|0;if(d){continue}break}}return b}function Td(a,b){var c=0,d=0,e=0,f=0;d=oa-16|0;oa=d;c=a;a:{if(!tb(b)){H[c+8>>2]=H[b+8>>2];a=H[b+4>>2];H[c>>2]=H[b>>2];H[c+4>>2]=a;break a}f=H[b>>2];b:{c:{c=H[b+4>>2];d:{if(c>>>0<=10){b=a;ub(b,c);break d}if(c>>>0>4294967279){break c}e=cd(c)+1|0;b=Na(e);_b(a,b);Zb(a,e);yb(a,c)}Yb(b,f,c+1|0);break b}Xb();X()}}oa=d+16|0}function wb(a,b,c,d){var e=0,f=0;a:{if(!wa(a)|(c-b|0)<5){break a}Me(b,c);e=c-4|0;c=Ca(a);f=c+wa(a)|0;b:{while(1){c:{a=F[c|0];if(b>>>0>=e>>>0){break c}if(!(H[b>>2]!=F[c|0]?(a|0)<1|(a|0)>=127:1)){break b}c=(f-c|0)>1?c+1|0:c;b=b+4|0;continue}break}if((a|0)<1|(a|0)>=127|F[c|0]>>>0>H[e>>2]-1>>>0){break a}}H[d>>2]=4}}function Og(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=oa-16|0;oa=b;e=b+16|0;a:{while(1){f=$g(H[a+36>>2],H[a+40>>2],b+8|0,e,b+4|0);c=-1;d=H[b+4>>2]-(b+8|0)|0;if((d|0)!=(Ub(b+8|0,1,d,H[a+32>>2])|0)){break a}b:{switch(f-1|0){case 1:break a;case 0:continue;default:break b}}break}c=ze(H[a+32>>2])?-1:0}oa=b+16|0;return c|0}function pf(a,b,c,d,e){var f=0,g=0,h=0;f=oa-16|0;oa=f;if(-17-b>>>0>=c>>>0){g=Ca(a);a:{if(b>>>0<2147483623){H[f+8>>2]=b<<1;H[f+12>>2]=b+c;c=cd(H[ad(f+12|0,f+8|0)>>2]);break a}c=-18}h=c+1|0;c=Na(h);if(e){Yb(c,g,e)}d=d-e|0;if(d){Yb(c+e|0,e+g|0,d)}if((b|0)!=10){Ba(g)}_b(a,c);Zb(a,h);oa=f+16|0;return}Xb();X()}function Qb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;d=oa-16|0;oa=d;g=a;h=a;a:{if(!b){b=0;break a}c=b>>31;e=c+b^c;c=Q(e);xb(d,e,0,0,0,c+81|0);e=0+H[d+8>>2]|0;c=(H[d+12>>2]^65536)+(16414-c<<16)|0;c=e>>>0>>0?c+1|0:c;f=b&-2147483648|c;c=H[d+4>>2];b=H[d>>2]}H[h>>2]=b;H[g+4>>2]=c;H[a+8>>2]=e;H[a+12>>2]=f;oa=d+16|0}function ue(a){var b=0;a:{b=H[a+4>>2];if(!H[(H[H[b>>2]-12>>2]+b|0)+24>>2]){break a}b=H[a+4>>2];if(!Sd(H[H[b>>2]-12>>2]+b|0)){break a}b=H[a+4>>2];if(!(H[(H[H[b>>2]-12>>2]+b|0)+4>>2]&8192)){break a}b=H[a+4>>2];if(($c(H[(H[H[b>>2]-12>>2]+b|0)+24>>2])|0)!=-1){break a}a=H[a+4>>2];ac(H[H[a>>2]-12>>2]+a|0,1)}}function nm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=oa-16|0;oa=f;H[e>>2]=c;a=Of(f+12|0,0,H[a+8>>2]);c=2;a:{if(a+1>>>0<2){break a}b=a-1|0;c=1;if(b>>>0>d-H[e>>2]>>>0){break a}c=f+12|0;while(1){if(b){a=I[c|0];d=H[e>>2];H[e>>2]=d+1;F[d|0]=a;b=b-1|0;c=c+1|0;continue}break}c=0}oa=f+16|0;return c|0}function ef(a){var b=0;b=1;a:{if((a|0)>=1024){b=8.98846567431158e307;if((a|0)<2047){a=a-1023|0;break a}b=Z;a=((a|0)<3069?a:3069)-2046|0;break a}if((a|0)>-1023){break a}b=2.2250738585072014e-308;if((a|0)>-2045){a=a+1022|0;break a}b=0;a=((a|0)>-3066?a:-3066)+2044|0}x(0,0);x(1,a+1023<<20);return b*+z()}function fn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=oa-32|0;oa=g;h=H[3367];H[g+24>>2]=H[3366];H[g+28>>2]=h;h=H[3365];H[g+16>>2]=H[3364];H[g+20>>2]=h;h=H[3363];H[g+8>>2]=H[3362];H[g+12>>2]=h;h=H[3361];H[g>>2]=H[3360];H[g+4>>2]=h;a=Bc(a,b,c,d,e,f,g,g+32|0);oa=g+32|0;return a|0}function be(a){var b=0,c=0,d=0,e=0,f=0;while(1){b=a;a=b+1|0;if(Yc(F[b|0])){continue}break}a:{b:{c:{c=F[b|0];switch(c-43|0){case 0:break b;case 2:break c;default:break a}}e=1}c=F[a|0];b=a;f=e}if(Rb(c)){while(1){d=(N(d,10)-F[b|0]|0)+48|0;a=F[b+1|0];b=b+1|0;if(Rb(a)){continue}break}}return f?d:0-d|0}function tc(a,b,c,d){var e=0,f=0,g=0,h=0;e=oa-16|0;oa=e;H[e+12>>2]=b;H[e+8>>2]=d;g=jc(e,e+12|0);b=oa-16|0;oa=b;d=H[e+8>>2];H[b+12>>2]=d;H[b+8>>2]=d;f=-1;d=We(0,0,c,d);a:{if((d|0)<0){break a}h=a;d=d+1|0;a=cb(d);H[h>>2]=a;if(!a){break a}f=We(a,d,c,H[b+12>>2])}oa=b+16|0;ic(g);oa=e+16|0;return f}function nh(a){var b=0,c=0,d=0,e=0,f=0;b=H[a+40>>2];c=qa[b|0](a,0,0,I[a|0]&128?K[a+20>>2]>K[a+28>>2]?2:1:1)|0;b=pa;d=b;if((b|0)>0?1:(b|0)>=0){e=H[a+20>>2]-H[a+28>>2]|0;a=H[a+8>>2]-H[a+4>>2]|0;f=c-a|0;b=e+f|0;a=(d-((a>>31)+(c>>>0>>0)|0)|0)+(e>>31)|0;c=b;d=b>>>0>>0?a+1|0:a}pa=d;return c}function If(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;f=H[a+76>>2]>=0;d=H[a>>2]&1;if(!d){b=H[a+52>>2];if(b){H[b+56>>2]=H[a+56>>2]}c=H[a+56>>2];if(c){H[c+52>>2]=b}if(H[6068]==(a|0)){H[6068]=c}}b=ze(a);c=qa[H[a+12>>2]](a)|0;e=H[a+96>>2];if(e){Ba(e)}a:{if(!d){Ba(a);break a}if(!f){break a}}return b|c}function Hd(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;c=oa-16|0;oa=c;g=a;h=a;a:{if(!b){b=0;e=0;break a}d=b;b=Q(b);xb(c,d,0,0,0,b+81|0);d=0+H[c+8>>2]|0;b=(H[c+12>>2]^65536)+(16414-b<<16)|0;b=d>>>0>>0?b+1|0:b;f=d;d=b;b=H[c+4>>2];e=H[c>>2]}H[h>>2]=e;H[g+4>>2]=b;H[a+8>>2]=f;H[a+12>>2]=d;oa=c+16|0}function ah(a){var b=0,c=0,d=0;b=oa-16|0;oa=b;c=Hf(a);H[a+40>>2]=0;H[a+32>>2]=0;H[a+36>>2]=0;H[a>>2]=19176;Vb(a+52|0,0,47);rd(b+8|0,c);d=Nh(H[b+8>>2],Wa(24580));Fa(b+8|0);if(d){rd(b,c);H[a+68>>2]=Rd(b);Fa(b);F[a+98|0]=Jc(H[a+68>>2])}qa[H[H[a>>2]+12>>2]](a,0,4096)|0;oa=b+16|0;return a}function $m(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;c=oa-128|0;oa=c;H[c+12>>2]=c+116;qi(a+8|0,c+16|0,c+12|0,e,f,g);d=c+16|0;e=H[c+12>>2];a=oa-16|0;oa=a;H[a+8>>2]=b;while(1){if((d|0)!=(e|0)){Vf(a+8|0,F[d|0]);d=d+1|0;continue}break}oa=a+16|0;oa=c+128|0;return H[a+8>>2]}function yc(a){var b=0,c=0,d=0;b=a;a:{if(b&3){while(1){if(!I[b|0]){break a}b=b+1|0;if(b&3){continue}break}}while(1){c=b;b=b+4|0;d=H[c>>2];if(!((d^-1)&d-16843009&-2139062144)){continue}break}if(!(d&255)){return c-a|0}while(1){d=I[c+1|0];b=c+1|0;c=b;if(d){continue}break}}return b-a|0}function xf(a){var b=0,c=0,d=0,e=0,f=0,g=0;c=oa-16|0;oa=c;b=H[a+64>>2];if(b){H[c+4>>2]=395;b=Ya(c+8|0,b,c+4|0);e=qa[H[H[a>>2]+24>>2]](a)|0;f=If(Ud(b));H[a+64>>2]=0;qa[H[H[a>>2]+12>>2]](a,0,0)|0;g=b;d=H[b>>2];H[b>>2]=0;if(d){qa[H[Ad(g)>>2]](d)|0}a=e|f?0:a}else{a=0}oa=c+16|0;return a}function Xi(a,b,c){var d=0,e=0,f=0,g=0;f=oa-16|0;oa=f;e=th(b,c);if(e>>>0<=4294967279){a:{if(e>>>0<=10){ub(a,e);d=a;break a}g=cd(e)+1|0;d=Na(g);_b(a,d);Zb(a,g);yb(a,e)}while(1){if((b|0)!=(c|0)){nb(d,b);d=d+1|0;b=b+1|0;continue}break}F[f+15|0]=0;nb(d,f+15|0);oa=f+16|0;return}Xb();X()}function Wi(a,b,c){var d=0,e=0,f=0,g=0;f=oa-16|0;oa=f;e=rg(b,c);if(e>>>0<=1073741807){a:{if(e>>>0<=1){ub(a,e);d=a;break a}g=ud(e)+1|0;d=Sj(g);_b(a,d);Zb(a,g);yb(a,e)}while(1){if((b|0)!=(c|0)){Cb(d,b);d=d+4|0;b=b+4|0;continue}break}H[f+12>>2]=0;Cb(d,f+12|0);oa=f+16|0;return}Xb();X()}function pe(a,b){var c=0,d=0;c=-1;a:{if((a|0)==-1){break a}d=H[b+76>>2]>=0;b:{c:{c=H[b+4>>2];d:{if(!c){lg(b);c=H[b+4>>2];if(!c){break d}}if(H[b+44>>2]-8>>>0>>0){break c}}c=-1;if(d){break b}break a}c=c-1|0;H[b+4>>2]=c;F[c|0]=a;H[b>>2]=H[b>>2]&-17;c=a;if(!d){break a}}}return c}function Id(a,b,c){var d=0,e=0,f=0;a:{if(b>>>0<1){d=a;break a}while(1){d=Fq(a,b,10);e=pa;f=e;e=Eq(d,e,10,0);c=c-1|0;F[c|0]=a-e|48;e=b>>>0>9;a=d;b=f;if(e){continue}break}}if(d){while(1){c=c-1|0;a=(d>>>0)/10|0;F[c|0]=d-N(a,10)|48;b=d>>>0>9;d=a;if(b){continue}break}}return c}function $n(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=(e-d|0)+b|0;a:{while(1){if((d|0)!=(e|0)){a=-1;if((b|0)==(c|0)){break a}f=F[b|0];g=F[d|0];if((f|0)<(g|0)){break a}if((f|0)>(g|0)){return 1}else{d=d+1|0;b=b+1|0;continue}}break}a=(c|0)!=(h|0)}return a|0}function Jf(a){var b=0,c=0;a:{if(K[a+20>>2]<=K[a+28>>2]){break a}qa[H[a+36>>2]](a,0,0)|0;if(H[a+20>>2]){break a}return-1}b=H[a+4>>2];c=H[a+8>>2];if(b>>>0>>0){b=b-c|0;qa[H[a+40>>2]](a,b,b>>31,1)|0}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a+4>>2]=0;H[a+8>>2]=0;return 0}function vd(a,b){var c=0,d=0,e=0,f=0,g=0;e=oa-16|0;oa=e;g=b;c=aj(b);d=oa-16|0;oa=d;a:{if(c>>>0<=1073741807){b:{if(c>>>0<=1){ub(a,c);b=a;break b}f=ud(c)+1|0;b=Sj(f);_b(a,b);Zb(a,f);yb(a,c)}oc(b,g,c);H[d+12>>2]=0;Cb((c<<2)+b|0,d+12|0);oa=d+16|0;break a}Xb();X()}oa=e+16|0}function Nf(a,b,c){var d=0,e=0,f=0,g=0,h=0;g=oa-16|0;oa=g;e=oa-16|0;oa=e;d=a;a:{if(b>>>0<=4294967279){b:{if(b>>>0<=10){ub(d,b);f=d;break b}h=cd(b)+1|0;f=Na(h);_b(d,f);Zb(d,h);yb(d,b)}Ng(f,b,c);F[e+15|0]=0;nb(b+f|0,e+15|0);oa=e+16|0;break a}Xb();X()}oa=g+16|0;return a}function Ok(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:{if(!I[a+44|0]){c=(c|0)>0?c:0;while(1){if((c|0)==(d|0)){break a}if(((f=a,g=Sb(F[b|0]),e=H[H[a>>2]+52>>2],qa[e](f|0,g|0)|0)|0)==-1){return d|0}else{b=b+1|0;d=d+1|0;continue}}}c=Ub(b,1,c,H[a+32>>2])}return c|0}function Ll(a){a=a|0;a:{if(F[24672]&1){break a}if(!fb(24672)){break a}b:{if(F[25832]&1){break b}if(!fb(25832)){break b}a=25808;while(1){a=bc(a)+12|0;if((a|0)!=25832){continue}break}eb(25832)}Ka(25808,18752);Ka(25820,18764);H[6167]=25808;eb(24672)}return H[6167]}function Nl(a){a=a|0;a:{if(F[24664]&1){break a}if(!fb(24664)){break a}b:{if(F[25800]&1){break b}if(!fb(25800)){break b}a=25776;while(1){a=Ea(a)+12|0;if((a|0)!=25800){continue}break}eb(25800)}Ga(25776,2610);Ga(25788,2607);H[6165]=25776;eb(24664)}return H[6165]}function Bk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(Mb(a,H[b+8>>2],0)){kf(b,c,d);return}e=H[a+12>>2];f=a+16|0;Eg(f,b,c,d);a:{if((e|0)<2){break a}e=(e<<3)+f|0;a=a+24|0;while(1){Eg(a,b,c,d);if(I[b+54|0]){break a}a=a+8|0;if(e>>>0>a>>>0){continue}break}}}function Yn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;a:{while(1){if((d|0)!=(e|0)){a=-1;if((b|0)==(c|0)){break a}f=H[b>>2];g=H[d>>2];if((f|0)<(g|0)){break a}if((f|0)>(g|0)){return 1}else{d=d+4|0;b=b+4|0;continue}}break}a=(b|0)!=(c|0)}return a|0}function rj(a,b){var c=0,d=0,e=0;A(+a);c=v(1)|0;d=v(0)|0;e=c;c=c>>>20&2047;if((c|0)!=2047){if(!c){c=b;if(a==0){b=0}else{a=rj(a*0x10000000000000000,b);b=H[b>>2]+-64|0}H[c>>2]=b;return a}H[b>>2]=c-1022;x(0,d|0);x(1,e&-2146435073|1071644672);a=+z()}return a}function lg(a){var b=0,c=0;b=I[a+74|0];F[a+74|0]=b-1|b;if(K[a+20>>2]>K[a+28>>2]){qa[H[a+36>>2]](a,0,0)|0}H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;b=H[a>>2];if(b&4){H[a>>2]=b|32;return-1}c=H[a+44>>2]+H[a+48>>2]|0;H[a+8>>2]=c;H[a+4>>2]=c;return b<<27>>31}function Bj(a,b){var c=0,d=0;d=Xe(a+108|0);H[a>>2]=19796;H[d>>2]=19816;c=H[4957];H[a>>2]=c;H[H[c-12>>2]+a>>2]=H[4958];H[a+4>>2]=0;c=a+8|0;pd(H[H[a>>2]-12>>2]+a|0,c);H[a>>2]=19796;H[d>>2]=19816;if(!bh(ah(c),b,8)){ac(H[H[a>>2]-12>>2]+a|0,4)}return a}function Uc(a,b,c,d){var e=0;if(d&2048){F[a|0]=43;a=a+1|0}if(d&512){F[a|0]=35;a=a+1|0}while(1){e=I[b|0];if(e){F[a|0]=e;a=a+1|0;b=b+1|0;continue}break}e=d&74;b=111;a:{if((e|0)==64){break a}b=d&16384?88:120;if((e|0)==8){break a}b=c?100:117}F[a|0]=b}function jg(a){a=a|0;var b=0,c=0,d=0;H[a>>2]=7888;c=a;b=H[a+40>>2];while(1){if(b){b=b-1|0;d=b<<2;qa[H[H[c+32>>2]+d>>2]](0,c,H[d+H[c+36>>2]>>2]);continue}break}Fa(a+28|0);Ba(H[a+32>>2]);Ba(H[a+36>>2]);Ba(H[a+48>>2]);Ba(H[a+60>>2]);return a|0}function wg(a){a=a|0;var b=0;H[a>>2]=7640;b=H[a+24>>2];if(b){Ba(Va(b))}b=H[a+28>>2];if(b){Ba(Va(b))}b=H[a+32>>2];if(b){Ba(Va(b))}b=H[a+36>>2];if(b){Ba(Va(b))}b=H[a+40>>2];if(b){Ba(Va(b))}b=H[a+44>>2];if(b){Ba(Va(b))}va(a+48|0);return a|0}function il(a,b){a=a|0;b=b|0;var c=0;a:{if(!H[a+64>>2]|K[a+8>>2]>=K[a+12>>2]){break a}if(qb(b,-1)){Gf(a,-1);return re(b)|0}if(!(I[a+88|0]&16)){if(!qb(Zc(b),F[H[a+12>>2]-1|0])){break a}}Gf(a,-1);c=Zc(b);F[H[a+12>>2]]=c;return b|0}return-1}function Cf(a,b){var c=0,d=0,e=0;c=oa-32|0;oa=c;F[a|0]=0;e=Sd(H[H[b>>2]-12>>2]+b|0);d=H[H[b>>2]-12>>2]+b|0;a:{if(e){if(H[d+72>>2]){sd(H[(H[H[b>>2]-12>>2]+b|0)+72>>2])}F[a|0]=Sd(H[H[b>>2]-12>>2]+b|0);break a}ac(d,4)}oa=c+32|0;return a}function dk(a,b,c,d){var e=0,f=0;e=oa-16|0;oa=e;a=Ea(a);if((d|0)>0){b=b+48|0;while(1){ck(a,b);f=f+1|0;if((f|0)!=(d|0)){continue}break}}if((c|0)>0){while(1){b=xa(e,3239);ck(a,b);va(b);b=(c|0)>1;c=c-1|0;if(b){continue}break}}oa=e+16|0}function Nb(a,b,c){c=H[c+4>>2]&176;if((c|0)==32){return b}a:{if((c|0)!=16){break a}b:{c:{c=I[a|0];switch(c-43|0){case 0:case 2:break c;default:break b}}return a+1|0}if((c|0)!=48|(b-a|0)<2|(I[a+1|0]|32)!=120){break a}a=a+2|0}return a}function Vf(a,b){var c=0,d=0,e=0,f=0,g=0;a:{c=H[a>>2];if(!c){break a}d=H[c+24>>2];b:{if((d|0)==H[c+28>>2]){b=(f=c,g=Sb(b),e=H[H[c>>2]+52>>2],qa[e](f|0,g|0)|0);break b}H[c+24>>2]=d+1;F[d|0]=b;b=Sb(b)}if(!qb(b,-1)){break a}H[a>>2]=0}}function Lk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a:{if(!I[a+44|0]){c=(c|0)>0?c:0;while(1){if((c|0)==(d|0)){break a}if((qa[H[H[a>>2]+52>>2]](a,H[b>>2])|0)==-1){return d|0}else{b=b+4|0;d=d+1|0;continue}}}c=Ub(b,4,c,H[a+32>>2])}return c|0}function af(a){var b=0,c=0,d=0,e=0;b=32;a:{c=H[a+200>>2]+1|0;d=a+160|0;e=wa(d);if((c|0)>=(e|0)){break a}while(1){b=F[Aa(d,c)|0];if(Db(b)){c=c+1|0;if((e|0)!=(c|0)){continue}break a}break}return b}return I[a+212|0]?(b|0)==9?32:b:b}function fb(a){var b=0,c=0,d=0;c=oa-16|0;oa=c;a=Gg(c,a);d=oa-16|0;oa=d;if(!I[H[Hc(d+8|0,H[a+4>>2])>>2]]){a:{b:{a=H[a+8>>2];b=I[a|0];if((b|0)!=1){if(b&2){break b}F[a|0]=2;a=1}else{a=0}break a}X()}b=a}oa=d+16|0;oa=c+16|0;return b}function Aq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;f=pg(H[H[a>>2]-12>>2]+a|0,10);b=oa-16|0;oa=b;c=Bf(b+8|0,a);a:{if(!I[c|0]){break a}d=a;e=Oh(b,a);Vf(e,f);if(!De(e)){break a}ac(H[H[d>>2]-12>>2]+d|0,1)}ue(c);oa=b+16|0;sd(a);return a|0}function Lg(a,b,c){var d=0,e=0,f=0;f=oa-16|0;oa=f;d=Ja(a);e=wa(a);a:{if(d-e>>>0>=c>>>0){if(!c){break a}d=Ca(a);Yb(d+e|0,b,c);b=c+e|0;Lc(a,b);F[f+15|0]=0;nb(b+d|0,f+15|0);break a}Pd(a,d,(c+e|0)-d|0,e,e,0,c,b)}oa=f+16|0;return a}function tg(a,b){var c=0,d=0;c=oa-32|0;oa=c;H[c+28>>2]=b;b=Uf(c+24|0);H[c+8>>2]=ak(Ed(a),Xc(a),c+28|0);H[b>>2]=H[ge(c+16|0,c+8|0)>>2];H[c+16>>2]=Xc(a);d=-1;if(!Bg(b,c+16|0)){H[c+16>>2]=Ed(a);d=$j(b,c+16|0)}oa=c+32|0;return d}function Ej(a,b){var c=0,d=0,e=0;d=oa-16|0;oa=d;H[a+4>>2]=0;c=-1;if(I[Cf(d+8|0,a)|0]){e=6;c=$e(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]);if(!qb(c,-1)){H[a+4>>2]=1;e=0}ac(H[H[a>>2]-12>>2]+a|0,e)}oa=d+16|0;if((c|0)!=-1){F[b|0]=Zc(c)}}function Mg(a,b,c){var d=0,e=0,f=0;d=oa-16|0;oa=d;if(c>>>0<=4294967279){a:{if(c>>>0<=10){ub(a,c);e=a;break a}f=cd(c)+1|0;e=Na(f);_b(a,e);Zb(a,f);yb(a,c)}Yb(e,b,c);F[d+15|0]=0;nb(c+e|0,d+15|0);oa=d+16|0;return}Xb();X()}function fe(a){var b=0,c=0;b=I[a+192|0];a:{if(!I[a+246|0]){c=b;break a}c=123;b:{c:{switch(b-91|0){case 2:c=125;break b;case 0:break b;default:break c}}c=b}F[a+246|0]=0}b=c<<24>>24;if(I[a+221|0]){Ld(a)}mc(a+172|0,1,b)}function Eq(a,b,c,d){var e=0,f=0,g=0,h=0,i=0,j=0;e=c>>>16|0;f=a>>>16|0;j=N(e,f);g=c&65535;h=a&65535;i=N(g,h);f=(i>>>16|0)+N(f,g)|0;e=(f&65535)+N(e,h)|0;pa=(N(b,c)+j|0)+N(a,d)+(f>>>16)+(e>>>16)|0;return i&65535|e<<16}function Rh(a){a=a|0;var b=0,c=0;H[a>>2]=13480;b=a+16|0;while(1){if(Pa(b)>>>0>c>>>0){if(H[lc(b,c)>>2]){Ee(H[lc(b,c)>>2])}c=c+1|0;continue}break}va(a+192|0);Ph(b);if(H[b>>2]){Th(b);wh(ed(b),H[b>>2],dd(b))}return a|0}function sd(a){var b=0,c=0;b=oa-16|0;oa=b;if(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]){c=Bf(b+8|0,a);a:{if(!I[c|0]){break a}if(($c(H[(H[H[a>>2]-12>>2]+a|0)+24>>2])|0)!=-1){break a}ac(H[H[a>>2]-12>>2]+a|0,1)}ue(c)}oa=b+16|0}function kf(a,b,c){var d=0;d=H[a+16>>2];if(!d){H[a+36>>2]=1;H[a+24>>2]=c;H[a+16>>2]=b;return}a:{if((b|0)==(d|0)){if(H[a+24>>2]!=2){break a}H[a+24>>2]=c;return}F[a+54|0]=1;H[a+24>>2]=2;H[a+36>>2]=H[a+36>>2]+1}}function ak(a,b,c){var d=0;d=oa-16|0;oa=d;H[d>>2]=b;H[d+8>>2]=a;a:{if(!zb(d+8|0,d)){break a}while(1){if(H[H[d+8>>2]>>2]==H[c>>2]){break a}od(d+8|0);if(zb(d+8|0,d)){continue}break}}oa=d+16|0;return H[d+8>>2]}function ze(a){var b=0;if(a){if(H[a+76>>2]<=-1){return Jf(a)}return Jf(a)}if(H[5398]){b=ze(H[5398])}a=H[6068];if(a){while(1){if(K[a+20>>2]>K[a+28>>2]){b=Jf(a)|b}a=H[a+56>>2];if(a){continue}break}}return b}function kc(a,b,c){var d=0,e=0,f=0,g=0;H[a+112>>2]=b;H[a+116>>2]=c;d=H[a+8>>2];g=H[a+4>>2];e=d-g|0;f=e>>31;H[a+120>>2]=e;H[a+124>>2]=f;H[a+104>>2]=b|c?((c|0)<(f|0)?1:(c|0)<=(f|0)?b>>>0>>0:0)?b+g|0:d:d}function Jb(a,b,c,d,e){var f=0;f=oa-256|0;oa=f;if(!(e&73728|(c|0)<=(d|0))){c=c-d|0;d=c>>>0<256;Vb(f,b&255,d?c:256);if(!d){while(1){sb(a,f,256);c=c-256|0;if(c>>>0>255){continue}break}}sb(a,f,c)}oa=f+256|0}function Ga(a,b){var c=0,d=0,e=0,f=0;c=yc(b);e=oa-16|0;oa=e;d=Ja(a);a:{if(d>>>0>=c>>>0){d=Ca(a);qf(d,b,c);F[e+15|0]=0;nb(c+d|0,e+15|0);Lc(a,c);break a}f=a;a=wa(a);Pd(f,d,c-d|0,a,0,a,c,b)}oa=e+16|0}function Zf(a){var b=0,c=0,d=0;ui(a);if(H[a>>2]){c=a;b=H[a+4>>2];d=H[a>>2];if((b|0)!=(d|0)){while(1){b=b-12|0;Hg(gb(c),b);if((b|0)!=(d|0)){continue}break}}H[c+4>>2]=d;gb(a);c=H[a>>2];qd(a);Ba(c)}}function Ze(a){var b=0;if(H[a+76>>2]<0){b=H[a+4>>2];if(b>>>0>2]){H[a+4>>2]=b+1;return I[b|0]}return kg(a)}b=H[a+4>>2];a:{if(b>>>0>2]){H[a+4>>2]=b+1;a=I[b|0];break a}a=kg(a)}return a}function mc(a,b,c){var d=0,e=0,f=0,g=0;f=oa-16|0;oa=f;if(b){e=Ja(a);d=wa(a);g=d+b|0;if(e-d>>>0>>0){pf(a,e,g-e|0,d,d)}e=d;d=Ca(a);Ng(e+d|0,b,c);Lc(a,g);F[f+15|0]=0;nb(d+g|0,f+15|0)}oa=f+16|0}function Ci(a,b){var c=0,d=0;a:{c=H[a>>2];if(!c){break a}d=H[c+24>>2];b:{if((d|0)==H[c+28>>2]){b=qa[H[H[c>>2]+52>>2]](c,b)|0;break b}H[c+24>>2]=d+4;H[d>>2]=b}if(!qb(b,-1)){break a}H[a>>2]=0}}function hj(a,b,c,d){a:{if(!a){break a}b:{switch(b+2|0){case 0:F[a|0]=c;return;case 1:G[a>>1]=c;return;case 2:case 3:H[a>>2]=c;return;case 5:break b;default:break a}}H[a>>2]=c;H[a+4>>2]=d}}function qi(a,b,c,d,e,f){var g=0;g=oa-16|0;oa=g;F[g+15|0]=0;F[g+14|0]=f;F[g+13|0]=e;F[g+12|0]=37;if(f){pi(g+13|0,g+14|0)}H[c>>2]=(ea(b|0,oi(b,H[c>>2])|0,g+12|0,d|0,H[a>>2])|0)+b;oa=g+16|0}function Fe(a){var b=0,c=0,d=0;b=na(8)|0;H[b>>2]=20580;H[b>>2]=20624;c=yc(a);d=Na(c+13|0);H[d+8>>2]=0;H[d+4>>2]=c;H[d>>2]=c;H[b+4>>2]=Wb(d+12|0,a,c+1|0);H[b>>2]=20672;ia(b|0,20704,4);X()}function qe(a){a=a|0;var b=0;H[a>>2]=19176;xf(a);a:{if(!I[a+96|0]){break a}b=H[a+32>>2];if(!b){break a}Ba(b)}b:{if(!I[a+97|0]){break b}b=H[a+56>>2];if(!b){break b}Ba(b)}xe(a);return a|0}function _d(a,b){var c=0,d=0;c=I[a|0];d=I[b|0];a:{if(!c|(d|0)!=(c|0)){break a}while(1){d=I[b+1|0];c=I[a+1|0];if(!c){break a}b=b+1|0;a=a+1|0;if((c|0)==(d|0)){continue}break}}return c-d|0}function Uh(a){var b=0,c=0,d=0;c=oa-16|0;oa=c;b=sg(c,26176,a);a=H[b+4>>2];d=H[b+8>>2];while(1){if((a|0)==(d|0)){Be(b);oa=c+16|0}else{yh(ed(26176),a);a=a+4|0;H[b+4>>2]=a;continue}break}}function md(a){var b=0;a:{b=vj(a);if(b){break a}a=a-36|0;if((a&255)>>>0>=61){break a}b=a&31;return((a&63)>>>0>=32?402653184>>>b|0:((1<>>b)&1}return(b|0)!=0}function fg(a,b,c,d,e,f,g,h,i){var j=0;j=oa-16|0;oa=j;Lb(j,b,c,d,e,f,g,h,i^-2147483648);b=H[j+4>>2];H[a>>2]=H[j>>2];H[a+4>>2]=b;b=H[j+12>>2];H[a+8>>2]=H[j+8>>2];H[a+12>>2]=b;oa=j+16|0}function bo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;e=H[a+84>>2];d=c+256|0;f=tj(e,d);d=f?f-e|0:d;c=c>>>0>d>>>0?d:c;Wb(b,e,c);b=e+d|0;H[a+84>>2]=b;H[a+8>>2]=b;H[a+4>>2]=c+e;return c|0}function te(a){var b=0,c=0,d=0;b=oa-16|0;oa=b;H[a+4>>2]=0;c=-1;if(I[Cf(b+8|0,a)|0]){c=_f(H[(H[H[a>>2]-12>>2]+a|0)+24>>2]);d=qb(c,-1);ac(H[H[a>>2]-12>>2]+a|0,d?2:0)}oa=b+16|0;return c}function mm(a){a=a|0;var b=0,c=0,d=0;b=oa-16|0;oa=b;H[b+12>>2]=H[a+8>>2];d=jc(b+8|0,b+12|0);c=oa-16|0;oa=c;oa=c+16|0;ic(d);oa=b+16|0;a=H[a+8>>2];if(!a){return 1}return(Hh(a)|0)==1|0}function Xj(a,b){var c=0,d=0;c=oa-16|0;oa=c;H[c+12>>2]=b;d=b;b=Wj(a);if(d>>>0<=b>>>0){a=Gc(a);if(a>>>0>>1>>>0){H[c+8>>2]=a<<1;b=H[ad(c+8|0,c+12|0)>>2]}oa=c+16|0;return b}$d();X()}function qc(a,b){var c=0,d=0;c=oa-16|0;oa=c;if(tb(a)){d=H[a>>2];Rc(a);Ba(d)}H[a+8>>2]=H[b+8>>2];d=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=d;ub(b,0);H[c+12>>2]=0;Cb(b,c+12|0);oa=c+16|0}function Ua(a,b){var c=0,d=0;c=oa-16|0;oa=c;if(tb(a)){d=H[a>>2];Rc(a);Ba(d)}H[a+8>>2]=H[b+8>>2];d=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=d;ub(b,0);F[c+15|0]=0;nb(b,c+15|0);oa=c+16|0}function Jj(a){var b=0,c=0,d=0;a=a+172|0;b=wa(a);a:{if((b|0)<2){break a}c=F[Aa(a,b-2|0)|0];if((I[Aa(a,b-1|0)|0]|32)!=101){break a}d=1;if((c|0)==46){break a}d=c-48>>>0<10}return d}function mn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=624576549;H[g+12>>2]=1394948685;a=Cc(a,b,c,d,e,f,g+8|0,g+16|0);oa=g+16|0;return a|0}function _c(a){var b=0,c=0;b=H[5436];c=a+3&-4;a=b+c|0;a:{if(a>>>0<=b>>>0?c:0){break a}if(a>>>0>ra()<<16>>>0){if(!(la(a|0)|0)){break a}}H[5436]=a;return b}H[6070]=48;return-1}function Gm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=H[b>>2];if(a>>>0<=127){a=H[H[2516]+(H[b>>2]<<2)>>2]}H[d>>2]=a;b=b+4|0;continue}break}return c|0}function Em(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=H[b>>2];if(a>>>0<=127){a=H[H[2904]+(H[b>>2]<<2)>>2]}H[d>>2]=a;b=b+4|0;continue}break}return c|0}function Im(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a:{while(1){if((c|0)==(d|0)){break a}if(!(!(J[H[2322]+(H[c>>2]<<1)>>1]&b)|K[c>>2]>127)){c=c+4|0;continue}break}d=c}return d|0}function kn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Fb(g);Fa(g);yi(a,f+24|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function jn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Fb(g);Fa(g);wi(a,f+16|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function dn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Ib(g);Fa(g);ti(a,f+24|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function cn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=oa-16|0;oa=g;H[g+8>>2]=b;Ia(g,d);b=Ib(g);Fa(g);si(a,f+16|0,g+8|0,c,e,b);oa=g+16|0;return H[g+8>>2]}function Jm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){a:{if((c|0)!=(d|0)){if(!(J[H[2322]+(H[c>>2]<<1)>>1]&b)|K[c>>2]>127){break a}}else{c=d}return c|0}c=c+4|0;continue}}function ym(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=F[b|0];if((a|0)>=0){a=H[H[2516]+(F[b|0]<<2)>>2]}F[d|0]=a;b=b+1|0;continue}break}return c|0}function wm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;while(1){if((b|0)!=(c|0)){d=b;a=F[b|0];if((a|0)>=0){a=H[H[2904]+(F[b|0]<<2)>>2]}F[d|0]=a;b=b+1|0;continue}break}return c|0}function Ld(a){var b=0,c=0;F[a+221|0]=0;F[a+224|0]=1;F[a+238|0]=I[a+236|0];b=a+172|0;bf(a+148|0,b);c=a;if(I[a+237|0]){F[a+237|0]=0;a=1}else{a=0}F[c+236|0]=a;Ga(b,7628)}function Xg(a,b,c){var d=0,e=0;d=oa-16|0;oa=d;e=Hf(a);H[a+32>>2]=b;H[a>>2]=20372;rd(d+8|0,e);b=Rd(d+8|0);Fa(d+8|0);H[a+40>>2]=c;H[a+36>>2]=b;F[a+44|0]=Jc(b);oa=d+16|0}function Wg(a,b,c){var d=0,e=0;d=oa-16|0;oa=d;e=hh(a);H[a+32>>2]=b;H[a>>2]=20476;rd(d+8|0,e);b=sf(d+8|0);Fa(d+8|0);H[a+40>>2]=c;H[a+36>>2]=b;F[a+44|0]=Jc(b);oa=d+16|0}function Eg(a,b,c,d){var e=0,f=0,g=0;f=H[a+4>>2];e=0;a:{if(!c){break a}g=f>>8;e=g;if(!(f&1)){break a}e=jf(H[c>>2],g)}a=H[a>>2];qa[H[H[a>>2]+28>>2]](a,b,c+e|0,f&2?d:2)}function ko(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=oa-16|0;oa=e;a=Ye(ja(H[a+60>>2],b|0,c|0,d&255,e+8|0)|0);oa=e+16|0;pa=a?-1:H[e+12>>2];return(a?-1:H[e+8>>2])|0}function Km(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){G[d>>1]=K[b>>2]<=127?J[H[2322]+(H[b>>2]<<1)>>1]:0;d=d+2|0;b=b+4|0;continue}break}return c|0}function hn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-16|0;oa=a;H[a+8>>2]=b;Ia(a,d);b=Fb(a);Fa(a);vi(f+20|0,a+8|0,c,e,b);oa=a+16|0;return H[a+8>>2]}function bn(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;a=oa-16|0;oa=a;H[a+8>>2]=b;Ia(a,d);b=Ib(a);Fa(a);ri(f+20|0,a+8|0,c,e,b);oa=a+16|0;return H[a+8>>2]}function xj(a,b){var c=0,d=0;c=oa-16|0;oa=c;a:{if(tb(a)){d=H[a>>2];F[c+15|0]=0;nb(b+d|0,c+15|0);yb(a,b);break a}F[c+14|0]=0;nb(a+b|0,c+14|0);ub(a,b)}oa=c+16|0}function Wn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=0;while(1){if((b|0)!=(c|0)){a=H[b>>2]+(a<<4)|0;d=a&-268435456;a=(d|d>>>24)^a;b=b+4|0;continue}break}return a|0}function en(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=a;a=qa[H[H[a+8>>2]+20>>2]](a+8|0)|0;return Bc(g,b,c,d,e,f,Ca(a),Ca(a)+(wa(a)<<2)|0)|0}function Zn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;a=0;while(1){if((b|0)!=(c|0)){a=F[b|0]+(a<<4)|0;d=a&-268435456;a=(d|d>>>24)^a;b=b+1|0;continue}break}return a|0}function Kg(a,b,c,d){var e=0;e=oa-16|0;oa=e;H[e+12>>2]=d;d=wa(b);if(d>>>0>>0){me();X()}b=Ca(b);H[e+4>>2]=d-c;Mg(a,b+c|0,H[zc(e+12|0,e+4|0)>>2]);oa=e+16|0}function Bf(a,b){H[a+4>>2]=b;F[a|0]=0;if(Sd(H[H[b>>2]-12>>2]+b|0)){if(H[(H[H[b>>2]-12>>2]+b|0)+72>>2]){sd(H[(H[H[b>>2]-12>>2]+b|0)+72>>2])}F[a|0]=1}return a}function Yf(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;Ia(f+8|0,b);Ec(Ib(f+8|0),13232,13264,c);b=Dd(f+8|0);H[d>>2]=ec(b);H[e>>2]=Hb(b);Gb(a,b);Fa(f+8|0);oa=f+16|0}function Ub(a,b,c,d){var e=0,f=0;e=N(b,c);f=e;a:{if(H[d+76>>2]<=-1){a=df(a,e,d);break a}a=df(a,e,d)}if((f|0)==(a|0)){return b?c:0}return(a>>>0)/(b>>>0)|0}function qj(a){var b=0,c=0,d=0;if(Rb(F[H[a>>2]])){while(1){b=H[a>>2];d=F[b|0];H[a>>2]=b+1;c=(N(c,10)+d|0)-48|0;if(Rb(F[b+1|0])){continue}break}}return c}function ln(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=a;a=qa[H[H[a+8>>2]+20>>2]](a+8|0)|0;return Cc(g,b,c,d,e,f,Ca(a),Ca(a)+wa(a)|0)|0}function bg(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;Ia(f+8|0,b);Wc(Fb(f+8|0),13232,13264,c);b=Gd(f+8|0);F[d|0]=ec(b);F[e|0]=Hb(b);Gb(a,b);Fa(f+8|0);oa=f+16|0}function Bm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;while(1){if((b|0)!=(c|0)){a=H[b>>2];F[e|0]=a>>>0<128?a:d;e=e+1|0;b=b+4|0;continue}break}return c|0}function pd(a,b){H[a+20>>2]=0;H[a+24>>2]=b;H[a+12>>2]=0;H[a+4>>2]=4098;H[a+8>>2]=6;H[a+16>>2]=!b;Vb(a+32|0,0,40);Rf(a+28|0);H[a+72>>2]=0;H[a+76>>2]=-1}function tm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;while(1){if((b|0)!=(c|0)){a=F[b|0];F[e|0]=(a|0)>-1?a:d;e=e+1|0;b=b+1|0;continue}break}return c|0}function wj(a){var b=0,c=0;b=oa-16|0;oa=b;a:{if(tb(a)){c=H[a>>2];F[b+15|0]=0;nb(c,b+15|0);yb(a,0);break a}F[b+14|0]=0;nb(a,b+14|0);ub(a,0)}oa=b+16|0}function wk(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(Mb(a,H[b+8>>2],f)){hf(b,c,d,e);return}a=H[a+8>>2];qa[H[H[a>>2]+20>>2]](a,b,c,d,e,f)}function kg(a){var b=0,c=0;b=oa-16|0;oa=b;c=-1;a:{if(lg(a)){break a}if((qa[H[a+32>>2]](a,b+15|0,1)|0)!=1){break a}c=I[b+15|0]}oa=b+16|0;return c}function de(a,b){var c=0,d=0;a:{c=H[a+248>>2];if(c){d=a+248|0}else{if(!H[a+252>>2]){break a}Fc(a);c=H[a+252>>2];d=a+252|0}Jd(a,c,b);H[d>>2]=0}}function eo(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=H[a+20>>2];d=H[a+16>>2]-e|0;d=c>>>0>>0?c:d;Wb(e,b,d);H[a+20>>2]=d+H[a+20>>2];return c|0}function rm(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;a=oa-16|0;oa=a;H[a+12>>2]=e;H[a+8>>2]=d-c;b=zc(a+12|0,a+8|0);oa=a+16|0;return H[b>>2]}function Qj(a,b,c,d){var e=0;e=oa-16|0;oa=e;d=sg(e,a,d);gb(a);a=c-b|0;if((a|0)>=1){Wb(H[d+4>>2],b,a);H[d+4>>2]=a+H[d+4>>2]}Be(d);oa=e+16|0}function Bh(){var a=0,b=0;a=oa-16|0;oa=a;ed(26176);H[a+12>>2]=1073741823;H[a+8>>2]=2147483647;b=zc(a+12|0,a+8|0);oa=a+16|0;return H[b>>2]}function Mm(a){a=a|0;var b=0,c=0,d=0;b=H[H[a>>2]>>2];c=H[b+8>>2];a=H[b+4>>2];b=H[b>>2]+(c>>1)|0;d=b;if(c&1){a=H[a+H[b>>2]>>2]}qa[a|0](d)}function ff(a,b,c,d,e,f){var g=0,h=0;g=H[a+4>>2];h=g>>8;if(g&1){h=jf(H[d>>2],h)}a=H[a>>2];qa[H[H[a>>2]+20>>2]](a,b,c,d+h|0,g&2?e:2,f)}function vb(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;H[f+12>>2]=c;H[f+8>>2]=e;c=jc(f,f+12|0);a=We(a,b,d,H[f+8>>2]);ic(c);oa=f+16|0;return a}function eb(a){var b=0,c=0;b=oa-16|0;oa=b;a=Gg(b,a);c=oa-16|0;oa=c;F[H[Hc(c+8|0,H[a+4>>2])>>2]]=1;F[H[a+8>>2]]=1;oa=c+16|0;oa=b+16|0}function bc(a){var b=0,c=0,d=0;c=oa-16|0;oa=c;d=a;while(1){if((b|0)!=3){H[(b<<2)+d>>2]=0;b=b+1|0;continue}break}oa=c+16|0;return a}function Wj(a){var b=0;b=oa-16|0;oa=b;gb(a);H[b+12>>2]=1073741823;H[b+8>>2]=2147483647;a=H[zc(b+12|0,b+8|0)>>2];oa=b+16|0;return a}function Nd(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Nf(c,b,32);Ua(a+48|0,d);va(d);H[a+100>>2]=b;if(!I[a+88|0]){H[a+92>>2]=b<<1}oa=c+16|0}function le(a,b,c,d,e){var f=0,g=0;f=H[a+4>>2];g=f>>8;if(f&1){g=jf(H[c>>2],g)}a=H[a>>2];qa[H[H[a>>2]+24>>2]](a,b,c+g|0,f&2?d:2,e)}function Ki(a,b,c){var d=0;d=oa-16|0;oa=d;H[d+12>>2]=b;H[d+8>>2]=c;b=jc(d,d+12|0);a=gj(a,1680,H[d+8>>2]);ic(b);oa=d+16|0;return a}function wi(a,b,c,d,e,f){a=qa[H[H[a+8>>2]+4>>2]](a+8|0)|0;a=Te(c,d,a,a+288|0,f,e,0)-a|0;if((a|0)<=287){H[b>>2]=((a|0)/12|0)%12}}function si(a,b,c,d,e,f){a=qa[H[H[a+8>>2]+4>>2]](a+8|0)|0;a=Re(c,d,a,a+288|0,f,e,0)-a|0;if((a|0)<=287){H[b>>2]=((a|0)/12|0)%12}}function Dm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){H[d>>2]=F[b|0];d=d+4|0;b=b+1|0;continue}break}return c|0}function vm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;while(1){if((b|0)!=(c|0)){F[d|0]=I[b|0];d=d+1|0;b=b+1|0;continue}break}return c|0}function ql(a){a=a|0;var b=0;if((qa[H[H[a>>2]+36>>2]](a)|0)==-1){return-1}b=a;a=H[a+12>>2];H[b+12>>2]=a+1;return Sb(F[a|0])|0}function Ck(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Mb(a,H[b+8>>2],0)){kf(b,c,d);return}a=H[a+8>>2];qa[H[H[a>>2]+28>>2]](a,b,c,d)}function yi(a,b,c,d,e,f){a=qa[H[H[a+8>>2]>>2]](a+8|0)|0;a=Te(c,d,a,a+168|0,f,e,0)-a|0;if((a|0)<=167){H[b>>2]=((a|0)/12|0)%7}}function ti(a,b,c,d,e,f){a=qa[H[H[a+8>>2]>>2]](a+8|0)|0;a=Re(c,d,a,a+168|0,f,e,0)-a|0;if((a|0)<=167){H[b>>2]=((a|0)/12|0)%7}}function qg(a){a=a|0;var b=0;H[a>>2]=7756;b=H[a+140>>2];if(b){Ba(Va(b))}va(a+172|0);va(a+160|0);va(a+148|0);wg(a);return a|0}function hh(a){H[a>>2]=18920;Rf(a+4|0);H[a+24>>2]=0;H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a+8>>2]=0;H[a+12>>2]=0;return a}function Hf(a){H[a>>2]=18856;Rf(a+4|0);H[a+24>>2]=0;H[a+28>>2]=0;H[a+16>>2]=0;H[a+20>>2]=0;H[a+8>>2]=0;H[a+12>>2]=0;return a}function $e(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+40>>2]](a)|0}H[a+12>>2]=b+1;return Sb(F[b|0])}function Na(a){var b=0;a=a?a:1;a:{while(1){b=cb(a);if(b){break a}b=H[7132];if(b){qa[b|0]();continue}break}$();X()}return b}function fo(a,b){a=a|0;b=b|0;var c=0;c=b;b=H[b>>2]+15&-16;H[c>>2]=b+16;M[a>>3]=ig(H[b>>2],H[b+4>>2],H[b+8>>2],H[b+12>>2])}function Zj(a,b){var c=0;c=H[a+4>>2];if((c|0)!=(b|0)){while(1){gb(a);c=c-4|0;if((c|0)!=(b|0)){continue}break}}H[a+4>>2]=b}function Wf(a,b,c){c=H[c>>2];while(1){a:{if((a|0)!=(b|0)){if((c|0)!=H[a>>2]){break a}}else{a=b}return a}a=a+4|0;continue}}function ml(a){a=a|0;var b=0;if((qa[H[H[a>>2]+36>>2]](a)|0)==-1){return-1}b=a;a=H[a+12>>2];H[b+12>>2]=a+4;return H[a>>2]}function Ei(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+40>>2]](a)|0}H[a+12>>2]=b+4;return H[b>>2]}function Xk(a,b){a=a|0;b=b|0;b=Rd(b);H[a+36>>2]=b;H[a+44>>2]=$c(b);F[a+53|0]=Jc(H[a+36>>2]);if(H[a+44>>2]>=9){db();X()}}function Tk(a,b){a=a|0;b=b|0;b=sf(b);H[a+36>>2]=b;H[a+44>>2]=$c(b);F[a+53|0]=Jc(H[a+36>>2]);if(H[a+44>>2]>=9){db();X()}}function $f(a,b,c){c=I[c|0];while(1){a:{if((a|0)!=(b|0)){if((c|0)!=I[a|0]){break a}}else{a=b}return a}a=a+1|0;continue}}function Hh(a){var b=0,c=0;b=oa-16|0;oa=b;H[b+12>>2]=a;a=jc(b+8|0,b+12|0);c=H[H[5347]>>2];ic(a);oa=b+16|0;return c?4:1}function Ah(a,b){var c=0;c=oa-16|0;oa=c;a:{if(!(I[a+128|0]|b>>>0>30)){F[a+128|0]=1;break a}a=Sj(b)}oa=c+16|0;return a}function Ih(a,b,c,d,e){var f=0;f=oa-16|0;oa=f;H[f+12>>2]=e;e=jc(f+8|0,f+12|0);a=Ve(a,b,c,d);ic(e);oa=f+16|0;return a}function zg(a,b){var c=0,d=0;d=oa-16|0;oa=d;c=sg(d,a,1);Yj(gb(a),H[c+4>>2],b);H[c+4>>2]=H[c+4>>2]+4;Be(c);oa=d+16|0}function nj(a,b,c,d,e,f,g,h,i){H[a>>2]=b;H[a+4>>2]=c;H[a+8>>2]=d;H[a+12>>2]=e&65535|(i>>>16&32768|e>>>16&32767)<<16}function fd(a,b){a:{if((a|0)==(b|0)){break a}while(1){b=b-1|0;if(b>>>0<=a>>>0){break a}pi(a,b);a=a+1|0;continue}}}function Me(a,b){a:{if((a|0)==(b|0)){break a}while(1){b=b-4|0;if(b>>>0<=a>>>0){break a}nc(a,b);a=a+4|0;continue}}}function uc(a){a:{a=H[a+4>>2]&74;if(a){if((a|0)==64){return 8}if((a|0)!=8){break a}return 16}return 0}return 10}function ek(a,b){a=a|0;b=b|0;var c=0;c=oa-16|0;oa=c;yj(c,H[b+4>>2]);qa[H[H[b>>2]+24>>2]](a,b,c);va(c);oa=c+16|0}function ai(a,b){var c=0;c=oa-16|0;oa=c;H[c+8>>2]=H[a>>2];H[c+8>>2]=H[c+8>>2]+(b<<2);oa=c+16|0;return H[c+8>>2]}function Mb(a,b,c){if(!c){return H[a+4>>2]==H[b+4>>2]}if((a|0)==(b|0)){return 1}return!_d(H[a+4>>2],H[b+4>>2])}function zl(a){a=a|0;a:{if(F[24768]&1){break a}if(!fb(24768)){break a}vd(24756,13788);eb(24768)}return 24756}function vl(a){a=a|0;a:{if(F[24800]&1){break a}if(!fb(24800)){break a}vd(24788,13872);eb(24800)}return 24788}function vi(a,b,c,d,e){b=sc(b,c,d,e,4);if(!(I[d|0]&4)){H[a>>2]=((b|0)<69?b+2e3|0:(b|0)<100?b+1900|0:b)-1900}}function ri(a,b,c,d,e){b=rc(b,c,d,e,4);if(!(I[d|0]&4)){H[a>>2]=((b|0)<69?b+2e3|0:(b|0)<100?b+1900|0:b)-1900}}function ae(a){a=a|0;var b=0;b=H[4956];H[a>>2]=b;H[H[b-12>>2]+a>>2]=H[4959];qe(a+8|0);bd(a+108|0);return a|0}function _f(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+36>>2]](a)|0}return Sb(F[b|0])}function _e(a){a=a|0;var b=0;b=H[4995];H[a>>2]=b;H[H[b-12>>2]+a>>2]=H[4998];qe(a+4|0);bd(a+104|0);return a|0}function Yd(a,b){var c=0;c=oa-16|0;oa=c;Ia(c+8|0,a);Ec(Ib(c+8|0),13232,13258,b);Fa(c+8|0);oa=c+16|0;return b}function Of(a,b,c){var d=0;d=oa-16|0;oa=d;H[d+12>>2]=c;c=jc(d+8|0,d+12|0);a=id(a,b);ic(c);oa=d+16|0;return a}function Hl(a){a=a|0;a:{if(F[24704]&1){break a}if(!fb(24704)){break a}vd(24692,13716);eb(24704)}return 24692}function Dl(a){a=a|0;a:{if(F[24736]&1){break a}if(!fb(24736)){break a}vd(24724,13752);eb(24736)}return 24724}function xl(a){a=a|0;a:{if(F[24784]&1){break a}if(!fb(24784)){break a}xa(24772,1671);eb(24784)}return 24772}function Xd(a,b,c){var d=0;d=oa-16|0;oa=d;Ia(d+8|0,b);b=Dd(d+8|0);H[c>>2]=Hb(b);Gb(a,b);Fa(d+8|0);oa=d+16|0}function Jl(a){a=a|0;a:{if(F[24688]&1){break a}if(!fb(24688)){break a}xa(24676,1167);eb(24688)}return 24676}function Fl(a){a=a|0;a:{if(F[24720]&1){break a}if(!fb(24720)){break a}xa(24708,2590);eb(24720)}return 24708}function Bl(a){a=a|0;a:{if(F[24752]&1){break a}if(!fb(24752)){break a}xa(24740,2546);eb(24752)}return 24740}function gi(a,b){var c=0;c=oa-16|0;oa=c;H[c+8>>2]=H[a>>2];H[c+8>>2]=H[c+8>>2]+b;oa=c+16|0;return H[c+8>>2]}function Zd(a,b,c){var d=0;d=oa-16|0;oa=d;Ia(d+8|0,b);b=Gd(d+8|0);F[c|0]=Hb(b);Gb(a,b);Fa(d+8|0);oa=d+16|0}function Jh(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;H[e>>2]=c;H[h>>2]=f;return 3}function Fi(a){var b=0;b=H[a+12>>2];if((b|0)==H[a+16>>2]){return qa[H[H[a>>2]+36>>2]](a)|0}return H[b>>2]}function vh(a,b){var c=0;c=H[a+4>>2];while(1){if((b|0)!=(c|0)){ed(a);c=c-4|0;continue}break}H[a+4>>2]=b}function oc(a,b,c){if(c){if(c){while(1){H[a>>2]=H[b>>2];a=a+4|0;b=b+4|0;c=c-1|0;if(c){continue}break}}}}function nc(a,b){var c=0;c=oa-16|0;oa=c;H[c+12>>2]=H[a>>2];H[a>>2]=H[b>>2];H[b>>2]=H[c+12>>2];oa=c+16|0}function Sa(a){var b=0;b=oa-16|0;oa=b;H[a>>2]=0;H[a+4>>2]=0;H[b+12>>2]=0;rf(a+8|0);oa=b+16|0;return a}function pg(a,b){var c=0;c=oa-16|0;oa=c;Ia(c+8|0,a);a=pb(Fb(c+8|0),b);Fa(c+8|0);oa=c+16|0;return a}function lf(a){a=a|0;var b=0;H[a>>2]=20624;b=H[a+4>>2]-12|0;if((Qh(b+8|0)|0)<=-1){Ba(b)}return a|0}function Ya(a,b,c){var d=0;d=oa-16|0;oa=d;H[d+12>>2]=b;Cb(a,d+12|0);Cb(a+4|0,c);oa=d+16|0;return a}function pi(a,b){var c=0;c=oa-16|0;oa=c;F[c+15|0]=I[a|0];F[a|0]=I[b|0];F[b|0]=I[c+15|0];oa=c+16|0}function vk(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(Mb(a,H[b+8>>2],f)){hf(b,c,d,e)}}function Fc(a){var b=0;a:{a=a+172|0;b=wa(a);if(b){if(Db(F[Aa(a,b-1|0)|0])){break a}}mc(a,1,32)}}function ee(a,b){var c=0;if((b|0)>=1){while(1){Lj(a);c=(b|0)>1;b=b-1|0;if(c){continue}break}}}function Sc(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,Ca(a)+(wa(a)<<2)|0)>>2];oa=b+16|0;return a}function Dj(){Ha(27584);za(27584,5340);za(27584,5100);za(27584,3413);za(27584,3241);Ha(27584)}function Aj(a){a=a|0;var b=0;H[a>>2]=7832;b=H[a+4>>2];if(b){qa[H[H[b>>2]+4>>2]](b)}return a|0}function vg(a,b,c){Ga(a+48|0,7627);F[a+89|0]=c;H[a+100>>2]=b;if(!I[a+88|0]){H[a+92>>2]=b<<1}}function aj(a){var b=0,c=0;c=a;while(1){b=c;c=b+4|0;if(H[b>>2]){continue}break}return b-a>>2}function Pk(a,b){a=a|0;b=b|0;qa[H[H[a>>2]+24>>2]](a)|0;b=Rd(b);H[a+36>>2]=b;F[a+44|0]=Jc(b)} +function Kh(a){a=a|0;var b=0;H[a>>2]=13500;b=H[a+8>>2];if(!(!b|!I[a+12|0])){Ba(b)}return a|0}function Va(a){var b=0,c=0;Ag(a);b=a;if(H[b>>2]){_j(b);gb(b);c=H[b>>2];Gc(b);Ba(c)}return a}function Mk(a,b){a=a|0;b=b|0;qa[H[H[a>>2]+24>>2]](a)|0;b=sf(b);H[a+36>>2]=b;F[a+44|0]=Jc(b)}function wh(a,b,c){c=oa-16|0;oa=c;a:{if((a|0)==(b|0)){F[a+128|0]=0;break a}Ba(b)}oa=c+16|0}function sh(a){var b=0;b=H[a>>2];if(b){if(!qb(_f(b),-1)){return!H[a>>2]}H[a>>2]=0}return 1}function rh(a){var b=0;b=H[a>>2];if(b){if(!qb(Fi(b),-1)){return!H[a>>2]}H[a>>2]=0}return 1}function oj(a,b){var c=0;c=oa-16|0;oa=c;H[c+12>>2]=b;a=We(a,100,2064,b);oa=c+16|0;return a}function cd(a){var b=0;if(a>>>0>=11){b=a+16&-16;a=b-1|0;a=(a|0)==11?b:a}else{a=10}return a}function Vd(a,b){var c=0;c=H[b+4>>2];H[a>>2]=H[b>>2];H[a+4>>2]=c;H[a+8>>2]=H[b+8>>2];ng(b)}function _i(a){var b=0;b=H[5347];if(a){H[5347]=(a|0)==-1?24324:a}return(b|0)==24324?-1:b}function Vc(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,Ca(a)+wa(a)|0)>>2];oa=b+16|0;return a}function Ma(a,b){var c=0;c=yc(b);if((c|0)==(wa(a)|0)){a=nf(a,0,-1,b,c)}else{a=1}return!a}function Gq(a,b){var c=0,d=0;c=b&31;d=(-1>>>c&a)<>>a} +function zm(a,b){a=a|0;b=b|0;if((b|0)>=0){b=H[H[2516]+((b&255)<<2)>>2]}return b<<24>>24}function xm(a,b){a=a|0;b=b|0;if((b|0)>=0){b=H[H[2904]+((b&255)<<2)>>2]}return b<<24>>24}function Mh(a,b){var c=0;c=oa-16|0;oa=c;F[c+15|0]=b;a=Kf(a,c+15|0,1);oa=c+16|0;return a}function Lm(a,b,c){a=a|0;b=b|0;c=c|0;return(c>>>0<=127?(J[H[2322]+(c<<1)>>1]&b)!=0:0)|0}function cj(a,b){var c=0;c=oa-16|0;oa=c;H[c+12>>2]=b;a=gj(a,2070,b);oa=c+16|0;return a}function ud(a){var b=0;if(a>>>0>=2){b=a+4&-4;a=b-1|0;a=(a|0)==2?b:a}else{a=1}return a}function ac(a,b){b=!H[a+24>>2]|(H[a+16>>2]|b);H[a+16>>2]=b;if(b&H[a+20>>2]){db();X()}}function Vh(a){a=a|0;H[a>>2]=13552;if(H[a+8>>2]!=(Oa()|0)){bj(H[a+8>>2])}return a|0}function Ul(a){a=a|0;a=24984;while(1){a=va(a-12|0);if((a|0)!=24816){continue}break}}function Sl(a){a=a|0;a=25160;while(1){a=va(a-12|0);if((a|0)!=24992){continue}break}}function Ql(a){a=a|0;a=25456;while(1){a=va(a-12|0);if((a|0)!=25168){continue}break}}function Ol(a){a=a|0;a=25760;while(1){a=va(a-12|0);if((a|0)!=25472){continue}break}}function Ml(a){a=a|0;a=25800;while(1){a=va(a-12|0);if((a|0)!=25776){continue}break}}function Kl(a){a=a|0;a=25832;while(1){a=va(a-12|0);if((a|0)!=25808){continue}break}}function vc(a,b){a=H[a>>2];b=Wa(b);if(!Nh(a,b)){db();X()}return H[lc(a+16|0,b)>>2]}function uf(a,b){var c=0;c=Xe(a+4|0);H[a>>2]=19084;H[c>>2]=19104;pd(H[4768]+a|0,b)}function tf(a,b){var c=0;c=Vg(a+4|0);H[a>>2]=19132;H[c>>2]=19152;pd(H[4780]+a|0,b)}function Nh(a,b){a=a+16|0;if(Pa(a)>>>0>b>>>0){a=H[lc(a,b)>>2]!=0}else{a=0}return a}function Da(a,b){var c=0;a:{c=wa(a);if(c>>>0>>0){mc(a,b-c|0,0);break a}xj(a,b)}}function sg(a,b,c){H[a>>2]=b;b=H[b+4>>2];H[a+4>>2]=b;H[a+8>>2]=b+(c<<2);return a}function Ob(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,Ca(a))>>2];oa=b+16|0;return a}function _n(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=oa-16|0;oa=b;Xi(a,c,d);oa=b+16|0}function Xn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=oa-16|0;oa=b;Wi(a,c,d);oa=b+16|0}function Hm(a,b){a=a|0;b=b|0;if(b>>>0<=127){b=H[H[2516]+(b<<2)>>2]}return b|0}function Fm(a,b){a=a|0;b=b|0;if(b>>>0<=127){b=H[H[2904]+(b<<2)>>2]}return b|0}function Dk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Mb(a,H[b+8>>2],0)){kf(b,c,d)}}function Ae(a,b,c,d){if(H[a+76>>2]<=-1){return ph(a,b,c,d)}return ph(a,b,c,d)}function zc(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Qg(b,a);oa=c+16|0;return d?b:a}function xi(a){var b=0;b=oa-16|0;oa=b;a=H[Hc(b+8|0,a)>>2];oa=b+16|0;return a}function vf(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Yg(a,b);oa=c+16|0;return d?b:a}function td(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Yg(b,a);oa=c+16|0;return d?b:a}function ad(a,b){var c=0,d=0;c=oa-16|0;oa=c;d=Qg(a,b);oa=c+16|0;return d?b:a}function Xh(a){var b=0;b=oa-16|0;oa=b;H[b+8>>2]=a;oa=b+16|0;return H[b+8>>2]}function Vj(a,b,c,d){a=c-b|0;c=H[d>>2]-a|0;H[d>>2]=c;if((a|0)>=1){Wb(c,b,a)}}function wf(a,b,c,d,e,f,g,h){return qa[H[H[a>>2]+16>>2]](a,b,c,d,e,f,g,h)|0}function Qd(a,b,c,d,e,f,g,h){return qa[H[H[a>>2]+12>>2]](a,b,c,d,e,f,g,h)|0}function Kc(a,b,c){H[a+8>>2]=b;H[a+12>>2]=c;H[a>>2]=0;H[a+4>>2]=0;return a}function Gg(a,b){H[a+12>>2]=0;H[a+4>>2]=b;H[a>>2]=b;H[a+8>>2]=b+1;return a}function ki(a,b){var c=0;c=$e(H[b>>2])<<24;H[a+4>>2]=H[b>>2];F[a|0]=c>>24}function xa(a,b){var c=0;c=oa-16|0;oa=c;Mg(a,b,yc(b));oa=c+16|0;return a}function kh(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Kc(a,-1,-1)}function dc(a,b,c){return(c|0)>=0?(J[H[a+8>>2]+((c&255)<<1)>>1]&b)!=0:0}function Qf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;H[e>>2]=c;return 3}function lb(a,b){var c=0;c=H[a>>2];H[a>>2]=b;if(c){qa[H[Ad(a)>>2]](c)}}function gf(a,b,c){if(!(H[a+28>>2]==1|H[a+4>>2]!=(b|0))){H[a+28>>2]=c}}function Pc(a,b){a=a|0;b=b|0;F[a|0]=2;F[a+1|0]=3;F[a+2|0]=0;F[a+3|0]=4}function Lf(a){a=a|0;if(H[a+8>>2]!=(Oa()|0)){bj(H[a+8>>2])}return a|0}function Rm(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Td(a,f)}function xc(a,b){if(H[a+4>>2]!=H[gb(a)>>2]){zg(a,b);return}yg(a,b)}function qq(a){a=a|0;if(!Mj(a)){return fk(a)|0}return!I[a+223|0]|0}function di(a,b){var c=0;c=Ei(H[b>>2]);H[a+4>>2]=H[b>>2];H[a>>2]=c}function Cm(a,b,c){a=a|0;b=b|0;c=c|0;return(b>>>0<128?b:c)<<24>>24}function ya(a,b){if(K[a+4>>2]>2]){zg(a,b);return}yg(a,b)}function Oh(a,b){H[a>>2]=H[(H[H[b>>2]-12>>2]+b|0)+24>>2];return a}function gk(a,b){a=a|0;b=b|0;H[a+4>>2]=b;qa[H[H[a>>2]+12>>2]](a)}function Sj(a){if(a>>>0>1073741823){Fe(2074);X()}return Na(a<<2)}function Om(a){a=a|0;var b=0;b=H[6140]+1|0;H[6140]=b;H[a+4>>2]=b}function va(a){var b=0;if(tb(a)){b=H[a>>2];Rc(a);Ba(b)}return a}function km(a){a=a|0;a=H[a+8>>2];if(!a){return 1}return Hh(a)|0}function $g(a,b,c,d,e){return qa[H[H[a>>2]+20>>2]](a,b,c,d,e)|0}function Ea(a){var b=0;b=oa-16|0;oa=b;ng(a);oa=b+16|0;return a}function Yk(a){a=a|0;sd(27584);Af(27668);sd(27920);Af(28004)}function Mj(a){return H[a+204>>2]|I[a+209|0]?1:I[a+212|0]!=0}function Jd(a,b,c){if(!(!c|!I[a+221|0])){Ld(a)}Bd(a+172|0,b)}function Ee(a){if((Qh(a+4|0)|0)==-1){qa[H[H[a>>2]+8>>2]](a)}}function um(a,b,c){a=a|0;b=b|0;c=c|0;return((b|0)>-1?b:c)|0}function cg(a,b){Mh(za(Mh(za(H[5266],a),32),b),10);_(1);X()}function Qh(a){var b=0;b=a;a=H[a>>2]-1|0;H[b>>2]=a;return a}function zj(a){a=H[a+4>>2];return Ui(H[H[a>>2]-12>>2]+a|0)}function wa(a){if(tb(a)){return H[a+4>>2]}return I[a+11|0]}function hc(a,b,c,d){H[a+16>>2]=d;H[a+12>>2]=c;H[a+8>>2]=b}function Zk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;pa=0;return 0}function vj(a){if(uj(a)){a=1}else{a=(Rb(a)|0)!=0}return a}function mg(a){if(!xf(a+8|0)){ac(H[H[a>>2]-12>>2]+a|0,4)}}function Ac(a,b,c){H[a+28>>2]=c;H[a+20>>2]=b;H[a+24>>2]=b}function rk(a,b){a=a|0;b=b|0;Ha(za(27584,7428));return 0}function jh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Kc(a,-1,-1)}function fi(a,b){lb(a,Ud(b));b=H[Ad(b)>>2];H[Ad(a)>>2]=b}function Fh(a){a=a|0;H[a>>2]=13600;va(a+12|0);return a|0}function Eh(a){a=a|0;H[a>>2]=13640;va(a+16|0);return a|0}function xe(a){a=a|0;H[a>>2]=18856;Fa(a+4|0);return a|0}function wd(a,b,c){return qa[H[H[a>>2]+48>>2]](a,b,c)|0}function cc(a,b,c){return qa[H[H[a>>2]+12>>2]](a,b,c)|0}function Yi(a,b,c,d){a=Zi(a,b,c,0,-2147483648);return a}function Oj(a,b,c){b=b-a|0;if(b){ie(c,a,b)}return b+c|0}function Kd(a,b){return!Ra(a+160|0,H[a+200>>2],wa(b),b)}function Ja(a){if(tb(a)){a=Rc(a)-1|0}else{a=10}return a}function Ff(a){a=a|0;H[a>>2]=18920;Fa(a+4|0);return a|0}function gh(a){a=a|0;return ve(H[H[a>>2]-12>>2]+a|0)|0}function eh(a){a=a|0;return se(H[H[a>>2]-12>>2]+a|0)|0}function bl(a){a=a|0;return ae(H[H[a>>2]-12>>2]+a|0)|0}function Xa(a){H[a+4>>2]=0;H[a>>2]=13176;H[a>>2]=13928}function Sf(a,b){var c=0;c=a;a=H[b>>2];H[c>>2]=a;Tf(a)}function Mf(a){if(tb(a)){a=Rc(a)-1|0}else{a=1}return a}function $k(a){a=a|0;return _e(H[H[a>>2]-12>>2]+a|0)|0}function zd(a,b){return qa[H[H[a>>2]+36>>2]](a,b,0)|0}function yd(a,b){return qa[H[H[a>>2]+52>>2]](a,b,0)|0}function ej(a){return(a|0)!=0&(a|0)!=9168&(a|0)!=9192}function Wc(a,b,c,d){qa[H[H[a>>2]+32>>2]](a,b,c,d)|0}function Ec(a,b,c,d){qa[H[H[a>>2]+48>>2]](a,b,c,d)|0}function Cj(){Dj();za(27584,3025);Ha(za(27584,2981))}function pb(a,b){return qa[H[H[a>>2]+28>>2]](a,b)|0}function dj(a,b){return(Rb(a)|0)!=0|(a|32)-97>>>0<6}function Ud(a){var b=0;b=H[a>>2];H[a>>2]=0;return b}function Se(a,b){return qa[H[H[a>>2]+12>>2]](a,b)|0}function Kb(a,b){return qa[H[H[a>>2]+44>>2]](a,b)|0}function qh(a,b,c){return a>>>0>>0&a>>>0>=b>>>0}function qd(a){return(H[gb(a)>>2]-H[a>>2]|0)/12|0}function ld(a,b){return nd(a+160|0,H[a+200>>2],b)}function Ye(a){if(!a){return 0}H[6070]=a;return-1}function Ra(a,b,c,d){return nf(a,b,c,Ca(d),wa(d))}function Lc(a,b){if(tb(a)){yb(a,b);return}ub(a,b)}function ng(a){H[a>>2]=0;H[a+4>>2]=0;H[a+8>>2]=0}function Ca(a){if(tb(a)){return H[a>>2]}return a}function ye(a){return(H[a+4>>2]-H[a>>2]|0)/12|0}function sk(a){a=a|0;a=oa-a&-16;oa=a;return a|0}function sj(a,b){if(!a){return 0}return id(a,b)}function lh(a,b,c){a=a|0;b=b|0;c=c|0;return a|0}function eg(a,b,c,d){a=Zi(a,b,c,-1,-1);return a}function ec(a){return qa[H[H[a>>2]+12>>2]](a)|0}function Mc(a){return qa[H[H[a>>2]+36>>2]](a)|0}function Jc(a){return qa[H[H[a>>2]+28>>2]](a)|0}function Hb(a){return qa[H[H[a>>2]+16>>2]](a)|0}function $c(a){return qa[H[H[a>>2]+24>>2]](a)|0}function sb(a,b,c){if(!(I[a|0]&32)){df(b,c,a)}}function of(a){return nf(a,0,-1,7628,yc(7628))}function jc(a,b){H[a>>2]=_i(H[b>>2]);return a}function fh(a){a=a|0;Df(H[H[a>>2]-12>>2]+a|0)}function dh(a){a=a|0;zf(H[H[a>>2]-12>>2]+a|0)}function al(a){a=a|0;_g(H[H[a>>2]-12>>2]+a|0)}function _k(a){a=a|0;Zg(H[H[a>>2]-12>>2]+a|0)}function Wh(a,b,c){a=a|0;b=b|0;c=c|0;return-1}function jo(a){a=a|0;return aa(H[a+60>>2])|0}function dd(a){return H[Ce(a)>>2]-H[a>>2]>>2}function Tj(a){return H[Ic(a)>>2]-H[a>>2]>>2}function Gc(a){return H[gb(a)>>2]-H[a>>2]>>2}function fk(a){a=a|0;return zj(H[a+4>>2])|0}function Xe(a){Fg(a);H[a>>2]=19240;return a}function Vg(a){Fg(a);H[a>>2]=19312;return a}function Nm(a){a=a|0;qa[H[H[a>>2]+4>>2]](a)}function Ge(a,b,c){return Oj(Xh(a),Xh(b),c)}function xg(a,b){if(b){he(a,0)}F[a+84|0]=b}function gc(a,b){qa[H[H[b>>2]+24>>2]](a,b)}function fc(a,b){qa[H[H[b>>2]+28>>2]](a,b)}function Rc(a){return H[a+8>>2]&2147483647}function Pa(a){return H[a+4>>2]-H[a>>2]>>2}function Oc(a,b){qa[H[H[b>>2]+44>>2]](a,b)}function Nc(a,b){qa[H[H[b>>2]+32>>2]](a,b)}function He(a,b){qa[H[H[b>>2]+40>>2]](a,b)}function Gb(a,b){qa[H[H[b>>2]+20>>2]](a,b)}function $j(a,b){return H[a>>2]-H[b>>2]>>2}function ve(a){a=a|0;bd(a+8|0);return a|0}function se(a){a=a|0;bd(a+4|0);return a|0}function ge(a,b){H[a>>2]=H[b>>2];return a}function bb(a){return _f(H[a>>2])<<24>>24}function _l(a,b){a=a|0;b=b|0;Td(a,b+16|0)}function Tb(a,b){return Kf(a,Ca(b),wa(b))}function Bd(a,b){return Lg(a,Ca(b),wa(b))}function $l(a,b){a=a|0;b=b|0;Td(a,b+12|0)}function mb(a){return H[a>>2]==H[a+4>>2]}function lc(a,b){return H[a>>2]+(b<<2)|0}function ch(a,b){H[a+24>>2]=H[a+24>>2]+b}function Zb(a,b){H[a+8>>2]=b|-2147483648}function Yl(a,b){a=a|0;b=b|0;vd(a,13672)}function Yc(a){return(a|0)==32|a-9>>>0<5}function Wl(a,b){a=a|0;b=b|0;vd(a,13692)}function Gf(a,b){H[a+12>>2]=H[a+12>>2]+b}function Bg(a,b){return H[a>>2]==H[b>>2]}function Be(a){H[H[a>>2]+4>>2]=H[a+4>>2]}function ni(a,b){a=a|0;b=b|0;Nf(a,1,45)}function mi(a,b){a=a|0;b=b|0;Bi(a,1,45)}function Zl(a,b){a=a|0;b=b|0;xa(a,2195)}function Yg(a,b){return H[a>>2]>2]}function Xl(a,b){a=a|0;b=b|0;xa(a,2222)}function Ug(a){H[a+4>>2]=H[a+4>>2]|8192}function Qg(a,b){return K[a>>2]>2]}function Ng(a,b,c){if(b){Vb(a,Sb(c),b)}}function Lh(a,b){a=a|0;b=b|0;return b|0}function Db(a){return(a|0)==32|(a|0)==9}function sm(a){a=a|0;return H[a+12>>2]}function Qe(a,b){return Ca(a)+(b<<2)|0}function Ke(a){a=a|0;return 2147483647}function za(a,b){return Kf(a,b,yc(b))}function xn(a){a=a|0;return H[a+8>>2]}function we(a,b){a=a|0;b=b|0;return-1}function uj(a){return(a|32)-97>>>0<26}function tb(a){return I[a+11|0]>>>7|0}function je(a){return(I[a+16|0]&5)!=0}function ic(a){a=H[a>>2];if(a){_i(a)}}function bd(a){a=a|0;jg(a);return a|0}function Wk(a){a=a|0;return Sg(a,0)|0}function Vk(a){a=a|0;return Sg(a,1)|0}function Sk(a){a=a|0;return Pg(a,0)|0}function Rk(a){a=a|0;return Pg(a,1)|0}function Jk(a){a=a|0;return H[a+4>>2]}function Ji(a,b){return sh(a)^sh(b)^1}function Gi(a,b){return rh(a)^rh(b)^1}function bm(a){a=a|0;return F[a+8|0]}function bk(a,b){Pa(a);Zj(a,b);Nj(a)}function am(a){a=a|0;return F[a+9|0]}function Tf(a){H[a+4>>2]=H[a+4>>2]+1}function qf(a,b,c){if(c){ie(a,b,c)}}function qb(a,b){return(a|0)==(b|0)}function ib(a){$e(H[a>>2]);return a}function hb(a){Ei(H[a>>2]);return a}function Yb(a,b,c){if(c){Wb(a,b,c)}}function Xc(a){return xi(H[a+4>>2])}function Vi(a,b){return(b-a|0)/12|0}function Rj(a,b,c){return Oj(a,b,c)}function Qa(a){return H[a+4>>2]-4|0}function Hc(a,b){H[a>>2]=b;return a}function zh(a){dd(26176);dd(26176)}function yf(a,b){rf(a);H[a+4>>2]=b}function re(a){return qb(a,-1)?0:a}function ob(a){bk(a,H[a+4>>2]-4|0)}function Yj(a,b,c){H[b>>2]=H[c>>2]}function Qc(a,b){a=a|0;b=b|0;Ea(a)}function Je(a,b){a=a|0;b=b|0;bc(a)}function zb(a,b){return Bg(a,b)^1}function sf(a){return vc(a,24588)}function jf(a,b){return H[a+b>>2]}function ii(a){return vc(a,24456)}function hi(a){return vc(a,24448)}function ci(a){return vc(a,24472)}function bi(a){return vc(a,24464)}function ab(a){return Fi(H[a>>2])}function Uf(a){H[a>>2]=0;return a}function Sh(){dd(26176);Pa(26176)}function Rd(a){return vc(a,24580)}function Rb(a){return a-48>>>0<10}function Ib(a){return vc(a,24564)}function Gd(a){return vc(a,24612)}function Fb(a){return vc(a,24572)}function Ed(a){return xi(H[a>>2])}function Dd(a){return vc(a,24620)}function Bb(a,b){return Ji(a,b)^1}function Ab(a,b){return Gi(a,b)^1}function Aa(a,b){return Ca(a)+b|0}function ui(a){qd(a);ye(a);qd(a)}function od(a){H[a>>2]=H[a>>2]+4}function Wd(a){H[a>>2]=H[a>>2]+1}function Ue(a,b,c){Vd(a,Bd(b,c))}function Tg(a){a=a|0;xe(a);Ba(a)}function Sd(a){return!H[a+16>>2]}function Rg(a){a=a|0;Ff(a);Ba(a)}function Ph(a){dd(a);Pa(a);dd(a)}function Hk(a){a=a|0;return 1693}function Fk(a){a=a|0;lf(a);Ba(a)}function Cb(a,b){H[a>>2]=H[b>>2]}function Ag(a){Gc(a);Pa(a);Gc(a)}function th(a,b){return oi(a,b)}function rg(a,b){return Pj(a,b)}function kb(a,b){return Ji(a,b)}function jb(a,b){return Gi(a,b)}function bj(a){if(ej(a)){Ba(a)}}function Zc(a){return a<<24>>24}function Tc(a){a=a|0;return a|0}function Le(a){a=a|0;return 127}function Eb(a,b,c){Kg(a,b,c,-1)}function zq(a){a=a|0;Va(21852)}function zp(a){a=a|0;va(22440)}function zo(a){a=a|0;va(23088)}function zf(a){a=a|0;Ba(se(a))}function yq(a){a=a|0;Va(21864)}function yp(a){a=a|0;va(22452)}function yo(a){a=a|0;va(23100)}function yl(a){a=a|0;va(24756)}function xq(a){a=a|0;Va(21876)}function xp(a){a=a|0;va(22464)}function xo(a){a=a|0;va(23112)}function wq(a){a=a|0;Va(21888)}function wp(a){a=a|0;va(22476)}function wo(a){a=a|0;va(23124)}function wl(a){a=a|0;va(24772)}function vq(a){a=a|0;Va(21900)}function vp(a){a=a|0;va(22488)}function vo(a){a=a|0;va(23136)}function uq(a){a=a|0;Va(21912)}function up(a){a=a|0;va(22500)}function uo(a){a=a|0;va(23148)}function ul(a){a=a|0;va(24788)}function tq(a){a=a|0;Ba(qg(a))}function tp(a){a=a|0;va(22512)}function to(a){a=a|0;va(23160)}function sp(a){a=a|0;va(22524)}function so(a){a=a|0;va(23172)}function sl(a){a=a|0;Ba(xe(a))}function rp(a){a=a|0;va(22536)}function ro(a){a=a|0;va(23184)}function qp(a){a=a|0;va(22548)}function qo(a){a=a|0;va(23196)}function qm(a){a=a|0;Ba(Vh(a))}function qk(a){a=a|0;Va(21788)}function pq(a){a=a|0;va(21924)}function pp(a){a=a|0;va(22560)}function po(a){a=a|0;va(23208)}function pk(a){a=a|0;Va(21800)}function oq(a){a=a|0;va(21936)}function op(a){a=a|0;va(22572)}function oo(a){a=a|0;va(23220)}function ol(a){a=a|0;Ba(Ff(a))}function ok(a){a=a|0;Va(21812)}function nq(a){a=a|0;va(21948)}function np(a){a=a|0;va(22584)}function no(a){a=a|0;Ba(Aj(a))}function nk(a){a=a|0;Va(21824)}function nb(a,b){F[a|0]=I[b|0]}function mq(a){a=a|0;va(21960)}function mp(a){a=a|0;va(22596)}function mo(a){a=a|0;va(21772)}function mk(a){a=a|0;Va(21836)}function mh(a){a=a|0;Ba(bd(a))}function lq(a){a=a|0;va(21972)}function lp(a){a=a|0;va(22608)}function kq(a){a=a|0;va(21984)}function kp(a){a=a|0;va(22620)}function kl(a){a=a|0;Ba(qe(a))}function kk(a,b){H[a+108>>2]=b}function jq(a){a=a|0;va(21996)}function jp(a){a=a|0;va(22632)}function iq(a){a=a|0;va(22008)}function ip(a){a=a|0;va(22644)}function hq(a){a=a|0;va(22020)}function hp(a){a=a|0;va(22656)}function ho(a){a=a|0;Ba(jg(a))}function gq(a){a=a|0;va(22032)}function gp(a){a=a|0;va(22668)}function fq(a){a=a|0;va(22044)}function fp(a){a=a|0;va(22680)}function eq(a){a=a|0;va(22056)}function ep(a){a=a|0;va(22692)}function dq(a){a=a|0;va(22068)}function dp(a){a=a|0;va(22704)}function dm(a){a=a|0;Ba(Fh(a))}function cq(a){a=a|0;va(22080)}function cp(a){a=a|0;va(22716)}function cm(a){a=a|0;Ba(Eh(a))}function ce(a,b){H[a+204>>2]=b}function bq(a){a=a|0;va(22092)}function bp(a){a=a|0;va(22728)}function aq(a){a=a|0;va(22104)}function ap(a){a=a|0;va(22740)}function _p(a){a=a|0;va(22128)}function _o(a){a=a|0;va(22764)}function _g(a){a=a|0;Ba(ae(a))}function Zp(a){a=a|0;va(21760)}function Zo(a){a=a|0;va(22776)}function Zg(a){a=a|0;Ba(_e(a))}function Yp(a){a=a|0;va(22140)}function Yo(a){a=a|0;va(22788)}function Xp(a){a=a|0;va(22152)}function Xo(a){a=a|0;va(22800)}function Wp(a){a=a|0;va(22164)}function Wo(a){a=a|0;va(22812)}function Vp(a){a=a|0;va(22176)}function Vo(a){a=a|0;va(22824)}function Up(a){a=a|0;va(22188)}function Uo(a){a=a|0;va(22836)}function Tp(a){a=a|0;va(22200)}function To(a){a=a|0;va(22848)}function Sp(a){a=a|0;va(22212)}function So(a){a=a|0;va(22860)}function Rp(a){a=a|0;va(22224)}function Ro(a){a=a|0;va(22872)}function Qp(a){a=a|0;va(22236)}function Qo(a){a=a|0;va(22884)}function Pp(a){a=a|0;va(22248)}function Po(a){a=a|0;va(22896)}function Pm(a){a=a|0;Ba(Rh(a))}function Pj(a,b){return b-a>>2}function Op(a){a=a|0;va(22260)}function Oo(a){a=a|0;va(22908)}function Np(a){a=a|0;va(22272)}function No(a){a=a|0;va(22920)}function Mp(a){a=a|0;va(22284)}function Mo(a){a=a|0;va(22932)}function Lp(a){a=a|0;va(22296)}function Lo(a){a=a|0;va(22944)}function Kp(a){a=a|0;va(22308)}function Ko(a){a=a|0;va(22956)}function Jp(a){a=a|0;va(22320)}function Jo(a){a=a|0;va(22968)}function Ip(a){a=a|0;va(22332)}function Io(a){a=a|0;va(22980)}function Il(a){a=a|0;va(24676)}function Hp(a){a=a|0;va(22344)}function Ho(a){a=a|0;va(22992)}function Gp(a){a=a|0;va(22356)}function Go(a){a=a|0;va(23004)}function Gl(a){a=a|0;va(24692)}function Gk(a){a=a|0;Ba(lf(a))}function Fp(a){a=a|0;va(22368)}function Fo(a){a=a|0;va(23016)}function Ep(a){a=a|0;va(22380)}function Eo(a){a=a|0;va(23028)}function El(a){a=a|0;va(24708)}function Dq(a){a=a|0;Ba(wg(a))}function Dp(a){a=a|0;va(22392)}function Do(a){a=a|0;va(23040)}function Df(a){a=a|0;Ba(ve(a))}function Cp(a){a=a|0;va(22404)}function Co(a){a=a|0;va(23052)}function Cl(a){a=a|0;va(24724)}function Ch(a){a=a|0;Ba(Lf(a))}function Bp(a){a=a|0;va(22416)}function Bo(a){a=a|0;va(23064)}function Ap(a){a=a|0;va(22428)}function Ao(a){a=a|0;va(23076)}function Am(a){a=a|0;Ba(Kh(a))}function Al(a){a=a|0;va(24740)}function $p(a){a=a|0;va(22116)}function $o(a){a=a|0;va(22752)}function zi(a){a=a|0;return 2}function oi(a,b){return b-a|0}function oe(a,b){H[a+72>>2]=b}function jk(a,b){F[a+128|0]=b}function ih(a){a=a|0;return-1}function Ui(a){return je(a)^1}function Pf(a){a=a|0;return 1}function Pb(a){a=a|0;return 0}function Ia(a,b){Sf(a,b+28|0)}function Gh(a){a=a|0;return 4}function De(a){return!H[a>>2]}function yb(a,b){H[a+4>>2]=b}function ub(a,b){F[a+11|0]=b}function rd(a,b){Sf(a,b+4|0)}function ik(a,b){F[a+86|0]=b}function he(a,b){F[a+83|0]=b}function ed(a){return a+32|0}function _j(a){Zj(a,H[a>>2])}function Uj(a,b){Gc(a);Gc(a)}function Th(a){vh(a,H[a>>2])}function Ie(a,b){a=a|0;b=b|0}function Ic(a){return a+12|0}function Ce(a){return a+16|0}function uh(a){H[a>>2]=Oa()}function gb(a){return a+8|0}function Sb(a){return a&255}function Ij(a){F[a+209|0]=1}function Hj(a){F[a+211|0]=1}function Gj(a){F[a+210|0]=1}function Fj(a){F[a+234|0]=1}function Fg(a){H[a>>2]=7888}function Dh(a){H[a+12>>2]=0}function Ad(a){return a+4|0}function $b(a){return!wa(a)}function yh(a,b){H[b>>2]=0}function xh(a,b,c){Td(b,c)}function io(){return 24280}function _b(a,b){H[a>>2]=b}function Xb(){Fe(1998);X()}function Nj(a){Gc(a);Pa(a)}function Fa(a){Ee(H[a>>2])}function $d(){Fe(1527);X()}function $a(a){a=a|0;Ba(a)}function uk(){return oa|0}function tk(a){a=a|0;oa=a}function Ha(a){qa[3](a)|0}function rf(a){H[a>>2]=0}function ck(a,b){Bd(a,b)}function ao(a){a=a|0;X()}function me(){db();X()}function _a(a){lb(a,0)}function Hg(a,b){va(b)}function db(){$();X()}function Ef(a){a=a|0}function Ik(){X()} +// EMSCRIPTEN_END_FUNCS +e=I;p(ta);var qa=c([null,Zp,mo,Aq,lf,qk,pk,ok,nk,mk,wg,Dq,gk,Cq,fk,ek,Bq,zq,yq,xq,wq,vq,uq,qg,tq,sq,qq,rq,pq,oq,nq,mq,lq,kq,jq,iq,hq,gq,fq,eq,dq,cq,bq,aq,$p,_p,Yp,Xp,Wp,Vp,Up,Tp,Sp,Rp,Qp,Pp,Op,Np,Mp,Lp,Kp,Jp,Ip,Hp,Gp,Fp,Ep,Dp,Cp,Bp,Ap,zp,yp,xp,wp,vp,up,tp,sp,rp,qp,pp,op,np,mp,lp,kp,jp,ip,hp,gp,fp,ep,dp,cp,bp,ap,$o,_o,Zo,Yo,Xo,Wo,Vo,Uo,To,So,Ro,Qo,Po,Oo,No,Mo,Lo,Ko,Jo,Io,Ho,Go,Fo,Eo,Do,Co,Bo,Ao,zo,yo,xo,wo,vo,uo,to,so,ro,qo,po,oo,Aj,no,jo,lo,ko,jg,ho,go,fo,eo,bo,Tc,ao,Ik,Ba,Ef,Om,Mm,Ul,Sl,Ql,Ol,Ml,Kl,Il,Gl,El,Cl,Al,yl,wl,ul,Rh,Pm,Nm,Kh,Am,zm,ym,xm,wm,Lh,vm,um,tm,Vh,qm,pm,om,nm,mm,Pb,lm,km,Fh,dm,bm,am,$l,Zl,Xl,Eh,cm,xn,sm,_l,Yl,Wl,Tc,$a,$a,Lm,Km,Jm,Im,Hm,Gm,Fm,Em,Lh,Dm,Cm,Bm,$a,Jh,Jh,Qf,Pf,Pf,rm,Pf,$a,jm,im,Qf,Pb,Pb,hm,Gh,$a,gm,fm,Qf,Pb,Pb,em,Gh,Tc,$a,$n,_n,Zn,Tc,$a,Yn,Xn,Wn,$a,Vn,Un,Tn,Sn,Qi,Qi,Rn,Qn,Pn,On,Nn,$a,Mn,Ln,Kn,Jn,Hi,Hi,In,Hn,Gn,Fn,En,$a,Dn,Cn,Bn,An,zn,yn,wn,vn,$a,un,tn,sn,rn,qn,pn,on,nn,Tc,$a,zi,mn,ln,kn,jn,hn,gn,Vl,Rl,Nl,Bl,xl,Jl,Fl,Tc,$a,zi,fn,en,dn,cn,bn,an,Tl,Pl,Ll,zl,vl,Hl,Dl,Lf,Ch,$m,Lf,Ch,_m,$a,Le,Le,Qc,Qc,Qc,ni,Pb,Pc,Pc,$a,Le,Le,Qc,Qc,Qc,ni,Pb,Pc,Pc,$a,Ke,Ke,Qc,Je,Je,mi,Pb,Pc,Pc,$a,Ke,Ke,Qc,Je,Je,mi,Pb,Pc,Pc,$a,Zm,Ym,$a,Xm,Wm,$a,Vm,Um,$a,Tm,Sm,$a,Wh,Rm,Ie,$a,Wh,Qm,Ie,tl,If,xe,sl,Ie,lh,kh,jh,Pb,Pb,rl,ih,ql,we,pl,we,Ff,ol,Ie,lh,kh,jh,Pb,Pb,nl,ih,ml,we,ll,we,ve,Df,gh,fh,ve,Df,gh,fh,se,zf,eh,dh,se,zf,eh,dh,qe,kl,cl,gl,fl,el,dl,jl,il,hl,bd,mh,bd,mh,ae,_g,bl,al,_e,Zg,$k,_k,Pb,Zk,Yk,Tg,Xk,Wk,Vk,Uk,Rg,Tk,Sk,Rk,Qk,Tg,Pk,Og,Ok,Nk,Rg,Mk,Og,Lk,Kk,Tc,$a,Hk,Gk,Jk,Fk,Tc,$a,Ef,Ef,Ek,vk,yk,Dk,$a,wk,zk,Ck,$a,xk,Ak,Bk]);function ra(){return E.byteLength/65536|0}return{"r":lk,"s":co,"t":rk,"u":qa,"v":io,"w":cb,"x":uk,"y":tk,"z":sk}}return sa(ua)} +// EMSCRIPTEN_END_ASM + + + + +)(asmLibraryArg)},instantiate:function(binary,info){return{then:function(ok){var module=new WebAssembly.Module(binary);ok({"instance":new WebAssembly.Instance(module)})}}},RuntimeError:Error};wasmBinary=[];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":INITIAL_MEMORY/65536})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}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 initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="vlogFormatter.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["u"];addOnInit(Module["asm"]["r"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___cxa_allocate_exception(size){return _malloc(size+16)+16}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;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 _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){try{var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _environ_sizes_get(penviron_count,penviron_buf_size){try{var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];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 _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}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?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(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","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};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){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,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<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||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.includes(rule)){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)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var ASSERTIONS=false;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}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}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.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = Module; +else if (typeof define === 'function' && define['amd']) + define([], function() { return Module; }); +else if (typeof exports === 'object') + exports["Module"] = Module; diff --git a/resources/hdlParser/index.d.ts b/resources/hdlParser/index.d.ts index 7410836..058f7f2 100644 --- a/resources/hdlParser/index.d.ts +++ b/resources/hdlParser/index.d.ts @@ -12,10 +12,7 @@ interface Fast { } interface All { - content: { - error: string[] - symbols: RawSymbol[] - } + content: RawSymbol[] languageId: HdlLangID macro: Macro } diff --git a/snippets/svlog.json b/snippets/svlog.json index 085fc56..04947e9 100644 --- a/snippets/svlog.json +++ b/snippets/svlog.json @@ -546,7 +546,7 @@ }, "include": { - "prefix": "inc", + "prefix": "include", "body": [ "`include \"$1\"" ], @@ -554,9 +554,9 @@ }, "define": { - "prefix": "def", + "prefix": "define", "body": [ - "`def $1 = $2" + "`define $1 $2" ], "description": "`define var = val" }, @@ -902,5 +902,23 @@ "}", "*/" ] + }, + "dumpfile": { + "prefix": "$dumpfile", + "body": [ + "\\$dumpfile(\"$1\");" + ] + }, + "dumpvars": { + "prefix": "$dumpvars", + "body": [ + "\\$dumpvars;" + ] + }, + "finish": { + "prefix": "$finish", + "body": [ + "\\$finish;" + ] } } \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index cba6f8d..ee455af 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,16 +3,18 @@ import * as vscode from 'vscode'; import { opeParam, MainOutput, ReportType } from './global'; import { hdlParam } from './hdlParser'; import { prjManage, registerManagerCommands } from './manager'; -import { registerFunctionCommands } from './function'; +import { registerFunctionCommands, registerLsp } from './function'; async function registerCommand(context: vscode.ExtensionContext) { registerFunctionCommands(context); registerManagerCommands(context); + registerLsp(context); } async function launch(context: vscode.ExtensionContext) { await prjManage.initialise(context); await registerCommand(context); + MainOutput.report('Digital-IDE has launched, Version: 0.3.0'); MainOutput.report('OS: ' + opeParam.os); diff --git a/src/function/index.ts b/src/function/index.ts index f351b83..73622a9 100644 --- a/src/function/index.ts +++ b/src/function/index.ts @@ -4,13 +4,18 @@ import * as hdlDoc from './hdlDoc'; import * as sim from './sim'; import * as treeView from './treeView'; +import * as lspCompletion from './lsp/completion'; +import * as lspDocSymbol from './lsp/docSymbol'; +import * as lspDefinition from './lsp/definition'; +import * as lspHover from './lsp/hover'; +import * as lspFormatter from '../../resources/formatter'; + function registerDocumentation(context: vscode.ExtensionContext) { vscode.commands.registerCommand('digital-ide.hdlDoc.showWebview', hdlDoc.showDocWebview); hdlDoc.registerFileDocExport(context); hdlDoc.registerProjectDocExport(context); } - function registerSimulation(context: vscode.ExtensionContext) { vscode.commands.registerCommand('digital-ide.tool.instance', sim.instantiation); vscode.commands.registerCommand('digital-ide.tool.testbench', sim.testbench); @@ -42,6 +47,29 @@ function registerTreeView(context: vscode.ExtensionContext) { } +function registerLsp(context: vscode.ExtensionContext) { + const vlogSelector: vscode.DocumentSelector = {scheme: 'file', language: 'verilog'}; + const svlogSelector: vscode.DocumentSelector = {scheme: 'file', language: 'systemverilog'}; + const vhdlSelector: vscode.DocumentSelector = {scheme: 'file', language: 'vhdl'}; + + // formatter + vscode.languages.registerDocumentFormattingEditProvider(vlogSelector, lspFormatter.hdlFormatterProvider); + vscode.languages.registerDocumentFormattingEditProvider(vhdlSelector, lspFormatter.hdlFormatterProvider); + vscode.languages.registerDocumentFormattingEditProvider(svlogSelector, lspFormatter.hdlFormatterProvider); + + // verilog lsp + vscode.languages.registerDocumentSymbolProvider(vlogSelector, lspDocSymbol.vlogDocSymbolProvider); + vscode.languages.registerDefinitionProvider(vlogSelector, lspDefinition.vlogDefinitionProvider); + vscode.languages.registerHoverProvider(vlogSelector, lspHover.vlogHoverProvider); + vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogIncludeCompletionProvider, '/', '"'); + vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogMacroCompletionProvider, '`'); + vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogPositionPortProvider, '.'); + vscode.languages.registerCompletionItemProvider(vlogSelector, lspCompletion.vlogCompletionProvider); + // vhdl lsp + +} + export { - registerFunctionCommands + registerFunctionCommands, + registerLsp }; \ No newline at end of file diff --git a/src/function/lsp/completion/index.ts b/src/function/lsp/completion/index.ts new file mode 100644 index 0000000..5a16895 --- /dev/null +++ b/src/function/lsp/completion/index.ts @@ -0,0 +1,8 @@ +import { vlogCompletionProvider, vlogIncludeCompletionProvider, vlogMacroCompletionProvider, vlogPositionPortProvider } from './vlog'; + +export { + vlogCompletionProvider, + vlogIncludeCompletionProvider, + vlogMacroCompletionProvider, + vlogPositionPortProvider +}; \ No newline at end of file diff --git a/src/function/lsp/completion/vlog.ts b/src/function/lsp/completion/vlog.ts new file mode 100644 index 0000000..6331b70 --- /dev/null +++ b/src/function/lsp/completion/vlog.ts @@ -0,0 +1,303 @@ +import * as vscode from 'vscode'; +import * as fs from 'fs'; + +import * as util from '../util'; +import { hdlFile, hdlPath } from '../../../hdlFs'; +import { hdlParam, HdlSymbol } from '../../../hdlParser'; +import { AbsPath, MainOutput, ReportType } from '../../../global'; +import { Define, Include, RawSymbol } from '../../../hdlParser/common'; +import { HdlInstance, HdlModule } from '../../../hdlParser/core'; +import { vlogKeyword } from '../util/keyword'; + +class VlogIncludeCompletionProvider implements vscode.CompletionItemProvider { + public provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): vscode.ProviderResult> { + try { + const items = this.provideIncludeFiles(document, position); + return items; + } catch (err) { + console.log(err); + } + } + + private provideIncludeFiles(document: vscode.TextDocument, position: vscode.Position): vscode.CompletionItem[] { + if (position.character === 0) { + return []; + } + const filePath = hdlPath.toSlash(document.fileName); + const lineText = document.lineAt(position).text; + + let firstQIndex = lineText.lastIndexOf('"', position.character - 1); + let lastQIndex = lineText.indexOf('"', position.character); + + if (firstQIndex !== -1 && lastQIndex !== -1) { + const currentPath = lineText.substring(firstQIndex + 1, lastQIndex); + const folderName = currentPath.length === 0 ? '.' : currentPath; + const folderAbsPath = hdlPath.rel2abs(filePath, folderName); + return this.filterIncludeFiles(folderAbsPath, filePath); + } + + return []; + } + + private filterIncludeFiles(folderPath: AbsPath, currentPath: AbsPath) { + if (fs.existsSync(folderPath)) { + const suggestFiles = []; + for (const fileName of fs.readdirSync(folderPath)) { + const filePath = hdlPath.join(folderPath, fileName); + if (filePath === currentPath) { + continue; + } + + const stat = fs.statSync(filePath); + const clItem = new vscode.CompletionItem(fileName); + if (stat.isDirectory()) { + clItem.kind = vscode.CompletionItemKind.Folder; + } else if (stat.isFile()) { + clItem.kind = vscode.CompletionItemKind.File; + } + suggestFiles.push(clItem); + } + return suggestFiles; + } + return []; + } +}; + + +class VlogMacroCompletionProvider implements vscode.CompletionItemProvider { + public async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): Promise | null | undefined> { + try { + const targetWordRange = document.getWordRangeAtPosition(position, /[`_0-9a-zA-Z]+/); + const targetWord = document.getText(targetWordRange); + const filePath = document.fileName; + const symbolResult = await HdlSymbol.all(filePath); + if (!symbolResult) { + return null; + } + + const items = this.provideMacros(targetWord, symbolResult.macro.defines); + return items; + } catch (err) { + console.log(err); + } + } + + private provideMacros(targetWord: string, defines: Define[]): vscode.CompletionItem[] { + const suggestMacros: vscode.CompletionItem[] = []; + if (!defines || defines.length === 0) { + return suggestMacros; + } + for (const define of defines) { + const name = '`' + define.name; + const clItem = new vscode.CompletionItem(name, vscode.CompletionItemKind.Constant); + clItem.detail = 'macro ' + define.replacement; + clItem.insertText = targetWord.startsWith('`') ? define.name : name; + suggestMacros.push(clItem); + } + return suggestMacros; + } +} + + +class VlogPositionPortProvider implements vscode.CompletionItemProvider { + public async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): Promise | null | undefined> { + try { + const suggestPositionPorts: vscode.CompletionItem[] = []; + const filePath = hdlPath.toSlash(document.fileName); + const symbolResult = await HdlSymbol.all(filePath); + if (!symbolResult) { + return null; + } + + const scopeSymbols = util.filterSymbolScope(position, symbolResult.content); + if (!scopeSymbols || + !scopeSymbols.module || + !scopeSymbols.symbols || + !hdlParam.hasHdlModule(filePath, scopeSymbols.module.name)) { + return suggestPositionPorts; + } + + const currentModule = hdlParam.getHdlModule(filePath, scopeSymbols.module.name); + if (!currentModule) { + return; + } + + const currentInst = util.filterInstanceByPosition(position, scopeSymbols.symbols, currentModule); + // find instance and instMod is not null (solve the dependence already) + + if (currentInst && currentInst.module && currentInst.instModPath) { + const portsparams = this.providePositionPorts(position, currentInst); + suggestPositionPorts.push(...portsparams); + } + + return suggestPositionPorts; + + } catch (err) { + console.log(err); + } + } + + private providePositionPorts(position: vscode.Position, currentInst: HdlInstance): vscode.CompletionItem[] { + if (!currentInst.module) { + return []; + } + + const params = currentInst.instparams; + const ports = currentInst.instports; + + if (params && + util.positionAfterEqual(position, params.start) && + util.positionAfterEqual(params.end, position)) { + + return currentInst.module.params.map(param => { + const clItem = new vscode.CompletionItem(param.name, vscode.CompletionItemKind.Constant); + clItem.detail = 'param'; + return clItem; + }); + } + if (ports && + util.positionAfterEqual(position, ports.start) && + util.positionAfterEqual(ports.end, position)) { + + return currentInst.module.ports.map(port => { + const clItem = new vscode.CompletionItem(port.name, vscode.CompletionItemKind.Interface); + clItem.detail = 'port'; + return clItem; + }); + } + + return []; + } +} + +class VlogCompletionProvider implements vscode.CompletionItemProvider { + public async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): Promise | null | undefined> { + try { + const filePath = hdlPath.toSlash(document.fileName); + + // 1. provide keyword + const completions = this.getKeyWordItem(); + + const symbolResult = await HdlSymbol.all(filePath); + if (!symbolResult) { + return completions; + } + + // locate at one module + const scopeSymbols = util.filterSymbolScope(position, symbolResult.content); + if (!scopeSymbols || + !scopeSymbols.module || + !hdlParam.hasHdlModule(filePath, scopeSymbols.module.name)) { + // MainOutput.report('Fail to get HdlModule ' + filePath + ' ' + scopeSymbols?.module.name, ReportType.Debug); + return completions; + } + + // find wrapper module + const currentModule = hdlParam.getHdlModule(filePath, scopeSymbols.module.name); + if (!currentModule) { + return completions; + } + + // 3. provide modules + const suggestModulesPromise = this.provideModules(filePath, symbolResult.macro.includes); + + // 4. provide params and ports of wrapper module + const suggestParamsPortsPromise = this.provideParamsPorts(currentModule); + + // 5. provide nets + const suggestNetsPromise = this.provideNets(scopeSymbols.symbols); + + // collect + completions.push(...await suggestModulesPromise); + completions.push(...await suggestParamsPortsPromise); + completions.push(...await suggestNetsPromise); + + return completions; + + } catch (err) { + console.log(err); + } + } + + private getKeyWordItem(): vscode.CompletionItem[] { + const vlogKeywordItem = []; + for (const keyword of vlogKeyword.keys()) { + const clItem = this.makekeywordCompletionItem(keyword); + vlogKeywordItem.push(clItem); + } + + return vlogKeywordItem; + } + + private makekeywordCompletionItem(keyword: string): vscode.CompletionItem { + const clItem = new vscode.CompletionItem(keyword, vscode.CompletionItemKind.Keyword); + clItem.detail = 'keyword'; + + switch (keyword) { + case 'begin': clItem.insertText = new vscode.SnippetString("begin$1end"); break; + default: break; + } + return clItem; + } + + private async provideModules(filePath: AbsPath, includes: Include[]): Promise { + const suggestModules: vscode.CompletionItem[] = []; + + // TODO : add `include xxx automatically + for (const module of hdlParam.getAllHdlModules()) { + const clItem = new vscode.CompletionItem(module.name, vscode.CompletionItemKind.Class); + clItem.detail = 'module'; + suggestModules.push(clItem); + } + + return suggestModules; + } + + private async provideParamsPorts(module: HdlModule): Promise { + if (!module) { + return []; + } + const suggestParamsPorts = []; + for (const param of module.params) { + const clItem = new vscode.CompletionItem(param.name, vscode.CompletionItemKind.Constant); + clItem.detail = 'param'; + suggestParamsPorts.push(clItem); + } + + for (const port of module.ports) { + const clItem = new vscode.CompletionItem(port.name, vscode.CompletionItemKind.Interface); + clItem.detail = 'port'; + suggestParamsPorts.push(clItem); + } + + return suggestParamsPorts; + } + + private async provideNets(symbols: RawSymbol[]): Promise { + if (!symbols) { + return []; + } + const suggestNets = []; + for (const symbol of symbols) { + if (symbol.type === 'wire' || symbol.type === 'reg') { + const clItem = new vscode.CompletionItem(symbol.name, vscode.CompletionItemKind.Variable); + clItem.detail = symbol.type; + suggestNets.push(clItem); + } + } + return suggestNets; + } +}; + + +const vlogCompletionProvider = new VlogCompletionProvider(); +const vlogIncludeCompletionProvider = new VlogIncludeCompletionProvider(); +const vlogMacroCompletionProvider = new VlogMacroCompletionProvider(); +const vlogPositionPortProvider = new VlogPositionPortProvider(); + +export { + vlogCompletionProvider, + vlogIncludeCompletionProvider, + vlogMacroCompletionProvider, + vlogPositionPortProvider +}; \ No newline at end of file diff --git a/src/function/lsp/definition/index.ts b/src/function/lsp/definition/index.ts new file mode 100644 index 0000000..22b93a1 --- /dev/null +++ b/src/function/lsp/definition/index.ts @@ -0,0 +1,5 @@ +import { vlogDefinitionProvider } from './vlog'; + +export { + vlogDefinitionProvider +}; \ No newline at end of file diff --git a/src/function/lsp/definition/vlog.ts b/src/function/lsp/definition/vlog.ts new file mode 100644 index 0000000..fb31d5c --- /dev/null +++ b/src/function/lsp/definition/vlog.ts @@ -0,0 +1,161 @@ +import * as vscode from 'vscode'; +import * as vsctm from 'vscode-textmate'; + +import { hdlPath } from '../../../hdlFs'; +import { hdlParam, HdlSymbol } from '../../../hdlParser'; +import { All } from '../../../../resources/hdlParser'; +import { vlogKeyword } from '../util/keyword'; +import * as util from '../util'; +import { MainOutput, ReportType } from '../../../global'; + + +class VlogDefinitionProvider implements vscode.DefinitionProvider { + + public async provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise { + // get current words + const wordRange = document.getWordRangeAtPosition(position, /[`_0-9A-Za-z]+/); + if (!wordRange) { + return null; + } + const targetWord = document.getText(wordRange); + + // check if need skip + if (this.needSkip(document, position, targetWord)) { + return null; + } + + const filePath = document.fileName; + const vlogAll = await HdlSymbol.all(filePath); + if (!vlogAll) { + return null; + } else { + const location = await this.makeDefinition(document, position, vlogAll, targetWord, wordRange); + return location; + } + } + + private needSkip(document: vscode.TextDocument, position: vscode.Position, targetWord: string): boolean { + // check keyword + if (vlogKeyword.isKeyword(targetWord)) { + return true; + } + + // TODO: check comment + + + return false; + } + + private async makeDefinition(document: vscode.TextDocument, position: vscode.Position, all: All, targetWord: string, targetWordRange: vscode.Range): Promise { + const filePath = hdlPath.toSlash(document.fileName); + const lineText = document.lineAt(position).text; + + // match `include + const includeResult = util.matchInclude(document, position, all.macro.includes); + if (includeResult) { + const absPath = hdlPath.rel2abs(filePath, includeResult.name); + const targetFile = vscode.Uri.file(absPath); + const targetPosition = new vscode.Position(0, 0); + const targetRange = new vscode.Range(targetPosition, targetPosition); + const originSelectionRange = document.getWordRangeAtPosition(position, /[\."_0-9a-zA-Z]+/); + const link: vscode.LocationLink = { targetUri: targetFile, targetRange, originSelectionRange }; + return [link]; + } + + + // match macro + const macroResult = util.matchDefineMacro(position, targetWord, all.macro.defines); + if (macroResult) { + const targetRange = util.transformRange(macroResult.range, -1, -1); + const link: vscode.LocationLink = { targetUri: document.uri, targetRange: targetRange, originSelectionRange: targetWordRange }; + return [link]; + } + + // locate at one module + const scopeSymbols = util.filterSymbolScope(position, all.content); + if (!scopeSymbols || !scopeSymbols.module) { + return null; + } + const currentModule = hdlParam.getHdlModule(filePath, scopeSymbols.module.name); + if (!currentModule) { + MainOutput.report('Fail to get HdlModule ' + filePath + ' ' + scopeSymbols.module.name, ReportType.Debug); + return null; + } + + // match instance + const instResult = util.matchInstance(targetWord, currentModule); + if (instResult) { + const instModule = instResult.module; + if (!instModule || !instResult.instModPath) { + return null; + } + const targetFile = vscode.Uri.file(instResult.instModPath); + const targetRange = util.transformRange(instModule.range, -1, 0, 1); + const link: vscode.LocationLink = { targetUri: targetFile, targetRange }; + return [link]; + } + + // match port or param definition (position input) + if (util.isPositionInput(lineText, position.character)) { + const currentInstResult = util.filterInstanceByPosition(position, scopeSymbols.symbols, currentModule); + if (!currentInstResult || !currentInstResult.instModPath) { + return null; + } + const instParamPromise = util.getInstParamByPosition(currentInstResult, position, targetWord); + const instPortPromise = util.getInstPortByPosition(currentInstResult, position, targetWord); + + const instParam = await instParamPromise; + const instPort = await instPortPromise; + const instModPathUri = vscode.Uri.file(currentInstResult.instModPath); + + if (instParam) { + const targetRange = util.transformRange(instParam.range, -1, 0); + const link: vscode.LocationLink = { targetUri: instModPathUri, targetRange }; + return [link]; + } + if (instPort) { + const targetRange = util.transformRange(instPort.range, -1, 0); + const link: vscode.LocationLink = { targetUri: instModPathUri, targetRange }; + return [link]; + } + } + + + // match params + const paramResult = util.matchParams(targetWord, currentModule); + + if (paramResult) { + const targetRange = util.transformRange(paramResult.range, -1, 0); + const link: vscode.LocationLink = { targetUri: document.uri, targetRange }; + return [link]; + } + + // match ports + const portResult = util.matchPorts(targetWord, currentModule); + + if (portResult) { + const targetRange = util.transformRange(portResult.range, -1, 0); + const link: vscode.LocationLink = { targetUri: document.uri, targetRange }; + return [link]; + } + + // match others + const normalResult = util.matchNormalSymbol(targetWord, scopeSymbols.symbols); + if (normalResult) { + const targetRange = util.transformRange(normalResult.range, -1, 0); + + console.log(targetRange, normalResult); + + const link: vscode.LocationLink = { targetUri: document.uri, targetRange }; + return [link]; + } + + return null; + } +} + +const vlogDefinitionProvider = new VlogDefinitionProvider(); + +export { + vlogDefinitionProvider +}; \ No newline at end of file diff --git a/src/function/lsp/docSymbol/index.ts b/src/function/lsp/docSymbol/index.ts index e69de29..a198547 100644 --- a/src/function/lsp/docSymbol/index.ts +++ b/src/function/lsp/docSymbol/index.ts @@ -0,0 +1,6 @@ +import { vlogDocSymbolProvider } from './vlog'; + + +export { + vlogDocSymbolProvider +}; \ No newline at end of file diff --git a/src/function/lsp/docSymbol/vlog.ts b/src/function/lsp/docSymbol/vlog.ts index 2c176d2..3749d1d 100644 --- a/src/function/lsp/docSymbol/vlog.ts +++ b/src/function/lsp/docSymbol/vlog.ts @@ -1,37 +1,36 @@ import * as vscode from 'vscode'; +import { AllowNull } from '../../../global'; import { HdlSymbol } from '../../../hdlParser'; +import { RawSymbol, makeVscodePosition, Range } from '../../../hdlParser/common'; + +import { positionAfterEqual } from '../util'; + +interface DocSymbolContainer { + docSymbol: AllowNull, + range: AllowNull +}; class VlogDocSymbolProvider implements vscode.DocumentSymbolProvider { - - public provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult { - const code = document.getText(); - const symbolResult = HdlSymbol.all(code); - const symbols = symbolResult.symbols; - - if (!symbols) { + public async provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { + const path = document.fileName; + const vlogAll = await HdlSymbol.all(path); + + if (!vlogAll || !vlogAll.content) { return []; - } - try { - const symbolInfos = this.makeSymbolInfos(document, symbols); + } else { + const symbols = vlogAll.content; + const symbolInfos = this.makeDocumentSymbols(document, symbols); return symbolInfos; - } catch (err) { - console.log(err); - return []; - } + } } - /** - * - * @param {vscode.TextDocument} document - * @param {Array} symbols - * @returns {Array} - */ - makeSymbolInfos(document: vscode.TextDocument, symbols: SymbolResult[]) { - let docSymbols = []; + + private makeDocumentSymbols(document: vscode.TextDocument, symbols: RawSymbol[]): vscode.DocumentSymbol[] { + const docSymbols = []; const visitedSymbols = new Set(); const moduleSymbols = symbols.filter(symbol => { - if (symbol.type == 'module') { + if (symbol.type === 'module') { visitedSymbols.add(symbol); return true; } @@ -41,38 +40,43 @@ class VlogDocSymbolProvider implements vscode.DocumentSymbolProvider { for (const moduleSymbol of moduleSymbols) { const moduleName = moduleSymbol.name; const moduleKind = this.getSymbolKind(moduleSymbol.type); - const moduleRange = new vscode.Range(moduleSymbol.start, moduleSymbol.end); + const moduleStart = new vscode.Position(moduleSymbol.range.start.line - 1, moduleSymbol.range.start.character); + const moduleEnd = new vscode.Position(moduleSymbol.range.end.line - 1, moduleSymbol.range.start.character); + const moduleRange = new vscode.Range(moduleStart, moduleEnd); const moduleDocSymbol = new vscode.DocumentSymbol(moduleName, moduleName, moduleKind, moduleRange, moduleRange); docSymbols.push(moduleDocSymbol); - let paramContainer = { + const paramContainer: DocSymbolContainer = { docSymbol: null, range: null }; - let portContainer = { + const portContainer: DocSymbolContainer = { docSymbol: null, range: null }; + const portTypes = ['input', 'inout', 'output']; // make others in module inner for (const symbol of symbols) { if (visitedSymbols.has(symbol)) { continue; } - if (!(positionAfterEqual(symbol.start, moduleSymbol.start) && - positionAfterEqual(moduleSymbol.end, symbol.end))) { + if (!(positionAfterEqual(symbol.range.start, moduleSymbol.range.start) && + positionAfterEqual(moduleSymbol.range.end, symbol.range.end))) { continue; } if (!symbol.name) { symbol.name = '???'; } visitedSymbols.add(symbol); - const symbolRange = new vscode.Range(symbol.start, symbol.end); + const symbolStart = new vscode.Position(symbol.range.start.line - 1, symbol.range.start.character); + const symbolEnd = new vscode.Position(symbol.range.end.line - 1, symbol.range.end.character); + const symbolRange = new vscode.Range(symbolStart, symbolEnd); - if (symbol.type == 'parameter') { + if (symbol.type === 'parameter') { if (!paramContainer.range) { paramContainer.range = symbolRange; paramContainer.docSymbol = new vscode.DocumentSymbol('param', @@ -87,9 +91,9 @@ class VlogDocSymbolProvider implements vscode.DocumentSymbolProvider { vscode.SymbolKind.Constant, symbolRange, symbolRange); - paramContainer.docSymbol.children.push(paramDocSymbol); + paramContainer.docSymbol?.children.push(paramDocSymbol); - } else if (['input', 'inout', 'output'].includes(symbol.type)) { + } else if (portTypes.includes(symbol.type)) { if (!portContainer.range) { portContainer.range = symbolRange; portContainer.docSymbol = new vscode.DocumentSymbol('port', @@ -105,7 +109,7 @@ class VlogDocSymbolProvider implements vscode.DocumentSymbolProvider { vscode.SymbolKind.Interface, symbolRange, symbolRange); - portContainer.docSymbol.children.push(portDocSymbol); + portContainer.docSymbol?.children.push(portDocSymbol); } else { const symbolKind = this.getSymbolKind(symbol.type); const symbolDocSymbol = new vscode.DocumentSymbol(symbol.name, @@ -122,8 +126,8 @@ class VlogDocSymbolProvider implements vscode.DocumentSymbolProvider { } - getSymbolKind(name) { - if (name.indexOf('[') != -1) { + getSymbolKind(name: string): vscode.SymbolKind { + if (name.indexOf('[') !== -1) { return vscode.SymbolKind.Array; } switch (name) { @@ -176,12 +180,11 @@ class VlogDocSymbolProvider implements vscode.DocumentSymbolProvider { case 'bit': return vscode.SymbolKind.Boolean; default: return vscode.SymbolKind.Event; } - /* Unused/Free SymbolKind icons - return SymbolKind.Number; - return SymbolKind.Enum; - return SymbolKind.EnumMember; - return SymbolKind.Operator; - return SymbolKind.Array; - */ } } + +const vlogDocSymbolProvider = new VlogDocSymbolProvider(); + +export { + vlogDocSymbolProvider +}; \ No newline at end of file diff --git a/src/function/lsp/hover/index.ts b/src/function/lsp/hover/index.ts new file mode 100644 index 0000000..330d017 --- /dev/null +++ b/src/function/lsp/hover/index.ts @@ -0,0 +1,5 @@ +import { vlogHoverProvider } from './vlog'; + +export { + vlogHoverProvider +}; \ No newline at end of file diff --git a/src/function/lsp/hover/vlog.ts b/src/function/lsp/hover/vlog.ts new file mode 100644 index 0000000..aedc71d --- /dev/null +++ b/src/function/lsp/hover/vlog.ts @@ -0,0 +1,193 @@ +import * as vscode from 'vscode'; + +import { hdlDir, hdlPath } from '../../../hdlFs'; +import { hdlParam, HdlSymbol } from '../../../hdlParser'; +import { All } from '../../../../resources/hdlParser'; +import { vlogKeyword } from '../util/keyword'; +import * as util from '../util'; +import { MainOutput, ReportType } from '../../../global'; +import { HdlLangID } from '../../../global/enum'; + + +class VlogHoverProvider implements vscode.HoverProvider { + public async provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise { + // get current words + const wordRange = document.getWordRangeAtPosition(position, /[`_0-9A-Za-z]+/); + if (!wordRange) { + return null; + } + const targetWord = document.getText(wordRange); + + // check if need skip + if (this.needSkip(document, position, targetWord)) { + return null; + } + + const filePath = document.fileName; + const vlogAll = await HdlSymbol.all(filePath); + if (!vlogAll) { + return null; + } else { + const hover = await this.makeHover(document, position, vlogAll, targetWord, wordRange); + return hover; + } + } + + private needSkip(document: vscode.TextDocument, position: vscode.Position, targetWord: string): boolean { + // check keyword + if (vlogKeyword.isKeyword(targetWord)) { + return true; + } + + // TODO: check comment + + + return false; + } + + private async makeHover(document: vscode.TextDocument, position: vscode.Position, all: All, targetWord: string, targetWordRange: vscode.Range): Promise { + const lineText = document.lineAt(position).text; + const filePath = hdlPath.toSlash(document.fileName); + + // total content rendered on the hover box + const content = new vscode.MarkdownString('', true); + + // match `include + const includeResult = util.matchInclude(document, position, all.macro.includes); + if (includeResult) { + const absPath = hdlPath.rel2abs(filePath, includeResult.name); + content.appendCodeblock(`"${absPath}"`, HdlLangID.Verilog); + const targetRange = document.getWordRangeAtPosition(position, /[1-9a-zA-Z_\.]+/); + return new vscode.Hover(content, targetRange); + } else if (lineText.trim().startsWith('`include')) { + return null; + } + + // match macro + const macroResult = util.matchDefineMacro(position, targetWord, all.macro.defines); + if (macroResult) { + const name = macroResult.name; + const value = macroResult.value; + content.appendCodeblock(`\`define ${name} ${value}`, HdlLangID.Verilog); + return new vscode.Hover(content, targetWordRange); + } + + // locate at one module + const scopeSymbols = util.filterSymbolScope(position, all.content); + if (!scopeSymbols || !scopeSymbols.module || !hdlParam.hasHdlModule(filePath, scopeSymbols.module.name)) { + return null; + } + const currentModule = hdlParam.getHdlModule(filePath, scopeSymbols.module.name); + if (!currentModule) { + MainOutput.report('Fail to get HdlModule ' + filePath + ' ' + scopeSymbols.module.name, ReportType.Debug); + return null; + } + + // match instance + const instResult = util.matchInstance(targetWord, currentModule); + if (instResult) { + const instModule = instResult.module; + if (!instModule || !instResult.instModPath) { + content.appendMarkdown('cannot find the definition of the module'); + return new vscode.Hover(content); + } + await util.makeVlogHoverContent(content, instModule); + return new vscode.Hover(content); + } + + + // match port or param definition (position input) + if (util.isPositionInput(lineText, position.character)) { + const currentInstResult = util.filterInstanceByPosition(position, scopeSymbols.symbols, currentModule); + if (!currentInstResult || !currentInstResult.instModPath) { + return null; + } + + const instParamPromise = util.getInstParamByPosition(currentInstResult, position, targetWord); + const instPortPromise = util.getInstPortByPosition(currentInstResult, position, targetWord); + + const instParam = await instParamPromise; + const instPort = await instPortPromise; + + if (instParam) { + const paramComment = await util.searchCommentAround(currentInstResult.instModPath, instParam.range); + const paramDesc = util.makeParamDesc(instParam); + content.appendCodeblock(paramDesc, HdlLangID.Verilog); + if (paramComment) { + content.appendCodeblock(paramComment, HdlLangID.Verilog); + } + return new vscode.Hover(content); + } + if (instPort) { + const portComment = await util.searchCommentAround(currentInstResult.instModPath, instPort.range); + const portDesc = util.makePortDesc(instPort); + content.appendCodeblock(portDesc, HdlLangID.Verilog); + if (portComment) { + content.appendCodeblock(portComment, HdlLangID.Verilog); + } + return new vscode.Hover(content); + } + } + + + // match params + const paramResult = util.matchParams(targetWord, currentModule); + if (paramResult) { + const paramComment = await util.searchCommentAround(filePath, paramResult.range); + const paramDesc = util.makeParamDesc(paramResult); + content.appendCodeblock(paramDesc, HdlLangID.Verilog); + if (paramComment) { + content.appendCodeblock(paramComment, HdlLangID.Verilog); + } + return new vscode.Hover(content); + } + + // match ports + const portResult = util.matchPorts(targetWord, currentModule); + if (portResult) { + const portComment = await util.searchCommentAround(filePath, portResult.range); + const portDesc = util.makePortDesc(portResult); + content.appendCodeblock(portDesc, HdlLangID.Verilog); + if (portComment) { + content.appendCodeblock(portComment, HdlLangID.Verilog); + } + return new vscode.Hover(content); + } + + // match others + const normalResult = util.matchNormalSymbol(targetWord, scopeSymbols.symbols); + if (normalResult) { + const normalComment = await util.searchCommentAround(filePath, normalResult.range); + const normalDesc = util.makeNormalDesc(normalResult); + + console.log(normalResult); + + + content.appendCodeblock(normalDesc, HdlLangID.Verilog); + if (normalComment) { + content.appendCodeblock(normalComment, HdlLangID.Verilog); + } + return new vscode.Hover(content); + } + + + // feature 1. number signed and unsigned number display + const numberResult = util.transferVlogNumber(lineText, position.character); + if (numberResult) { + const bits = targetWord.length - 1; + content.appendCodeblock(bits + "'" + targetWord, HdlLangID.Verilog); + content.appendMarkdown("`unsigned` " + numberResult.unsigned); + content.appendText('\n'); + content.appendMarkdown("`signed` " + numberResult.signed); + } + + return new vscode.Hover(content); + } +} + + +const vlogHoverProvider = new VlogHoverProvider(); + +export { + vlogHoverProvider +}; \ No newline at end of file diff --git a/src/function/lsp/util/completion.js b/src/function/lsp/util/completion.js deleted file mode 100644 index 8d20abd..0000000 --- a/src/function/lsp/util/completion.js +++ /dev/null @@ -1,203 +0,0 @@ -const vscode = require('vscode'); -const fs = require('fs'); -const path = require('path'); - -const HDLPath = require('../../../HDLfilesys/operation/path'); -const { HDLParam, Module, SymbolResult, Instance } = require('../../../HDLparser'); -const { positionAfterEqual } = require('./index'); - -/** - * @param {string} folderPath - * @param {string} currentPath - * @returns {Array} - */ -function filterIncludeFiles(folderPath, currentPath) { - if (fs.existsSync(folderPath)) { - const suggestFiles = []; - for (const fileName of fs.readdirSync(folderPath)) { - const filePath = HDLPath.join(folderPath, fileName); - if (filePath === currentPath) { - continue; - } - - const stat = fs.statSync(filePath); - const clItem = new vscode.CompletionItem(fileName); - if (stat.isDirectory()) { - clItem.kind = vscode.CompletionItemKind.Folder; - } else if (stat.isFile()) { - clItem.kind = vscode.CompletionItemKind.File; - } - suggestFiles.push(clItem); - } - return suggestFiles; - } - return []; -} - -/** - * @param {vscode.TextDocument} document - * @param {vscode.Position} position - * @returns {Array} - */ -function provideIncludeFiles(document, position) { - if (position.character == 0) { - return []; - } - const filePath = HDLPath.toSlash(document.fileName); - const lineText = document.lineAt(position).text; - - let firstQIndex = lineText.lastIndexOf('"', position.character - 1); - let lastQIndex = lineText.indexOf('"', position.character); - - if (firstQIndex != -1 && lastQIndex != -1) { - const currentPath = lineText.substring(firstQIndex + 1, lastQIndex); - const folderName = currentPath.length == 0 ? '.' : currentPath; - const folderAbsPath = HDLPath.rel2abs(filePath, folderName); - return filterIncludeFiles(folderAbsPath, filePath); - } - - return []; -} - - -/** - * @param {string} singleWord - * @param {object} defines - * @returns {Promise>} - */ -function provideMacros(singleWord, defines) { - const suggestMacros = []; - if (!defines) { - return suggestMacros; - } - for (const macro of Object.keys(defines)) { - const value = defines[macro].value; - const name = '`' + macro; - const clItem = new vscode.CompletionItem('`' + macro, vscode.CompletionItemKind.Constant) - clItem.detail = 'macro ' + value; - if (singleWord[0] == '`') { - clItem.insertText = macro; - } else { - clItem.insertText = name; - } - - suggestMacros.push(clItem); - } - return suggestMacros; -} - -/** - * @param {vscode.Position} position cursor position - * @param {Instance} currentInst - * @returns {Promise>} - */ -function providePositionPorts(position, currentInst) { - const params = currentInst.instparams; - const ports = currentInst.instports; - console.log(position); - console.log(params); - console.log(ports); - - if (params && - positionAfterEqual(position, params.start) && - positionAfterEqual(params.end, position)) { - - return currentInst.module.params.map(param => { - const clItem = new vscode.CompletionItem(param.name, vscode.CompletionItemKind.Constant); - clItem.detail = 'param'; - return clItem; - }) - } - if (ports && - positionAfterEqual(position, ports.start) && - positionAfterEqual(ports.end, position)) { - - return currentInst.module.ports.map(port => { - const clItem = new vscode.CompletionItem(port.name, vscode.CompletionItemKind.Interface); - clItem.detail = 'port'; - return clItem; - }) - } - - return []; -} - - -/** - * @description provide module of the current module and include module - * @param {string} filePath - * @param {object} includes {path: range} - * @returns {Promise>} - */ -async function provideModules(filePath, includes) { - // support include of all the module - // use command property to auto add include path - const suggestModules = []; - - if (!includes) { - return suggestModules; - } - - for (const module of HDLParam.getAllModules()) { - const clItem = new vscode.CompletionItem(module.name, vscode.CompletionItemKind.Class); - clItem.detail = 'module'; - suggestModules.push(clItem); - } - - return suggestModules; -} - - -/** - * @param {Module} module - * @returns {Promise>} - */ -async function provideParamsPorts(module) { - if (!module) { - return []; - } - const suggestParamsPorts = []; - for (const param of module.params) { - const clItem = new vscode.CompletionItem(param.name, vscode.CompletionItemKind.Constant); - clItem.detail = 'param'; - suggestParamsPorts.push(clItem); - } - - for (const port of module.ports) { - const clItem = new vscode.CompletionItem(port.name, vscode.CompletionItemKind.Interface); - clItem.detail = 'port'; - suggestParamsPorts.push(clItem); - } - - - return suggestParamsPorts; -} - - -/** - * @param {Array} symbols - * @returns {Promise>} - */ -async function provideNets(symbols) { - if (!symbols) { - return []; - } - const suggestNets = []; - for (const symbol of symbols) { - if (symbol.type == 'net') { - const clItem = new vscode.CompletionItem(symbol.name, vscode.CompletionItemKind.Variable); - clItem.detail = 'net'; - suggestNets.push(clItem); - } - } - return suggestNets; -} - -module.exports = { - provideIncludeFiles, - provideMacros, - providePositionPorts, - provideModules, - provideParamsPorts, - provideNets -}; \ No newline at end of file diff --git a/src/function/lsp/util/feature.ts b/src/function/lsp/util/feature.ts index 4a9106c..f828ee8 100644 --- a/src/function/lsp/util/feature.ts +++ b/src/function/lsp/util/feature.ts @@ -126,14 +126,8 @@ function bin2float(bin: string, exp: number, fra: number): number | undefined { } } -async function getFullSymbolInfo(document: vscode.TextDocument, range: Range, nonblank: RegExp, l_comment_symbol: string, l_comment_regExp: RegExp, needDefinition=true) { +async function getFullSymbolInfo(document: vscode.TextDocument, range: Range, nonblank: RegExp, l_comment_symbol: string, l_comment_regExp: RegExp) { const comments = []; - if (needDefinition) { - const startPosition = new vscode.Position(range.start.line, range.start.character); - const endPosition = new vscode.Position(range.end.line, range.end.character); - const definitionString = document.getText(new vscode.Range(startPosition, endPosition)); - comments.push(definitionString); - } let content = ''; let is_b_comment = false; @@ -212,7 +206,13 @@ async function getFullSymbolInfo(document: vscode.TextDocument, range: Range, no } } - return comments.reverse().join(''); + // 清除空前行 + let resultComment = ''; + for (const c of comments.reverse()) { + resultComment += c.trim() + '\n'; + } + + return resultComment; } /** @@ -220,8 +220,8 @@ async function getFullSymbolInfo(document: vscode.TextDocument, range: Range, no * @param path * @param range */ -async function getSymbolComment(path: AbsPath, range: Range) { - let languageId = hdlFile.getLanguageId(path); +async function getSymbolComment(path: AbsPath, range: Range): Promise { + const languageId = hdlFile.getLanguageId(path); const uri = vscode.Uri.file(path); const documentPromise = vscode.workspace.openTextDocument(uri); @@ -229,14 +229,15 @@ async function getSymbolComment(path: AbsPath, range: Range) { const nonblank = /\S+/g; const l_comment = getCommentUtilByLanguageId(languageId); if (l_comment) { - let l_comment_symbol = l_comment.l_comment_symbol; - let l_comment_regExp = l_comment.l_comment_regExp; + const l_comment_symbol = l_comment.l_comment_symbol; + const l_comment_regExp = l_comment.l_comment_regExp; // add definition first const document = await documentPromise; - return await getFullSymbolInfo(document, range, nonblank, l_comment_symbol, l_comment_regExp); + const symbolInfo = await getFullSymbolInfo(document, range, nonblank, l_comment_symbol, l_comment_regExp); + return symbolInfo; } - return; + return null; } /** @@ -263,7 +264,7 @@ async function getSymbolComments(path: string, ranges: Range[]): Promise} - */ -function getVlogKeywordItem() { - const vlogKeywordItem = []; - for (const keyword of vlogKeyword) { - const clItem = new vscode.CompletionItem(keyword, vscode.CompletionItemKind.Keyword); - clItem.detail = "keyword"; - vlogKeywordItem.push(clItem); - } - return vlogKeywordItem; -} - - -/** - * - * @param {string} singleWord - * @returns {boolean} - */ -function isVlogKeyword(singleWord) { - return vlogKeyword.has(singleWord); -} - - -/** - * @description get the last single word in current line - * @param {string} prefixString - * @returns {string} - */ -function getLastSingleWord(prefixString) { - prefixString = prefixString.trim(); - const length = prefixString.length; - if (length == 0) { - return ''; - } - const wordCharacters = []; - let alphaReg = /[`_0-9A-Za-z]/; - for (let i = length - 1; i >= 0; -- i) { - const ch = prefixString[i]; - if (alphaReg.test(ch)) { - wordCharacters.push(ch); - } else { - break; - } - } - return wordCharacters.reverse().join(''); -} - - -/** - * @description get the single word at hover - * @param {string} lineText - * @param {number} character - */ -function getSingleWordAtCurrentPosition(lineText, character) { - let alphaReg = /[`_0-9A-Za-z]/; - if (alphaReg.test(lineText[character])) { - const leftPart = []; - const rightPart = []; - const length = lineText.length; - for (let i = character - 1; i >= 0; -- i) { - const ch = lineText[i]; - if (alphaReg.test(ch)) { - leftPart.push(ch); - } else { - break; - } - } - - for (let i = character + 1; i < length; ++ i) { - const ch = lineText[i]; - if (alphaReg.test(ch)) { - rightPart.push(ch); - } else { - break; - } - } - - const leftWord = leftPart.reverse().join(''); - const rightWord = rightPart.join(''); - return leftWord + lineText[character] + rightWord; - } else { - return ""; - } -} - -/** - * @param {Position} position_a - * @param {Position} position_b - * @returns {boolean} - */ -function positionAfter(position_a, position_b) { - return position_a.line > position_b.line || ( - position_a.line == position_b.line && - position_a.character > position_b.character); -} - - -/** - * @param {Position} position_a - * @param {Position} position_b - * @returns {boolean} - */ -function positionEqual(position_a, position_b) { - return position_a.line == position_b.line && - position_a.character == position_b.character; -} - - -/** - * @description position_a behind or equal to position_b - * @param {Position} position_a - * @param {Position} position_b - * @returns {boolean} - */ -function positionAfterEqual(position_a, position_b) { - return positionAfter(position_a, position_b) || - positionEqual(position_a, position_b); -} - - - -/** - * @description filter the symbol result item that exceed the scope - * @param {vscode.Position} position - * @param {Array} symbolResults - * @returns {{module : SymbolResult, symbols : Array}} - */ -function filterSymbolScope(position, symbolResults) { - if (!symbolResults) { - return null; - } - const parentModules = symbolResults.filter(item => - item.type == 'module' && - positionAfterEqual(position, item.start) && - positionAfterEqual(item.end, position) - ); - - if (parentModules.length == 0) { - // TODO : macro - return null; - } - - const parentModule = parentModules[0]; - const symbols = symbolResults.filter(item => - item != parentModule && - positionAfterEqual(item.start, parentModule.start) && - positionAfterEqual(parentModule.end, item.end)); - - return { - module : parentModule, - symbols : symbols - }; -} - - - -/** - * @param {vscode.TextDocument} document - * @param {Position} position - * @param {Array} comments - */ -function isInComment(document, position, comments) { - if (!comments) { - return false; - } - // remove the situation that // comment - const lineText = document.lineAt(position).text; - const singleCommentIndex = lineText.indexOf('//'); - if (singleCommentIndex != -1) { - return position.character >= singleCommentIndex; - } - - const currentLine = position.line + 1; - for (const comment of comments) { - const commentLine = comment.start.line; - if (commentLine > currentLine) { - continue; - } - const startPosition = new vscode.Position(commentLine, 0); - const startOffset = document.offsetAt(startPosition); - const endPosition = document.positionAt(startOffset + comment.length); - - const originalPosition = new Position(currentLine, position.character); - - if (positionAfterEqual(originalPosition, startPosition) && - positionAfterEqual(endPosition, originalPosition)) { - return true; - } - } - return false; -} - - - -/** - * @param {vscode.Position} position - * @param {object} includes - * @returns {{name: string, start: Position, end: Position}} - */ -function matchInclude(position, includes) { - if (!includes) { - return null; - } - for (const includeString of Object.keys(includes)) { - const range = includes[includeString]; - // TODO : remove - 1 if bug is fixed - range.start.line -= 1; - range.end.line -= 1; - if (positionAfterEqual(position, range.start) && - positionAfterEqual(range.end, position)) { - - return { - name : includeString, - start: range.start, - end: range.end - }; - } - } - return null; -} - - - -/** - * @param {vscode.Position} position - * @param {string} singleWord - * @param {object} defines - * @returns {{name: string, value: any, range: Range}} - */ -function matchDefine(position, defines) { - if (!defines) { - return null; - } - - for (const macro of Object.keys(defines)) { - const range = defines[macro].range; - range.start.line -= 1; - range.end.line -= 1; - if (positionAfterEqual(position, range.start) && - positionAfterEqual(range.end, position)) { - return { - name : macro, - value: defines[macro].value, - range: range - }; - } - } - return null; -} - - - - -/** - * @param {vscode.Position} position - * @param {string} singleWord - * @param {object} defines - * @returns {{name: string, value: any, range: Range}} - */ -function matchDefineMacro(position, singleWord, defines) { - if (!defines) { - return null; - } - if (singleWord[0] != '`' || singleWord.length <= 1) { - return null; - } - const targetMacro = singleWord.substring(1); - for (const macro of Object.keys(defines)) { - if (macro == targetMacro) { - const range = defines[macro].range; - const value = defines[macro].value; - // TODO : remove - 1 if bug is fixed - range.start.line -= 1; - range.end.line -= 1; - return { - name : macro, - value : value, - range : range - }; - } - } - return null; -} - - -/** - * @param {string} singleWord single word to be matched - * @param {Module} module - * @returns {Instance} - */ -function matchInstance(singleWord, module) { - if (!module) { - console.log('warning, cannot locate module', singleWord); - return null; - } - - for (const inst of module.getInstances()) { - if (singleWord == inst.type) { - return inst; - } - } - return null; -} - -/** - * @param {vscode.Position} position current cursor position - * @param {Array} symbols all the symbols in the wrapper module - * @param {Module} module wrapper module - * @param {Instance} - */ -function filterInstanceByPosition(position, symbols, module) { - if (!symbols) { - return null; - } - for (const symbol of symbols) { - const inst = module.findInstance(symbol.name); - if (positionAfterEqual(position, symbol.start) && - positionAfterEqual(symbol.end, position) && - inst) { - return inst; - } - } - return null; -} - - -/** - * @param {Instance} inst - * @param {vscode.Position} position - * @param {string} singleWord - * @returns {Promise} - */ -async function getInstPortByPosition(inst, position, singleWord) { - if (!inst.module || !inst.instports) { - return null; - } - if (positionAfterEqual(position, inst.instports.start) && - positionAfterEqual(inst.instports.end, position)) { - for (const port of inst.module.ports) { - if (port.name == singleWord) { - return port; - } - } - } - return null; -} - - -/** - * @param {Instance} inst - * @param {vscode.Position} position - * @param {string} singleWord - * @returns {Promise} - */ -async function getInstParamByPosition(inst, position, singleWord) { - if (!inst.module || !inst.instparams) { - return null; - } - - if (positionAfterEqual(position, inst.instparams.start) && - positionAfterEqual(inst.instparams.end, position)) { - for (const param of inst.module.params) { - if (param.name == singleWord) { - return param; - } - } - } - return null; -} - - -/** - * @param {string} lineText - * @param {number} character - * @returns {boolean} - */ -function isPositionInput(lineText, character) { - let alphaReg = /[_0-9A-Za-z]/; - for (let i = character; i >= 0; -- i) { - const ch = lineText[i]; - if (alphaReg.test(ch)) { - continue; - } else if (ch == '.') { - if (i == 0) { - return true; - } else if (lineText[i - 1] == ' ') { - return true; - } else { - return false; - } - } else { - return false; - } - } - return false; -} - - -/** - * @param {string} singleWord - * @param {Module} module - * @returns {ModPort} - */ -function matchPorts(singleWord, module) { - if (!module || module.ports.length == 0) { - return null; - } - const targetPorts = module.ports.filter(port => port.name == singleWord); - if (targetPorts.length == 0) { - return null; - } - return targetPorts[0]; -} - - -/** - * @param {string} singleWord - * @param {Module} module - * @returns {ModParam} - */ -function matchParams(singleWord, module) { - if (!module || module.params.length == 0) { - return null; - } - const targetParams = module.params.filter(param => param.name == singleWord); - if (targetParams.length == 0) { - return null; - } - return targetParams[0]; -} - -/** - * - * @param {ModPort} port - * @returns {string} - */ -function makePortDesc(port) { - let portDesc = port.type; - if (port.width) { - portDesc += ' ' + port.width; - } - portDesc += ' ' + port.name; - return portDesc; -} - -/** - * - * @param {ModParam} param - * @returns {string} - */ -function makeParamDesc(param) { - let paramDesc = 'parameter ' + param.name; - if (param.init) { - paramDesc += ' = ' + param.init; - } - return paramDesc; -} - - -/** - * @param {string} singleWord - * @param {Array} symbols - * @returns {SymbolResult} - */ -function matchNormalSymbol(singleWord, symbols) { - if (!symbols || Object.keys(symbols).length == 0) { - return null; - } - for (const symbol of symbols) { - if (singleWord == symbol.name) { - return symbol; - } - } - - return null; -} - - -/** - * @param {vscode.MarkdownString} content - * @param {Module} module - */ -async function makeVlogHoverContent(content, module) { - const portNum = module.ports.length; - const paramNum = module.params.length; - const instNum = module.getInstanceNum(); - - const moduleUri = vscode.Uri.file(module.path); - const thenableFileDocument = vscode.workspace.openTextDocument(moduleUri); - - const portDesc = paramNum + ' $(instance-param) ' + - portNum + ' $(instance-port) ' + - instNum + ' $(instance-module)'; - - - content.appendCodeblock('module ' + module.name, 'verilog'); - content.appendText('\n'); - content.appendMarkdown(portDesc); - content.appendText(' | '); - - const count = { - input: 0, - output: 0, - inout: 0 - }; - for (const port of module.ports) { - count[port.type] += 1; - } - const ioDesc = count.input + ' $(instance-input) ' + - count.output + ' $(instance-output) ' + - count.inout + ' $(instance-inout)'; - content.appendMarkdown(ioDesc); - content.appendText('\n'); - - content.appendMarkdown('---'); - - // make document - const fileDocument = await thenableFileDocument; - const range = new vscode.Range(module.range.start, module.range.end); - const moduleDefinitionCode = fileDocument.getText(range); - content.appendCodeblock(moduleDefinitionCode, 'verilog'); -} - - -async function searchCommentAround(uri, range) { - -} - -module.exports = { - getVlogKeywordItem, - getLastSingleWord, - getSingleWordAtCurrentPosition, - filterSymbolScope, - filterInstanceByPosition, - isPositionInput, - isInComment, - matchInclude, - matchDefine, - matchDefineMacro, - matchInstance, - matchPorts, - matchParams, - matchNormalSymbol, - isVlogKeyword, - makeVlogHoverContent, - positionAfterEqual, - getInstPortByPosition, - getInstParamByPosition, - makePortDesc, - makeParamDesc, - transferVlogNumber, - getSymbolComment, - getSymbolComments -}; \ No newline at end of file diff --git a/src/function/lsp/util/index.ts b/src/function/lsp/util/index.ts new file mode 100644 index 0000000..a0e7253 --- /dev/null +++ b/src/function/lsp/util/index.ts @@ -0,0 +1,408 @@ +import * as vscode from 'vscode'; + +import { transferVlogNumber, getSymbolComment, getSymbolComments } from './feature'; + +import { AbsPath, AllowNull } from '../../../global'; +import { Position, Range, HdlModulePort, HdlModuleParam, CommentResult, RawSymbol, Define, Include, makeVscodePosition } from '../../../hdlParser/common'; +import { HdlModule, HdlInstance, hdlParam } from '../../../hdlParser/core'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +const Unknown = 'Unknown'; + +interface MatchedSymbol { + name: string, + value: any, + range: Range +}; + + +interface ModuleScope { + module: RawSymbol, + symbols: RawSymbol[] +}; + + +function transformRange(range: Range | vscode.Range, lineOffset: number = 0, characterOffset: number = 0, + endLineOffset: number | undefined = undefined, endCharacterOffset: number | undefined = undefined): vscode.Range { + const start = range.start; + const end = range.end; + const startPosition = new vscode.Position(start.line + lineOffset, start.character + characterOffset); + endLineOffset = endLineOffset ? endLineOffset : lineOffset; + endCharacterOffset = endCharacterOffset ? endLineOffset : characterOffset; + const endPosition = new vscode.Position(end.line + endLineOffset, end.character + endCharacterOffset); + return new vscode.Range(startPosition, endPosition); +} + + +function positionAfter(positionA: Position, positionB: Position): boolean { + return positionA.line > positionB.line || ( + positionA.line === positionB.line && + positionA.character > positionB.character); +} + + +function positionEqual(positionA: Position, positionB: Position): boolean { + return positionA.line === positionB.line && + positionA.character === positionB.character; +} + + +/** + * @description positionA behind or equal to positionB + */ +function positionAfterEqual(positionA: Position, positionB: Position): boolean { + return positionAfter(positionA, positionB) || + positionEqual(positionA, positionB); +} + + + +/** + * @description filter the symbol result item that exceed the scope + */ +function filterSymbolScope(position: vscode.Position, rawSymbols: RawSymbol[]): AllowNull { + if (!rawSymbols) { + return null; + } + const parentModules = rawSymbols.filter(item => + item.type === 'module' && + positionAfterEqual(position, item.range.start) && + positionAfterEqual(item.range.end, position) + ); + + if (parentModules.length === 0) { + // TODO : macro + return null; + } + + const parentModule = parentModules[0]; + const symbols = rawSymbols.filter(item => + item !== parentModule && + positionAfterEqual(item.range.start, parentModule.range.start) && + positionAfterEqual(parentModule.range.end, item.range.end)); + + return { + module : parentModule, + symbols : symbols + }; +} + + +function isInComment(document: vscode.TextDocument, position: Position, comments: CommentResult[]): boolean { + if (!comments) { + return false; + } + // remove the situation that // comment + const lineText = document.lineAt(makeVscodePosition(position)).text; + const singleCommentIndex = lineText.indexOf('//'); + if (singleCommentIndex !== -1) { + return position.character >= singleCommentIndex; + } + + const currentLine = position.line + 1; + for (const comment of comments) { + const commentLine = comment.start.line; + if (commentLine > currentLine) { + continue; + } + const startPosition = new vscode.Position(commentLine, 0); + const startOffset = document.offsetAt(startPosition); + const endPosition = document.positionAt(startOffset + comment.length); + + const originalPosition: Position = {line: currentLine, character: position.character}; + + if (positionAfterEqual(originalPosition, startPosition) && + positionAfterEqual(endPosition, originalPosition)) { + return true; + } + } + return false; +} + + + + +function matchInclude(document: vscode.TextDocument, position: vscode.Position, includes: Include[]) : AllowNull { + const selectFileRange = document.getWordRangeAtPosition(position, /[\._0-9A-Za-z]+/); + const selectFileName = document.getText(selectFileRange); + + if (!includes) { + return null; + } + for (const include of includes) { + const range = include.range; + if (position.line + 1 === range.start.line && selectFileName === include.path) { + return { + name : include.path, + value: include.path, + range: range + }; + } + } + return null; +} + + + +function matchDefine(position: vscode.Position, defines: Define[]) : AllowNull { + if (!defines) { + return null; + } + + for (const define of defines) { + const range = define.range; + if (positionAfterEqual(position, range.start) && + positionAfterEqual(range.end, position)) { + return { + name : define.name, + value: define.replacement, + range: range + }; + } + } + return null; +} + + + +function matchDefineMacro(position: vscode.Position, singleWord: string, defines: Define[]) : AllowNull { + if (!defines) { + return null; + } + if (singleWord[0] !== '`' || singleWord.length <= 1) { + return null; + } + const targetMacro = singleWord.substring(1); + for (const define of defines) { + if (define.name === targetMacro) { + const range = define.range; + return { + name : define.name, + value : define.replacement, + range : range + }; + } + } + return null; +} + + +function matchInstance(singleWord: string, module: HdlModule): AllowNull { + for (const inst of module.getAllInstances()) { + if (singleWord === inst.type) { + return inst; + } + } + return null; +} + + +function filterInstanceByPosition(position: vscode.Position, symbols: RawSymbol[], module: HdlModule): AllowNull { + if (!symbols) { + return null; + } + for (const symbol of symbols) { + const inst = module.getInstance(symbol.name); + if (positionAfterEqual(position, symbol.range.start) && + positionAfterEqual(symbol.range.end, position) && + inst) { + + return inst; + } + } + return null; +} + + +async function getInstPortByPosition(inst: HdlInstance, position: vscode.Position, singleWord: string): Promise> { + if (!inst.module || !inst.instports) { + return null; + } + + const instportRange = transformRange(inst.instports, -1, 0); + + if (positionAfterEqual(position, instportRange.start) && + positionAfterEqual(instportRange.end, position)) { + for (const port of inst.module.ports) { + if (port.name === singleWord) { + return port; + } + } + } + return null; +} + + +async function getInstParamByPosition(inst: AllowNull, position: vscode.Position, singleWord: string): Promise> { + if (!inst || !inst.module || !inst.instparams) { + return null; + } + + const instParamRange = transformRange(inst.instparams, -1, 0); + + if (positionAfterEqual(position, instParamRange.start) && + positionAfterEqual(instParamRange.end, position)) { + for (const param of inst.module.params) { + if (param.name === singleWord) { + return param; + } + } + } + return null; +} + + +function isPositionInput(lineText: string, character: number): boolean { + const alphaReg = /[_0-9A-Za-z]/; + for (let i = character; i >= 0; -- i) { + const ch = lineText[i]; + if (alphaReg.test(ch)) { + continue; + } else if (ch === '.') { + if (i === 0) { + return true; + } else if (lineText[i - 1] === ' ') { + return true; + } else { + return false; + } + } else { + return false; + } + } + return false; +} + + +function matchPorts(singleWord: string, module: HdlModule): AllowNull { + if (!module || module.ports.length === 0) { + return null; + } + const targetPorts = module.ports.filter(port => port.name === singleWord); + if (targetPorts.length === 0) { + return null; + } + return targetPorts[0]; +} + + +function matchParams(singleWord: string, module: HdlModule): AllowNull { + if (module.params.length === 0) { + return null; + } + + const targetParams = module.params.filter(param => param.name === singleWord); + if (targetParams.length === 0) { + return null; + } + return targetParams[0]; +} + + +function makePortDesc(port: HdlModulePort): string { + let portDesc: string = port.type; + if (port.width && port.width !== Unknown) { + portDesc += ' ' + port.width; + } + portDesc += ' ' + port.name; + return portDesc; +} + + +function makeParamDesc(param: HdlModuleParam): string { + let paramDesc = 'parameter ' + param.name; + if (param.init && param.init !== Unknown) { + paramDesc += ' = ' + param.init; + } + return paramDesc; +} + +function makeNormalDesc(normal: RawSymbol): string { + const desc = normal.type + ' ' + normal.width + ' ' + normal.name; + return desc; +} + + +function matchNormalSymbol(singleWord: string, symbols: RawSymbol[]): AllowNull { + if (!symbols || Object.keys(symbols).length === 0) { + return null; + } + for (const symbol of symbols) { + if (singleWord === symbol.name) { + return symbol; + } + } + + return null; +} + + +async function makeVlogHoverContent(content: vscode.MarkdownString, module: HdlModule) { + const portNum = module.ports.length; + const paramNum = module.params.length; + const instNum = module.getInstanceNum(); + + const moduleUri = vscode.Uri.file(module.path); + const thenableFileDocument = vscode.workspace.openTextDocument(moduleUri); + + const portDesc = ' $(instance-param) ' + paramNum + + ' $(instance-port) ' + portNum + + ' $(instance-module)' + instNum; + + + content.appendMarkdown(portDesc); + content.appendText(' | '); + + const count = { + input: 0, + output: 0, + inout: 0 + }; + for (const port of module.ports) { + count[port.type as keyof typeof count] += 1; + } + const ioDesc = ' $(instance-input) ' + count.input + + ' $(instance-output) ' + count.output + + ' $(instance-inout)' + count.inout; + content.appendMarkdown(ioDesc); + content.appendText('\n'); + + content.appendMarkdown('---'); + + // make document + const fileDocument = await thenableFileDocument; + const range = transformRange(module.range, -1, 0, 1); + const moduleDefinitionCode = fileDocument.getText(range); + content.appendCodeblock(moduleDefinitionCode, 'verilog'); +} + + +async function searchCommentAround(path: AbsPath, range: Range): Promise { + const targetRange = transformRange(range, -1, 0); + const comment = await getSymbolComment(path, targetRange); + return comment; +} + +export { + transformRange, + filterSymbolScope, + filterInstanceByPosition, + isPositionInput, + isInComment, + matchInclude, + matchDefine, + matchDefineMacro, + matchInstance, + matchPorts, + matchParams, + matchNormalSymbol, + makeVlogHoverContent, + positionAfterEqual, + getInstPortByPosition, + getInstParamByPosition, + makePortDesc, + makeParamDesc, + makeNormalDesc, + transferVlogNumber, + searchCommentAround, +}; \ No newline at end of file diff --git a/src/function/lsp/util/keyword.ts b/src/function/lsp/util/keyword.ts new file mode 100644 index 0000000..e7436e2 --- /dev/null +++ b/src/function/lsp/util/keyword.ts @@ -0,0 +1,130 @@ +import * as vscode from 'vscode'; + + +class Keywords { + keywords: Set; + keywordItems: vscode.CompletionItem[]; + compilerKeywords: string[]; // start with ` + systemKeywords: string[]; // start with $ + constructor(keywords: string[], compilerKeywords: string[], systemKeywords: string[]) { + this.keywords = new Set(keywords); + const keywordItems = []; + for (const keyword of keywords) { + const clItem = new vscode.CompletionItem(keyword, vscode.CompletionItemKind.Keyword); + clItem.detail = "keyword"; + keywordItems.push(clItem); + } + this.keywordItems = keywordItems; + this.compilerKeywords = compilerKeywords; + this.systemKeywords = systemKeywords; + } + + public keys(): Set { + return this.keywords; + } + + public isKeyword(word: string): boolean { + return this.keywords.has(word); + } +} + +const vlogKeyword = new Keywords([ + "above", "disable", "idt", "notif1", "supply0", "abs", "discipline", "idtmod", + "or", "supply1", "absdelay", "driver_update", "if", "output", "table", "ac_stim", + "edge", "ifnone", "parameter", "tan", "acos", "else", "inf", "pmos", "tanh", + "acosh", "end", "initial", "posedge", "task", "always", "endcase", "initial_step", + "potential", "time", "analog", "endconnectrules", "inout", "pow", "timer", "analysis", + "enddiscipline", "input", "primitive", "tran", "and", "endfunction", "integer", + "pull0", "tranif0", "asin", "endmodule", "join", "pull1", "tranif1", "asinh", + "endnature", "laplace_nd", "pulldown", "transition", "assign", "endprimitive", + "laplace_np", "pullup", "tri", "atan", "endspecify", "laplace_zd", "rcmos", "tri0", + "atan2", "endtable", "laplace_zp", "real", "tri1", "atanh", "endtask", "large", + "realtime", "triand", "begin", "event", "last_crossing", "reg", "trior", "branch", + "exclude", "limexp", "release", "trireg", "buf", "exp", "ln", "repeat", "vectored", + "bufif0", "final_step", "log", "rnmos", "wait", "bufif1", "flicker_noise", "macromodule", + "rpmos", "wand", "case", "flow", "max", "rtran", "weak0", "casex", "for", "medium", + "rtranif0", "weak1", "casez", "force", "min", "rtranif1", "while", "ceil", "forever", + "module", "scalared", "white_noise", "cmos", "fork", "nand", "sin", "wire", + "connectrules", "from", "nature", "sinh", "wor", "cos", "function", "negedge", + "slew", "wreal", "cosh", "generate", "net_resolution", "small", "xnor", "cross", + "genvar", "nmos", "specify", "xor", "ddt", "ground", "noise_table", "specparam", + "zi_nd", "deassign", "highz0", "nor", "sqrt", "zi_np", "default", "highz1", + "not", "strong0", "zi_zd", "defparam", "hypot", "notif0", "strong1", "zi_zp", +], +[ + "begin_keywords", "celldefine", "default_nettype", "define", "else", "elsif", + "end_keywords", "endcelldefine", "endif", "ifdef", "ifndef", "include", "line", + "nounconnected_drive", "pragma", "resetall", "timescale", "unconnected_drive", "undef" +], +[ + 'acos', 'sqrt', 'ftell', 'fdisplay', 'fclose', 'timeformat', 'fseek', 'asinh', 'fdisplayh', + 'fmonitorb', 'dist_erlang', 'writeb', 'fwrite', 'swriteb', 'printtimescale', 'displayb', 'atan', + 'sscanf', 'exp', 'nand', 'fdisplayo', 'sdf_annotate', 'stime', 'sin', 'dist_chi_square', 'strobeh', + 'array', 'swriteo', 'and', 'dist_normal', 'readmemb', 'strobeb', 'realtobits', 'or', 'dist_exponential', + 'plusargs', 'hypot', 'swrite', 'writeh', 'plane', 'fstrobeb', 'time', 'fread', 'fstrobe', 'rewind', 'async', + 'sync', 'bitstoreal', 'readmemh', 'fwriteo', 'value', 'tanh', 'rtoi', 'fgetc', 'realtime', 'atan2', 'acosh', + 'displayh', 'log10', 'clog2', 'fstrobeo', 'pow', 'fwriteb', 'fwriteh', 'nor', 'fdisplayb', 'monitoroff', 'fgets', + 'q_add', 'atanh', 'monitor', 'monitorh', 'cos', 'ln', 'q_initialize', 'unsigned', 'swriteh', 'asin', 'monitoron', + 'monitoro', 'display', 'tan', 'fscanf', 'dist_uniform', 'test', 'q_exam', 'itor', 'random', 'fstrobeh', 'strobe', + 'displayo', 'monitorb', 'ungetc', 'feof', 'stop', 'ferror', 'finish', 'fmonitor', 'fmonitorh', 'cosh', 'writeo', 'sinh', + 'dist_poisson', 'write', 'fopen', 'fmonitoro', 'fflush', 'ceil', 'strobeo', 'dist_t', 'q_full', 'signed', 'sformat', + 'q_remove', 'floor', + 'dumpfile', 'dumpvars', 'dumpoff', 'dumpon', 'dumpall', 'dumplimit', 'dumpflush', + 'dumpports', 'dumpportsoff', 'dumpportson', 'dumpportsall', 'dumpportslimit', 'dumpportsflush' +] +); + +// TODO : do vhdl and sv version +const vhdlKeyword = new Keywords([], [], []); + +const systemverilogKeyword = new Keywords([ + "above", "disable", "idt", "notif1", "supply0", "abs", "discipline", "idtmod", + "or", "supply1", "absdelay", "driver_update", "if", "output", "table", "ac_stim", + "edge", "ifnone", "parameter", "tan", "acos", "else", "inf", "pmos", "tanh", + "acosh", "end", "initial", "posedge", "task", "always", "endcase", "initial_step", + "potential", "time", "analog", "endconnectrules", "inout", "pow", "timer", "analysis", + "enddiscipline", "input", "primitive", "tran", "and", "endfunction", "integer", + "pull0", "tranif0", "asin", "endmodule", "join", "pull1", "tranif1", "asinh", + "endnature", "laplace_nd", "pulldown", "transition", "assign", "endprimitive", + "laplace_np", "pullup", "tri", "atan", "endspecify", "laplace_zd", "rcmos", "tri0", + "atan2", "endtable", "laplace_zp", "real", "tri1", "atanh", "endtask", "large", + "realtime", "triand", "begin", "event", "last_crossing", "reg", "trior", "branch", + "exclude", "limexp", "release", "trireg", "buf", "exp", "ln", "repeat", "vectored", + "bufif0", "final_step", "log", "rnmos", "wait", "bufif1", "flicker_noise", "macromodule", + "rpmos", "wand", "case", "flow", "max", "rtran", "weak0", "casex", "for", "medium", + "rtranif0", "weak1", "casez", "force", "min", "rtranif1", "while", "ceil", "forever", + "module", "scalared", "white_noise", "cmos", "fork", "nand", "sin", "wire", + "connectrules", "from", "nature", "sinh", "wor", "cos", "function", "negedge", + "slew", "wreal", "cosh", "generate", "net_resolution", "small", "xnor", "cross", + "genvar", "nmos", "specify", "xor", "ddt", "ground", "noise_table", "specparam", + "zi_nd", "deassign", "highz0", "nor", "sqrt", "zi_np", "default", "highz1", + "not", "strong0", "zi_zd", "defparam", "hypot", "notif0", "strong1", "zi_zp" +], +[ + "begin_keywords", "celldefine", "default_nettype", "define", "else", "elsif", + "end_keywords", "endcelldefine", "endif", "ifdef", "ifndef", "include", "line", + "nounconnected_drive", "pragma", "resetall", "timescale", "unconnected_drive", "undef" +], +[ + 'acos', 'sqrt', 'ftell', 'fdisplay', 'fclose', 'timeformat', 'fseek', 'asinh', 'fdisplayh', + 'fmonitorb', 'dist_erlang', 'writeb', 'fwrite', 'swriteb', 'printtimescale', 'displayb', 'atan', + 'sscanf', 'exp', 'nand', 'fdisplayo', 'sdf_annotate', 'stime', 'sin', 'dist_chi_square', 'strobeh', + 'array', 'swriteo', 'and', 'dist_normal', 'readmemb', 'strobeb', 'realtobits', 'or', 'dist_exponential', + 'plusargs', 'hypot', 'swrite', 'writeh', 'plane', 'fstrobeb', 'time', 'fread', 'fstrobe', 'rewind', 'async', + 'sync', 'bitstoreal', 'readmemh', 'fwriteo', 'value', 'tanh', 'rtoi', 'fgetc', 'realtime', 'atan2', 'acosh', + 'displayh', 'log10', 'clog2', 'fstrobeo', 'pow', 'fwriteb', 'fwriteh', 'nor', 'fdisplayb', 'monitoroff', 'fgets', + 'q_add', 'atanh', 'monitor', 'monitorh', 'cos', 'ln', 'q_initialize', 'unsigned', 'swriteh', 'asin', 'monitoron', + 'monitoro', 'display', 'tan', 'fscanf', 'dist_uniform', 'test', 'q_exam', 'itor', 'random', 'fstrobeh', 'strobe', + 'displayo', 'monitorb', 'ungetc', 'feof', 'stop', 'ferror', 'finish', 'fmonitor', 'fmonitorh', 'cosh', 'writeo', 'sinh', + 'dist_poisson', 'write', 'fopen', 'fmonitoro', 'fflush', 'ceil', 'strobeo', 'dist_t', 'q_full', 'signed', 'sformat', + 'q_remove', 'floor' +] +); + + + +export { + vlogKeyword, + vhdlKeyword, + systemverilogKeyword +}; \ No newline at end of file diff --git a/src/global/index.ts b/src/global/index.ts index 4e503d5..cb0ed0b 100644 --- a/src/global/index.ts +++ b/src/global/index.ts @@ -8,6 +8,8 @@ import * as Lang from './lang'; type AbsPath = string; type RelPath = string; +type AllowNull = T | null; + export { opeParam, OpeParamDefaults, @@ -19,5 +21,6 @@ export { RelPath, MainOutput, YosysOutput, - ReportType + ReportType, + AllowNull }; \ No newline at end of file diff --git a/src/hdlFs/file.ts b/src/hdlFs/file.ts index 911381d..f350e90 100644 --- a/src/hdlFs/file.ts +++ b/src/hdlFs/file.ts @@ -124,7 +124,7 @@ function getLanguageId(path: AbsPath | RelPath): HdlLangID { if (!isFile(path)) { return HdlLangID.Unknown; } - const ext = hdlPath.extname(path, false); + const ext = hdlPath.extname(path, false); if (verilogExts.includes(ext)) { return HdlLangID.Verilog; } else if (vhdlExts.includes(ext)) { diff --git a/src/hdlParser/common.ts b/src/hdlParser/common.ts index ec0cfce..e4eefdc 100644 --- a/src/hdlParser/common.ts +++ b/src/hdlParser/common.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ +import * as vscode from 'vscode'; import { AbsPath, RelPath } from '../global'; @@ -10,6 +11,10 @@ interface Position { character: number }; +function makeVscodePosition(position: Position): vscode.Position { + return new vscode.Position(position.line, position.character); +} + interface Range { start: Position end: Position @@ -32,11 +37,45 @@ enum HdlFileType { RemoteLib = 'remote_lib' }; enum InstModPathStatus {Current, Include, Others, Unknown}; -enum SymbolType { - Module = 'module', - Input = 'input', - Output = 'output' -}; +// enum SymbolType { +// Module = 'module', +// Input = 'input', +// Output = 'output', +// Inout = 'inout', +// Program = 'program', +// Package = 'package', +// Import = 'import', +// Always = 'always', +// Processe = 'processe', +// Task = 'task', +// Function = 'function', +// Assert = 'assert', +// Event = 'event', +// Instance = 'instance', +// Time = 'time', +// Define = 'define', +// Typedef = 'typedef', +// Generate = 'generate', +// Enum = 'enum', +// Modport = 'modport', +// Property = 'property', +// Interface = 'interface', +// Buffer = 'buffer', +// Localparam = 'localparam', +// Parameter = 'parameter', +// Integer = 'integer', +// Char = 'char', +// Float = 'float', +// Int = 'int', +// String = 'string', +// Struct = 'struct', +// Class = 'class', +// Logic = 'logic', +// Wire = 'wire', +// Reg = 'reg', +// Net = 'net', +// Bit = 'bit' +// }; interface Error { severity: number @@ -45,12 +84,30 @@ interface Error { range: Range }; -interface Define { - // `define A out - // name is "A", value is "out" - name: string +interface DefineParam { + name: string, value: string - range: Position +}; + +/** + * `define A out + * name is "A", replacement is "out" + * `define max(a, b=1) a*b + * name is "max", replacement is "a*b", params is + * { + "name": "a", + "value": "Unknown" + }, + { + "name": "b", + "value": "1" + } +*/ +interface Define { + name: string + replacement: string + range: Range + params: DefineParam[], }; interface Include { @@ -105,8 +162,9 @@ interface RawHdlModule { interface RawSymbol { name: string - type: SymbolType + type: string range: Range + width?: string }; interface InstModPathSearchResult { @@ -120,6 +178,12 @@ interface HdlDependence { others: AbsPath[] }; +interface CommentResult { + start: { line : number } + length: number +} + + export { Position, Range, @@ -138,5 +202,7 @@ export { RawHdlModule, InstModPathSearchResult, HdlDependence, - RawSymbol + RawSymbol, + CommentResult, + makeVscodePosition }; \ No newline at end of file diff --git a/src/hdlParser/core.ts b/src/hdlParser/core.ts index a83a582..e4046ec 100644 --- a/src/hdlParser/core.ts +++ b/src/hdlParser/core.ts @@ -72,10 +72,6 @@ class HdlParam { this.modules.add(hdlModule); } - /** - * add module to global top modules - * @param hdlModule - */ public addTopModule(hdlModule: HdlModule) { this.topModules.add(hdlModule); } @@ -204,13 +200,19 @@ class HdlParam { } public async initHdlFiles(hdlFiles: AbsPath[] | Generator) { + const pools: Promise[] = []; for (const path of hdlFiles) { - this.doHdlFast(path); + const p = this.doHdlFast(path); + pools.push(p); + } + for (const p of pools) { + await p; } } public async initialize(hdlFiles: AbsPath[] | Generator) { await this.initHdlFiles(hdlFiles); + for (const hdlFile of this.getAllHdlFiles()) { hdlFile.makeInstance(); } @@ -296,6 +298,7 @@ class HdlInstance { if (instModPath) { this.module = hdlParam.getHdlModule(instModPath, instModName); + // add refer for module this.module?.addGlobalReferedInstance(this); // if module and parent module share the same source (e.g both in src folder) @@ -347,9 +350,20 @@ class HdlModule { this.range = range; this.params = params; this.ports = ports; + + if (!this.params) { + this.params = []; + } + + if (!this.ports) { + this.ports = []; + } // make instance this.rawInstances = instances; + if (!this.rawInstances) { + this.rawInstances = []; + } this.nameToInstances = new Map(); // add in hdlParam data structure @@ -397,6 +411,7 @@ class HdlModule { public createHdlInstance(rawHdlInstance: common.RawHdlInstance): HdlInstance { const instModName = rawHdlInstance.type; + const searchResult = this.searchInstModPath(instModName); const hdlInstance = new HdlInstance(rawHdlInstance.name, rawHdlInstance.type, @@ -417,7 +432,8 @@ class HdlModule { } public makeNameToInstances() { - if (this.rawInstances) { + + if (this.rawInstances) { this.nameToInstances.clear(); for (const inst of this.rawInstances) { this.createHdlInstance(inst); @@ -452,7 +468,7 @@ class HdlModule { } } - private searchInstModPath(instModName: string): common.InstModPathSearchResult { + private searchInstModPath(instModName: string): common.InstModPathSearchResult { // search path of instance // priority: "current file" -> "included files" -> "other hdls in the project" @@ -508,6 +524,7 @@ class HdlModule { public addGlobalReferedInstance(inst: HdlInstance) { const globalRefers = this.globalRefers; globalRefers.add(inst); + // it is refered in global scope, so delete this from top module if (globalRefers.size > 0) { hdlParam.deleteTopModule(this); } @@ -524,6 +541,7 @@ class HdlModule { public addLocalReferedInstance(inst: HdlInstance) { const localRefers = this.localRefers; localRefers.add(inst); + // it is refered in local scope, so delete this from top module if (localRefers.size > 0) { hdlParam.deleteTopModuleToSource(this); } diff --git a/src/hdlParser/util.ts b/src/hdlParser/util.ts index 70953fe..95a701d 100644 --- a/src/hdlParser/util.ts +++ b/src/hdlParser/util.ts @@ -25,6 +25,8 @@ namespace HdlSymbol { } } + + export { - HdlSymbol + HdlSymbol, }; \ No newline at end of file diff --git a/src/manager/prj.ts b/src/manager/prj.ts index 0d01077..9f7d66a 100644 --- a/src/manager/prj.ts +++ b/src/manager/prj.ts @@ -49,7 +49,7 @@ class PrjManage { * init opeParam * @param context */ - public initOpeParam(context: vscode.ExtensionContext) { + public async initOpeParam(context: vscode.ExtensionContext) { const os = process.platform; const extensionPath = hdlPath.toSlash(context.extensionPath); const workspacePath = this.getWorkspacePath(); @@ -71,6 +71,15 @@ class PrjManage { if (fs.existsSync(propertyJsonPath)) { const rawPrjInfo = hdlFile.readJSON(propertyJsonPath) as RawPrjInfo; opeParam.mergePrjInfo(rawPrjInfo); + } else { + const createProperty = await vscode.window.showInformationMessage( + "property.json is not detected, do you want to create one ?", + { title: 'Yes', value: true }, + { title: 'No', value: false } + ); + if (createProperty?.value) { + vscode.commands.executeCommand('digital-ide.property-json.generate'); + } } } @@ -106,7 +115,7 @@ class PrjManage { console.time('launch'); } - this.initOpeParam(context); + await this.initOpeParam(context); MainOutput.report('finish initialise opeParam', ReportType.Info); const hdlFiles = this.getPrjHardwareFiles(); @@ -121,7 +130,6 @@ class PrjManage { MainOutput.report('create pl and ps', ReportType.Info); - if (countTimeCost) { console.timeLog('launch'); } diff --git a/src/test/vlog/dependence_test/child_1.v b/src/test/vlog/dependence_test/child_1.v index 69a162a..962b445 100644 --- a/src/test/vlog/dependence_test/child_1.v +++ b/src/test/vlog/dependence_test/child_1.v @@ -1,6 +1,8 @@ module dependence_1 ( + // this is a test input a, b, c, - output Q + // a test + output Result // balabalabala for result ); // a & b | ((b & c) & (b | c)) @@ -10,6 +12,6 @@ module dependence_1 ( // Simplify A + A = A AB + BC // Factor B(A+C) - assign Q = a & (b | c); + assign Result = a & (b | c); -endmodule +endmodule \ No newline at end of file diff --git a/src/test/vlog/dependence_test/parent.v b/src/test/vlog/dependence_test/parent.v index 30af10d..7b1b0a8 100644 --- a/src/test/vlog/dependence_test/parent.v +++ b/src/test/vlog/dependence_test/parent.v @@ -3,14 +3,17 @@ * current file -> macro include -> whole project * expect dependence_1 from child_1.v (macro include) * expect dependence_2 from child_2.v (whole project) - * cannot find dependence_3 + * cannot find dependence_3 `main */ `include "child_1.v" +`include "child_2.v" `define main out module Main ( + // Main input input a, b, c, + // Main output output Qus, Qs, `main ); @@ -18,7 +21,7 @@ dependence_1 u_dependence_1( .a(a), .b(b), .c(c), - .Q(Qus) + .Result(Qus) ); dependence_2 u_dependence_2( diff --git a/src/test/vlog/formatter_test.v b/src/test/vlog/formatter_test/formatter_test.v similarity index 100% rename from src/test/vlog/formatter_test.v rename to src/test/vlog/formatter_test/formatter_test.v diff --git a/src/test/vlog/fsm_test.v b/src/test/vlog/fsm_test/fsm_test.v similarity index 100% rename from src/test/vlog/fsm_test.v rename to src/test/vlog/fsm_test/fsm_test.v diff --git a/src/test/vlog/netlist_test.v b/src/test/vlog/netlist_test/netlist_test.v similarity index 100% rename from src/test/vlog/netlist_test.v rename to src/test/vlog/netlist_test/netlist_test.v diff --git a/src/test/vlog/test.v b/src/test/vlog/test.v deleted file mode 100644 index 1087b0d..0000000 --- a/src/test/vlog/test.v +++ /dev/null @@ -1,29 +0,0 @@ - -/* - * CN: 如果使用`include "head_1.v" 则模块 dependence_1 使用的应该是 head_1.v 文件中的, - * 而不会调用child_1.v中的 dependence_1 同名模块。 - * EN: - */ - -`include "child_1.v" -`define main_o out -module Main( - input a, b, c, - output Qus, Qs, `main_o -); - -dependence_1 dependence_1( - .a(a), - .b(b), - .c(c), - .Q(Qus) -); - -dependence_2 dependence_2( - .a(a), - .b(b), - .c(c), - .Q(Qs) -); - -endmodule \ No newline at end of file diff --git a/syntaxes/verilog.json b/syntaxes/verilog.json index 50f70e3..05073b1 100644 --- a/syntaxes/verilog.json +++ b/syntaxes/verilog.json @@ -6,6 +6,49 @@ "keyEquivalent": "^~V", "name": "Verilog", "patterns": [ + { + "begin": "\\s*(wire|reg)\\s+\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", + "beginCaptures": { + "1": { + "name": "keyword.control.verilog" + }, + "2": { + "name": "variable.other.constant.declaration.verilog" + } + }, + "end": "(;)", + "endCaptures": { + "1": { + "name": "source.verilog" + } + } + }, + { + "begin": "\\s*(wire|reg)\\s+\\[(.*?)(:)(.*?)\\]\\s+\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b", + "beginCaptures": { + "1": { + "name": "keyword.control.verilog" + }, + "2": { + "name": "constant.numeric.width.verilog" + }, + "3": { + "name": "entity.name.function.width.spliter.verilog" + }, + "4": { + "name": "constant.numeric.width.verilog" + }, + "5": { + "name": "variable.other.constant.declaration.verilog" + } + }, + "end": "(;)", + "endCaptures": { + "1": { + "name": "source.verilog" + } + } + }, { "begin": "\\s*\\b(function|task)\\b(\\s+automatic)?", "beginCaptures": { @@ -145,10 +188,10 @@ "name": "support.class" } }, - "end": ";", + "end": "(;)", "endCaptures": { "1": { - "name": "entity.name.function.verilog" + "name": "source.verilog" } }, "patterns": [ @@ -166,7 +209,7 @@ "include": "#ifmodport" } ], - "name": "variable.module.verilog" + "name": "variable.other.constant.module.verilog" }, { "captures": { @@ -637,10 +680,10 @@ }, { "match": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\b(?=\\s*(\\(|$))", - "name": "support.class" + "name": "entity.name.function.module.verilog" } ], - "name": "meta.module.inst.param.verilog" + "name": "variable.other.constant.module.inst.param.verilog" }, { "begin": "\\b([a-zA-Z_][a-zA-Z0-9_]*)\\s+(?!intersect|and|or|throughout|within)([a-zA-Z_][a-zA-Z0-9_]*)\\s*(\\[(\\d+)(\\:(\\d+))?\\])?\\s*(\\(|$)", @@ -649,7 +692,7 @@ "name": "support.class" }, "2": { - "name": "entity.name.module.verilog" + "name": "entity.name.function.module.verilog" }, "4": { "name": "constant.numeric.verilog" @@ -676,7 +719,7 @@ "include": "#constants" } ], - "name": "variable.module.inst.verilog" + "name": "variable.other.constant.module.inst.verilog" }, { "name": "meta.struct.assign.verilog", @@ -1047,7 +1090,7 @@ "match": "\\.([a-zA-Z_][a-zA-Z0-9_]*)\\s*", "captures": { "1": { - "name": "keyword.inst.port.verilog" + "name": "variable.inst.port.verilog" } } },